C语言复习参考题(含答案) - 胡春安 下载本文

《C语言程序设计》复习题

一. 选择题

1.以下关于运算符优先顺序的描述中正确的是( )。

A.关系运算符< 算术运算符< 赋值运算符< 逻辑与运算符 B.逻辑 运算符< 关系运算符< 算术运算符< 赋值运算符 C.赋值运算符< 逻辑与运算符< 关系运算符< 算术运算符 D.算术运算符< 关系运算符< 赋值运算符< 逻辑与运算符 2.下列选项中合法的变量名是_________

A. #define B. int C. a594_3 D. abs(x) 3.以下正确的描述是( )。

A. break语句的作用是结束整个循环的执行 B.在C程序中,注释说明只能位于一条语句的后面

C. 在循环体内使用break语句或continue语句的作用相同

D. 从多层循环嵌套中退出时, 只能使用goto语句

4.以下说法正确的是( )

A.#define 和 printf 都是 C 语句。 B.#define 是C语句,而printf不是。

C.若程序中要调用数学函数,必须在文件开头输入 #include “math.h”。 D. #define是宏命令,printf 是 C 语句。 5.下面的函数定义正确的是______________

A) float fun (float x ; float y) {return x*y;} B) float fun (float x,y) {return x*y;}

C) float fun (x,y) {int x,y;return x*y;} D) int fun (int x, int y) {return x*y;} 6.执行下面语句后的输出为( ) int i=-1;

if (i<=0) printf(“****\\n”) else printf(“%%%%\\n”)

A). **** B). %%%%

C). %%%%c D). 有语法错误,不能正确执行 7.以下程序的输出结果是( ) void main( ) {int k=17;

printf(\ }

A). 17, 21, 11 B). 17, 17, 17 C). 17, 0x11, 021 D). 17, 21, 1 8.以下不正确的叙述是 ( )

A)#define是宏定义命令

B)宏定义只是做简单的置换,不做正确性检查 C)宏定义是C语句,必须在行末加分号

D)#define 和 printf 都不是 C 语句

9.一个C语言程序是由( )

A) 一个主程序和若干子程序组成 B)若干子程序组成 C) 若干过程组成 D) 函数组成 10.C语言规定,在一个源程序中,main()函数的位置( )。 A.必须在最开始 B.必须在最后

C.可以任意 D.必须在系统调用的库函数的后面

11.以下对二维数组a的正确说明是( )。

A) int a[3][]; B) floatf a(3,4); C) char a[1][3]; D) float a(3)(5);

12.若有说明: int a[3][2]={10};则下面正确的叙述是( )

A)只有元素a[0][0]可得到初值10 。 B)此说明语句不正确:。

C)数组a中各元素都可得到初值,但其值不一定为0。 D)数组a中每个元素均可得到初值10 13.以下叙述不正确的是( )。

A) 一个C源程序可由一个或多个函数组成 B) 一个C源程序必须包含一个main函数 C) C程序的基本组成单位是语句

D) 只能在循环体内和switch语句体内使用break语句 14.为了避免在嵌套的条件语句If一else中产生二义性,C语言规定else子句总是与( 配对。

A) 缩排位置相同的if B) 其之前最近的未配对的if C) 之后最近的if D) 同一行上的if

15.能正确表示a和b同时为正或同时为负的逻辑表达式是( ) A)(a>=0||b>=0)&&(a<0||b<0)

B)(a>0&&b>0)||(a<0&&b<0) C)(a+b>0)&&(a+b<=0) D) (a-b>0)&&(a-b<=0)

16.已知x =5,ch='A',y=0,则表达式(x > = y && ch<'a'&&!y) 的值是 ( ) A) 0 B) 语法错 C) 1 D) \假\

17.下列关于单目运算符++、--的叙述中正确的是( )

A) 它们的运算对象可以是任何变量和常量

B) 它们的运算对象可以是char型变量和int型变量,但不能是float型变量 C) 它们的运算对象可以是int型变量,但不能是double型变量和float型变量 D) 它们的运算对象可以是char型变量、int型变量和float型变量 18.下面的程序( ) void main()

{ int x=3; do {

printf(“%d\\n”,x-=2); } while(!(--x)); }

A). 输出的是1 B). 输出的是1和-2

C). 输出的是3和0 D). 是死循环 19.如下程序:

void main( )

{ int a=6; printf(“%d\\n”,(a+=3,2*a)); } 执行后,输出结果是( )

A) 9 B) 6 C) 2 D) 18 20.若有以下说明和语句,请选出哪个是对C数组元素的正确引用( ) int c[4][5], (*cp)[5]; cp=c;

A). cp+1 B). *(cp+3) C). *(cp+1)+3 D). *(*cp+2) 21.下面程序的输出是( ) main()

