您的当前位置:首页正文

C语言期末复习题和答案,C语言强化习题

2021-09-17 来源:好走旅游网
C语言期末复习题

1.构成C语言源程序的基本单位是____

A. 子程序 B.过程 C.文本 D.函数 D

2. 在一个C程序中,main()函数___ A.必须出现在所有函数之前 B.可以在任可地方出现

C.必须出现在所有函数之后 D.以上都不对 B

3.以下描述正确的是____

A.最简单的C源程序可以不包括任何内容。 B.编译程序对C源程序编译时不检查语法。 C.C程序中没有输入输出语句。

D.在C程序中,至少必须有一个main()函数。 D

4.C语言是一种_____化程序设计语言 结构

5.下面不正确的字符串常量是____ A.‟AB‟ B.”ab‟ab” C.”a” D.”“ A

6.下面四个选项中均是合法的整型常量的是:______ A. 340,025,-11 B.02,0x,03f

C.-0X2A,985.768,4d2 D.0X15,0X2,-760x A

7.设有定义:int a=10;则表达式a+=a*=a的值是:____ A.10 B.100 C.1000 D.200 D

8.设有如下定义:int a=1,b=2,c=3,d=4,x=2,y=2;则表达式(x=a>b)&&(y=c>d)运算后,y的值为_______ A. 1 B.2

C.3 D. 4 B

9.能正确表示逻辑关系“a大于等于10或小于等于0”的C语言表达式是____ A.a>=10 or a<=0 B.a>=0 | a<=10 C.a>=10 && a<=10 D.a>=10 || a<=0 D

10.设m是int型变量,则表达式(m=2*3,m+4),m*3的值是______ 18

11.以下程序段执行后z的值是____ int x,y,z;

x=1;y=2; z=1.0/y*x 答:0

12.以下程序段的输出结果是____ main()

{ char m; m=‟B‟+32; printf(“%c\\n”,m); }

则输出的结果是:_____ b

13. 表达式7/3*(int)3.14/(int)(1.2*(5+2.3))的数据类型为_____,表达式的值为_____ 整型 0

14.计算下列表达式的值: 设int a=3,b=4,c=5;float k=3.6; (1)a/b*c 0 (2)a*b%c 2

(3)k/a+2*b 9.20000 (4) (int)(k+6/a*b) 11 (5) sizeof(a) 2 or 4 (6)a+=a*=a+b 42 (7) c%b-a/2 0 (8) !(a*b-12) 1 (9)(a*b-2)==c+3 0 (10)c>b>a

0 , 2, 9.200000, 11, 2, 42 ,2, 1, 0, 0 15.若有以下语句组,则输出结果是____

int x=0; if(x++<0) printf(“%d”,- -x);printf(“%d”,x++); A.-1 B.1 C.-1 -1

D.-1 0

答:B

