C语言期末复习题

更新时间:2023-11-23 21:44:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、选择题

1.以下叙述正确的是(D )。

A. 在C程序中main函数必须位于程序的最前面 B. C程序的每行中只能写一条语句 C. C语言本身没有输入输出语句

D. 在对C程序进行编译时,可发现注释中的拼写错误

2.判断 char型变量xyz是否为大写字母的正确的表达式为(C )。 A. (?A?<=xyz)AND (?Z?>xyz) B. xyz>=?A?|| xyz<=?Z? C. xyz>=?A?&& xyz<=?Z? D. ?A?<=xyz<=?Z? 3 .以下选项中不合法的用户标识是(C )。

A. _123 B. printf C. A$ D. Dim 4.对于C语言的函数,下列叙述中正确的是(A )。 A. 函数的定义不能嵌套,但函数调用可以嵌套 B. 函数的定义可嵌套,但函数的调用不能嵌套 C. 函数的定义和调用均不能嵌套 D. 函数的定义和调用均可嵌套

5.数组名作为实参传给函数时,数组名被处理为( C)。 A. 数组的全体元素 B. 数组第一个元素的值 C. 数组第一个元素的地址 D. 指针变量

6.C语言对于嵌套if 语句的规定是:else 总是与(D )配对。 A. 之前最近的if B. 第一个if

C. 缩进位置相同的if D. 之前最近且不带else 的if 7.在C语言中,要求运算数必须是整型的运算符是(A )。 A. % B. / C. < D. !

8.若x、y均为int型变量,则执行以下语句{x+=y;y=x-y;x-=y;}的功能是( D)。 A. 把x和y从小到大排序 B. 把x和y从大到小排序 C. 无确定结果 D. 交换x和y的值

9.说明char s1[]=“ABCDE”,s2[10];要将s1的值复制到s2中的正确语句是(A )。 A. strcpy(s2,s1) B. s2=strcpy(s1) C. strcpy(s1,s2) D. s2=s1

10、设有定义:char name[20];,则对字符数组正确的复制是(D )。 A) name=‘Wang Li’; B) name=“Wang Li”;

C) strcpy(name,’Wang Li’); D) strcpy(name,”Wang Li”);

11、若x,i,j,k都是int型变量,则计算下面表达式后,x的值为( B) i=5; j=3; k=i/j; x=k*j;

A)5 B)3 C)15 D)4.8

12、下列标识符中,全部为合法C语言标识符的是(A ) A)A P_0 s1 B)a>b a0 _A C)b-a goto int D)_123 temp 3dmax

13、已知ch是字符型变量,下面不正确的赋值语句是( A)

A)ch='a+b'; B)ch='\\0'; C)ch='7'+'9'; D)ch=5+9;

14、设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是(D) A)'x'&&'y' B)x<=y

C)x||y+z&&y-z D)!((x

16、若有以下定义:char a; int b; float c; double d; 则表达式a*b+c-d的类型为(C ) A)int B)float C)double D)char 17、以下正确的函数形式是(D) A)double fun(int x,int y) { z=x+y;return z;} B)fun(int x, y)

{ int z;return z;} C)fun( x, y)

{ int x,y; double z; z=x+y;return z;} D)double fun(int x,int y)

{ double z; z=x+y;return z;}

18、char *str; int a; 下列输入语句完全正确的是(B )。 A) scanf(“%s%d”,str,a); B) scanf(“%s%d”,str,&a);

C) scanf(“%s%d”,&str,a); D) scanf(“%s%d”,&str,&a);

19、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其原因是(B ) main( )

{ int *p,*q,a,b; p=&a;

printf(\ scanf(\}

A)*p表示的是指针变量p的地址

B)*p表示的是变量a的值,而不是变量a的地址 C)*p表示的是指针变量p的值 D)*p表示的是变量a的地址

20、凡是函数中未指定存储类别的局部变量,其隐含的存储类别是(B ) A)auto B)static C)extern D)register

21、int a[10],j,*p; 下列语句那一条是非法的?(C ) A) p=&a; B *p=j; C、 p=a; D、 p=&j;

22、若有条件表达式(exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是(B) A)(exp==0) B)(exp!=0) C)(exp==1) D)(exp!=1)

23、以下对结构体变量stu1中成员age的引用非法的是(B ) struct student { int age; int num; } stu1, *p; p=&stu1; A)stu1.age B)student.age C)p->age D)(*p).age 24、设有定义: struct student { long num; char name[20]; int age;};

struct student s,*p=&s;

则接收age输入的正确语句是(B )。 A)scanf(“%d”,&p->age); B)scanf(“%d”, p->age); C)scanf(“%d”,(*p).age); D)scanf(“%d”,*p.age);

