天津师范大学考试试卷
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++)