16.以下程序的输出结果是:___ main() {

int x=3,y=0,z=0;

if(x=y+z) printf(“****”);else printf(“####”); }

A.有语法错误不能通过编译 B.输出 ****

C.通过编译,但不能通过连接 D.输出#### 答案D

17.以下程序的运行结果是:____ main()

{ int x=1,y=1; switch (x) {

case 1:switch(y) {

case 0:printf(“y is 0.\\n”); break; case 1: printf(y is 1.\\n”); break;

default:printf(“y is unknown.\\n”); break; }

case 2:printf(“I do this.\\n”); } }

答案: y is 1

I do this

18.C语言中,while与do—while语句的主要区别是____ A.do—while 的循环体至少无条件执行一次。 B.do-while允许从外部跳到循环体内。 C.while循环体至少无条件执行一次。

D.while的循环控制条件比do-while的严格。 答案:A

19.以下说法正确的是____

A.C语言中不能使用do-while语句构成的循环

B.do-while语句构成的循环必须用break语句才能退出。

C.do-while语句构成的循环,当while后圆括号内的表达式的值为非零时结束循环。 D.do-while语句构成的循环,当while后圆括号内的表达式值为零时结束循环。 答案D

20.下面关于for 语句的正确描述为:( ) A.for语句只能用于循环次数已经确定的情况 B.for语句是先执行循环体语句,再判断表达式 C.在for语句中,不能用break语句跳出循环体。

D.在for语句的循环体语句中,可以包含多条语句,但必须用大括号括起来。 答案:D

21对于for(表达式1;;表达式3)可以理解为_____ p84 A.for(表达式1;0;表达式3) B.for(表达式1; 1;表达式3)

C.for(表达式1;表达式1;表达式3) D.for(表达式1;表达式3;表达式3) 答案 B

22.以下程序执行后,输出“#”号的个数是:_____ main()

{ int i,j;

for(i=1;i<5;i++) for (j=2;j<=i;j++) printf(“#”); } A.0 B.4 C.6 D.7 答案:C

23.设i,j,k均为int型变量,则执行完下面的for语句后,k的值为____ for(i=0,j=10; i<=j; i++,j--) k=i+j; A.9 B.10 C.11 D.12 答案B

24以下程序输出的结果是:_____ main() {

int i;

for(i=0;i<3;i++) switch(i) {

case 1: printf(“%d”,i); case 2: printf(“%d”,i); default:printf(“%d”,i); } }

答案:011122

25.请填入一个整数,使以下程序段输出 10个整数。 for(i=0; i<=___; printf(“%d\\n”,i+=2)); 答案:18

26编程序 打印所有的水仙花数。所谓水仙花数是指一个3位数,其各位数字的立方和等于

该数。如:153是一个水仙花数,因为153=1*1*1+5*5*5+3*3*3。 (参考教材P92) 27.打印出以下图案: * *** ***** *******

(参考教材 p95)

28.以下描述正确的是____

A.return语句是函数中不可缺少的语句 B.函数中不可以有多条return 语句

C.函数中,return 后面一定要有表达式。 D.函数返回值一定要通过return语句返回。 答案D

29.一个函数返回值的类型取决于____ A.定义函数时指定或缺省的函数类型 B.调用该函数时临时指定

C.调用该函数的主调函数的类型 D.return语句中表达式的类型 答案A

30.以下叙述正确的是____

A.一个源程序中只能有一条文件包含命令。 B.预处理命令都必须以“#”开头

C.预处理命令必须定义在程序的头部。 D.以下是正确的宏定义:#define IBM-PC 答案:B

31.以下程序的输出结果是____ #include “stdio.h” int fun(int a ,int b) {

return a+b; }

void main() {

int x=2,y=5,z=8,r; r=fun(fun(x,y),z); printf(“%d”,r); }

A.12 B.13 C.14 D.15 答案:D

32.以下程序的输出结果是____

#include int f(int n) { if(n>2)

return (f(n-1)+f(n-2)); else return 2; }

void main() {

printf(“%d\\n”,f(3)); } A.4 B.6 C.2 D.8 答案:A

33.以下程序的输出结果是:_____ void main() {

int a ,b,c;

a=10;b=25;c=f(a,b);

printf(“%d/%d=%d”,b,a,c); }

f(int m,int n)

{return (n/m);} 答案:25/10=2

1)以下符合C语言语法的实型常量是() A) 1.2E0.5 B) 3.14.159E C) .5E-3 D) E15 答案:C

2)给出以下定义: char x[]=\"abcdefg\";

char y[]={'a','b','c','d','e','f','g'}; 则正确的叙述为( ) A)数组X和数组Y等价

B)数组X的长度大于数组Y的长度 C)数组x和数组Y的长度相同 D)数组X的长度小于数组Y的长度 答案:B

3)不能把字符串:Hello!赋给数组b的语句是 () A)char b[10]={'H','e','l','l','o','!'}; B)char b[10];strcpy(b,\"Hello!\");

C)char b[10]=\"Hello!\"; D)char b[10];b=\"Hello!\"; 答案:D

4) 若有以下说明:

int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g;

则数值为4的表达式是 () A) a[g-c] B) a[4] C) a['d'-'c'] D) a['d'-c] 答案:D

5) 设有定义:int a,*pa=&a;以下scanf语句中能正确为变量a读入数据的是( )

scanf(“%d”,pa) ; scanf(“%d”,a) ; scanf(“%d”,&pa); scanf(“%d”,*pa);

6) 若有以下函数调用语句

fun(a+b,(x,y),fun(n+k,d,(a,b)));

在此函数调用语句中实参的个数是 ( ) A)3

B)4

C)5 D)6

7) 有以下程序