{ int x=023;

printf(\

A). 17 B). 18 C). 23 D). 24 22*.执行下列程序的结果是( ) main()

{ float x=1,y; y=++x*++x; printf(“%f\\n”,y); } A). 9.000000 B). 6.000000 C). 1.000000 D). 程序有错误 23.下面程序的输出是( ) int main()

{ int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=&a[3];

printf(\

A). 6 B). 4 C). 1 D). 2 24.执行下面程序后输出的值是( ) main() { int a;

printf(\

A). 65 B). 20 C). 15 D). 10 25.下面程序的输出是( ) main()

{ int a=-1, b=4, k;

k=(a++<=0)&&(!(b--<=0));

printf(\ }

A). 0 0 3 B). 0 1 2 C). 1 0 3 D). 1 1 2 26.设有如下的程序段:

char str[]=\ 执行完上面的程序段后,*(ptr+5)的值为( )

A). '0' B). '\\0' C). 不确定的值 D). '0'的地址 27.在宏定义# define PI 3.14159中,用宏名PI代替一个( ) A).单精度数 B).双精度数 C).常量 D).字符串

28.若i是整型变量,pb是基本型为整型的指针变量,则正确的赋值表达式是( ) A). pb=&i B). pb=i C). *pb=&i D). *pb=*i

29.有以下程序段

int m=0,n=0; char c=’d’; scanf(\ printf(\

若从键盘上输入:6D6<回车>,则输出结果是( )

A) 0,d,6 B) 6,d,6 C) 6,D,6 D) 6,D,0

30.printf()函数中用到格式符%-7s ,其中数字7表示输出的字符串占用7列。如果字符串长度小于7,则输出按方式 ( )

A) 从左起输出该字串,右补空格 B) 按原字符长从左向右全部输出 C) 右对齐输出该字串,左补空格 D) 输出错误信息

31.以下能正确地定义整型变量a,b和c 并为其赋初值3的语句是( )

A) int a=3,b=3, c= 3; B) int a,b, c= 3; C) a= 3,b=3,c=3; D) a= b= c=3; 32.以下程序的输出结果是( ) void main( ) {int x=6,y=6,i; for(i=2;x>4;y=++i)

printf(\ }

A) 5,5 5,3 B) 6,6 2,3 C) 6,5 5,2 D) 6,6 5,3 33.以下程序的输出结果是( ) void main( ) {int w=4;

int fun(int k); fun(w);

printf(\ }

fun(int k)

{if(k>0) fun(k-1); printf(\

A) 4 3 2 1 B) 0 1 2 3 4 C) 1 2 3 4 D) 4 3 2 1 0 34.下面程序的输出是( ) main()

{ int x=023;

printf(\

A). 17 B). 18 C). 23 D). 24

35*.以下程序的输出结果是( ) main()

{ char ch[3][4]={ \ i; for(i=0;i<3;i++) p[i]=ch[i];

for(i=0;i<3;i++) printf(\ }

A). 123456780 B). 123 456 780 C). 12345678 D). 147 36.写出下列程序的运行结果 #include

int main()

{ int i=6,y=4,z=2;

printf(“%d\\n”,i/y%z); return 0; } A) 3 B)2

C) 0.5 D) 1

37.定义如下变量:float i=9.0 ;int j=3 ;则i%j的值是( )

A.0 B. 3.0 C. 3 D. 语法有错 38.有以下程序 void main( )

{ int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&p[i]%2) {k=k+p[i]; i++;} printf(\}

执行后输出结果是( ) A) 58 B) 56 C) 45

D) 24

39.以下程序的输出结果是( ) void main( )

{ int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p; p=&x[1][1];

for(i=0;i<6;i+=3) printf(\ }

A) 5 2 B) 5 1 C) 5 3 D) 9 7 40.以下程序的输出结果是( ) #include

int main()

{ int x=3,y=2,z=1; if (x>y) x=y; if(x>z) x=z;

printf(\ return 0; }

A) 1 2 1 B) 3 2 1 C) 1 2 3 D)1 1 1

41. int main( )

{int i,a[]={5,6,9,11}; for (i=0;i<4;i++)

{ if (a[i]%2==0) continue; printf(\

} }

执行后输出结果是( ) A) 编译出错 B 6

C) 5 9 11 D) 5 6 9 11

42.以下对数组的定义正确的是( )

A) int x(10); B) int x[5]={0,1,2,3,4,5}; C) int n=10; x[n]; D) int x[ ]= {0,1,2,3,4}; 43. 以下叙述中不正确的是( )

A)switch是多分支结构语句

B) continue语句的作用是使程序的执行流程跳出包含它的所有循环 C) break 语句只能用在循环体内和switch语句体内

D) 在循环体内使用break语句和continue语句的作用不相同 44.如下程序:

void main( )

{ int i=1,j=2,k=3;

if((j++|| k++)&&i++) printf(\}

执行后输出结果是( )

A) 1,2,3 B) 2,2,4 C) 2,3,4 45.以下叙述中,不正确的是( ) ????

A) 算法应该具有有穷性、确定性以及有效性等特点

B) 算法可以用传统流程图、N-S流程图以及伪代码等形式来描述

D) 2,3,3

C) 基本结构只有顺序、选择、循环3种结构

D) 结构化程序设计的思想是自顶向下、逐步细化、模块化设计以及结构化编码 46.在C语言中,函数返回值的类型最终取决于( )

A) 函数定义时形参的类型 B)return语句中表达式值的类型

C) 调用函数时主函数所传递的实参类型 D)函数定义时在函数首部所说明的函数类型 47.以下程序的输出结果是( ) void main() {int i;

for(i='a';i<'i';i++,i++) printf(\ printf(\ }

A) 编译不通过,无输出 B) aceg C) ACEG D) ABCDEFGI

48.下面的程序输出是( )

#include int main() { int k=3; while (k--);

printf(\ return 0; }

A)0 B)1 C) 3 D) -1 49.下面的程序输出是( ) int m=13;

int fun2(int x,int y) {int m=3;

return(x*y-m); }

main()

{int a=7,b=5;printf(\ A). 1 B). 2 C). 7 D). 10 50.下面的程序输出是( ) main()

{ int x=100,a=10,b=20,ok1=5,ok2=0;

if(a

if(ok2) x=10;

printf(\

A). -1 B). 10 C). 1 D). 100 51.若有以下定义:

int a[ ]={1,2,3,4,5,6,7,8,9,10}, *p=a; 则值为3的表达式是( )

A). p+=2,*(p++) B). p+=2,*++p

C). p+=3,*p++ D). p+=2, ++*p 52.下面程序的输出是( )

int aa[3][3]={ {2},{4},{6} }; void main()

{int i, *p=&aa[0][0]; for(i=0;i<2;i++)

{ if(i==0)

aa[i][i+1]= *p+1; else ++p;

printf(\

}

A). 23 B). 26 C). 33 D). 36 53.下面程序的输出是( ) void prtv(int *x)

{ printf(\void main()

{ int a=25; prtv(&a); }

A. 23 B. 24 C. 25 D. 26

54.以下程序的运行结果是( ) void main( )

{char a[10]={'1','2','3','4','5','6','7','8','9','\\0'}; char *p; int i=8; p=a+i;

printf(\ }

A) 6 B) 789 C) '6' D) 678 55.执行以下3条语句之后,则k的值是_______ int x=4,y=7 ; x++ ;y+=2 ;k=y%x;

A) 1 B) 2 C)4 D)3 56.以下程序段

for ( k = 0, m = 4; m ; m - = 2 )

for( n = 1; n< 4 ; n++) k++;

循环体语句” k ++;” 执行的次数是______________ A)16 B)12 C) 6 D) 8 57.在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列顺序为( )

A) char=int<1ong int<=float

C) char

58.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='d'十'1'一'3';后,c2中的值为( )

A)b B) 68 C) 不确定的值 D) f 59.表达式18/4*sqrt(4.0)/8值的数据类型为: ( )

A) int B)float C)double D)不确定

60.能正确表示\当x 的取值在[1,10]和[50,60]范围内为真,否则为假\的表达式是( )。 A) (x>=1) && (x<=10) &&(x> =50) && (x<=60) B) (x>=1) || (x<=10) || (x>=50) || (x<=50)

C) (x>=1) && (x<=10) || (x>= 50) && (x<=60) D) (x > =1)|| (x< =10) && (x> =50) || (x<=60) *61.以下程序的输出结果是( ) # include main()

