}
3、下面程序的输出结果为 3 。 #include
printf(\}
? 考点:位段有关知识。
? 分析:在本例中涉及到位段定义的知识。位段又称位域或位字段,此种定义可以使
若干个结构体成员共用一个或几个字节,其中每个成员占用若干二进制位。位段定义和普通结构体定义类似,只是每个成员附加二进制位数说明,如: struct stru { unsigned a :2; unsigned b :4; unsigned :0; unsigned d :2; };
其中位数为0的无名字段的含义是跳过该字节剩余的位不用,所以上述中stru所占的字节数为2。注意:位域成员通常没有独立的存储单元,因此诸如&st1.a,&st2.b之类对位域成员取地址的运算是非法的。另外,位域成员只能是int或unsigned类型,其它类型都是非法的,而且位域成员也不能排成数组,如:unsigned c[2]:2是错误的。
本例中,a和b各占用2个二进制位,不够一个字节,系统将边界调整为整数,加上int型变量x占用的2个字节,共占用3字节。 4、struct stu { char[10]; float score[3]; }; main()
{ struct stu s[3]={{\ {\ {\ int i; float sum=0;
for(i=0;i<3;i++)
sum=sum+p->score[i];
printf(\ }
程序运行后的输出结果是 270.00 。 ? 考点:结构体变量成员的引用。
? 分析:本题中,s为一个结构体数组,p为结构体指针。语句p=s使p指向数组s
的第一个元素即s[0]。for循环的作用是将p所指向的单元累加到变量sum中,作用相当于相当于语句s[0].score[0]+ s[0].score[1]+ s[0].score[2]。
5、以下程序段的执行结果是 2,13 。
#include
{ enum month (Jan, Feb, Mar, Apr=8, May, Jun, Jul, Aug, Sept, Oct , Nov, Dec); enum month mon1=Mar, mon2=Sept; printf(“%d, %d\\n”, mon1, mon2) ; }
6、以下程序的执行结果是 1 #include
{ int x=35;
Printf(“%d\\n”, (x&15)&&(x | 15)); }
7、以下程序段的执行结果是 8 。 typedef union {
long x[2]; int y[4]; char z[8]; }TYPE; TYPE a ; Main()
{ printf(“%d\\n” , sizeof(a); } 8、以下程序的执行结果是 无显示 main( )
{ int a=11, b=10; a -= b; a <<= b; }
9、以下程序的功能是 将一个磁盘文件复制到另一个磁盘文件中 。
#include
{ FILE *fp1,*fp2;
fp1=fopen(\
fp2=fopen(\while(!feof(fp1)) fputc(fgetc(fp1),fp2); fclose(fp1); fclose(fp2);
}
? 考点:文件打开函数和文件读写函数。
? 分析:本题中以读的方式打开file1文件,以写的方式打开file2文件,再将输出
语句fputc(fgetc(fp1),fp2)放入循环体内,表示只要fp1指向的文件没有结束,就从该文件中读出一个字符送到fp2指向的文件中。
四、程序填空题(每空3分,共分)
1、执行下面的程序后,a的值为 。 main()
2、以下程序段的输出结果是 。 { int a,b;
int x=3; for (a=1,b=1;a<=100;a++)
do { if(b>=20)break;
{ printf(\ if(b%3==1)
while(!(--x)); {b+=3;
A、1 B、3 0 C、1-2 D、死循环 continue;
}b-=5; } }
A、7 B、8 C、9 D、10
3、执行下列程序后,输出结果是 。
#include
#define MAX_COUNT 4 void fun(); void main() { int count;
for(count=1;count<=MAX_COUNT;count++) fun();
}
1、以下程序中的宏SWAP(type,a,b)实现将任意同类型的两个数进行交换。程序中调用它交换2个字符型和2个单精度型数据。请填空。
#define SWAP(type,a,b) {【1】;t=a;a=b;b=t;}
#include
void fun()
{ static int i; i+=2;
printf(\ }
char ch1='A',ch2='B'; float f1=1.2,f2=2.3; SWAP(【2】,ch1,ch2); SWAP(【3】,f1,f2); printf(\ printf(\}
答案:【1】type t 【2】char 【3】float 2、以下程序完成链表的输出,请填空。 void print(head) struct stu *head; { struct stu *p; p=head;
if( 【1】 ) do
{ printf(\p=p->next; }while( 【2】 ); }
? 答案:【1】p!=NULL 【2】p!=NULL
3、下面程序把从终端读入的10个整数以二进制方式写到一个名为bi.dat的新文件中,请填空。
#include
if((fp=fopen( 【1】 ,\for(i=0;i<10;i++) { scanf(\
fwrite(&j,sizeof(int),1, 【2】 ); }
fclose(fp);
}
? 考点:文件打开函数和文件写函数。
? 分析:将键入的数据存到指定文件,必须先打开文件,因此第一个空应该填入打开
文件的文件名;根据fwrite的函数原型可以知道,最后一个参数应该是文件指针,所以填入fp。
? 答案:【1】\【2】fp
4、以下程序功能是用“追加”的形式打开aa.txt查看文件指针的位置,然后向文件写入“data”再查看文件指针的位置。
#include
{ 【1】 ; long position;
fp=fopen( 【2】 ); position=ftell(fp);
printf(\fprintf( 【3】 ); position=ftell(fp);
printf(\fclose(fp); }
答案:【1】FILE *fp 【2】\ 【3】fp,\
5、菲波纳契数列中的头两个数是1和1,从第三个数开始,每个数等于前两个
数的和。下述程序计算此列数列的前50个数,且每行输出10个数。请填空。
#include
{ int f,f1=1,f2=1; int i;
printf(\for(i=3;i<=50;i++) { f= 【1】 ; printf(\
if( 【2】 ) printf(\f1=f2;
【3】 ; } }
答案:【1】 【2】 【3】 6、已知如下公式:
Π/2 = 1+1/3+(1/3)(2/5)+ (1/3)(2/5)(3/7)+ (1/3)(2/5)(3/7)(4/9)+…
函数pi的功能时根据上述公式计算满足精度要求的Π值。请填空。
double pi(double eps) {
double s=0.0,t=1.0; int n;
for(n=1; 【1】 ; n++) { s+=t;
t=n*t/(2*n+1) }
return 【2】 ; }
答案:【1】 【2】