void fun (int a,int b,int c) {a=456;b=567;c=678;} main() {

int x=10,y=20,z=30; fun (x,y,z);

printf(\"%d,%d.%d\}

输出结果是( )

A)30,20,10 B)10,20,30 C)456,567,678

D)678,567,456

8) 定义如下变题和数组: int i;

int x[3][3]={1,2,3,4,5,6,7,8,9}; 则下面语句的输出结果是: ( )

for(i=0;i<3;i++) printf(\"%d\A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9

9) 以下程序运行后,输出结果是 ( )

int d=1; fun(int p) {

int d=5; d+=p++;

printf(\"%d\",d); }

main() {

int a=3; fun(a); d+=a++;

printf(\"%d\\n\",d); }

A)84 B)99 C)95 D)44

10)下面程序的输出是( ) A) 3 B) 4 C) 6 D) 9

fun3(int x) {static int a=3; a+=x; return(a); }

main()

{ int k=2, m=1, n; n=fun3(k); n=fun3(m);

printf(\"%d\\n\

11) 当调用函数时,实参是一个数组名,则向函数传送的是 ( ) A)

数组的长度 B)

数组每一个元素的地址 C)

数组的首地址 D)

数组每个元素中的值 12) 以下程序

void sort(int a[],int n) { int i,j,t;

for(i=0;iif(amain()

{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5);

for(i=0;i<10;i++) printf(\"%d,\printf(\"\\n\"); }

程序运行后的输出结果是 ( )。 A)

1,2,3,4,5,6,7,8,9,10, B)

1,2,3,8,7,6,5,4,9,10, C)

10,9,8,7,6,5,4,3,2,1, D)

1,2,10,9,8,7,6,5,4,3,

13) 以下程序的输出结果是 ( )

int f(int n)

{ if (n==1) return 1; else return f(n-1)+1; }

main()

{int i,j=0;

for(i=1;i<3;i++) j+=f(i); printf(\"%d\\n\ } A) 4 B) 3

C) 2 D) 1

14) 有程序段如下: void reverse(int a[],int n) { int i,t;

for(i=0;i{t=a;a=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; printf(\"%d\\n\}

程序运行后的输出结果是______。 A) 22 B) 10 C) 34 D) 30

15)有以下程序 main()

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

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

程序运行后的输出结果是______。 A) 11 B) 19 C) 13 D) 20

16)有以下程序 main( )

{ int i,a[10],s=0;

for(i=1;i<10;i++) a=i;

for(i=1;i<10;i+=2) s+=a+1; printf(“%d\\n”,s);

} 程序执行后的输出结果是( ) A)

自然数1~9的累加和 B)

自然数1~10的累加和 C)

自然数1~9中的奇数之和 D)

自然数1~10中的偶数之和 17)有以下程序 int f(int b[][4]) { int i,j,s=0; for(j=0;j<4;j++) { i=j;

if(i>2) i=3-j; s+=b[j]; }

return s; }

main( )

{int a[4][4]={{1,2,3,4},{0,2,4,5}, {3,6,9,12},{3,2,1,0}}; printf(“%d\\n”,f(a));

} 执行后的输出结果是( ) A)12 B)11 C)18 D)16

18)以下程序的输出结果是( ) # include # include main() {

char str[12]={'s','t','r','i','n','g'};

printf(\"%d\\n\} A) 6 B) 7 C) 11 D) 12

19)有以下定义 #include char a[10],*b=a;

不能给数组a输入字符串的语句是 A) gets(A)

B) gets(a[0]) C) gets(&a[0])

D) gets(B)

20)语句printf(\"a\\bre\\'hi\\'y\\\\\\bou\\n\");的输出结果是( ) A)

a\\bre\\'hi\\'y\\\\\\bou B)

a\\bre\\'hi\\'y\\bou C)

re'hi'you D)

abre'hi'y\\bou

21)下面程序的功能是输出以下形式的金字塔图案: * *** ***** ******* main( ) { int i,j;

for(i=1;i<=4;i++) {

for(j=1;j<=4-i;j++) printf(“ “);

for(j=1;j<=_______;j++) printf(“*”); printf(“\\n”); } }

在下划线处应填入的是() A)i B)2*i-1 C)2*i+1 D)i+2

