您的当前位置:首页正文

C语言程序设计复习题及答案

2021-09-07 来源:客趣旅游网
中南大学现代远程教育课程考试(专科)复习题及参考答案

C 语 言 程 序 设 计

一、选择题:

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

A.C语言简洁、紧凑 B.能够编制出功能复杂的程序 C. C语言可以直接对硬件进行操作 D.C语言移植性好 2. 以下不正确的C语言标识符是( )。

A.ABC B.abc C.a_bc D.ab.c 3.一个c程序的执行是从( ).

A.main( )函数开始,直到main( )函数结束 B.第一个函数开始,直到最后一个函数结束 C.第一个语句开始,直到最后一个语句结束

D.main( )函数开始,直到最后一个函数结束 4.以下不正确的语句(设有int p,q)是( )。

A.P*=3; B.p/=q; C.p十=3; D.p&&=q 5.下列四组选项中,均不是C语言关键字的选项是( ).

A.define B.getc C.include D.while

if char sanf go type printf case pow

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

A.160 B.-0xcdf C.-01 D.-0x48a -0xffff 01a 986,012 2e5 011 0xe 0668 0x 7. 下面四个选项中,均是不合法浮点数的选项是( ).

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

0.12 2e4.2 123e4 0.234

e3 .e5 0.0 1e3 8. 若有代数式3ae/bc,则不正确的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++,++num后sum的值为( ).

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.2.500000 B.2.750000 C.3.500000 D.0.000000 11. sizeof(float)是( )。

A.一个双精度型表达式 B. 一个整型表达式 C.一种函数调用 D. 一个不合法的表达式 12. 设int n=3;则n十十的结果是( )。 A.2 B.3 C.4 D.5

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

1

( )。 A.float B.char C.itn D.double. 14. 若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是( ).

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. 以下说法正确的是( ).

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

B. 只有格式控制,没有输入项,也能进行正确输入,如scanf(“a=%d,b=%d”); C. 当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(“%4.2f”,&f);

D. 当输入数据时,必须指明变量的地址,如scanf(“%f”,&f); 16. 以下程序的执行结果是( )。

#include main() {

int sum,pad; sum=pad=5; pad=sum++; pad++; ++pad;

printf(\"%d\\n\}

A.7 B.6 C.5 D.4 17. 巳知字母A的ASCII码是65,以下程序的执行结果是( )。

#include main() {

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

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

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

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

A.缩排位置相同的if B.在其之前末配对的if

C.在其之前未配对的最近的if D.同一行上的if

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

A.能是0或1

B.只能是0或非0正数 C.只能是整型或字符型数据 D.可以是任何类型的数据

20. 设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是( ).

A.’x’&&’y’

2

B.x<=y

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

D.!((x<y)&&!z ||1)

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

A.A%2==1 B.!(A%2==0) C.!(A%2) D.A%2 22. 以下不正确的if语句形式是( ).

A.if(x>y&&x!=y); B.if(x==y)x十=y;

C.if(x ! =y)scanf(“%d”,&x) e1se scanf(”%d,&y); D.if(x<y){x十十;y十十;} 23. 以下if语句语法正确的是( ).

A.if(x>0)

printf(“%f“,x) else printf(“%f”,-x); B.if(x>0)

{x=x+y;printf(“%f“,x);} else printf(“%f”,-x) C.if(x>0)

{x=x+y;printf(“%f“,x);} else printf(“%f”,-x) D.if(x>0)

{x=x+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”); }

以上程序 ( ).

A.语法有错不能通过编译 B.可以通过编译但不能通过连接 C.输出*** D.输出$$$ 25. 以下程序运行结果是( ).

main()