25、若有以下说明和语句,则对pup中sex成员的正确引用方式是(D ) struct pupil { char name[20]; int sex; } pup, *p; p=&pup;

A)p.pup.sex B)p->pup.sex C)(*p).pup.sex D)(*p).sex

26、以下程序段中循环体总的执行次数是(A ) int i,j;

for(i=7;i;i--)

for(j=0;j<6;j++) {......}

A) 42 B) 21 C) 13 D) 36

27、有变量的定义:int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,则(D ) 不是对a数组元素的正确引用,其中i在0到9之间。 A) a[p-a] B) *(&a[i]) C) p[i] D) *(*(a+i))

28、若已经定义 char s[10],*p; 则下面表达式中不表示 s[1] 的地址的是(B ) A)s+1 B)s++ C)p=&s[0],p+1 D)&s[1] 29、定义了以下宏: #define W 2 #define L 4+W

若定义Value,且令Value=L*L;则变量Value的值为(D )。 A) 12 B) 14 C) 20 D) 36

30、说明 static int a[]={1,3,5,7,9};int *p=a;则执行 p+=2后,*++p的值是(C )。 A) 5 B) 6 C)7 D)8

31、以下有关宏替换的叙述不正确的是(D )。 A) 宏替换不占用运行时间 B) 宏名无类型

C) 宏替换只是字符替换 D) 宏名必须用大写字母表示

32、说明:char s[6]=“ABCDE”,*p;执行语句 p=s后,*(p+5)的值是(B )。 A) ’E’ B)’\\0’ C)不确定 D)“\\0” 33、有如下程序段: int k=0;while(k++<=2)

printf(“%d”,k);则正确的执行结果是( C )

A.234 B.012 C. 123 D无结果 34、一个C程序的执行是从(A ) A.本程序中的main函数开始,到main函数结束

B.本程序中的第一个函数开始,到本程序中的最后一个函数结束 C.本程序中的main函数开始,到本程序中的最后一个函数结束 D.本程序中的第一个函数开始,到本程序中的main函数结束

35、设int x[]={1,2,3,4,5,6},*p=x;则值为3的表达式是( B )。 A. p+=2, *++p B. p+=2,*p++ C. p+=3,*p D. p+=2,++*p 36、设有以下程序段:

int x=2,y=2,z=0,a; a=++x||++y&&z++;