22)有以下程序 main( ) {

char k; int I;

for(i=1;i<3;i++)

{

scanf(“%c”,&k); switch(k) {case „0‟:

printf(“another\\n”);

case „1‟:

printf(“number\\n”); } }}

程序运行时,从键盘输入:01<回车>,程序执行后的输出结果是( )

A) another B) another C) another D) number number number number number

another number

23)若程序中定义了以下函数 double myadd(double a,double b) { return (a+b);}

并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是( ) A)

double myadd(double a,b); B)

double myadd(double,double); C)

double myadd(double b,double a); D)

double myadd(double x,double y); 24) 下面的程序( ) main()

{ int x=3,y=0,z=0;

char a[]=\"* * * *\if(x=y+z)printf(\"%s\else

printf(\"%s\

A) 有语法错误不能通过编译

B) 输出* * * *。

C) 可以通过编译,但是不能通过连接,因而不能运行。 D) 输出# # # #。

25)有以下程序(提示:程序中fseek(fp,-2L*sizeof(int),SEEK_END) ;语句的作用是使位置指针从文件尾向前移2*sizeof(int)字节) #include main( ) { FILE *fp;

int i,a[4]={1,2,3,4},b;

fp=fopen(\"data.dat\

for(i=0;i<4;i++)

fwrite(&a,sizeof(int),1,fp);

fclose(fp);

fp=fopen(\"data.dat\;

fseek(fp,-2L*sizeof(int).SEEK_END; fread(&b,sizeof(int),1,fp);

/*从文件中读取sizeof(int)字节的数据到变量b中*/ fclose(fp);

printf(\"%d\\n\}

执行后输出结果是( ) A) 2

B) 1 C) 4 D) 3

26)请读程序: #include int a[]={2,4,6,8}; main() { int i;

for(i=0;i<4;i++) a=a++; printf(\"%d\\n\}

上面程序的输出结果是 ( ) A) 6 B) 8 C) 4

D) 2

27)有以下程序

char fun(char x , char y) { if(xmain( )

{ int a=‟9‟,b=‟8‟,c=‟7‟;

printf(“%c\\n”,fun(fun(a,b),fun(b,c))); } 程序的执行结果是( ) A)函数调用出错 B)8 C)9 D)7

28)有以下程序 struc STU

{ char name[10]; int num; };

void f1(struct STU C) {struct STU

b={“LiSiGuo”,2042}; c=b; }

void f2(struct STU *C) { struct STU

b={“SunDan”,2044}; *c=b; }

main( ) { struct

STU a={“YangSan”,2041},b={“WangYin”,2043};

f1(A) ;f2(&B) ;

printf(“%d %d\\n”,a.num,b.num); }

执行后的输出结果是 A)2041 2044 B)2041 2043 C)2042 2044

D)2042 2043

29)有以下程序 void swap1(int c[]) { int t;

t=c[0];c[0]=c[1];c[1]=t; }

void swap2(int c0,int c1) { int t;

t=c0;c0=c1;c1=t; }

main( )

{ int a[2]={3,5},b[2]={3,5}; swap1(a); swap2(b[0],b[1]);

printf(“%d %d %d %d\\n”,a[0],a[1],b[0],b[1]); } 其输出结果是( ) A)5 3 5 3 B) 5 3 3 5 C)3 5 3 5 D)3 5 5 3

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

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

main()

{char p[][10]={\"abc\f(p,5); printf(\"%d\\n\}

程序运行后的输出结果是( ) A) 6 B) 4 C) 5 D) 3 31)

以下程序功能为:输入a、b两个整数,使用指针变量按大小顺序输出这两个整数,请填空。 main( )

{ int a,b,*p1,*p2,*p;

p1=&a;p2=&b;

scanf(″%d%d″,p1,p2);

if(*p1<*p2) { ; ; }

printf(″a=%d,b=%d\\n″,a,b);

printf(″max=%d,min=%d\\n″,*p1,*p2); }

32)若有以下定义:double w[15]; 则数组元素下标的下限是____________ 33)以下程序段给数组所有元素输入数据,空白处应的填入的是 main() {

int a[10],i=0;

while(i<10) scanf(“%d”,____________);

/*循环输入十个整数到数组a*/ }

34)以下程序的输出结果是____________ main()