{int a=100,x=10,y=20,ok1=5,ok2=0; if (xif (y!=10) If(!ok1) a=1; else

if(ok2) a=10; a=-1;

3

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

A.1 B.0 c.-1 D.不确定 26. 执行以下程序段后,变量a,b,c得值分别是( ).

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值是( ).

w=1; x=2; y=3; z=4; m=(wA.1 B.2 C.3 D.4 28. 语句while(!e);中的条件!e等价于( )。

A.e==0 B.e!=1 C.e!=0 D.~e 29. 下面有关for循环的正确描述是( )

A.for循环只能用于循环次数已经确定的情况 B.for循环是先执行循环体语句,后判定表达式 C.在for循环中,不能用break语句跳出循环体

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

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

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

B.while的循环控制条件比的循环控制条件严格 C.do-while允许从外部转到循环体内 D.do-while的循环体不能是复合语句 31.以下程序段( ).

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

A.是死循环 B.循环执行二次 C. 循环执行二次 D.有语法错误 32. 下面程序的运行结果是( ).

#include main() {int y=10;

do{y--;}while(--y); printf(“%d\\n”,y--);}

A.-1 B.1 C.8 D.0 33. 以下正确的描述是( ).

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

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

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

4

D.从多层循环嵌套中退出时,只能使用goto语句 34. c语言中( )。

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

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

C.do—whiLe语句构成的循环,当while语句中的表达式值为非零时结束循环 D.do—while语句构成的循环,当while语句中的表达式值为零时结束循环 35. 在C语言中,引用数组元素时,其数组下标的数据类型允许是( )

A. 整型常量 B.整型表达式C.整型常量或整型表达式D.任何类型的表达式 36. 在C语言中,一位数组的定义方式为:类型说明符 数组名( )。

A. [常量表达] B. 整型表达式C. [整型常量]或[整型表达式] D. [整型常量] 37. 以下不能对二维整形数组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};

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

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数组第一维的大小是( )。

A.2 B.3 C.4 D.无确定值 40. 下面程序的运行结果是( )。

char c[5]={‘a’,’b’,’\\0’,’c’c,’\\0’}; printf(“%s”,c);} A.‘a’’b’ B.ab C.ab c D.ab

41. 有两个字符数组a、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.必须在主调函数中说明此数组的大小 B.实参数组类型与形参数组类型可以不匹配 C.在被调函数中,不需要考虑形参数组的大小 D.实参数组名与形参数组名必须一致 43. 以下正确的说法是( ).

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

5

B.在该函数中有效

C.在本程序范围内均有效 D.非法变量

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

A.自动(auto) B.静态(static)C.外部(extern) D. 寄存器(register) 45. 以下程序的运行结果是( )。 #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语言的编译系统对宏命令的处理是( )。 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\}

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

A.12 B.15 C.20 D.16 48. 以下程序的输出结果为( )。 #definePT 5.5 #defineS(x) PT*x*x main()