printf(\执行后输出的结果是_________。 A. 2, 2, 0 B. 3, 3,1 C. 3, 2, 0 D. 3, 2, 1

37、逗号表达式a=2*6,a*3,a+5的值是_________。

A. 12 B. 17 C.36 D. 41 38、C语言程序中,整型常量的书写形式不包括_________。

A. 二进制 B. 八进制 C. 十进制 D. 十六进制

39、在C语言中,下列运算符中结合性属于自右向左的是_________。 A. && B. - C.<< D. ->

40、设int x;,则与计算︱x︱等价的表达式是_________。 A. x>0?-x:x B. x>0?x:-x C. x<0?x:-x D. x<0?-x:-x 41、执行下面的程序段后,k的值是_______。

int k=1,n=325;

do { k*=n;n/=10;}while(n);

A. 3 B. 30 C. 523 D. 325 42. 下列描述中不正确的是_______。

A. 字符型数组中可以存放字符串

B. 可以对字符型数组进行整体输入、输出 C. 可以对实型数组进行整体输入、输出

D. 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值 43. 设int a=11, b=2;执行下述程序段后,变量a和b的值分别是_______。 do

{ a/=b++; }while(a>b);

A. 1,3 B. 1,4 C. 2,3 D. 2,4

44.int a[2][3]={{1},{2,3}};,则a[1][0]的值是_________。 A.0 B. 1 C. 2 D. 3 45.设char s[10]= \,则s和t在内存中分配的字节数分别是_______。

A.6和5 B. 6和6 C. 10和5 D. 10和6 46. switch(表达式)语句中的“表达式”,允许的类型是_________。 A.float, int B.float, int, char C. int, char D. char, double 47. 在C语言中,形参的隐含存储类别是_________。 A. auto B. static C. extern D. register 48. 下列属于文件包含的命令是_________。

A. #define N 25 B. #endif C. #include \ D. #else 49. 设int i,j;

for(i=5;i;i--)

for(j=0;j<4;j++) {?} 则循环体执行次数是________。

A. 5 B.4 C. 20 D.无限次 50.下面程序的输出结果是_______。 #include void main() { int s,k;

for(s=1,k=2;k<5;k++) s+=k;

printf(\

}

A. 1 B. 9 C. 10 D. 15

二、填空

1. C程序的三种基本结构是 顺序结构 , 分支结构 , 循环结构 。

2.设a、b、c为整型变量,且a=3,b=5;执行语句c=(++a)*(b++)后,a、b、c的值各为 4 ,

6 , 9。

3. 设a=2,b=3,x=3.5,y=2.5。表达式(float)(a+b)/2+(int)x%(int)y的值为 3.5 。

4. C程序的基本组成单位是 函数 。

5. 局部变量的三中存储方式是 auto , register , static 。

6.已知a=3,b=4,c=5,则表达式!(a-b)+c-1&&b+c/2的值是 1 。

7. 若函数调用语句为f(a,b,f(a+b,a-b,b));,则函数f的参数个数是___3____。

8.表达式(a=3*6,a*4),a+5的值为 23 。

9. 设int a=2;,则执行a+=a*=15;后,变量a的值是__32_____。

10.设有定义:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;那么*(p+2)= 3 ,*p+2=

3 。

11. 设int a[3][4]={{1,2,5,3},{2,4,7,9},{3,6,5,8}};则表达式a[1][2]+a[2][3]的值是__15______。 12. 设char s[ ]={\,则执行printf(\后输出的值是6_____。 13.已知如下定义:struct student {long num;

char name[10]; int age; } stud;

则对结构体stud中的成员num的正确引用是 stud.num 。 14.有表达式x=(i=4,j=16,k=i&&j),则x= 1 。 16.语句for(i=1;i==10;i++)continue;循环的次数是__ 0 __ 。 17.若有定义: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i; for(i=0;i<4;i++) p[i]=&a[i*3];

则*(*(p+1)+2)的值为 6 ,*p[2]的值为 7 。 18.当执行下面程序段后,变量i的值是_____5_______。

int a,b,c,d,i,j,k; a=10; b=c=d=5; i=j=k=0; for( ; a>b; ++b) i++; while(a>++c) j++; do k++; while(a>d++);

三、补充程序

1、下面程序的功能是求出下列式子的值:1!+2!+3!+……+20! main() { int i;

float s=0,t=1; for(i=1;i<=20;i++) { ; ; }

printf(“Result:%f\\n\}

2、下面程序的功能是求出下列式子的前n项的值:1 +23 – 35 + 47 -59 … main()

{ int i,j,sum=1,temp,n; scanf(“%d”,&n); for(i=2;i<=n;i++) { temp=1;

for(j=1;j<= ;j++) temp=temp*i;

if( ) sum=sum+temp; else sum= ; }

printf(\}

3、把100到200之间的不能被3整除的数输出。

main() {int n;

for( ) {if(n%3==0)

printf(“%d”,n); } }

4、把输入的字符串逆序显示。 #include main()

{char str[80]; int c,i,j;

print(“enter a string:”);

for(i=0,j=strlen(str)-1;i

{c=str[i];

}

printf( ); }

5、将二维数组的行和列元素互换,存到另一个二维数组中。 main()

{int a[2][3]={{1,2,3},{4,5,6}};

int b{3}{2},i,j; printf(“array a:\\n”); for(i=0;i<=1;i++)

{for( ) {printf(“]”,a[i][j]);

; }

printf(“\\n”);

}

prinft(“array b:\\n”);

for( ) {for( ) printf(“]”,b[i][j]); printf(“\\n”); } }

6、求矩阵a的主对角线元素之和。 main()

{ int a[3][3]={2,4,6,8,10,12,14,16,18}; int sum=0,i,j;

for(i=0;i<3; ) for(j=0; ;j++)

if(i= =j) sum=sum+ ; printf(\ }

7、下列函数coy把字符数组S2中的全部字符复制到字符数组S1中, 复制时’\\0’也要复制过去,’\\0’后面的字符不用。 coy(char s1[],char s2[]) { int i;

for(i=0;s2[i]!= ;i++) s1[i]=s2[i];

; }

四、编写程序

1.输入a和b两个整数,按先小后大的顺序输出a和b。(要求:运用指针类型数据作为函

数参数)

2.编写程序,从键盘输入一个正整数,计算该数的各个位数字之和,并显示结果。例如输入3257,结果为17。

3.用冒泡法对10个数由小到大排序。要求在main函数中输入10个数,调用sort函数进行

排序,排序结果在main函数中输出。 4.编写程序,用递归的方法求解n!。 5.编写主函数和子函数。主函数进行字符串的输入输出和函数调用,子函数的功能是删除字符指针s指向的字符串中的所有字符c,其格式如下:void delchr(char *s, char c)。 6.求出200以内所有既能被7又能被11整除的整数 7.用数组接收10个整数,逆序存储,然后输出。

8. 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

9. 输入两个正整数m和n,求其最大公约数和最小公倍数。

本文来源:https://www.bwwdw.com/article/t99t.html

Top