C 语言程序设计复习题 一 选择题 1. 以下选项中可作为 C 语言合法常量的是 A) -80 B) -080 C) -8e1.0 D) -80.0e 2. 以下叙述中正确的是 A) 用 C 语言实现的算法必须要有输入和输出操作 B) 用 C 语言实现的算法可以没有输出但必须要有输入 C) 用 C 程序实现的算法可以没有输入但必须要有输出 D) 用 C 程序实现的算法可以既没有输入也没有输出 3. 以下不能定义为用户标识符是 D A) Main B) _0 C) _int D) sizeof 4. 以下选项中, 不能作为合法常量的是 A) 1.234e04 B) 1.234e0.4 C) 1.234e+4 D) 1.234e0 5. 用 C 语言编写的代码程序 A) 可立即执行 B) 是一个源程序 C) 经过编译即可执行 D) 经过编译解释才能执行 6. 结构化程序由三种基本结构组成, 三种基本结构组成的算法 A) 可以完成任何复杂的任务 B) 只能完成部分复杂的任务 C) 只能完成符合结构化的任务 D) 只能完成一些简单的任务 7. 以下叙述中正确的是 A)C 程序中注释部分可以出现在程序中任意合适的地方 B) 花括号 "" 和 "" 只能作为函数体的定界符 C) 构成 C 程序的基本单位是函数, 所有函数名都可以由用户命名 D) 分号是 C 语句之间的分隔符, 不是语句的一部分 8. 以下选项中可作为 C 语言合法整数的是 A)10110B B)0386 C)0Xffa D)x2a2 9. 以下不能定义为用户标识符的是 A)scanf B)Void C)_3com_ D)int 10. 在 C 语言中, 合法的长整型常数是 A) OL B) 4962710 C) 324562& D) 216D 11. 以下有 4 组用户标识符, 其中合法的一组是 A) For B) 4d C) f2_g3 D) WORD -sub DO IF void Case Size abc define 12. 以下选项中合法的字符常量是 A) "B" B) '\010' C) 68 D) D 13. 假定 x 和 y 为 double 型, 则表达式 x=2,y=x+3/2 的值是 A) 3.500000 B) 3 C) 2.000000 D) 3.000000 14. 以下合法的赋值语句是 A) x=y=100 B) d--; C) x+y; D) c=int(a+b); 15. 设正 x y 均为整型变量, 且 x=10 y=3, 则以下语句的输出结果是 printf("%d,%d\n",x--,--y);
A) 10,3 B) 9.3 C) 9.2 D)10.2 16. 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); 17. 以下定义语句中正确的是 A) char a='a'b='b'; B) float a=b=10.0; C) int a=10,*b=&a; D) float *a,b=&a; 18. 下列选项中, 不能用作标识符的是 A) _1234_ B)_1_2 C)int_2_ D)2_int_ 19. 有以下定义语句 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; 20. 有以下程序 int m=3,n=4,x; x=-m++; x=x+8/++n; printf("%d\n",x); A) 3 B) 5 C) -1 D) -2 21. 有以下程序 char a='a',b; print("%c,",++a); printf("%c\n",b=a++); A) b,b B) b,c C) a,b D) a,c 22. 有以下程序 int m=0256,n=256; printf("%o %o\n",mn,n); A) 0256 0400 B) 0256 256 C) 256 400 D) 400 400 23. 有以下程序 int a=666,b=888; printf("%d\n",a,b); A) 错误信息 B) 666 C) 888 D) 666,888 24. 有以下程序
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 25. 若 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 26. 有以下程序 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 27. 下列条件语句中, 功能与其他语句不同的是 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); 28. 有以下程序 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) 程序进入死循环 29. 若变量已正确定义, 要求程序段完成求 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;dop*=i; i++; while(i<=5); 30. 有以下程序 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 31. 以下能正确定义二维数组的是 A) int a[][3]; B) int a[][3]=22*3; C) int a[][3]=; D) int a[2][3]=1,2,3,4; 32. 有以下程序 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 113. 数字字符 0 的 ASCII 值为 48, 若有以下程序 char a='1',b='2'; printf("%c,",b++); printf("%d\n",b-a); A) 3,2 B) 50,2 C) 2,2 D) 2,50 114. 有以下程序 int m=12,n=34; printf("%d%d",m++,++n); printf("%d%d\n",n++,++m); A) 12353514 B) 12353513 C) 12343514 D) 12343513 115. 有以下语句 :int b;char c[10];, 则正确的输入语句是 A) scanf("%d%s",&b,&c); B) scanf("%d%s",&b,c); C) scanf("%d%s",b,c); D)scanf("%d%s",b,&c); 116. 有以下程序 int m,n,p; scanf("m=%dn=%dp=%d",&m,&n,&p); printf("%d%d%d\n",m,n,p); 若想从键盘上输入数据, 使变量 M 中的值为 123,N 中的值为 456,P 中的值为 789, 则正确
的输入是 A) M=123N=456P=789 B) M=123 N=456 P=789 C) M=123,N=456,P=789 D)123 456 789 117. 有以下程序 int a,b,d=25; a=d/10%9;b=a&&(-1); printf("%d,%d\n",a,b); A)6,1 B)2,1 C)6,0 D)2,0 118. 有以下程序 int i=1,j=2,k=3; if(i++==1&&(++j==3 k++==3)) printf("%d %d %d\n",i,j,k); A)1 2 3 B)2 3 4 C)2 2 3 D)2 3 3 119. 有以下程序 int p[8]=11,12,13,14,15,16,17,18,i=0,j=0; while(i++<7) if(p[i]%2) j+=p[i]; printf("%d\n",j); A) 42 B) 45 C) 56 D) 60 120. 有以下程序 char a[7]="a0\0a0\0"; int i,j; i=sizeof(a); j=strlen(a); printf("%d %d\n",i,j); A)2 2 B)7 6 C)7 2 D)6 2 121. 以下能正确定义一维数组的选项是 A) int a[5]=0,1,2,3,4,5; B) char a[]=0,1,2,3,4,5; C) char a='a','b','c'; D) int a[5]="0123"; 122. 有以下程序 int f1(int x,int y)return x>y?x:y;
int f2(int x,int y)return x>y?y:x; int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,b),f1(c,d)); f=f1(f2(a,b),f2(c,d)); g=a+b+c+d-e-f; printf("%d,%d,%d\n",e,f,g); A) 4,3,7 B) 3,4,7 C) 5,2,7 D) 2,5,7 123. 已有定义 :char a[]="xyz",b[]='x','y','z';, 以下叙述中正确的是 A) 数组 a 和 b 的长度相同 B) a 数组长度小于 b 数组长度 C) a 数组长度大于 b 数组长度 D) 上述说法都不对 124. 有以下程序 void f(int *x,int *y) int t; t=*x;*x=*y;*y=t; int a[8]=1,2,3,4,5,6,7,8,i,*p,*q; p=a;q=&a[7]; while(pf(p,q);p++;q--; for(i=0;i<8;i++)printf("%d,",a[i]); A) 8,2,3,4,5,6,7,1, B) 5,6,7,8,1,2,3,4, C) 1,2,3,4,5,6,7,8, D) 8,7,6,5,4,3,2,1, 125. 有以下程序 int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++)p[i]=i; for(i=0;i<3;i++)printf("%d",a[1][i]); A) 0 1 2 B) 1 2 3 C) 2 3 4 D) 3 4 5 126. 以下叙述中错误的是 A) 对于 double 类型数组, 不可以直接用数组名对数组进行整体输入或输出 B) 数组名代表的是数组所占存储区的首地址, 其值不可改变 C) 当程序执行中, 数组元素的下标超出所定义的下标范围时, 系统将给出 " 下标越界 " 的出错信息
D) 可以通过赋初值的方式确定数组元素的个数 127. 有以下程序 #define N 20 fun(int a[],int n,int m) int i,j; for(i=m;i>=n;i--)a[i+1]=a[i]; int i,a[n]=1,2,3,4,5,6,7,8,9,10; fun(a,2,9); for(i=0;i<5;i++)printf("%d",a[i]); A) 10234 B) 12344 C) 12334 D) 12234 128. 有以下程序 int a[3][2]=0,(*ptr)[2],i,j; for(i=0;i<2;i++) ptr=a+i;scanf("%d",ptr);ptr++; for(i=0;i<3;i++) for(j=0;j<2;j++)printf("%2d",a[i][j]); printf("\n"); 若运行时输入 :1 2 3< 回车 >, 则输出结果是 A) 产生错误信息 B) 1 0 C) 1 2 D) 1 0 2 0 3 0 2 0 0 0 0 0 3 0 129. 有以下程序 prt(int *m,int n) int i; for(i=0;i int a[]=1,2,3,4,5,i; prt(a,5); for(i=0;i<5;i++) printf("%d,",a[i]); A)1,2,3,4,5, B)2,3,4,5,6, C)3,4,5,6,7, D)2,3,4,5,1, 130. 有以下程序
#define P 3 void F(int x)return(p*x*x); printf("%d\n",f(3+5)); A)192 B)29 C)25 D) 编译出错 131. 有以下程序 int c=35;printf("%d\n",c&c); A)0 B)70 C)35 D)1 132. 以下叙述中正确的是 A) 预处理命令行必须位于源文件的开头 B) 在源文件的一行上可以有多条预处理命令 C) 宏名必须用大写字母表示 D) 宏替换不占用程序的运行时间 133. 若有以下说明和定义 union dt int a;char b;double c;data; 以下叙述中错误的是 A)data 的每个成员起始地址都相同 B) 变量 data 所占的内存字节数与成员 c 所占字节数相等 C) 程序段 :data.a=5;printf("%f\n",data.c); 输出结果为 5.000000 D)data 可以作为函数的实参 134. 以下语句或语句组中, 能正确进行字符串赋值的是 A)char *sp;*sp="right!"; B)char s[10];s="right!"; C)char s[10];*s="right!"; D)char *sp="right!"; 135. 设有如下说明 typedef struct ST long a;int b;char c[2];new; 则下面叙述中正确的是 A) 以上的说明形式非法 B)ST 是一个结构体类型 C)NEW 是一个结构体类型 D)NEW 是一个结构体变量 136. 有以下程序 int a=1,b; for(b=1;b<=10;b++) if(a>=8)break; if(a%2==1)a+=5;continue; a-=3; printf("%d\n",b);
A) 3 B) 4 C)5 D) 6 137. 有以下程序 char s[]="159",*p; p=s; printf("%c",*p++);printf("%c",*p++); A)15 B)16 C)12 D)59 138. 有以下函数 fun(char *a,char *b) while((*a!='\0')&&(*b!='\0')&&(*a==*b)) a++;b++; return(*a-*b); 该函数的功能是 A) 计算 a 和 b 所指字符串的长度之差 B) 将 b 所指字符串连接到 a 所指字符串中 C) 将 b 所指字符串连接到 a 所指字符串后面 D) 比较 a 和 b 所指字符串的大小 139. 有以下程序 int num[4][4]=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,i,j; for(i=0;i<4;i++) for(j=0;j<=i;j++)printf("%4c",' '); for(j= ;j<4;j++)printf("%4d",num[i][j]); printf("\n"); 若要按以下形式输出数组右上半三角 1 2 3 4 6 7 8 11 12 16 则在程序下划线处应填入的是 A)i-1 B)i C)i+1 D)4-i 140. 有以下程序 point(char *p)p+=3; char b[4]='a','b','c','d',*p=b; point(p);printf("%c\n",*p);
A)a B)b C)c D)d 141. 程序中若有如下说明和定义语句 A char fun(char *); char *s="one",a[5]=0,(*f1)()=fun,ch;... 以下选项中对函数 fun 的正确调用语句是 A)(*f1)(a); B)*f1(*s); C)fun(&a); D)ch=*f1(s); 147. 以下对结构体类型变量 td 的定义中, 错误的是 A)typedef struct aa B)struct aa C)struct D)struct int n; int n; int n; int n; float m; float m; float m; float m; AA; td; aa; td; AA td; struct aa td; struct aa td; 148. 以下与函数 fseek(fp,0l,seek_set) 有相同作用的是 A)feof(fp) B)ftell(fp) C)fgetc(fp) D)rewind(fp) 149. 有以下程序 #include void WriteStr(char *fn,char *str) FILE *fp; fp=fopen(fn,"w");fputs(str,fp);fclose(fp); WriteStr("t1.dat","start"); WriteStr("t1.dat","end"); 程序运行后, 文件 t1.dat 中的内容是 A)start B)end C)startend D)endrt 二 填空题 :( 每空 2 分, 共 40 分 ) 1. 以下程序运行时若从键盘输入 :10 20 30< 回车 >. 输出结果是 #include
int i=0,j=0,k=0; scanf("%d%*d%d",&i,&j,&k);printf("%d%d%d\n",i,j,k); 答案 :10 30 0 2. 以下 #define S(x) 4*x*x+1 int i=6,j=8; printf("%d\n",s(i+j)); 答案 :81 3. 以下 int a=3,b=4,c=5,t=99; if(b if(a printf("%d%d%d\n",a,b,c); 答案 :4399 4. 以下 int a,b,c; a=10;b=20;c=(a%b<1) (a/b>1); printf("%d %d %d\n",a,b,c); 答案 :10 20 0 5. 以下 char c1,c2; for(c1='0',c2='9';c1printf("\n"); 答案 :0918273645 6. 已知字符 A 的 ASCII 代码值为 65, 以下程序运行时若从键盘输入 :B33< 回车 >. 则输出结果是 #include char a,b; a=getchar();scanf("%d",&b); a=a-'a'+'0';b=b*2; printf("%c %c\n",a,b); 答案 :1 B
7. 以下 void swap(int x,int y) int t; t=x;x=y;y=t;printf("%d %d ",x,y); int a=3,b=4; swap(a,b);printf("%d %d\n",a,b); 答案 :4 3 3 4 8. 以下 #include char ch[]="abc",x[3][4];int i; for(i=0;i<3;i++)strcpy(x[i],ch); for(i=0;i<3;i++)printf("%s",&x[i][i]); printf("\n"); 答案 :abcbcc 9. 以下 fun(int a) int b=0;static int c=3; b++;c++; return(a+b+c); int i,a=5; for(i=0;i<3;i++)printf("%d %d ",i,fun(a)); printf("\n"); 答案 :0 10 1 11 2 12 10. 以下 struct NODE int k; struct NODE *link; ; struct NODE m[5],*p=m,*q=m+4; int i=0; while(p!=q) p->k=++i;p++; q->k=i++;q--; q->k=i;
for(i=0;i<5;i++)printf("%d",m[i].k); printf("\n"); 答案 :13431 11. 以下程序中函数 huiwen 的功能是检查一个字符串是否是回文, 当字符串是回文时, 函数返回字符串 :yes!, 否则函数返回字符串 :no!, 并在主函数中输出. 所谓回文即正向与反向的拼写都一样, 例如 :adgda. 请填空. #include char *huiwen(char *str) char *p1,*p2;int i,t=0; p1=str;p2= ; for(i=0;i<=strlen(str)/2;i++) if(*p1++!=*p2--)t=1;break; if( )return("yes!"); else return("no!"); char str[50]; printf("input:");scanf("%s",str); printf("%s\n", ); 答案 : str+(strlen(str)-1)!t huiwen(str) 12. 以下程序段的输出结果是 int i=9; printf("%o\n",i); 13. 以下 int a,b,c; a=25; b=025; c=0x25; printf("%d %d %d\n',a,b,c); 14. 以下 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); 15. 以下
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); 16. 以下 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); 17. 以下 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)); 18. 以下 char a[]="123456789",*p; int i=0; p=a; while(*p) if(i%2==0) *p='*"; p++;i++; puts(a); 19. 以下程序中, for 循环体执行的次数是 #define N 2 #define M N+1 #define K M+1*M/2
int i; for(i=1;i<k;i++)...... 20. 通过函数求 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 ; 21. 以下程序从终端读入数据到数组中, 统计其中正数的个数, 并计算它们之和 请填空 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); 22. 以下程序中, 函数 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); 23. 以下 int p=30; printf("%d\n",(p/3>0? p/10 : p%3)); 24. 以下 char m; m='b'+32; printf("%c\n",m); 25. 以下 int a=1,b=3,c=5; if (c=a+b) printf("yes\n"); else printf("no\n"); 26. 以下 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); 27. 执行以下程序后, 输出 '#' 号的个数是 #include int i,j; for(i=1; i<5; i++) for(j=2; j<=i; j++) putchar('#'); 28. 以下程序的功能是调用函数 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", ); 29. 以下 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]); 30. 以下 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"); 31. 以下 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); 32. 请在以下程序第一行的下划线处填写适当内容, 使程序能正确运行 ( 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); 33. 以下程序运行后输入 :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); 34. 以下 fun(int x) if(x/2>0) fun(x/2) printf("%d ",x); fun(6); 35. 已有定义如下 : struct node int data; struct node *next; *p; 以下语句调用 malloc 函数, 使指针 p 指向一个具有 struct node 类型的动态存储空间 请填空 p = (struct node *)malloc( ); 36. 以下程序的功能是将字符串 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);
37. 语句 :x++;?++x; x=x+1;?x=l+x;, 执行后都使变量 x 中的值增 1, 请写出一条同一功能的赋值语句 ( 不得与列举的相同 ) 38. 设 y 是 int 型变量, 请写出判断 y 为奇效的关系表达式 39. 以下 int i=10, j=0; do j=j+i; i--; while(i>2); printf("%d\n",j); 40. 设有以下程序 : int n1,n2; scanf("%d",&n2); while(n2!=0) n1=n2%10; n2=n2/10; printf("%d",n1); 程序运行后, 如果从键盘上输入 1298; 则输出结果为 41. 以下程序输出的最后一个值是 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)); 42. 以下函数的功能是 : 求 x 的 y 次方, 请填空 double fun( double x, int y) int i; double z; for(i=1, z=x; i<y;i++) z=z* ; return z; 43. 设有以下程序 : 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 的值为 44. 若已定义 :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]; 45. 以下 char s[ ]="9876",*p; for ( p=s ; p<s+2 ; p++) printf("%s\n", p); 46. 若有定义语句 :char s[100],d[100]; int j=0, i=0;, 且 s 中已赋字符串, 请填空以实现字符串拷贝 ( 注 : 不得使用逗号表达式 ) while([i]) d[j]= ;j++; d[j]=0; 47. 以下程序段用于构成一个简单的单向链表, 请填空 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; 48. 若有如下结构体说明 : struct STRU int a, b ; char c; double d: struct STRU p1,p2; ; 请填空, 以完成对 t 数组的定义,t 数组的每个元素为该结构体类型 t[20]; 49. 以下程序段打开文件后, 先利用 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. 编写一个函数, 对传送过来的三个数选出最大和最小数, 并通过形参传回调用函数