文档库 最新最全的文档下载
当前位置:文档库 › 期中考试答案C语言答案

期中考试答案C语言答案

天津师范大学考试试卷

2009—2010学年第二学期期中考试试卷

科目:C 语言程序设计 学院:数学科学学院 专业:数学、信计

一、 单项选择题:在每小题的备选答案中选出一个正确答案,并将正确答案的代

码填在答题纸题干上的括号内。(本题共20小题,每小题2分,共40分)

1.以下叙述中错误的是( D )。

A .计算机不能直接执行用C 语言编写的源程序

B .

C 程序经C 编译程序编译后,生成后缀为.obj 的文件是一个二进制文件 C .后缀为.obj 的文件,经连接程序生成后缀为.exe 的文件是一个二进制文件

D .后缀为.obj 和.exe 的二进制文件都可以直接运行 2.可在C 程序中用作用户标识符的一组标识符是( A )。

A .and B. Date C. Hi D. case _2007

y-m-d Dr.Tom Big1 3.以下选项中不能作为C 语言合法常量的是( A )。

A .…cd ? B. 0.1e+6 C. “\a ” D. …\011? 4.若有代数式

x

x

e

n (其中e 代表自然对数的底数,不是变量),则

以下能够正确表示该代数式的C 语言表达式是( C )。

A .sqrt(abs(n^x+e^x)) B. sqrt(fabs(pow(n,x)+pow(x,e))) C .sqrt(fabs(pow(n,x)+exp(x))) D.sqrt(fabs(pow(x,n)+exp(x))) 5.有以下程序,运行后的输出结果是( C )。

main()

{ int x,y,z;

x=y=1;

z=x++,y++,++y;

printf("%d,%d,%d\n",x,y,z);

}

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

6.若变量均已正确定义并赋值,以下合法的C语言赋值语句是(A)。

A.x=y=5; B. x=n%2.5; C. x+n=i; D. x=5=4+1

7.执行以下程序时,输入1234567<回车>,则输出结果是( C )。

main()

{ int a=1,b;

scanf(“%2d%2d”,&a,&b);

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

}

A.12 34 B.a=123 b=456 C.a=12 b=34 D.输入有错误

8.设变量均已正确定义,若通过scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);

语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y,

以下输入形式中正确的是( D )。(□代表空格)

A.10□X□20□Y<回车> B. 10□X20□Y<回车>

C.10□X<回车> D. 10X<回车>

20□Y<回车> 20Y<回车>

9.程序段:int x=12;

double y=3.141593;

printf(“%d%8.6f”,x,y);的输出结果是(A)。(□代表空格)A.123.141593 B. 12□3.141593

C.12,3.141593 D. 123.1415930

10.当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项

含义不同,这个选项是( D )。

A.k%2 B. k%2==1 C. (k%2)!=0 D. !k%2==1

11.设有定义:int a=2,b=3,c=4;,则以下选项中值为0的表达式是(A)。

A.(!a==1)&&(!b==0) B. (a

C.a&&b D. a||(b+b)&&(c-a)

12.有以下程序,运行后的输出结果是( D )。

main()

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

if(i++==1&&(++j==3||k++==3))

printf("%d %d %d\n",i,j,k);

}

A.1 2 3 B. 2 3 4 C. 2 2 3 D. 2 3 3 13.有以下程序,运行后输出( D )。

#include

main()

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

if(a=1)

b=1 ; c=2;

else

d=3 ;

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

A.0,1,2,0 B.0,0,0,3 C.1,1,2,0 D.编译出错

14.以下不构成无限循环的语句或者语句组是(A)。

A.n=0; B. n=0;

do{++n ;}while(n<=0) ; while(1){n++;} C.n=10; D. for(n=0,i=1 ; ; i++) while(n) ; {n-- ;} n+=i;

15.若变量已正确定义,有以下程序段,其输出结果是( B )。

i=0;

do

printf("%d,",i) ; while(i++);

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

A.0,0 B. 0,1 C. 1,1 D.程序进入无限循环

16.有以下程序,运行结果是( B )。

#include

main()

{ int i, j, m=55;

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

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

m=m%j;

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

}

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

17.有以下程序,运行后的输出结果是( D )。

#include

main( )

{ int k=5,n=0;

while(k>0)

{ switch(k)

{ default : break;

case 1 : n+=k;

case 2 :

case 3 : n+=k;

}

k--;

}

pr i ntf("%d\n",n);

}

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

18.若定义具有10个int型元素的一维数组a,则以下定义语句中错误的是( D )。

A.#define N 10 B. #define n 5 C.int a[5+5]; D.int n=10,a[n];

int a[N]; int a[2*n];

19.若有定义语句: int m[ ]={5,4,3,2,1} , i=4 ;

则下面对m数组元素的引用中错误的是( C )。

A.m[--i] B. m[2*2] C. m[m[0]] D. m[m[i]]

20.有以下程序,运行后的输出结果是( B )。

main()

{ int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;

while(i++<7)

if(p[i]%2)

j+=p[i];

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

}

A.42 B. 45 C. 56 D. 60

二、填空题:答案写在答题纸上(本题共10个空,每空2分,共20分)

1.函数【1】是C程序的基本单位,一个C程序总是从【2】主函数(或main())开始执行的。(P5-6 概念)

2.从键盘输入一个小写字母,改成大写字母输出。(P74页例题3.8改造)

#include"stdio.h"

void main()

