2002年9月全国计算机等级考试二级C语言试卷(含参考答案) 下载本文

  A)9,9 B)8,9 C)1,8 D)9,8

  (34) 以下程序中函数reverse的功能是将a所指数组中的内容进行逆置。   void reverse(int a[ ],int n)   { int i,t;   for(i=0;i

  { t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;}   }

  main()

  { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;    reverse(b,8);

   for(i=6;i<10;i++) s+=b[i];    printf(“%d\\n”,s);   }

  程序运行后的输出结果是   A) 22 B) 10 C) 34 D) 30   (35) 有以下程序   main()

  { int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};   int i,s=0

  for(i=0;i<4;i++) s+=aa[i][1];   printf(“%d\\n”,s);   }

  程序运行后的输出结果是   A) 11 B) 19 C) 13 D) 20   (36) 有以下程序   #include   main()

  { char *p=“abcde\\Ofghjik\\0”;   printf(“%d\\n”,strlen(p));   }

  程序运行后的输出结果是   A) 12 B) 15 C) 6 D) 5

  (37) 程序中头文件typel.h 的内容是:   #define N 5   #define M1 N*3   程序如下:

  #define “type1.h”   #define M2 N*2   main()   { int i;

  i=M1+M2; printf(“%d\\n”,i);   }

  程序编译后运行的输出结果是:   A) 10 B) 20 C) 25 D) 30

  (38) 有以下程序   #include   main()

  { FILE *fp; int i=20,j=30,k,n;   fp=fopen(“d1.dat”“w”);

  fprintf(fp,“%d\\n”,i);fprintf(fp,“%d\\n”j);   fclose(fp);

  fp=fopen(“d1.dat”, “r”);   fp=fscanf(fp,“%d%d”,&k,&n); printf(“%d%d\\n”,k,n);   fclose(fp);   }

  程序运行后的输出结果是

  A) 20 30 B) 20 50 C) 30 50 D) 30 20   (39) 以下叙述中错误的是

  A) 二进制文件打开后可以先读文件的末尾,而顺序文件不可以   B) 在程序结束时,应当用fclose函数关闭已打开的文件

  C) 在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据

  D) 不可以用FILE定义指向二进制文件的文件指针   (40) 有以下程序   #include

  main(int argc,char *argv[])   { int i,len=0;

  for(i=1;i  printf(“%d\\n”,len);   }

  程序编译连接后生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是:   ex1 abcd efg 10<回车>   则运行的结果是:

  A) 22 B) 17 C) 12 D) 9   (41) 有以下程序   int fa(int x)   { return x*x; }   int fb(int x)   { return x*x*x; }

  int f(int (*f1)(),int (*f2)(),int x)   { return f2(x)-f1(x); }   main()   { int i;

  i=f(fa,fb,2); printf(“%d\\n”,i);   }

  程序运行后的输出结果是   A) -4 B) 1 C) 4 D) 8   (42) 有以下程序   int a=3;

  main()   { int s=0;

  { int a=5; s+=a++; }

  s+=a++;printf(“%d\\n”,s);   }

  程序运行后的输出结果是   A) 8 B) 10 C) 7 D) 11   (43) 有以下程序

  void ss(char *s,char t)   { while(*s)

  { if(*s==t) *s=t-?a?+?A?;    s++;   }   }

  main()

  { char str1[100]=“abcddfefdbd”,c=?d?;   ss(str1,c); printf(“%s\\n”,str1);   }

  程序运行后的输出结果是

  A) ABCDDEFEDBD B) abcDDfefDbD   C) abcAAfefAbA D) Abcddfefdbd   (44) 有以下程序   struct STU

  { char num[10]; float score[3]; };   main()

  { struct stu s[3]={{“20021”,90,95,85},   {“20022”,95,80,75},

  {“20023”,100,95,90}},*p=s;   int i; float sum=0;   for(i=0;i<3,i++)

  sum=sum+p->score[i];   printf(“%6.2f\\n”,sum);   }

  程序运行后的输出结果是

  A) 260.00 B) 270.00 C) 280.00 D) 285.00   (45) 设有如下定义:   struck sk   { int a;   float b;   }data;   int *p;

  若要使P指向data中的a域,正确的赋值语句是   A) p=&a; B) p=data.a; C) p=&data.a; D) *p=data.a;   (46) 有以下程序

  #include   struct NODE

  { int num; struct NODE *next; };   main()

  { struct NODE *p,*Q,*R;

  p=(struct NODE*)malloc(sizeof(struct NODE));   q=(struct NODE*)malloc(sizeof(struct NODE));   r=(struct NODE*)malloc(sizeof(struct NODE));   p->num=10; q->num=20; r->num=30;   p->next=q;q->next=r;

  printf(“%d\\n”,p->num+q->next->num);   }

  程序运行后的输出结果是   A) 10 B) 20 C) 30 D) 40   (47) 若有以下说明和定义   typedef int *INTEGER;   INTEGER p,*q;   以下叙述正确的是

  A) P是int型变量 B) p是基类型为int的指针变量

  C) q是基类型为int的指针变量 D) 程序中可用INTEGER代替int类型名   (48) 有以下程序   main()

  { unsigned char a,b,c;   a=0x3; b=a|0x8; c=b<<1;   printf(“%d%d\\n”,b,c);   }

  程序运行后的输出结果是

  A) –11 12 B) –6 –13 C) 12 24 D) 11 22   (49) 有以下程序   #include   main()

  { char *p,*q;

  p=(char*)malloc(sizeof(char)*20); q=p;

  scanf(“%s%s”,p,q); printf(“%s%s\\n”,p,q);   }

  若从键盘输入:abc def<回车>,则输出结果是:   A) def def B) abc def C) abc d D) d d

  (50) 以下程序中函数f的功能是将n个字符串按由大到小的顺序进行排序。   #include

  void f(char p[][10],int n)   { char t[20]; int i,j;   for(i=0;i