{ char *p1,*p2,str[50]=\ p1=\

strcpy(str+1,p2+1); strcpy(str+3,p1+3); printf(\ }

A). AfghdEFG B). Abfhd C). Afghd D). Afgd 62.以下程序的输出结果是( ) main() {int i;

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

{ if(i%2) {printf(\ printf(\ }

printf(\ }

A). #*#*# B). ##### C). ***** D). *#*#* 63.能表示10≤a≤15 的关系表达式是( ) A.a>=10 or a<=15 B.a>=10||a<=15 C.a>=10&&a<=15 D.a>=10 & a<=15 64. 以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是

A. if((a>b) &&(b>c) ) k=1; B. if((a>b) ||(b>c) ) k=1

else k=0;

C. if(a<=b) k=0;

D. if(a>B) k=1;

else if(b<=c) k=1; else if(b>C) k=1; else k=0;

65.设int x[]={2,4,6,8},y,*p=&x[1];则执行语句 y=(*--p)++;后数组元素x[0]的值为( ).

A. 2 B. 3 C. 4 D. 5 66.在下面关于函数的描述中错误的是( )

A.在一个源文件中,如果函数定义在先,调用在后,则不必声明该函数

B.如果一个函数在一个源文件里定义,而调用在另一个源文件中,则必须在调用之前声明该函数

C.函数的声明应使用函数原型

D.在一个源文件中,如果自定义函数调用在先,定义在后,则不必声明该函数 67. 若有int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*q)[3]=a;*q=a[0];则能够

正确表示数组元素a[1][2]的表达式是( )。

A. *((*q+1)[2] B. *(*(q+5)) C. *(*(q+1)+2) D. (*q+1)+2

68.设int x[]={1,3,5,7,9,11,13},*p=x;则不能正确引用数组元素的表达式是( )

A.*(p--) B. *(--p) C.*(p++) D.*(++p)

69. 下列程序的运行结果是( )

#include int main() { int y=10; while (y>0){ if(y%3==0) printf(\ y--; } return 0; }

A)852 B)963 C) 741 D)789

70. 在下面的定义中,正确的是( )。

A. int y=x; B. int x=3,y=3 ; C. int x;y; D. Int x=y=3; 71.执行下面程序段后,a的值为( )。

int a,b;

for(b=1,a=1;b<=20;b++) {

if(a>=10) break; if (a%2==1) { a+=5; continue;} a-=3; }

A. 2

B. 6

C. 10 D. 8

72. 执行下列程序段后,变量i的值为( )。 #define MA(x,y) ((x)*(y))

int i=5;

i=MA(i,i+1)-7; A. 30 B. 23 C. 19 73. 下列程序的运行结果是( )

#include int main() { int x=3; do {

printf(\ }while(!(--x)); return 0;

D. 1

}

A. 死循环 B. 1 -2 C. 10 74. 若程序中定义了以下函数

double myadd(double a,double b) { return (a+b) ;}

D. 1

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

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);

75.若有以下的说明和语句,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是( ) int t[3][3],*pt[3],k; for(k=0;k<3;k++) pt[k]=&t[k][0]; A. t[2][0] B. t[2][2] C. t[1][2] D. t[2][1] 76.在C语言中,080是( )

A.八进制数 B.十进制数 C.十六进制数 D.非法数 77. 整型变量i定义后赋初值的结果是( )。

int i=2.8*6 ;

A.12 B.16 C.17 D.18 78.for(i=0,x=0; !x&&i<=3;i++)循环的次数为( )

A.4 B.5 C.1 D. 无限循环

79.若有如下程序段:

{ int a=2,b=-1,c=2; if (a

执行后输出结果是( )

A.2 B.1 C. 3 D. 0

80.下列符号能用作C++标识符是的( )。

A. xyz/2 B. 2xsale C. x-sale D. x_sale

81.以下非法的赋值语句是( )。

A. n=(i=2,i++); B. ++(i+1); C.x=j>0; D. i++ ; 82.以下不能对二维数组a 进行正确初始化的语句是( )

A.int a[2][3]={0};

B.int a[ ][3]={{1,2},{0}};

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

83.以下合法的if语句是( )。

A. if(a=b) c++; C. if(a=>b) c++; D. if(a==b) c++;

84.字符串常量“I love china”在内存中存在需要( )字节。注:每个单词之间有一个空格。

A.10 B.12 C. 13 D. 14 85. 以下for循环的执行次数是( )

for (x=0,y=0; (y=1)&&(x=2); x++)

A.执行1次 B.执行2次 C.执行3次 D. 无限次 86. 用逻辑表达式表示“A,B两人至少有一人得奖的逻辑表达式”是( )

A.A=1||B=1 B.A=1&&B=0 C.A=0&&B=1 D.A=1&&B=1

87. 执行下列程序段后,变量K的值为( ) for(k=0,m=1;m<4;m++)

{

for(n=1;n<5;n++)

if (m*n%3==0) continue; k++; }

A.1 B. 3 C.6 D.12

88. 设int a=4,b=8;则++a*++b的结果是( ) A.32 B.40 C.45 D.36 89. 有如下程序

main()

{ int x=23; do

printf(“%d”,x--); while (!x);

}

则程序的结果是( )

A. 321 B. 22 C. 死循环 D. 23

90. 若变量a、i 已正确定义,且i已正确赋值,下列语句合法的是( )。

A. a==1; B. ++i; C. a=a+==5; D. a==int(i); 91.以下符合C语言语法的赋值表达式是( ) A.d=9+e+f=d+9 B.d=9+e, f=d+9

C.d=(9+e,e++, d+9) D.d=9+e++=d+7

92.已知字母A的ASCii码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3';后,c2中的值为( )

A.D B.68 C.不确定的值 D.C

93.在C语言中,要求运算数必须是整型的运算符是( ) A./ B.++ C.!= D.%

94.若以下变量均是整型,且num=sum=7;则计算表达式sum=num++,sum++,++num后sum值为( )

A.7 B.8 C.9 D.10

95.若有说明语句:char c='\\72';则变量c( )

A.包含1个字符 B.包含2个字符 C.包含3个字符 D.说明不合法,c的值不确定

96.若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是( ) A.2.500000 B.2.750000 C.3.500000 D.0.000000

97.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为( ) A.int B.float C.double D.不确定

98. 若有以下定义,则能使值为3的表达式是( ) int k=7,x=12;

A.x%=(k%=5) B.x%=(k-k%5) C.x%=k-k%5 D.(x%=k)-(k%=5) 99. putchar函数可以向终端输出一个( )

A.整型变量表达式值 B.实型变量值 C.字符串 D.字符或字符变量值

100. 有输入语句:scanf(“a=%d,b=%d,c=%d\为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应是( )

A.132 B.1,3,2 C.a=1□b=3□c=2 D.a=1,b=2,c=3 101.下面程序的功能是在输入的一批正整数中求出最大者,输入0时结束,请选择填空 main( )

{int a,max=0; scanf(“%d”,&a); while(____)

{if(max

A.a==0 B.a C !a==1 D.!a 102.下面程序的运行结果是( ) main( ) {int num=0; while(num<=2)

{num++; printf(“%d\\n”,num);}

A.1 B.12 C.123 D.1234CR>表示回车 103.若运行以下程序时,从键盘输入2473,则下面程序的运行结果是() #include main( ) {int c;

while((c=getchar( ))!=’\\n’) switch(c-‘2’) {case 0:

case 1:putchar(c+4);

case 2:putchar(c+4);break; case 3:putchar(c+3);

case 4:putchar(c+2);break;} printf(“\\n”);}

A.66877 B.668966 C.66778777 D.6688766

104.对for(表达式1;; 表达式3)可理解为( ) A.for(表达式1;0; 表达式3) B.for(表达式1;1;表达式3)

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

105.下面程序的运行结果是( ) main() {int x,i;

for(i=1; i<100;i++) {x=i;

if(++x%2==0) if(++x%3==0) if(++x%7==0)

ptintf(“%d ”,x);}}

A.39 81 B.42 84 C.26 68 D.28 70 106.下面程序的运行结果是( ) main()

{int i,b,k=0; for(i=1;i<=5;i++) {b=i%2;

while(b-->=0) k++;} printf(“%d,%d”,k,b);} A.3,-1 B.8-1 C.3,0 D.8,-2

107.以下程序的正确运行结果是( ) main()

{int a=2,i;

for(i=0;i<3;i++) printf(“M”,f(a));} f(int a)

{int b=0; static int c=3; b++; c++; return(a+b+c);}

A.7 7 7 B.7 10 13 C. 7 9 11 D.7 8 9 二. 填空题

1.C语言源程序的扩展名为.c,可执行文件的扩展名为_______________。.exe

2.数组 int a[3][5];共定义了______个数组元素。15

3.C程序由函数构成,C程序总是从_______开始执行. main()

4. C语言中,用__________ 关键字来包含如stdio.h之类的头文件。 include 5.函数的返回值是通过函数中的________________语句来获得的。return 6.至少执行一次循环体的循环语句是 。do—while 语句

7.对于不带返回值的函数,应当用关键字______________定义函数。void 8.多分支结构的程序,通常选用_________语句来实现。 switch

9.若char ch[]=\有以下语句,则编译后分配给数组ch的内存占用的字节数为________。6

10.下面运算符 < , ++ = 按照优先级从高到低排列顺序为__ _。++ < = , 11.若char str[8]={“tony”};int k=strlen(str);则k的值为____________。4 12.______________是声明结构体类型的关键字。struct

13.int a[3][4]={{7,5},{5,8},{0,6,9,3}};则编译后a[1][2]= __________。0 14.静态局部变量应该用关键字____________来进行声明。static

15.用数组名作为函数调用的实参,则传递给形参的是____ _。数组的首地址 16.若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是________。3 17.C语言提供三种逻辑运算符,按优先级高低它们分别是 。! > && > || 18.getchar( ) 函数的功能是 。从标准输入设备读取下一个字符 19.写出下面表达式的值

6*4/7+8%3 _______ 5 x=5 ; y=2; (x++)+y _________ 7 8-4>=5+3 ________ 0 6>4-2 ? 4%2: 3 ____ _ __ 0 x=2,y=2; x||!y ______ 1 x=3 ; x+=x-=2 ______ _ 2 20.下面invert函数的功能是将一个字符串str的内容颠倒过来,请填空。 # include void invert(char str[ ] )

{ int i, j, ; k

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

{ k=str[ i ]; str[ i ]=str[ j ]; } str[j]=k; }

21.下列程序是用递归的方法计算fun(5)*10的值。其中fun(k)=fun(k-1)*k,当k=0时,fun(0)=3。请填空完成程序。 #include

int main()

{ int fun(int); printf(”%d”,fun(5)*10) ; return 0; }

int fun( ) int k {

if(k==0)

return 3;

else

return fun(k-1)*k; }

22. 表达式45/2+(int)3.14159/2的值是 ;23

23. 若有int a=10,b=9,c;则在计算表达式c=(a)+(b=3),c+=2后,变量c的值为__15____.

24.若有int x=1,y=1,z=1,t;则在表达式t=++x||++y&&++z后,t的值为____1____。 25. 将-10<x≤8用C语言写成相应的逻辑表达式 【1】 。(x>-10 && x<=8) 26. C语言中用 【2】 表示逻辑真值, 【3】 表示逻辑假值。

27.设int a=10,b=4,执行语句a%=(b%=3);后,a的值是 【4】0 ,b的值是 【5】 1 。 28.表达式7>=3+4||6<4&&2<5的结果为 【5】1 或真 29.’\\n’表示 【6】 字符。换行

30. 设a的初值为3,则表达式 (int)(a+6.5)%2+(a=b=5) 的值是 6 。 31. int a[10],则数组下标的上限是 。9 32.C语言规定,可执行程序的开始执行点是__main()___

33.在C语言中,一个函数一般由两个部分组成,它们是__函数头____和___函数体_。 34.若a是int 型变量,则(a=4*5,a*2,a+6)表达式的值为(26 )

35.若a是int型变量,且a的初值为6,则计算表达式后a的值为( )。 a+=a-=a*a 36.设a=2,b=4,c=5,则c>b>a的值是___________。 0 37. 设

x=2.5,a=7,y=4.7,写出算术表达式的值:x+a%3*(int)(x+y)%2/4

的值

________2.5000000_____。

38. 设a=2,b=3,x=3.5,y=2.5,写出算术表达式的值:(float)(a+b)/2+(int)x%(int)y的值_________3.500000____。 三. 程序阅读题

1.以下程序的运行结果是 ________________ 1 #include void main() {int m=3;

if(--m<3) printf(\ else printf(\ }

2.执行下面程序段后, 输出结果是 i=6 j=3 m=7 #include int i=2;

int fun(int x) { int k,j=1; i=x*2; k=i+j; return k; }

void main( )

{ int m,j=3; m=fun(j);

printf(“i=%d j=%d m=%d\\n”,i,j,m);

}

3.下面程序的输出是__ 12

void main( )

{int arr[10],i,k=0; for(i=0;i<10;i++) arr[i]=i;

for(i=1;i<4;i++) k+=arr[i]+i; printf(\ }

4.下面程序的输出结果是________________234567 #include #include #define MAX_COUNT 6 void fun() ; void main( ) {int count;

for(count=1;count<=MAX_COUNT;count++) fun(); }

void fun() {static int i; i+=2;

printf(\ }

5.下面程序的输出是_6 void main()

{int a[ ]={2,4,6}, *ptr=&a[0]; int x=8, y, z; for(y=0;y<3;y++)

z=(*(ptr+y)

6.P95-3

7.下面程序的输出结果是_ 2 4

int t(int x,int y,int cp,int dp) { cp=x*x+y*y; dp=x*x-y*y; } void main( )

{int a=4,b=3,c=2,d=4; t(a,b,c,d);

printf(\}

8.下面程序的正确运行结果是________str[ ]=abdef void main()

{ static char str[ ]=”abcdef”; void abc(char str[ ] ); abc(str);

printf(“str[ ]=%s\\n”, str); }

void abc(char str[ ] ) { int a,b;

for(a=b=0;str[a]!=’\\0’;a++) if(str[a]!=’c’) str[b++]=str[a]; str[b]=’\\0’;

}

9.下面程序的输出结果是 10 int fun(int *x,int n) {if(n==0) return x[0];

else return x[0]+fun(x+1,n-1); }

void main( )

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

}

10.执行下面程序段后, 输出结果是 i=6,x=10 void main( ) {int i,x;

for(i=1,x=1;i<=20;i++) {if (x>=10) break; if(x%2==1)

{x+=5;continue;} x-=3; }

printf(“i= %d, x=%d\\n”, i, x); }

11.下面程序的执行结果是 2 3 5 7 8 9

#include void main()

{ int a[6]={2,5,7,3,9,8}; int i,j,t; printf(\ for (j=0;j<5;j++)

for (i=0;i<5-j;i++) if (a[i]>a[i+1])

{ t=a[i]; a[i]=a[i+1]; a[i+1]=t;

}

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

printf(\ \}

12.下列程序执行后,输出的结果是 4 # include fun(int a)

{ int b=0; static int c=3; a=c++,b++; return(a); }

void main() {int a=2, i, k;

for(i=0;i<2;i++) k=fun(a++); printf “%d\\n”, k); }

13.下面程序若从键盘输入:Ref6ugcBDT8e,按回车键, 最后的执行结果是 n=2 m=4 #include void main ( ) { int m=0,n=0; char c;

while ( (c=getchar( ) )!='\\n' ) { if (c>='A' && c<='Z' ) m++ ; if (c>='0' && c<='9') n++;

}

printf(\ m=%d\\n\

}

*14.下面程序的执行结果是__ 74 #include struct student { int num; char name[10]; int score; }; struct

student

stu[3]={{10101,\

Lin\

Fun\

Min\

void main( ) { struct student *p; int k=0; for (p=stu;pscore; k/=3; printf(\

}

15. 写出下列程序的结果: 6

#define N 2 #define M N+1

#define NUM (M+1)*M/2 void main()

{ printf(\} 16. 写出下列程序的结果: 13,3 #include int d=1;

void fun(int p) { int d=5; d+=p++;

printf(\}

void main() { int a=3; fun(a); d+=a++;

printf(\}

17.执行以下程序后,y 的值是( #include int main ( ) {

int a[ ]={2,4,6,8,10}; int y=1,x,*p; p=&a[1];

for(x=0;x<3;x++) y + = * (p + x); printf(\,y); }

18.有以下程序

) void f(int x,int y,int *p,int *q)

{ int r; *q=x*y;

while(r=x%y) { x=y; y=r; } *p=y; *q/=y; }

int main() {

int x,y,*p,*q,t; scanf(\ x=(x>y) ? x:y; p=&x; q=&y;

f(x,y,p,q);

printf(\ getch(); return 0; }

输入36 4,则运行结果是( 4,36 )

19.以下程序的输出结果是( 5 ) #include int fun(int x) { int p;

if(x==0||x==1) return(3); p=x-fun(x-2); return p; }

void main() {

printf(\} 20.

四. 编程题

1.设计函数,求一个字符串的长度。在主函数中输入字符串,并输出其长度。 #include #include int main() {

char a[10]; gets(a); printf(\ return 0; }

2.输入3个数,将其按由大到小的顺序输出,请编程实现。 #include int main() {

int a[3],i,j,t; for(i=0;i<3;i++) scanf(\ for(i=0;i<2;i++) for(j=0;j<2-i;j++) if(a[j]

{t=a[j];a[j]=a[j+1];a[j+1]=t;} for(i=0;i<3;i++) printf(\ return 0; }

3.从键盘上任意输入一串字符,统计该字符串中数字字符的个数。 #include #include int main() {

int i,m=0; char a[10]; gets(a);

for(i=0;i<=strlen(a);i++) if('0'<=a[i]&&a[i]<='9') m++;

printf(\ return 0; }

4.求整型数组b[5][5]主对角线的元素之和。 #include int main() {

int i,j,a[5][5],t=1; for(i=0;i<5;i++) for(j=0;j<5;j++)

scanf(\

for(i=0;i<5;i++) for(j=0;j<5;j++) if(i==j) t=t+a[i][j]; printf(\ return 0; }

5.利用求阶乘函数编程求s=1!+2!+3!+?+10! #include int f(int n) {

int k; if(n<0)

printf(\

if(n==0||n==1) return 1; k=n*f(n-1); return k; }

int main() {

int i,s=0;

for(i=1;i<11;i++) s=s+f(i);

printf(\ return 0; }

6.编程求能被3整除余1,被4整除余3的大于100的三位数并统计其个数。 #include int main() {

int i,n;

for(i=101;i<1000;i++)

if(i%3==1&&i%4==3) {

printf(\n++; }

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

printf(“个数为%d”,n); return 0; }

7.输入任意10个数,求10个数的和,并找出其中的最大数。 #include int main() {

int max,i,a[10],t=0; for(i=0;i<10;i++) scanf(\ max=a[0];

for(i=0;i<10;i++) {if(max

printf(\ return 0; }

8.编程求三角形的面积。 #include #include int main() {

int a,b,c; float s,p;

scanf(\ if(a+b>c&&a+c>b&&b+c>a) {p=(a+b+c)/2;

s=sqrt(p*(p-a)*(p-b)*(p-c)); printf(\ else printf(\ return 0; }

9.对具有10个元素的char型数组,从下标为6的元素开始全部设置为’#’号,保持前6个元素中的内容不变。 #include #include int main() {

int i;

char a[10]; gets(a);

for(i=6;i<10;i++) a[i]='#';

printf(\ return 0; }

10.利用求阶乘函数编程完成下列表达式的求解,求: C18?1318!的值。

13!?(18?13)!#include int f(int n) {

int k;

if(n<0) {printf(\ if(n==0||n==1) return 1; k=n*f(n-1); return k; }

int main() {

int n,m; float a;

printf(\输入较小数:\ scanf(\

printf(\输入较大数:\ scanf(\

a=f(m)/(f(n)*f(m-n)); printf(\ return 0; }

11.从键盘上输入一个字符串,试统计出该字符串中所有非数字字符的个数。 #include #include int main() {

int i,m=0; char a[10]; gets(a);

for(i=0;ia[i]||a[i]>'9') m++;

printf(\ return 0; }

12.有一函数:

|X| (x<0)

Y= 2x-1 (0≤x<10)

2

3x-11 (x≥10)

其中, x,y为实型数,编写程序,要求输入x ,求y的值。 #include int main() {

float x,y;

scanf(\ if(x<0) y=-x; else

if(x>=10) y=3*x*x-11; else y=2*x-1; printf(\ return 0; }

n

13.输入实数x和正整数n,计算x,不允许调用pow函数求幂。 #include int main() {

float x,y=1; int n,i;

scanf(\ for(i=0;i

printf(\ return 0; }

14.输入任意一个正整数,求它的位数及各位数字之和。 #include int main() {

printf(\请输入一个正整数\\n\ int n,i,t=0,m=0; scanf(\ while(n) {i=n; m++; t=t+i; n=n/10;}

printf(\ return 0; }

15. 编写程序,求 1/1+2/3+3/5+4/7+??前20项的和。 #include int main() {

float i=1.0,m=0; while(i<21) {m=m+i/(i*2-1); i=i+1;}

printf(\ return 0; }

16. 编写程序对任意输入的10数统计求其值大于0的个数及其之和。 #include int main() {

float m[10],n=0; int i,t=0;

for(i=0;i<10;i++) scanf(\ for(i=0;i<10;i++) if(m[i]>0) {t=t+1; n=n+m[i]; }

printf(\ return 0; }

17.编程实现对10个整数进行由大到小排序。 #include int main() {

int m[10],i,j,t; for(i=0;i<10;i++) scanf(\ for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(m[j]

for(i=0;i<10;i++) printf(\ return 0; }

x2x3x4s?x????2!3!4!18. 编写程序,输入一个正整数x,求

值小于10。

#include

int f(int n) {

int k;

if(n<0) {printf(\ if(n==0||n==1) return 1; k=n*f(n-1); return k; }

int main() {

int n,j;

float x,l=1,y,s=0; scanf(\ for(n=1;n;n++) {

for(j=0;j

if(y<0.00001) break; s=s+y; }

printf(\ return 0; }

?5 的值,直到最后一项的

19.4根不一样长的铁丝,长度分别为147,210,315,84。现在要把它们统一截成长度相同的小段(不许有长有短),问在众多的截取方案中,这样截出来的每小段铁丝最长的能有多长?此时小段铁丝的总根数又是多少?

20.编程求200以内素数的个数并求其和。 #include #include int main() {

int i,j,m=0,t,n=0; for(i=2;i<201;i++) { t=0;

for(j=2;j<=sqrt(i);j++)

if(i%j==0) {t=1;break;} if(!t) {m=m+i;n++;} }

printf(\ return 0; }

21.编程计算12+22+32+?+102的和。 #include int main() {

int i,m=0;

for(i=12;i<=102;i+=10) m=m+i;

printf(\ return 0; }

22.编程先输入某班30个学生某门课的成绩,对全班30个学生成绩进行由高到低排序,并打印输出排序结果,要求用函数编程实现排序功能。

23.编程求一分数列:2/1,-3/2,5/3,-8/5,13/8,???前10项之和(提示:后一项分子为前一项分子与分母之和,分母为前一项的分子)。 #include int main() {

int j;

float i=1,m=2,t=0,l; for(j=1;j<=10;j++) {if(j%2==0) t=t-m/i;

else t=t+m/i; l=i; i=m; m=l+m;}

printf(\ return 0; }

24.编写程序,输入圆柱体的半径和高,求圆柱体的表面积和体积 #include #define p 3.14

int main() {

float r,h,v,s;

printf(\先输入半径,再输入高:\\n\ scanf(\ s=2*p*r*r+2*p*r*h; v=p*r*r*h;

printf(\ return 0; }

25.编写程序计算包含在一个储钱罐中的人民币数量。这个储钱罐目前有12个5角硬币、20个5分硬币、32个1角硬币、13个2分硬币、6个1分硬币及4个1元硬币 #include int main() {

float z;

z=12*0.5+20*0.05+32*0.1+13*0.02+6*0.01+4; printf(\ return 0; }