{ char c1,c2;

printf("Input a small letter:");

c1=getchar(); 或scanf(“%c”,&c1);【3】/* 从键盘输入一个大写字母*/

printf("%c,%d\n",c1,c1); /* 用字符形式输出小写字母及其ASCII码*/

c2=c1-32; 【4】/* 把小写字母变为大写字母*/

printf("%c,%d",c2,c2); /* 用字符形式输出大写字母及其ASCII码*/

}

3.下面程序实现判断某年是否为闰年(P105例题4.6)

main()

{int y,flag;

scanf("%d",&y);

if(y%4==0 )

if(y%100==0)

if(y%400==0【5】)leap=1;

else leap =0;

else leap =1 【6】;

else leap =0;

if(leap )printf("%d is a leap year!\n",y);

else printf("%d is not a leap year!\n",y);

}

4.有3个整数a,b,c,由键盘输入,输出其中最大的数。(P113习题5)#include"stdio.h"

void main()

{

int a,b,c,max;

printf("Input 3 integers:");

scanf("%d%d%d",&a,&b,&c);/*输入3个整数*/

if(a>b) max=a; 【7】

else max=b;

if(c>max)max=c; 【8】或max=(c>max)?c:max;

printf("max=%d\n",max);/* 输出最大数*/

}

5.下列程序将输入的数据num按逆序输出,请完成填空。(选自天津市二级题库,同时是对P113习题7的应用循环处理)

#include "stdio.h"

main()

{ int c,num;

printf("Enter a number:");

scanf("%d",&num);

do

{ c=num%10 ; 【9】

printf(“%d”,c);

} while( (num/=10 )>0【10】);

}

三、改错题:答案写在答题纸上(本题共5小题,每小题2分,共10分)

请指出并改正下列程序中的错误(在/*********found********/下面找错),使它得到正确的结果。先将错误语句(行)抄写在答题纸上一行,再将改正的答案写在相应的下一行。

注意:不允许增行或删行,也不允许更改程序中的结构。

1.下面程序的功能是输入一个华氏温度,要求输出摄氏温度。公式为c=5/9×(F-32)。试题程序如下:

#include

main()

{ float c,f;

printf("input f:\n");

scanf("%f",&f);

/**********************found***********************/

c=5/9*(f-32);

printf("c=%5.2f\n",c);}

答案:c=5/9*(f-32);改为c=5/9.0*(f-32);或c=5./9*(f-32); 或c=5./9.0*(f-32);

或c=5*(f-32) ./9; 等等

2.下列给定程序的功能是:输入两个数,并按升序排列输出。

试题程序:

#include

main()

{ int a,b,t;

scanf(“%d%d”,&a,&b);

/*****************found****************/

if(a>b) ;

{t=b; b=a; a=t;}

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

答案:if(a>b); 改为if(a>b)

3.下面程序的功能是:有一分数序列

13

21

8

13

5

8

3

5

2

3

1

2

…求这个数列的前20项

之和。试题程序:

#include

main()

{ int i,n=20;

/*****************found****************/ float a=2,b=1,t,s=0;

for(i=1;i

{ s+=a/b;

t=a;

a=a+b;

b=t;}

printf("sum=%9.6f\n",s);}

答案:for(i=1;i

4.下面程序的功能是:判断整数m 是否为素数。

试题程序:

#include

#include

void main ( )

{ int m, i, k;

printf ("输入一个整数:");

scanf ("%d", &m);

k = sqrt ( m );

/*****************found****************/

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

if ( m % i == 0 )

continue;

if ( i > k )

printf ("%d是素数\n", m );

else

printf ("%d不是素数\n", m );

}

答案:continue;改为break;

5.下面程序的功能是:从键盘上输入一行字符,并以’# ’字符作为输入结束,统计其中’a’、’h’字符的个数。

#include ”stdio.h”

main( )

{ int v1=0,v2=0;

char ch;

/*****************found****************/

while ( (ch=getchar()) != ?# ?)

switch (ch):

{ case ?a?: v1++; break;

case ?h?: v2++;break;

}

printf(”%d,%d\n”, v1,v2);

}

答案:switch (ch):改为switch (ch)

四、编程题:根据题目要求编写源程序,注意书写格式的规范。(本题共3小题,

3题必做。每小题15分,共30分)

源程序:

#include

#include

void main()

{ double x,y ;

printf(“x=”);

scanf(“%lf”,&x);

if(x<-1)

y=log(x*x+1) ;

else if(x<=1)

y= x*(exp(x)-1)*(x-2) ;

else

y=(x+1)/(3*x*x*x) +1 ;

printf(“x=%.2f,y=%.2f\n”);

}

2.所谓水仙花数是指一个三位正整数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为153=13+53+33 。请输出所有的水仙花数。要求一行输出2个水仙花数。

源程序:

#include

void main()

{ int i ,n=0 ,ge,shi,bai;

for(i=100;i<=999;i++)

{ ge=i%10;

shi=i/10%10;

bai=i/100;

if(i==ge*ge*ge+shi*shi*shi+bai*bai*bai)

{ n++;

printf(“%4d%c”,i,n%2==0??\n?,??);

}

}

}

3.编写一个main()函数实现:

(1)定义一个一维数组,从键盘输入10个整数存入该数组(5分);

(2)对该数组按降序排序并输出排序后结果(5分);

(3)然后从键盘上输入一个整数,并将其插入到数组中,使得数组元素的值仍按降序排列(5分)。

(提示:数组长度可定义稍大一些以容纳要插入的数)

源程序:

#include

main()

{int a[11],i,j,t,x;

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

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

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

for(j=0;j<9-i;j++)

if(a[j]

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

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

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

printf("\n");

printf("x=");

scanf("%d",&x);

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

if(x>a[i])

break;

for(j=9;j>=i;j--)

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

a[i]=x;

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

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

相关文档