C语言复习题

发布时间:2018-07-02 13:35:15   来源:文档文库   
字号:

C语言复习题

一、选择题

1.以下不是C语言的特点的是( B )

A.C语言简洁、紧凑 B.能够编制出功能复杂的程序

C. C语言可以直接对硬件进行操作 DC语言移植性好

2. 以下不正确的C语言标识符是( D )

AABC Babc Ca_bc Dab.c

3.一个c程序的执行是从( A ).

Amain( )函数开始,直到main( )函数结束

B.第一个函数开始,直到最后一个函数结束

C.第一个语句开始,直到最后一个语句结束

Dmain( )函数开始,直到最后一个函数结束

4.以下不正确的语句(设有int p,q)( D )

AP*3; B.p/=q; C.p十=3; Dp&&=q

5.下列四组选项中,均不是C语言关键字的选项是( A ).

Adefine B.getc C.include D.while

if char sanf go

type printf case pow

6.下面四个选项中,均是合法整形常量的选项是( A ).

A.160 B.-0xcdf C.-01 D.-0x48a

-0xffff 01a 986,012 2e5

011 0xe 0668 0x

7. 下面四个选项中,均是不合法浮点数的选项是( B ).

A.160. B.123 C.-.18 D.-e3

0.12 2e4.2 123e4 0.234

e3 .e5 0.0 1e3

8. 若有代数式3ae/bc,则不正确的C语言表达式是( C )

A.a/b/c*e*3 B.3*a*e/b/c

C.3*a*e/b*c D.a*e/c/b*3

9. 若以下变量均是整形,且num=sum=7;则计算表达式sUM=num++sUM++++numsum的值为(A ).

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

10.若有定义:int a=7; float x=205 ,y=4.7; 则表达式x+a%3*(int)(x+y)%2/4的值是( A )

A.2.500000 B.2.750000 C.3.500000 D.0.000000

11. sizeof(float)( B )

A.一个双精度型表达式 B. 一个整型表达式

C.一种函数调用 D. 一个不合法的表达式

12. int n3;n十十的结果是( B )

A.2 B.3 C.4 D.5

13. 设有说明: char w; int x; float y; double z; 则表达式w*x+z-y值的数据类型为( D )

A.float B.char C.int D.double.

14. x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是( D ).

A. scanf(%d%d1x,%1e,&x,&y,&z);

B. scanf(%2d*%d%1f,&x,&y,&z);

C. scanf(%x%*d%o,&x,&Y);

D. scanf(%x%o%6.2f, &x,&y,&z);

15. 以下说法正确的是( D ).

A. 输入项可以为一个实型常量,如scanf(%f,3.5)

B. 只有格式控制,没有输入项,也能进行正确输入,如scanf(a=%d,b=%d);

C. 当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(%4.2f,&f);

D. 当输入数据时,必须指明变量的地址,如scanf(%f,&f);

16. 以下程序的执行结果是( A )

#include

main()

{

int sum,pad;

sum=pad=5;

pad=sum++;

pad++;

++pad;

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

}

A.7 B.6 C.5 D.4

17. 巳知字母AASCII码是65,以下程序的执行结果是( D )

#include

main()