{ int arr[0],i,k=0;

for(i=0;i<10;i++) arr=i; for(i=0;i<4;i++) k+=arr+i; printf(“%d \\n”,k); }

35)以下程序的输出结果是____________。 main()

{ char s[]=\"abcdef\"; s[3]=„\\0';

printf(\"%s\\n\ }

36)以下程序运行后的输出结果是____________。 double sub(double x,double y,double z) {

y-=1.0; z=z+x; return z; }

main()

{

double a=2.5,b=9.0;

printf(“%f \\n”,sub(b-a,a,a); }

37)以下程序运行后的输出结果是____________。 void fun(int x,int y) {

x=x+y;y=x-y;x=x-y; printf(\"%d,%d,\}

main() {

int x=2,y=3; fun(x,y);

printf(\"%d,%d\\n\}

38) 下面rotate函数的功能是:将n行n列的矩阵A转置为A‟,例如: 1 2 3 4

1 5 9 13 5 6 7 8

2 6 10 14

当 A=9 10 11 12,则 A‟=

3 7 11 15

13 14 15 16

4 8 12 16 请填空 #define N 4 void

rotate(int a[][N])

{

int i,j,t;

for(i=0;ifor(j=0; ;j++) {

t=a[j]; ;

a[j]=t; } }

39)fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。 #include #define N 100

int fun(int a[N][N]) { int row,col,max,min;

for(row=0;row{ for(max=a[row][0],col=1;colif(____________) max=a[row][col];

if(row==0) min=max;

else if(____________) min=max; }

return min; }

40)函数fun的功能是计算xn double fun(double x,int n) { int i; double y=1;

for(i=1;i<=n;i++) y=y*x;

return y;

} 主函数中已经正确定义m,a,b变量并赋值,并调用fun函数计算:m=a4+b4-(a+b)3。实现这一计算的函数调用语句为____________。

41)mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。 int mystrlen(char *str) { int i;

for(i=0; ____________!= '\\0';i++); return(____________);

42)函数fun的功能是:将n个人员的考试成绩进行分段统计,考试成绩放在a数组中,各分数段的人数存到b数组中:成绩为60到69的人数存到b[0]中,成绩为70到79的人数存到b[1],成绩为80到89的人数存到b[2], 成绩为90到99的人数存到b[3],成绩为100的人数存到b[4], 成绩为60分以下的人数存到b[5]中。 例如,当a数组中的数据是:

93、85、77、68、59、43、94、75、98。 调用该函数后,b数组中存放的数据应是: 1、2、1、3、0、2。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include stdio.h #include conio.h

void fun(int a[], int b[], int n) { }

main() {

int i, a[100]={ 93, 85, 77, 68, 59, 43, 94, 75, 98}, b[6]; clrscr(); fun(a, b, 9);

printf(\"the result is: \");

for (i=0; i<6;i++) printf(\"%d \ printf(\"\\n\"); }

43)完成下列程序,用指针法输出数组元素。 main( )

{ int a[10], i, *p;

for (i=0; i<10; i++)

scanf(\"%d\

for (i=0; i<10; i++)

printf(\"%4d \[1] );

printf(\"\\n\");

for (p=a,i=0; i<10; i++)

printf(\"%4d \[2] );

printf(\"\\n\"); }

#include void main( ) {

int i,j ;

for(i=1 ;i<=5 ;i++) {

for(j=1 ;j<=5-i ;j++) printf(\" \");

for(j=1 ;j<=2*i-1 ;j++)

printf(\"*\");

printf(\"\\n\"); } }

运行程序的输出结果是:

从键盘上输入n个整数,用简单选择排序方法将它们从大到小排序。 #include #define N 100 void main( ) {

int a[N],n,i,j,k,temp;

printf(\"Enter the number of integers:\");

scanf(\"%d\

printf(\"Input %d numbers:\\n\

for(i=0;ifor(i=0;ifor(j=i+1;jtemp=a; a=a[k]; a[k]=temp;} }

printf(\"The sorted numbers:\\n\"); for( (5) )

printf(\"%d \

printf(\"\\n\"); }

编程利用公式 求组合 的值,要求在主函数中输入数据 m,n和输出结果,其余功能用函数实现。

编写程序,应用递归算法,将一个int型整数转换为数字字符串。例如123转换为“123”

因篇幅问题不能全部显示,请点此查看更多更全内容