C 语言程序设计复习题 一 选择题 1. 用 C 语言编写的代码程序 A) 可立即执行 B) 是一个源程序 C) 经过编译即可执行 D) 经过编译解释才能执行 2. 结构化程序由三种基本结构组成, 三种基本结构组成的算法 A) 可以完成任何复杂的任务 B) 只能完成部分复杂的任务 C) 只能完成符合结构化的任务 D) 只能完成一些简单的任务 3. 以下叙述中正确的是 A)C 程序中注释部分可以出现在程序中任意合适的地方 B) 花括号 "{" 和 "" 只能作为函数体的定界符 C) 构成 C 程序的基本单位是函数, 所有函数名都可以由用户命名 D) 分号是 C 语句之间的分隔符, 不是语句的一部分 4. 以下选项中可作为 C 语言合法整数的是 A)10110B B)0386 C)0Xffa D)x2a2 5. 以下不能定义为用户标识符的是 A)scanf B)Void C)_3com_ D)int 6. 在 C 语言中, 合法的长整型常数是 A) OL B) 4962710 C) 324562& D) 216D 7. 以下有 4 组用户标识符, 其中合法的一组是 A) For B) 4d C) f2_g3 D) WORD -sub DO IF void Case Size abc define 8. 以下选项中合法的字符常量是 A) "B" B) '\010' C) 68 D) D 9. 假定 x 和 y 为 double 型, 则表达式 x=2,y=x+3/2 的值是 A) 3.500000 B) 3 C) 2.000000 D) 3.000000 10. 以下合法的赋值语句是 A) x=y=100 B) d--; C) x+y; D) c=int(a+b); 11. 设正 x y 均为整型变量, 且 x=10 y=3, 则以下语句的输出结果是 printf("%d,%d\n",x--,--y); A) 10,3 B) 9.3 C) 9.2 D)10.2 12. x y z 被定义为 int 型变量, 若从键盘给 x y z 输入数据, 正确的输入语句是 A) INPUT x y z; B) scanf("%d%d%d",&x,&y,&z); C) scanf("%d%d%d",x,y,z); D) read("%d%d%d",&x,&y,&z); 13. 以下定义语句中正确的是 A) char a='a'b='b'; B) float a=b=10.0; C) int a=10,*b=&a; D) float *a,b=&a; 14. 下列选项中, 不能用作标识符的是 A) _1234_ B)_1_2 C)int_2_ D)2_int_ 15. 有以下定义语句 double a,b; int w; long c; 若各变量已正确赋值, 则下列选项中正确的表达式是
A) a=a+b=b++ B)w%(int)a+b) C)(c+w)%(int)a D)w=a==b; 16. 有以下程序 { int m=3,n=4,x; x=-m++; x=x+8/++n; printf("%d\n",x); A) 3 B) 5 C) -1 D) -2 17. 有以下程序 { char a='a',b; print("%c,",++a); printf("%c\n",b=a++); A) b,b B) b,c C) a,b D) a,c 18. 有以下程序 { int m=0256,n=256; printf("%o %o\n",mn,n); A) 0256 0400 B) 0256 256 C) 256 400 D) 400 400 19. 有以下程序 { int a=666,b=888; printf("%d\n",a,b); A) 错误信息 B) 666 C) 888 D) 666,888 20. 有以下程序 { int i; for(i=0;i<3;i++) switch(i) { case 0:printf("%d",i); case 2:printf("%d",i); default:printf("%d",i);
A) 022111 B) 021021 C) 000122 D) 012 21. 若 x 和 y 代表整型数, 以下表达式中不能正确表示数学关系 x-y <10 的是 A) abs(x-y)<10 B) x-y>-10&& x-y<10 C) @(x-y)<-10!(y-x)>10 D) (x-y)*(x-y)<100 22. 有以下程序 { int a=3,b=4,c=5,d=2; if(a>b) if(b>c) printf("%d",d++ +1); else printf("%d",++d +1); printf("%d\n",d); A) 2 B) 3 C) 43 D) 44 23. 下列条件语句中, 功能与其他语句不同的是 A) if(a) printf("%d\n",x); else printf("%d\n",y); B) if(a==0) printf("%d\n",y); else printf("%d\n",x); C) if (a!=0) printf("%d\n",x); else printf("%d\n",y); D) if(a==0) printf("%d\n",x); else printf("%d\n",y); 24. 有以下程序 { int i=0,x=0; for (;;) { if(i==3 i==5) continue; if (i==6) break; i++; s+=i; ; printf("%d\n",s); A)10 B) 13 C) 21 D) 程序进入死循环 25. 若变量已正确定义, 要求程序段完成求 5! 的计算, 不能完成此操作的程序段是 B A) for(i=1,p=1;i<=5;i++) p*=i; B) for(i=1;i<=5;i++){ p=1; p*=i; C) i=1;p=1;while(i<=5){p*=i; i++; D) i=1;p=1;do{p*=i; i++; while(i<=5); 26. 有以下程序 { char a,b,c,d;
scanf("%c,%c,%d,%d",&a,&b,&c,&d); printf("c,%c,%c,%c\n",a,b,c,d); 若运行时从键盘上输入 :6,5,65,66< 回车 > 则输出结果是 A) 6,5,A,B B) 6,5,65,66 C) 6,5,6,5 D) 6,5,6,6 27. 以下能正确定义二维数组的是 A) int a[][3]; B) int a[][3]=2{2*3; C) int a[][3]={; D) int a[2][3]={{1,{2,{3,4; 28. 有以下程序 int f(int a) { return a%2; { int s[8]={1,3,5,2,4,6,i,d=0; for (i=0;f(s);i++) d+=s; printf("%d\n",d); A) 9 B) 11 C) 19 D) 21 29. 若有以下说明和语句,int c[4][5],(*p)[5];p=c; 能正确引用 c 数组元素的是 A) p+1 B) *(p+3) C)*(p+1)+3 D) *(p[0]+2]) 30. 有以下程序 { int a=7,b=8,*p,*q,*r; p=&a;q=&b; r=p; p=q;q=r; printf("%d,%d,%d,%d\n",*p,"q,a,b); A) 8,7,8,7 B) 7,8,7,8 C) 8,7,7,8 D) 7,8,8,7 31. s1 和 s2 已正确定义并分别指向两个字符串 若要求 : 当 s1 所指串大于 s2 所指串时, 执行语句 S; 则以下选项中正确的是 A) if(s1>s2)s; B) if(strcmp(s1,s2))s; C) if(strcmp(s2,s1)>0)s; D) if(strcmp(s1,s2)>0)s; 32. 设有定义语句 int x[6]={2,4,6,8,5,7,*p=x,i; 要求依次输出 x 数组 6 个元素中的值, 不能完成此操作的语句是 A) for(i=0;i<6;i++) printf("%2d",*(p++)); B) for(i=0;i<6;i++) printf("%2d",*(p+i)); C) for(i=0;i<6;i++) printf("%2d",*p++); D) for(i=0;i<6;i++) printf("%2d",(*p)++); 33. 有以下程序 #include {int a[]={1,2,3,4,5,6,7,8,9,10,11,12,,*p=a+5,*q=null;
*q=*(p+5); printf("%d %d\n",*p,*1); A) 运行后报错 B) 6 6 C) 6 11 D) 5 10 34. 有以下定义和语句 int a[3][2]={1,2,3,4,5,6,,*p[3]; p[0]=a[1]; 则 *p[0]+1) 所代表的数组元素是 A) a[0][1] B) a[1][0] C) a[1][1] D) a[1][2] 35. 有以下程序 {char str[][10]={"china","beijing",*p=str; printf("%s\n",p+10); A) China B) Bejing C) ng D) ing 36. 有以下程序 {char s[]="abcd",*p; for(p=s+1; p<s+4; p++) printf("%s\n", p); A) ABCD B) A C) B D) BCD BCD B C CD CD C D D D D 37. 在函数调用过程中, 如果函数 funa 调用了函数 funb, 函数 funb 又调用了函数 funa, 则 A) 称为函数的直接递归调用 B) 称为函数的间接递归调用 C) 称为函数的循环调用 D) C 语言中不允许这样的递归调用 38. 已有定义 :int i,a[10],*p;, 则合法的赋值语句是 A) p=100; B) p=a[5]; C) p=a[2]+2; D) p=a+2; 39. 以下叙述中正确的是 A) 局部变量说明为 static 存储数, 其生存期将得到延长 B) 全局变量说明为 static 存储类, 其作用域将被扩大 C) 任何存储类的变量在未赋初值时, 其值都是不确定的 D) 形参可以使用的存储类说明符与局部变量完全相同 40. 设有定义语句 :char c1=92,c2=92;, 则以下表达式中值为零的是 A) c1^c2 B) c1&c2 C) ~c2 D) c1 c2 41. 程序中对 fun 函数有如下说明 void *fun(); 此说明的含义是 : A) fun 了数无返回值 B) fun 函数的返回值可以是任意的数据类型
C) fun 函数的返回值是无值型的指针类型 D) 指针 fun 指向一个函数, 该函数无返回值 42. 有以下程序 { char s[]"yes\n/no",*ps=s; puts(ps+4); *(ps+4)=0; puts(s); A) n/no B) /No C) n/no D) Yes Yes Yes /No/No /No Yes 43. 有以下程序 { unsigned int a; int b=-1; a=b; printf("%u",a); A) -1 B) 65535 C) 32767 D) -32768 44. 有以下程序 { int a; char c=10; float f=100.0; double x; a=f/=c*=(x=6.5); printf("%d %d %3.1f %3.1f\n",a,c,f,x); A)1 65 1 6.5 B)1 65 1.5 6.5 C)1 65 1.0 6.5 D)2 65 1.5 6.5 45. 以下选项中非法的表达式是 A)0<=x<100 B)i=j==0 C)(char)(65+3) D)x+1=x+1 46. 有以下程序 { int a=1,b=2,m=0,n=0,k; k=(n=b>a) (m=a<b); printf("%d,%d\n",k,m); A)0,0 B)0,1 C)1,0 D)1,1 47. 有定义语句 :int x, y;, 若值 11, 变量 y 得到数值 12, 下面四组输入要通过 scanf("%d,%d",&x,&y); 语句使变量 x 得到数形式中, 错误的是 A)11 12< 回车 > B)11, 12< 回车 > C)11,12< 回车 > D)11,< 回车 > 12< 回车 >
48. 设有如下程序段 : int x=2002, y=2003; printf("%d\n",(x,y)); 则以下叙述中正确的是 A) 输出语句中格式说明符的个数少于输出项的个数, 不能正确输出 B) 运行时产生出错信息 C) 输出值为 2002 D) 输出值为 2003 49. 设变量 x 为 float 型且已赋值, 则以下语句中能将 x 中的数值保留到小数点后两位, 并将第三位四舍五入的是 A)x=x*100+0.5/100.0; B)x=(x*100+0.5)/100.0; C)x=(int)(x*100+0.5)/100.0; D)x=(x/100+0.5)*100.0; 50. 有以下程序 void fun(int *a,int i,int j) { int t; if(i<j) { t=a;a=a[j];a[j]=t; i++; j--; fun(a,i,j); { int x[]={2,6,18,i; fun(x,0,3); for(i=0;i<4;i++) printf("%2d",x); printf("\n"); A) 1 2 6 8 B) 8 6 2 1 C) 8 1 6 2 D) 8 6 1 2 51. 有以下说明和定义语句 struct student { int age; char num[8];; struct student stu[3]={{20,"200401",{21,"200402",{10\9,"200403"; struct student *p=stu; 以下选项中引用结构体变量成员的表达式错误的是 A) (p++)->num B) p->num C) (*p).num D) stu[3].age 52. 有以下程序 mina() { int x[]={1,3,5,7,2,4,6,0,i,j,k; for(i=0;i<3;i++) for (j=2;j>=i;j--) if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k; for(i=0;i<3;i++) for(j=4;j<7-i;j++)
if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k; for (i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k; for (i=0;i<8;i++) printf("%d",x); printf("\n"); : A) 75310246 B) 1234567 C) 76310462 D) 13570246 53. 有如下程序 #include { FILE *fp1; fp1=fopen("f1.txt","w"); fprintf(fp1,"abc"); fclose(fp1); 若文本文件 f1.txt 中原有内容为 :good, 则运行以上程序后文件 f1.txt 中的内容为 A) goodabc B) abcd C) abc D) abcgood 53~55. 以下程序的功能是 : 建立一个带有头结点的单向链表, 并将存储在数组中的字符依次转储到链表的各个结点中, 请从与下划线处号码对应的一组选若中选择出正确的选项 #include stuct node { char data; struct node *next;; (53) CreatList(char *s) { struct node *h,*p,*q); h=(struct node *) malloc(sizeof(struct node)); p=q=h; while(*s!='\0') { p=(struct node *) malloc(sizeof(struct node)); p->data= (54) ; q->next=p; q= (55) ; s++; p->next='\0'; return h; { char str[]="link list"; struct node *head; head=creatlist(str);...
(53) A) char * B) struct node C) struct node* D) char (54) A) *s B) s C) *s++ D) (*s)++ (55) A) p->next B) p C) s D) s->next 56. 有以下程序 { int s=0,a=1,n; scanf("%d",&n); do { s+=1; a=a-2; while(a!=n); printf("%d\n",s); 若要使程序的输出值为 2, 则应该从键盘给 n 输入的值是 A)-1 B)-3 C)-5 D)0 57. 若有如下程序段, 其中 s a b c 均已定义为整型变量, 且 a c 均已赋值 (c 大于 0) s=a; for(b=1;b<=c;b++) s=s+1; 则与上述程序段功能等价的赋值语句是 A)s=a+b; B)s=a+c; C)s=s+c; D)s=b+c; 58. 要求以下程序的功能是计算 :s= 1+1/2+1/3+ +1/10 { int n; float s; s=1.0; for(n=10;n>1;n--) s=s+1/n; printf("%6.4f\n",s); 程序运行后输出结果错误, 导致错误结果的程序行是 A)s=1.0; B)for(n=10;n>1;n--) C)s=s+1/n; D)printf("%6.4f\n",s); 59. 已定义 ch 为字符型变量, 以下赋值语句中错误的是 A)ch='\'; B)ch=62+3; C)ch=NULL; D)ch='\xaa'; 60. 若已定义的函数有返回值, 则以下关于该函数调用的叙述中错误的是 A) 函数调用可以作为独立的语句存在 B) 函数调用可以作为一个函数的实参 C) 函数调用可以出现在表达式中 D) 函数调用可以作为一个函数的形参 61. 有以下函数定义 : void fun(int n, double x) { 若以下选项中的变量都已正确定义并赋值, 则对函数 fun 的正确调用语句是 A)fun(int y,double m); B)k=fun(10,12.5); C)fun(x,n); D)void fun(n,x); 62. 有以下程序 void fun(char *a, char *b) { a=b; (*a)++; { char c1='a',c2='a',*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2); printf("%c%c\n",c1,c2); A)Ab B)aa C)Aa D)Bb 63. 若程序中已包含头文件 stdio.h, 以下选项中, 正确运用指针变量的程序段是 A)int *i=null; B)float *f=null; scanf("%d",i); *f=10.5; C)char t='m', *c=&t; D)long *L; *c=&t; L='\0'; 64. 有以下程序 #include { printf("%d\n",null); A)0 B)1 C)-1 D)NULL 没定义, 出错 65. 已定义 c 为字符型变量, 则下列语句中正确的是 A)c='97'; B)c="97"; C)c=97; D)c="a"; 66. 以下不能正确定义二维数组的选项是 A)int a[2][2]={{1,{2; B)inta[][2]={1,2,3,4; C)int a[2][2]={{1,2,3; D)int a[2][]={{1,2,{3,4; 67. 以下选项中不能正确把 cl 定义成结构体变量的是 A)typedef struct B)struct color cl { int red; { int red; int green; int green; int blue; int blue; COLOR; ; COLOR cl; C)struct color D)struct { int red; { int red; int green; int green; int blue; int blue; cl; cl; 68. 以下能正确定义一维数组的选项是 A)int num[]; B)#define N 100 int num[n]; C)int num[0..100]; D)int N=100; int num[n]; 69. 下列选项中正确的语句组是 A)char s[8]; s={"beijing"; B)char *s; s={"beijing"; C)char s[8]; s="beijing"; D)char *s; s="beijing"; 70. 已定义以下函数 fun(int *p) { return *p; 该函数的返回值是 A) 不确定的值 B) 形参 p 中存放的值
C) 形参 p 所指存储单元中的值 D) 形参 p 的地址值 71. 下列函数定义中, 会出现编译错误的是 A)max(int x,int y,int *z) B)int max(int x,y) { *z=x>y? x:y; { int z; z=x>y? x:y; return z; C)max(int x,int y) D)int max(int x,int y) { int z; { return(x>y?x:y); z=x>y?x:y; return(z); 72. 有以下程序 #include #define F(X,Y) (X)*(Y) { int a=3, b=4; printf("%d\n", F(a++, b++)); A)12 B)15 C)16 D)20 73. 有以下程序 fun(int a, int b) { if(a>b) return(a); else return(b); { int x=3, y=8, z=6,r; r=fun(fun(x,y), 2*z); printf("%d\n", r); A)3 B)6 C)8 D)12 74. 若有定义 :int *p[3];, 则以下叙述中正确的是 A) 定义了一个基类型为 int 的指针变量 p, 该变量具有三个指针 B) 定义了一个指针数组 p, 该数组含有三个元素, 每个元素都是基类型为 int 的指针 C) 定义了一个名为 *p 的整型数组, 该数组含有三个 int 类型元素 D) 定义了一个可指向一维数组的指针变量 p, 所指一维数组应具有三个 int 类型元素 75. 以下程序中函数 scmp 的功能是返回形参指针 s1 和 s2 所指字符串中较小字符串的首地址 #include #include char *scmp(char *s1,char *s2) { if(strcmp(s1,s2)<0) return(s1); else return(s2);
{ int i; char string[20], str[3][20]; for(i=0;i<3;i++) gets(str[i]); strcpy(string,scmp(str[0],str[1])); /* 库函数 strcpy 对字符串进行复制 */ strcpy(string,scmp(string,str[2])); printf("%s\n",string); 若运行时依次输入 :abcd abba 和 abc 三个字符串, 则输出结果为 A)abcd B)abba C)abc D)abca 76. 有以下程序 struct s { int x,y; data[2]={10,100,20,200; { struct s *p=data; printf("%d\n",++(p->x)); A)10 B)11 C)20 D)21 77. 有以下程序段 { int a=5,*b,**c; c=&b; b=&a; 程序在执行了 c=&b;b=&a; 语句后, 表达式 :**c 的值是 A) 变量 a 的地址 B) 变量 b 中的值 C) 变量 a 中的值 D) 变量 b 的地址 78. 有以下程序 #include { char str[][20]={"hello","beijing",*p=str; printf("%d\n",strlen(p+20)); A)0 B)5 C)7 D)20 79. 已定义以下函数 fun(char *p2, char *p1) { while((*p2=*p1)!='\0'){ p1++;p2++; 函数的功能是 A) 将 p1 所指字符串复制到 p2 所指内存空间 B) 将 p1 所指字符串的地址赋给指针 p2 C) 对 p1 和 p2 两个指针所指字符串进行比较 D) 检查 p1 和 p2 两个指针所指字符串中是否有 '\0' 80. 有以下程序
{ int x=3, y=2, z=1; printf("%d\n",x/y&~z); A)3 B)2 C)1 D)0 81. 若 fp 已正确定义并指向某个文件, 当未遇到该文件结束标志时函数 feof(fp) 的值为 A)0 B)1 C)-1 D) 一个非 0 值 82. 下列关于 C 语言数据文件的叙述中正确的是 A) 文件由 ASCII 码字符序列组成,C 语言只能读写文本文件 B) 文件由二进制数据序列组成,C 语言只能读写二进制文件 C) 文件由记录序列组成, 可按数据的存放形式分为二进制文件和文本文件 D) 文件由数据流形式组成, 可按数据的存放形式分为二进制文件和文本文件 83. 有以下程序 { int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++) p[i]=i+1; printf("%d \n",a[1][2]); A)3 B)6 C)9 D)2 84. 有以下结构体说明和变量定义, 如图所示, 指针 p q r 分别指向一个链表中的三个连续结点 struct node { int data; struct node *next; *p, *q, *r; data next data next data next p q r 现要将 q 和 r 所指结点的先后位置交换, 同时要保持链表的连续, 以下错误的程序段是 A)r->next=q; q->next=r->next; p->next=r; B)q->next=r->next; p->next=r; r->next=q; C)p->next=r; q->next=r->next; r->next=q; D)q->next=r->next; r->next=q; p->next=r; 85. 以下程序的输出结果是 { int a=3; printf("%d\n",(a+a-=a*a) ); A) -6 B) 12 C) 0 D) -12 86. 设 a b C d m n 均为 int 型变量, 且 a=5 b=6 c=7 d=8 m=2 n=2, 则逻辑表 达式 (m=a>b)&&(n=c>d) 运算后,n 的值位为 A) 0 B) 1 C) 2 D) 3
87. 阅读以下程序 : { int x; scanf("%d",&x); if(x--<5) printf("%d"'x); else printf("%d"'x++); 程序运行后, 如果从键盘上输人 5, 则输出结果是 A) 3 B) 4 C) 5 D) 6 88. 假定 w x y z m 均为 int 型变量, 有如下程序段 : w=1; x=2; y=3; z=4; m=(w<x)?w; x; m=(m<y)?m;y; m=(m<z)?m; z; 则该程序运行后,m 的值是 it A) 4 B) 3 C) 2 D) 2 89. t 为 int 类型, 进人下面的循环之前,t 的值为 0 while( t=l ) { 则以下叙述中正确的是 A) 循环控制表达式的值为 0 B) 循环控制表达式的值为 1 C) 循环控制表达式不合法 D) 以上说法都不对 90. 以下程序的输出结果是 { int num= 0; while(num<=2) { num++; printf("%d\n",num); A) 1 B) 1 C) 1 D) l 2 2 2 3 3 4 91. 以下各选项企图说明一种新的类型名, 其中正确的是 A) typedef v1 int; B) typedef v2=int; C) typedefv1 int v3; D) typedef v4: int; 92. 在调用函数时, 如果实参是简单变量, 它与对应形参之间的数据传递方式是 A) 地址传递 B) 单向值传递 C) 由实参传给形参, 再由形参传回实参 D) 传递方式由用户指定 93. 以下函数值的类型是 fun ( float x ) { float y; y= 3*x-4; return y; A) int B) 不确定 C) void D) float 94. 设有以下函数 :
f ( int a) { int b=0; static int c = 3; b++; c++; return(a+b+c); 如果在下面的程序中调用该函数, 则输出结果是 { int a = 2, i; for(i=0;i<3;i++) printf("%d\n",f(a)); A) 7 B) 7 C) 7 D) 7 8 9 10 7 9 11 13 7 95. 以下程序的输出结果是 { char c='z'; printf("%c",c-25); A) a B) Z C) z-25 D) y 96. 以下选项中, 非法的字符常量是 A) '\t' B) '\17' C)"n" D) '\xaa' 97. 若有说明 :int i, j=2,*p=&i;, 则能完成 i=j 赋值功能的语句是 A) i=*p; B) p*=*&j; C) i=&j; D) i=**p; 98. 以下定义语句中, 错误的是 A) int a[]={1,2; B) char *a[3]; C) char s[10]="test"; D) int n=5,a[n]; 99. 假定 int 类型变量占用两个字节, 其有定义 :int x[10]={0,2,4;, 则数组 x 在内存中所占字节数是 A) 3 B) 6 C) 10 D) 20 100. 以下程序的输出结果是 { int i, a[10]; for(i=9;i>=0;i--) a[i]=10-i; printf("%d%d%d",a[2],a[5],a[8]); A) 258 B) 741 C) 852 D) 369 101. 以下数组定义中不正确的是 A) int a[2][3]; B) int b[][3]={0,1,2,3; C) int c[100][100]={0; D) int d[3][]={{1,2,{1,2,3,{1,2,3,4; 102. 以下程序的输出结果是
{ int a[4][4]={{1,3,5,{2,4,6,{3,5,7; printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]; A) 0650 B) 1470 C) 5430 D) 输出值不定 103. 以下程序的输出结果是 { char st[20]= "hello\0\t\\\"; printf(%d %d \n",strlen(st),sizeof(st)); A) 9 9 B) 5 20 C) 13 20 D) 20 20 104. 以下选项中, 不能正确赋值的是 A) char s1[10];s1="ctest"; B) char s2[]={'c', 't', 'e', 's', 't'; C) char s3[20]="ctest"; D) char *s4="ctest\n" 105. 以下程序的输出结果是 amovep(int p, int (a)[3],int n) { int i, j; for( i=0;i<;i++) for(j=0;j<n;j++){ *p=a[i][j];p++; { int *p,a[3][3]={{1,3,5,{2,4,6; p=(int *)malloc(100); amovep(p,a,3); printf("%d %d \n",p[2],p[5]);free(p); A) 56 B) 25 C) 34 D) 程序错误 106. 以下程序的输出结果是 struct HAR { int x, y; struct HAR *p; h[2]; { h[0],x=1;h[0];y=2; h[1],x=3;h[1];y=4; h[0],p=&h[1],p=h; printf("%d %d \n",(h[0],p)->x,(h[1],p)->y); A) 12 B) 23 C) 14 D) 32 107. 以下程序的输出结果是 { int a, b; for(a=1, b=1; a<=100; a++) { if(b>=10) break; if (b%3= =1)
{ b+=3; continue; printf("%d\n",a); A) 101 B) 6 C) 5 D) 4 108. 以下程序的输出结果是 union myun { struct { int x, y, z; u; int k; a; { a.u.x=4; a.u.y=5; a.u.z=6; a.k=0; printf(%d\n",a.u.x); A) 4 B) 5 C) 6 D) 0 109. 以下程序的输出结果是 int a, b; void fun() { a=100; b=200; { int a=5, b=7; fun(); printf("%d%d \n", a,b); A) 100200 B) 57 C) 200100 D) 75 110. 以下程序的输出结果是 #define M(x,y,z) x*y+z { int a=1,b=2, c=3; printf("%d\n", M(a+b,b+c, c+a)); A) 19 B) 17 C) 15 D) 12 111. 整型变量 x 和 y 的值相等 且为非 0 值, 则以下选项中, 结果为零的表达式是 A) x y B) x y C) x & y D) x ^ y 112. 下面的程序执行后, 文件 testt.t 中的内容是 #include <stdio.h> void fun(char *fname.,char *st) { FILE *myf; int i; myf=fopen(fname,"w" ); for(i=0;i<strlen(st); i++) fputc(st[i],myf); fclose(myf);
{ fun("test","new world"; fun("test","hello,"0); A)hello, B)new worldhello, C)new world D)hello, rld 二 填空题 :( 每空 2 分, 共 40 分 ) 1. 以下程序段的输出结果是 int i=9; printf("%o\n",i); 2. 以下 { int a,b,c; a=25; b=025; c=0x25; printf("%d %d %d\n',a,b,c); 3. 以下 { int p[7]={11,13,14,15,16,17,18; int i=0,j=0; while(i<7 && p%2==1) j+=p[i++]; printf("%d\n",j); 4. 以下 { int x=1,y=0,a=0,b=0; switch(x) {case 1: switch(y) { case 0: a++; break; case 1:b++; break; case 2:a++;b++; break; printf("%d %d\n",a,b); 5. 以下 { int a[4][4]={{1,2,3,4,{5,6,7,8,{11,12,13,14,{15,16,17,18; int i=0,j=0,s=0; while(i++<4) { if(i==2 i==4) continue; j=0; do{ s+= a[j]; j++; while(j<4);
printf("%d\n",s); 6. 以下 main () { char a[]="language",b[]="programe"; char *p1,*p2; int k; p1=a; p2=b; for(k=0;k<=7;k++) if(*p1+k)==*(p2+k)) printf("%c",*(p1+k)); 7. 以下 { char a[]="123456789",*p; int i=0; p=a; while(*p) { if(i%2==0) *p='*"; p++;i++; puts(a); 8. 以下程序中, for 循环体执行的次数是 #define N 2 #define M N+1 #define K M+1*M/2 { int i; for(i=1;i<k;i++) {...... 9. 通过函数求 f(x) 的累加和, 其中 f(x)=x2+1 { printf("the sum=%d\n",sunfun(10)); SunFun(int n) { int x,s=0; for(x=0;x<=n;x++) s+=f( ); return s; F( int x) { return ;
10. 以下程序从终端读入数据到数组中, 统计其中正数的个数, 并计算它们之和 请填空 { int i,a[20],sun,count; suum=count=0; for(i=0;i<20;i++) scanf("%d", ); for(i=0;i<20;i++) { if(a>0) { count++; sum+= ; printf("sum=%d,count=%d\n",sum,count); 11. 以下程序中, 函数 SumColumM 的功能是 : 求出 M 行 N 列二维数组每列元素中的最小值, 并计算它们的和值 和值通过形参传回主函数输出 请填空 #define M 2 #define N 4 void SumColumMin(int a[m][n], int *sum) { int i,j,k,s=0; for(i=0;i<n;i++) { k=0; for(j=1;j<m;j++) if(a[k]>a[j]) k=j; s+= ; *sum =s; { int x[m][n]={3,2,5,1,4,1,8,3,s; SumColumMin( ); printf("%d\n",s); 12. 以下 { int p=30; printf("%d\n",(p/3>0? p/10 : p%3)); 13. 以下 { char m; m='b'+32; printf("%c\n",m); 14. 以下 { int a=1,b=3,c=5;
if (c=a+b) printf("yes\n"); else printf("no\n"); 15. 以下 { int i,m=0,n=0,k=0; for(i=9; i<=11;i++) switch(i/10) { case 0: m++;n++;break; case 10: n++; break; default: k++;n++; printf("%d %d %d\n",m,n,k); 16. 执行以下程序后, 输出 '#' 号的个数是 #include { int i,j; for(i=1; i<5; i++) for(j=2; j<=i; j++) putchar('#'); 17. 以下程序的功能是调用函数 fun 计算 :m=1-2+3-4+ +9-10, 并输出结果 请填空 int fun( int n) { int m=0,f=1,i; for(i=1; i<=n; i++) { m+=i*f; f= ; return m; { printf("m=%d\n", ); 18. 以下 { int i,n[]={0,0,0,0,0; for(i=1;i<=4;i++) { n[i]=n[i-1]*2+1; printf("%d ",n[i]); 19. 以下 { int i,j,a[][3]={1,2,3,4,5,6,7,8,9; for(i=0;i<3;i++)
for(j=i+1;j<3;j++) a[j][i]=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%d ",a[i][j]); printf("\n"); 20. 以下 int a=5; fun(int b) { static int a=10; a+=b++; printf("%d ",a); { int c=20; fun(c); a+=c++; printf("%d\n",a); 21. 请在以下程序第一行的下划线处填写适当内容, 使程序能正确运行 ( double,double); { double x,y; scanf("%lf%lf",&x,&y); printf("%lf\n",max(x,y)); double max(double a,double b) { return(a>b? a:b); 22. 以下程序运行后输入 :3,abcde< 回车 >, 则输出结果是 #include move(char *str, int n) { char temp; int i; temp=str[n-1]; for(i=n-1;i>0;i--) str[i]=str[i-1]; str[0]=temp; { char s[50]; int n,i, z; scanf("%d,%s",&n,s); z=strlen(s); for(i=1; i<=n; i++) move(s, z); printf("%s\n",s); 23. 以下 fun(int x) { if(x/2>0) fun(x/2)
printf("%d ",x); { fun(6); 24. 已有定义如下 : struct node { int data; struct node *next; *p; 以下语句调用 malloc 函数, 使指针 p 指向一个具有 struct node 类型的动态存储空间 请填空 p = (struct node *)malloc( ); 25. 以下程序的功能是将字符串 s 中的数字字符放入 d 数组中, 最后输出 d 中的字符串 例如, 输入字符串 :abc123edf456gh, 执行程序后输出 :123456 请填空 #include #include { char s[80], d[80]; int i,j; gets(s); for(i=j=0;s[i]!='\0';i++) if( ) { d[j]=s[i]; j++; d[j]='\0'; puts(d); 26. 语句 :x++;?++x; x=x+1;?x=l+x;, 执行后都使变量 x 中的值增 1, 请写出一条同一功能的赋值语句 ( 不得与列举的相同 ) 27. 设 y 是 int 型变量, 请写出判断 y 为奇效的关系表达式 28. 以下 { int i=10, j=0; do { j=j+i; i--; while(i>2); printf("%d\n",j); 29. 设有以下程序 : { int n1,n2; scanf("%d",&n2); while(n2!=0) { n1=n2%10; n2=n2/10;
printf("%d",n1); 程序运行后, 如果从键盘上输入 1298; 则输出结果为 30. 以下程序输出的最后一个值是 int ff(int n) { static int f=l; f=f*n; return f; { int i; for(i=1;i<=5;i++ printf("%d\n",ff(i)); 31. 以下函数的功能是 : 求 x 的 y 次方, 请填空 double fun( double x, int y) { int i; double z; for(i=1, z=x; i<y;i++) z=z* ; return z; 32. 设有以下程序 : { int a, b, k=4, m=6, *p1=&k, *p2=&m; a=pl=&m; b=(*p1)/(*p2)+7; printf("a=%d\n",a); printf("b=%d\n",b); 执行该程序后,a 的值为,b 的值为 34. 若已定义 :int a[10], i;, 以下 fun 函数的功能是 : 在第一个循环中给前 10 个数组元素依次赋 1 2 3 4 5 6 7 8 9 10; 在第二个循环中使 a 数组前 10 个元素中的值对称折叠, 变成 1 2 3 4 5 5 4 3 2 1 请填空 fun( int a[ ]) { int i; for(i=1; i<=10; i++) =i; for(i=0; i<5; i++) =a[i]; 36. 以下 { char s[ ]="9876",*p; for ( p=s ; p<s+2 ; p++) printf("%s\n", p); 37. 若有定义语句 :char s[100],d[100]; int j=0, i=0;, 且 s 中已赋字符串, 请填空以实现字符
串拷贝 ( 注 : 不得使用逗号表达式 ) while([i]){ d[j]= ;j++; d[j]=0; 38. 以下程序段用于构成一个简单的单向链表, 请填空 struct STRU { int x, y ; float rate; p; a, b; a.x=0; a.y=0; a.rate=0; a.p=&b; b.x=0; b.y=0; b.rate=0; b.p=null; 39. 若有如下结构体说明 : struct STRU { int a, b ; char c; double d: struct STRU p1,p2; ; 请填空, 以完成对 t 数组的定义,t 数组的每个元素为该结构体类型 t[20]; 40. 以下程序段打开文件后, 先利用 fseek 函数将文件位置指针定位在文件末尾, 然后调用 ftell 函数返回当前文件位置指针的具体位置, 从而确定文件长度, 请填空 FILE *myf; ling f1; myf= ("test.t","rb"); fseek(myf,0,seek_end); f1=ftel(myf); fclose(myf); printf("%d\n",f1); 三 编程题 1. 将 10 个整数输入到一个数组中, 然后再将其按输入顺序的逆序进行排列并输出 2. 编写一个函数, 把一个字符串中的大写字母改为小写字母, 其余不变 并从键盘输入一个字符串, 然后使用该函数将大写字母变为小写字母后输出 3. 输入一个字符串, 然后判定它是否为一个 Palindrome, 所谓 Palindrome 是指其从正反两个方向看都是一样的 ( 不分大小写 ), 如 Madam 4. 请编写程序统计输入的一行中小写字母的个数 5. 编写一个函数, 对传送过来的三个数选出最大和最小数, 并通过形参传回调用函数