{

char c1='A',C2='Y';

printf("%d,%d\n",c1,c2);

A.A,Y B.65,65 C.65,90 D.65,89

18. 为了避免嵌套的if-else语句的二义性,c语言规定else总是与( C )组成配对关系。

A.缩排位置相同的if

B.在其之前末配对的if

C.在其之前未配对的最近的if

D.同一行上的if

19. 逻辑运算符两侧运算对象的数据类型( D ).

A.能是01

B.只能是0或非0正数

C.只能是整型或字符型数据

D.可以是任何类型的数据

20. xyzint型变量,且x3y4z5,则下面表达式中值为0的是( D ).

A.’x’&&’y’

B.x<=y

C. x||y+z&&y-z

D.!((xy)&&!z ||1)

21. 若希望当A的值为奇数时,表达式的值为A的值为偶数时,表达式的值为。则以下不能满足要求的表达式是( C ).

A.A2==1 B.!(A2==0) C.!(A2) D.A2

22. 以下不正确的if语句形式是( C ).

A.if(xy&&x!=y);

B.if(x==y)x十=y

C.if(x ! y)scanf(“%d”,&x) e1se scanf(”%d,&y);

D.if(xy){x十十;y十十;}

23. 以下if语句语法正确的是( B ).

A.if(x0)

printf(“%f“,x)

else printf(“%f”,-x);

B.if(x0)

{xx+y;printf(%f,x);}

else printf(%f,-x)

C.if(x0)

{xx+y;printf(%f,x);}

else printf(%f,-x)

D.if(x0)

{xx+y;printf(%f,x);}

else printf(%f,-x)

else printf(%f,-x);

24. 阅读以下程序

main()

{int a=5,b=0,c=0;

if(a=b+c) printf(***\n);

else printf($$$\n);

}

以上程序 ( D ).

A.语法有错不能通过编译 B.可以通过编译但不能通过连接

C.输出*** D.输出$$$

25. 以下程序运行结果是( C).

main()

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

if (x

if (y!=10)

If(!ok1)

a=1;

else

if(ok2) a=10;

a=-1;

printf(%d\n,a);

}

A.1 B.0 c.-1 D.不确定

26. 执行以下程序段后,变量a,b,c得值分别是( B ).

int x=10,y=9;

int a,b,c;

a=(--x==y++)? –x: ++y;

b=x++;

c=y;

A.a=9,b=9,c=9 B.a=8,b=8,c=10

C.a=9,b=10,c=9 D.a=1,b=11,c=10

27. w,x,y,z,m均为int型变量,则执行下面语句后的m值是( A ).

w=1; x=2; y=3; z=4;

m=(w

m=(m

m=(m

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

28. 语句while(!e);中的条件!e等价于( A )

A.e==0 B.e!1 C.e!0 D.~e

29. 下面有关for循环的正确描述是( D )

A.for循环只能用于循环次数已经确定的情况

B.for循环是先执行循环体语句,后判定表达式

C.for循环中,不能用break语句跳出循环体

D.for循环体语句中,可以包含多条语句,但要用花括号括起来

30. C语言中whiledo-while循环的主要区别是( A ).

A.do-while的循环体至少无条件执行一次

B.while的循环控制条件比的循环控制条件严格

C.do-while允许从外部转到循环体内

D.do-while的循环体不能是复合语句

31.以下程序段( C ).

x=-1; do{x=x*x;} while(! x);

A.是死循环 B.循环执行二次

C. 循环执行二次 D.有语法错误

32. 下面程序的运行结果是( B ).

#include

main()

{int y=10;

do{y--;}while(--y);

printf(%d\n,y--);}

A.-1 B.1 C.8 D.0

33. 以下正确的描述是( B ).

A.continue语句的作用是结束整个循环的执行

B.只能在循环体内和switch语句体内使用break语句

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

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

34. c语言中( D )

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

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

C.do—whiLe语句构成的循环,当while语句中的表达式值为非零时结束循环

D.do—while语句构成的循环,当while语句中的表达式值为零时结束循环

35. C语言中,引用数组元素时,其数组下标的数据类型允许是(C

A. 整型常量 B.整型表达式C.整型常量或整型表达式D.任何类型的表达式

36. C语言中,一位数组的定义方式为:类型说明符 数组名( D )。

A. [常量表达] B. 整型表达式C. [整型常量][整型表达式] D. [整型常量]

37. 以下不能对二维整形数组a进行正确初始化的语句是( C )。

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

38. 若有说明:int a[][4]={00};则下面正确的叙述是(D )。

A. 数组a中每个元素均可得到初值0

B. 二维数组a的第一维大小为1

C. 因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1

D.只有元素a0][0]a[0][1]可得到初值0,其余元素均得不到初值0

39. 若有说明:int a[][3]={1,2,3,4,5,6,7};a数组第一维的大小是(B )。

A.2 B.3 C.4 D.无确定值

40. 下面程序的运行结果是(B )。

char c[5]={‘a’,’b’,’\0’,’c’c,’\0’};

printf(%s,c);}

A.‘a’’b’

B.ab

C.ab c

D.ab

41. 有两个字符数组ab,则以下正确的输入语句是( B )。

gets(a,b);

scanf(%s%s,a,b);

scanf(%s%s,&a,&b);

gets(a),gets(b);

A. s[j+=]=s[i] B. s[++j]=s[i]

C. s[j]=s[i]; j++ D.s[j]=s[i]

42. 若使用一维数组名作函数实参,则以下正确的说法是( A ).

A.必须在主调函数中说明此数组的大小

B.实参数组类型与形参数组类型可以不匹配

C.在被调函数中,不需要考虑形参数组的大小

D.实参数组名与形参数组名必须一致

43. 以下正确的说法是( A ).

A.如果在一个函数中的复合语句中定义了一个变量,则该变量只在该复合语句中有效

B.在该函数中有效

C.在本程序范围内均有效

D.非法变量

44. 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为( A ).

A.自动(auto B.静态(staticC.外部(extern D. 寄存器(register

45. 以下程序的运行结果是( B )。

#define MIN(x,y) (x)<(y)?(x):(y)

main()

{int i=10,j+15,k;

k+10*MIN(i,j);

printf(%d\n,k);

}

A.10 B.15 C.100 D.150

46. C语言的编译系统对宏命令的处理是( D)。

A.在程序运行时进行的

B.在程序连接时进行的

C.C程序中的其它语句同时进行编译的

D.在对源程序中的其它语句同时进行编译的

47. 请读程序

#include

#defineMUL(x,y)(x)*y

main()

{int a=3,b=4,c;

c=MUL(a++,b++);

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

}

上面程序的输出结果是(A )。

A.12 B.15 C.20 D.16

48. 以下程序的输出结果为( B )。

#definePT 5.5

#defineS(x) PT*x*x

main()

{inta=1,b=2;

printf("%4.1\n",S(a+b));

}

A.12.0 B.9.5 C.12.5 D.33.5

49. 文件包含预处理语句的使用形式中,当#include后面的文件名用<>括起时,寻找被包含文件的方式是( C)。

A.仅仅搜索当前目录

B.仅仅搜索源程序所在目录

C.直接按系统设定的标准方式搜索目录

D.先在源程序所在目录搜索,再按系统设定的标准方式搜索

50. 以下正确的描述是(C )。

A.C语言的预处理功能是指定完成宏替换和包含文件的调用

B.预处理指令只能位于C源程序文件的首部

C.凡是C源程序中行首以#”标识的控制行都是预处理指令

D.C语言的编译预处理就是对源程序进行初步的语法检查

51. p1p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( B )。

A.c=*p1+p2; B.p2=c C.p1=p2 D.c=*p1*(*p2);

52. 设有下面的程序段:

chat s[]=china; char *p; p=s;

则下列叙述正确的是( D )。

A.sp完全相同

B.数组s中的内容和指针变量p中的内容相等
C.s数组长度和p所指向的字符串长度相等
D.*ps[0]相等

53. 下面程序的运行结果是( C )。

#include

#include

main()

{

char *p1,*p2,str[50]=abc;

p1=abc; p2=abc;

strcpy(str+1,strcat(p1,p2));

printf(%s\n,str);

}

A. abcabcabc B.bcabcabc C. aabcabc D.cabcabc

54. 若有定义:int a[2][3];则对数组a的第i行第j列(假设ij已正确说明并赋值)元数值的正确引用为( A)。

A.*(*(i+j)+j) B.(a+i)[j] C.*(a+i+j) D.*(a+i)+j

55. 若有定义:int *p[4];则标识符p( C )。

A.是一个指向整型变量的指针

B. 一个指针数组名

C.是一个指针,它指向一个含有四个整型元素的一维数组

D.定义不合法

56. 若有以下定义和赋值语句,则对b数组的第i行第j列(假设ij已正确说明并赋值)元素地址的非法引用为( C )。

int b[2][3]={0},(*p[3]

p=b

A.**p+i+j B.*p[i]+j

C.p+i+j D.*p+i))[j]

57. 当说明一个结构体变量时系统分配给它的内存是( A ).

A.各成员所需内存量的总和

B.结构中第一个成员所需内存量

C.成员中占内存量最大者所需的容量

D.结构中最后一个成员所需内存量

58. C语言结构体类型变量在程序执行期间( A ).

A.所有成员一直驻留在内存中

B.只有一个成员驻留在内存中

C.部分成员驻留在内存中

D.没有成员驻留在内存中

59. 以下对C语言中共用体类型数据的叙述正确的是( C )。

A.可以对共用体变量名直接赋值

B.一个共用体变量中可以同时存放其所有成员

C.一个共用体变量中不可能同时存放其所有成员

D.共用体类型定义中不能出现结构体类型的成员

60. C语言共用体型变量在程序运行期间 B )

A.所有成员一直驻留在内存中

B.只有一个成员驻留在内存中

C.部分成员驻留在内存中

D.没有成员驻留在内存中

61. 请读程序片段:

int x=20;

printf(%d\n, ~x);

上面程序片段的输出结果是( C ).

A.02

B.–20

C.-21

D.-11

62. 在位运算中,操作数每左移一位,其结果相当于( A ).

A.操作数乘以2

B.操作数除以2

C.操作数除以4

D.操作数乘以4

63. 系统的标准输入文件是指( A)

A. 键盘 B .显示器 C .软盘 D. 硬盘

64. 当顺利执行了文件关闭操作时,fclose函数的返回值是( C )

A .-1 B. TURE C. 0 D.1

65. 已知函数的调用形式:fread(buffer,size,count,fp);其中buffer代表的是 ( C )

A .一个整形变量,代表要读入的数据项总数

B .一个文件指针,指向要读的文件

C .一个指针,指向要读入数据的存放地址

D.一个存储区,存放要读的数据项

二、填空题:

1. C程序的基本单位是

2. 表达式10%3的结果是

3. 假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为

4. C语言中(以16PC机为例),一个float型数据在内存中所占用的字节数为

5C语言所提供的基本数据类型包括:

6.表达式pow(2.8,sqrt(double(x))) 值的数据类型为

7.以下程序的执行结果是

#include

main()

{

float f=3.5;

printf("%f,%g",f,f)

}

8. 以下程序的执行结果是

#include

main()

{

float f=31.41592;

printf("%f,%e",f,f)

}

9. 以下程序的执行结果是

#include

main()

{

int a,b,c;

a=2;b=3;c=1;

if(a>c)

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

else

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

printf("end\n");

}

10. C语言中,表示逻辑值用 .

11. int x,y,z; x=3,y=-4,z=5,则表达式(x&&y)= =(x︱︱z)的值为

12. 下面程序从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空。

int n=0,c;

c=getchar();

while( )

{if(c>=0&&c<=9) n++

c=getchar();

}

13. 执行下面程序段后,k值是 .

k=1;n=263;

do{k*=n%10; n/=10 } whilen;

14. 下面程序段中循环体的执行次数是 .

a=10;

b=0;

do{b+=2;a-+2+b; }while (a>=0);

15. for循环用以下形式表示:

for(表达式1;表达式2;表达式3 循环体语句

则执行语句for(i=0;i<3;i++) printf(*);时,表达式3执行 次。

16. 以下程序的输出结果是__________

main( )

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

printf("%d\n",*(p+4));

}

17. 若二维数组am列,则计算任一元素a[i][j]在数组中位置的公式为: 。(假设a[0][0]位于数组的第一个位置上。)

18. C语言中,二维数组元素的内存中的存放顺序是

19. C 语言中,一个函数一般由两个部分组成,它们是

20. 以下程序的运行结果是

#include

f(int a[])

{int i=0;

while (a[i]<=10)

{printf(%d,a[i]);

i++;}

}

main()

{int a[]={1,5,10,9,11,7};

f(a+1);

}

21. 设有以下宏定义:#define WIDTH 80

#define LENGTH (WIDTH+40)

则执行赋值语句:k=LENGTH*20;(kint 型变量)后,k的值是

22. 下面的运行结果是

      #define MUL(z) (z)*(z)

main()

{

printf(%d\n,MUL(1+2)+3);

}

23. 下面程序的运行结果是

#define EXCH(ab) {int tt=aa=b; b=t;}

main()

{int x=5Y=9

EXCH(x,y)

printf(x=%d,y=%d\n,x,y);

}

24. 下面程序段的运行结果是

char s[80], *sp=HELLO!;

sp=strcpy(s,sp);

s[0]=’h’;

puts(sp);

25. 下面程序段的运行结果是

char s1=AbcdEf,s2=aB;

s1++;

t=(strcmp(s1,s2)>0);

print(%d\n,t)

26. 下面程序段的运行结果是

char *p=PDP1-0;

int I,d;

for(I=0;I<7;I++)

{d=isdigit(*(p+ii));

if(d!=0) printf(%c *(p+I));

}

27. 当运行以下程序时,从键盘输入 book

book

(表示回车, 表示空格),则下面程序段运行的结果是

char a1[80],a2[80],*s1=a1,*s2=a2;

gets(s1);gets(s2);

if(!strcmp(s1,s2)) printf(*):

else printf(#);

printf(%d,strlen(strcat(s1,s2)));

28. 若已定义:

struct num

{int a;

int b;

float f;

} n={1,3,5.0};

struct num * pn = &n;

则表达式 (*pn).a+pn->f的值是

29. C语言中,&运算符作为双目运算符时表示的是 运算.

30. C语言中,文件的存取是以字符为单位的,这种文件被称作 文件。

三、编程题

1将一个字符串的内容颠倒过来。

2. 求整形数组的最大值。

3. 求字符串的长度(不用strlen)。

4. 编写程序,将字符串str中的所有字符’k’删除。

5.找出二维数组的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。二维数组也可能没有鞍点。

6a是一个2*4的整型数组,且各元素均已赋值.函数max_value可求出其中的最大元素值max,并将此值返回主调函数.今有函数调用语句max=max_value(a);请编写max_value函数.

7. 设计函数,实现字符串连接操作(不使用strcat)。

8. 以下程序的功能是应用下面的近似公式计算en次方.函数f1用来计算每项分子的值,函数f2用来计算每项分母的值.请编写f1f2函数.

ex=1=x=x2\2!+x3\3!(20项的和)

9. 从键盘上输入若干个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。

10.设计函数,在二维数组中产生如下形式的扬辉三角形。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

······

11. 回文是从前向后和从后向前读起来都一样的句子。写一个函数,判断一个字符串是否为回文,注意处理字符串中有中文也有西文的情况。

12.约瑟夫环问题:编号为1,2,3,···,nn个人按顺时针方向围坐一圈,每人持有一个正整数密码。一开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针报数,报到m时停止,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计程序求出出列顺序。

参考答案

一、选择题

1. B 2.D 3.A 4.D 5.A 6.A 7.B 8.C 9.A 10.A 11.B 12.B 13.D 14.D 15.D 16.A 17.D 18.C 19.D 20.D 21.C 22.C 23.B 24.D 25.C 26.B 27.A 28.A 29.D 30.A 31.C 32.B 33.B 34.D 35.C 36.D 37.C 38.D 39.B 40.B 41.B 42.A 43.A 44.A 45.B 46.D 47.A 48.B 49.C 50.C 51.B 52.D 53.C 54.A 55.C 56.C 57.A 58.A 59.C 60.B 61.C 62.A 63.A 64.C 65.C

二、填空题

1.函数 2. 1 3. 9 4. 4 5.单精度型、双精度型、整型、字符型和枚举型 6.双精度型(或:doubLe) 7.3.500000,3.5 8. 31.415920,3.14159e+01 9.end 10.0的数字 11.1 12.c!='\n' 13.36 14.3 15.3 16.5 17.i*m+j+i 18.按行主顺序存放 19.函数说明部分和函数体 20.5 10 9 21.2400 22.12 23.x=8,y=5 24.hELLO!

25.1 26.1*0* 27.#9 28.6.0 29.按位与 30.流式

三、编程题

1. 解:注意交换位置的控制方法,参考程序如下:

#include

#include

void change(char str[])

{ int len,i,j;

char c;

len=strlen(str);

for (i=0,j=len-1;i

{ c=str[i];

str[i]=str[j];

str[j]=c;

}

}

main()

{ char str[80];

printf("Enter string:");

gets(str);

change(str);

printf("\n result is: %s\n",str);

}

2.解:参考程序如下:

#include

int max(int a[],int n)

{ int i,mx;

mx=a[0];

for (i=1;i

if (a[i]>mx) mx=a[i];

return mx;

}

main()

{ int a[8]={23,4,6,12,33,55,2,45};

printf("max is %d\n",max(a,8));

}

3.解:参考程序如下:

#include

int strlen(char str[])

{ int i;

for (i=0;str[i]!='\0';i++);

return i;

}

main()

{ char str[80];

printf("Enter string:");

gets(str);

printf("\n string length is: %d \n",strlen(str));

}

4. 解:将从字符串中删除所有字符’k’ 的功能定义为函数。参考程序如下:

#include

void delchar(char str[],char c)

{ int i,j;

for (i=0,j=0;str[i]!='\0';i++)

if (str[i]!=c)

str[j++]=str[i];

str[j]='\0';

}

main()

{ char str[80];

int i,j;

gets(str);

delchar(str,'k');

puts(str);

}

5.解:依鞍点定义,对数组每行元素循环,找到当前行上最大元素,记下所在的列号,再判断此元素是否为对应列的最小元素。将寻找打印数组鞍点的操作定义为函数,如果没有鞍点,函数返回-1。参考程序如下:

#include

#define N 10

#define M 10

int andian(int a[][M],int n,int m)

{ int i,j,k,max,maxcol;

int flag1,flag2=0; /*flag1标记每一行的最大值是否鞍点,flag2标记矩阵是否有鞍点*/

for (i=0;i

{ max=a[i][0];

for (j=1;j

if (a[i][j]>max)

{ max=a[i][j];maxcol=j;}

for (k=0,flag1=1;k

if (a[k][maxcol]

flag1=0;

if (flag1==1)

{ printf("\n%3d %3d %5d\n",i,maxcol,max);

flag2=1;

}

}

if (flag2==0)

return -1;

}

main()

{ int i,j,n,m,a[N][M];

printf("Enter row && col:");

scanf("%d%d",&n,&m);

printf("Enter array element:");

for (i=0;i

for (j=0;j

scanf("%d",&a[i][j]);

printf("\n");

for (i=0;i

{ for (j=0;j

printf("%d ",a[i][j]);

printf("\n");

}

if (andian(a,n,m)==-1)

printf("\n no andian \n");

}

6 max_value(int arr[][4])

{ }

max(int arr[ ][4])

{int I,j, max;

max=arr[0][0];

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

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

if(arr[i][j]>max)max=arr[i][j];

return(max);

}

7. 解:注意结束字符的判断和处理,目标字符串的长度应足够长。参考程序如下:

#include

void scat(char s1[],char s2[])

{ int i,j;

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

for (j=0;s2[j]!='\0';j++)

s1[i++]=s2[j];

s1[i]='\0';

}

main()

{ char s1[80]="Good ";

char s2[10]="morning";

scat(s1,s2);

printf("%s\n",s1);

}

8. ex=1=x=x2\2!+x3\3!(20项的和)

float f2(int n)

{ }

float f1(int x,int n)

{ }

main()

{ float exp=1.0;int n,x;

printf(Input a number:)’

scanf(%d,&x); printf(%d\n,x);

exp=exp+x;

for(n=2;n<=19;n++) exp=exp+f1(x,n)/f2(n);

printf(\nThe is exp(%d)=%8.4f\n,x,exp)’

}

运行结果:Input a number:3

The is exp(3)=20.0855

float f2 (int n)

{if(n==1)return1;

else return(f2(n-1)*n);

}

float f1(intx,intn)

{int I; float j=1;

for(I=1;I<=n;I++)j=j*x;

return j;

}

9.解:用输入负数表示输入结束。参考程序如下:

#include

main()

{ float score[200],ave,sum,x;

int i,n,count;

printf("Enter score:");

scanf("%f",&x);

n=0;

sum=0.0;

while (x>0&&n<200)

{ sum+=x;

score[n++]=x;

scanf("%f",&x);

}

ave=sum/n;

printf("average= %f\n",ave);

for (count=0,i=0;i

if (score[i]<60)

{ printf("%f\n",score[i]);

count++;

}

printf("%d not pass\n",count);

}

10.解:扬辉三角形各行数据规律:

1 每行第一个和最后一个数都是1

2 从第3行起,(3 除第一和最后一个数外,(4 其余的数都是上一行同(5 列和前一列两个数的和。

定义函数,将扬辉三角形的数据保存在二维数组中。参考程序如下:

#include

#define N 10

void yanghui(int a[][N],int n)

{ int i,j;

for (i=0;i

{ a[i][0]=1;

a[i][i]=1;

}

for (i=2;i

for (j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

}

main()

{ int i,j,n,a[N][N];

printf("Enter n:");

scanf("%d",&n);

yanghui(a,n);

for (i=0;i

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

printf("%d ",a[i][j]);

printf("\n");

}

}

11. 解:依回文定义从字符串的起始字符向后,最后一个字符向前依次判断,遇汉字的第一个字符同时处理两个字符。参考程序如下:

#include

#include

int huiwen(char str[])

{ int i,j,len,flag=1;

len=strlen(str);

for (i=0,j=len-1;i<=j;i++,j--);

if (str[i]!=str[j])

{ if (str[i]>128&&str[j]>128) /*两侧都是汉字字符*/

{ if (str[i]==str[j-1]&&str[i+1]==str[j])

{ i++; j--; }

else flag=0;

}

else flag=0;

}

return flag;

}

main()

{ char str[50];

printf("Enter string:");

gets(str);

if (huiwen(str))

printf("%s is a palindroma\n");

else

printf("%s is not palindroma\n");

}

12.解:设整型数组a中保存n个人的密码,对应的人出列后,数组元素置0作为标志。顺时针确定下一个人的方法,可将下标加1,再对n求余。参考程序如下:

#include

#define N 100

main()

{ int a[100];

int i,j,m,n,k=0;

printf("Enter n & m:");

scanf("%d%d",&n,&m);

printf("Enter code array :");

for (i=0;i

scanf("%d",&a[i]);

printf("\nOutput:\n");

for (i=0;i

{ j=1;

while (j

{ while (a[k]==0) /*跳过已出列的人*/

k=(k+1)%n;

j++;

k=(k+1)%n;

}

while (a[k]==0) /*跳过已出列的人*/

k=(k+1)%n;

printf("%d ",k);

m=a[k]; a[k]=0;

}

}

本文来源:https://www.2haoxitong.net/k/doc/2cba3fe9af45b307e971979f.html

《C语言复习题.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式