{inta=1,b=2;

printf(\"%4.1\\n\}

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

49. 在“文件包含”预处理语句的使用形式中,当#include后面的文件名用<>括起时,寻找被包含文件的方式是( )。 A.仅仅搜索当前目录

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

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

D.先在源程序所在目录搜索,再按系统设定的标准方式搜索 50. 以下正确的描述是( )。

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

6

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

C.凡是C源程序中行首以“#”标识的控制行都是预处理指令 D.C语言的编译预处理就是对源程序进行初步的语法检查

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

A.c=*p1+p2; B.p2=c C.p1=p2 D.c=*p1*(*p2); 52. 设有下面的程序段:

chat s[]=”china”; char *p; p=s; 则下列叙述正确的是( )。 A.s和p完全相同

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

53. 下面程序的运行结果是( )。 #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列(假设i,j已正确说明并赋值)元数值的正确引用为( )。

A.*(*(i+j)+j) B.(a+i)[j] C.*(a+i+j) D.*(a+i)+j 55. 若有定义:int (*p)[4];则标识符p( )。

A.是一个指向整型变量的指针 B.是 一个指针数组名

C.是一个指针,它指向一个含有四个整型元素的一维数组 D.定义不合法

56. 若有以下定义和赋值语句,则对b数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的非法引用为( )。 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.各成员所需内存量的总和 B.结构中第一个成员所需内存量 C.成员中占内存量最大者所需的容量 D.结构中最后一个成员所需内存量

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

7

A.所有成员一直驻留在内存中 B.只有一个成员驻留在内存中 C.部分成员驻留在内存中 D.没有成员驻留在内存中

59. 以下对C语言中共用体类型数据的叙述正确的是( )。 A.可以对共用体变量名直接赋值

B.一个共用体变量中可以同时存放其所有成员 C.一个共用体变量中不可能同时存放其所有成员 D.共用体类型定义中不能出现结构体类型的成员 60. C语言共用体型变量在程序运行期间 ( ) 。 A.所有成员一直驻留在内存中 B.只有一个成员驻留在内存中 C.部分成员驻留在内存中 D.没有成员驻留在内存中 61. 请读程序片段: int x=20;

printf(“%d\\n”, ~x);

上面程序片段的输出结果是( ). A.02 B.–20 C.-21 D.-11

62. 在位运算中,操作数每左移一位,其结果相当于( ). A.操作数乘以2 B.操作数除以2 C.操作数除以4 D.操作数乘以4

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

A. 键盘 B .显示器 C .软盘 D. 硬盘 64. 当顺利执行了文件关闭操作时,fclose函数的返回值是( )。 A .-1 B. TURE C. 0 D.1

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

A .一个整形变量,代表要读入的数据项总数 B .一个文件指针,指向要读的文件

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

二、填空题:

1. C程序的基本单位是 。 2. 表达式10%3的结果是 。

3. 假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为 。 4. 在C语言中(以16位PC机为例),一个float型数据在内存中所占用的字节数为 ; 5.C语言所提供的基本数据类型包括: 。

8

6.表达式pow(2.8,sqrt(double(x))) 值的数据类型为 。 7.以下程序的执行结果是 。

#include main() {

float f=3.5;

printf(\"%f,%g\}

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

#include main() {

float f=31.41592; printf(\"%f,%e\}

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

#include main() {

int a,b,c; a=2;b=3;c=1; if(a>c)

printf(\"%d\\n\else

printf(\"%d\\n\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 } while(n);

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

a=10; b=0;

do{b+=2;a-+2+b; }while (a>=0); 15. 若for循环用以下形式表示:

9

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\

}

17. 若二维数组a有m列,则计算任一元素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;(k为int 型变量)后,k的值是 。 22. 下面的运行结果是 。 #define MUL(z) (z)*(z) main() {

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

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

#define EXCH(a,b) {int t;t=a;a=b; b=t;} main()

{int x=5,Y=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);

10

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.找出二维数组的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。二维数组也可能没有鞍点。

6.a是一个2*4的整型数组,且各元素均已赋值.函数max_value可求出其中的最大元素值max,并将此值返回主调函数.今有函数调用语句max=max_value(a);请编写max_value函数. 7. 设计函数,实现字符串连接操作(不使用strcat)。

8. 以下程序的功能是应用下面的近似公式计算e的n次方.函数f1用来计算每项分子的值,函数f2用来计算每项分母的值.请编写f1和f2函数. ex=1=x=x2\\2!+x3\\3!„(前20项的和)

11

9. 从键盘上输入若干个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。 10.设计函数,在二维数组中产生如下形式的扬辉三角形。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1 ······

11. 回文是从前向后和从后向前读起来都一样的句子。写一个函数,判断一个字符串是否为回文,注意处理字符串中有中文也有西文的情况。 12.约瑟夫环问题:编号为1,2,3,···,n的n个人按顺时针方向围坐一圈,每人持有一个正整数密码。一开始任选一个正整数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;istr[i]=str[j]; str[j]=c; } }

12

main()

{ char str[80];

printf(\"Enter string:\"); gets(str); change(str);

printf(\"\\n result is: %s\\n\

}

2.解:参考程序如下:

#include int max(int a[],int n) { int i,mx; mx=a[0];

for (i=1;iif (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\}

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

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

13

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;ifor (j=1;jmax)

{ max=a[i][j];maxcol=j;} for (k=0,flag1=1;kif (flag2==0) return -1; }

main()

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

printf(\"Enter row && col:\"); scanf(\"%d%d\

printf(\"Enter array element:\"); for (i=0;iscanf(\"%d\ printf(\"\\n\"); for (i=0;iprintf(\"%d \ printf(\"\\n\");

14

}

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

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

15

}

运行结果: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\ n=0; sum=0.0;

while (x>0&&n<200) { sum+=x;

score[n++]=x; scanf(\"%f\ }

ave=sum/n;

printf(\"average= %f\\n\ for (count=0,i=0;i{ printf(\"%f\\n\ count++; }

printf(\"%d not pass\\n\ }

10.解:扬辉三角形各行数据规律: (1) 每行第一个和最后一个数都是1 (2) 从第3行起,(3) 除第一和最后一个数外,(4) 其余的数都是上一行同(5) 列和前一列两个数的和。

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

16

#define N 10

void yanghui(int a[][N],int n) { int i,j;

for (i=0;ifor (i=2;ia[i][j]=a[i-1][j-1]+a[i-1][j]; } main()

{ int i,j,n,a[N][N]; printf(\"Enter n:\"); scanf(\"%d\ yanghui(a,n); for (i=0;i{ for (j=0;j<=i;j++)

printf(\"%d \ 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);

17

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\

printf(\"Enter code array :\"); for (i=0;iwhile (j{ while (a[k]==0) /*跳过已出列的人*/ k=(k+1)%n; j++;

k=(k+1)%n; }

while (a[k]==0) /*跳过已出列的人*/ k=(k+1)%n;

printf(\"%d \ m=a[k]; a[k]=0; } }

四、翻译题

1.(对这种人)我的确既感到快乐而又觉得悲哀。 2.大约有几十个。

3.倘若有了危急,怎么办?

4.箭射中了塔上的砖,箭的一半射进砖里。 5.这样称呼我确实恰当。 6.没有办法度过她的余生。 7.何况是从前的呢?

8.道路上有饿死的人却不知开仓赈粮。 9.吃饭时把肉挑出来放在一边。

10.不把人民看作自己的子女一样地去关心爱护他们。 11.本来我就预先知道事情会是这样的。

18

12.诚恳拘谨的样子像个乡下人。 13.就完善文德教化使他们来。 14.驱逐客卿使诸侯成就功业。 15.不如早点给共叔段安排个地方。

五、简答题

1.在鲁迅看来,它的实质是:“一、想做奴隶而不得的时代(乱世);二、暂时做稳了奴隶的时代(治世)”。

2.主要对比之处有三:一是李广与匈奴射雕者的对比,主要突出了李广的善射;二是李广和程不识的对比,主要突出了李广治军简易、号令不烦的特点,同时也表现出李广的胆略和才气;三是李广与李蔡的对比,主要突出了李广终生不遇、白首未封的不幸遭遇,同时说明了李广遭遇的不公,朝廷用人的不当和军功制度的不合理。

3.《饮酒》(其五)抒写了诗人归隐后对田园风光和农家生活的热爱和悠然自得的心境,表现了他安于隐逸、乐于田园,陶醉自然,不满现实,与世无争的人生态度和思想情趣。

4.这两句诗用了比兴手法。作者说他想要渡过黄河,河水却被坚冰堵塞;想要登上太行,太行却被大雪覆盖。含义是:以自然界路途的艰险来象征人生仕途的艰难,抒发了作者政治失意之后的忧愁、苦闷和惆怅之情。

5.说明沙子龙内心深处对已被时代风沙淹没了的往昔的绝技和英名十分留恋,故借夜间练枪来自我安慰、自我欣赏,说明沙子龙在本质上是一个内心世界深藏不露、与现实格格不入的时代的落伍者。

6.体现了孔子治国以礼,为政以德的主张。

7.通过四场战役,即:上郡遭遇战、雁门出击战、右北平以四千对四万敌之战、最后随卫青出击一战。

8.用的是比兴手法。“桑之未落,其叶沃若”是比喻女主人公年轻貌美时;“桑之落矣,其黄而陨”是比喻女主人公的容貌衰退。

9.用了《楚辞·招隐士》“王孙兮归来,山中兮不可久留”的典故。作者在这里是反用其意,表达自己眷恋山林,乐于归隐的决心以及逃避现实、洁身自好、不同流俗的生活态度。

10.说明赵七爷是个复辟之心不死、善于韬晦、时刻伺机复辟的封建帝制余孽。 11.双重喻意:一是将季氏比作虎兕,将颛臾比作龟玉,说明季氏悍然出兵,颛臾必然遭到毁灭的命运;二是将冉有、季路比作守柙护椟之人,说明无论季氏行凶,还是颛臾被毁,冉有、季路都有着不可推卸的责任。

12.韩愈因读李翰《张巡传》后感到有所不足,作《张中丞传后叙》来补叙有关事迹和轶事并发议论,所以称为“后叙”。

13.《种树郭橐驼传》运用了多重对比:一是郭橐驼与他植者的对比;二是他植者中过于疏懒者与过于勤勉者之间的对比;三是郭囊驼种树贵得树之天性和“长人者好烦其令”形成对比。

14.统领全诗内容的是第一句:“和戎诏下十五年”。可以看出这首诗揭露的对象是南宋统治者的妥协投降政策。

15.一是象征诗人的爱国感情长期埋藏在心底,只有到了“五四”运动以后,这股激情才得以喷发;二是象征被封建主义束缚了几千年的中华民族,直到“五四”运动以后,才焕发出真正的青春活力。

19

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