2008级C语言程序设计试卷_A带答案(2009.6)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

天津工业大学200 8 ~200 9 学年第 2 学期
C 程序设计试卷(A)
学院班级学号姓名
注意事项:1、本试卷共13 页,满分为100 分,考试时间为110 分钟。

2、标准答题卡使用2B铅笔涂写;文字题答题时请使用蓝、黑钢笔或圆珠笔,
不得使用红颜色墨水笔。

二、阅读程序题答题处:(每空3分,共30分)
四、完善程序填空题答题处:(每空2分,共18分)
一、单项单选题:(每题 1 分,共40 分)
(说明:请将正确答案按照题干上【】内的序号涂写“标准答题卡”)
1.以下标识符中,能够作为变量名使用的是【1】。

A) n_1 B) char
C) x(2) D) 2_a
2.若有定义语句char ch='\072'; 则变量ch 【2】。

A) 定义错误B) 包含1个字符
C) 包含3个字符D) 包含4个字符
3.已知字母B的ASCII码值为66,则运行下面程序段后,输出结果是【3】。

char ch1; ch1='B'+'5'-'3'; printf("%d,%c",ch1,ch1);
A) D,D B) 68,D
C) D,68 D) 68,68
4.若有如下语句:
int x; float y;
scanf("k=%d,f=%f",&x,&y);
则能够正确的为变量x输入5、为变量y输入3.2的方法是【4】。

说明:备选答案中的<CR>表示回车符
A) 5 3.2 <CR> B) 5 <CR> 3.2 <CR>
C) k=5,f=3.2 <CR> D) x=5,y=3.2 <CR>
int k=10; printf("%d,%o,%x",k,k,k);
A) 12,a,10 B) 12,10,a
C) 10,12,a D) 10,a,12
6.判断char 型变量ch 是否为小写字母的正确表达式是【6】。

A) ("a"<=ch) && (ch<="z") B) ("a"<=ch) || (ch<="z")
C) ('a'<=ch) && (ch<='z') D) ('a'<=ch) || (ch<='z')
7.下列表达式中,值为0的是【7】。

A) 3%4 B) 3<=4
C) 3.0/4 D) 3/4
8.执行下列程序段后,变量a的值是【8】。

int a=2,b;
a=(b=3,b+5,b++);
A) 2 B) 3
C) 4 D) 8
9.执行下列程序段后,输出结果是【9】。

int x=5,y=2;
y*=x+7%4; printf("y=%d ",y);
A) y=11 B) y=12
C) y=13 D) y=16
10.sizeof(double)是【10】。

A) 一个整型表达式B) 一个双精度表达式
C) 一个函数调用D) 一个语法有错误的表达式
11.执行下列程序段后,输出结果是【11】。

int a=5,b=4,c=3; printf("%d\n",a||b&c);
A) 0 B) 1
C) 5 D) 7
12.下列选项中,若所有变量均已正确说明且有初始值,那么错误的C语句是【12】。

A) ++k; B) a=b=c+2;
C) k=a==b; D) a=b+c=2;
int x=3,y=4,z=5;
if(x>y) z=y;y=x;x=z;
printf("x=%d y=%d z=%d",x,y,z);
A) x=5 y=3 z=5 B) x=4 y=3 z=4
C) x=3 y=4 z=4 D) x=3 y=4 z=5
14.执行下列程序段后,输出结果是【14】。

int x=5,y;
y=x>=5? x+2:x-2; printf("%d",y);
A) 3 B) 5
C) 7 D) 编译出错,没有输出结果
15.在嵌套使用if语句时,C语言规定else总是【15】。

A) 和之前与其具有相同缩进位置的if配对
B) 和之前与其最近且未配对的if配对
C) 和之前与其最近且不带else的if配对
D) 和之前的第一个if配对
16.以下是if语句的基本形式:
if (表达式) 语句
其中“表达式”【16】。

A) 必须是逻辑表达式B) 必须是关系表达式
C) 必须是逻辑表达式或关系表达式D) 可以是任意合法的表达式
17.执行下列程序段后,输出结果是【17】。

int c=4;
switch(c)
{
case 2:
case 4: c++;
case 3: c++;break;
case 5: c++;
}
printf("%d",c);
A) 5 B) 6
C) 7 D) 编译时有语法错误,没有输出结果
int k=5;
while(--k)
printf("%d",k-=3);
A) 1 B) 2
C) 4 D) 死循环
19.执行下列程序段后,输出结果是【19】。

int i,k;
for(i=0;i<4;i++,i++)
for(k=1;k<3;k++)
printf("*");
A) * B) **
C) **** D) ********
20.若变量已正确定义,则以下能正确计算f=n!的程序段是【20】。

A) f=0;
for(i=1;i<=n;i++) f*=i; B) f=1;
for(i=n;i>1;i++) f*=i;
C) f=1;
for(i=1;i<=n;i++) f*=i; D) f=0;
for(i=n;i>=2;i--) f*=i;
21.有下面的程序段,则【21】。

int x=10;
do
{ x=x-1;} while(x=0);
A) 循环体一次也不执行B) 循环体执行1次
C) 循环体执行10次D) 是死循环22.下面程序段的执行结果是【22】。

int k;
for(k=4;k<=10;k++)
{
if(k%3==0) continue;
printf("%d",k);
}
A) 45 B) 457810
C) 69 D) 678910
23.若有定义语句char x[]="abc", y[]={'a','b','c'}; 则下列叙述中正确的是【23】。

A) 数组x和数组y完全相同
B) 数组x的元素个数和数组y的元素个数相同
C) 数组x的元素大于数组y的元素个数
D) 数组x的元素个数小于数组y的元素个数
24.下列程序段的输出结果是【24】。

int i,a[10];
for(i=9;i>=0;i--)
a[i]=10-i;
printf("%d%d%d",a[2],a[5],a[8]);
A) 258 B) 369
C) 741 D) 852
25.现要定义一个char型的二维数组s[M][N],存放以下3个字符串"basic"、"C++"、"Java",则M和N的最适当的取值是【25】。

A) 2和6 B) 3和6
C) 2和5 D) 3和5
26.下列程序段的输出结果是【26】。

char s[]="ab\ncd";
printf("%d",strlen(s));
A) 4 B) 5
C) 6 D) 7
27.若有定义int a[][3]={1,2,3,4,5,6,7}; 则【27】。

A) 数组a第一维的大小是2 B) 数组a第一维的大小是3
C) 数组a第一维的大小是4 D) 编译时有语法错误
28.若有定义语句char s[5]="tree",t[7]="flower";
则下列语句中,能正确地输出两个字符串的是【28】。

A) printf("%s%s",s[5],t[7]); B) printf("%c%c",s,t);
C) puts(s);puts(t); D) gets(s);gets(t);
29.若有定义语句char s1[10],s2[10];
则函数调用strcmp(s1,s2)的功能是【29】。

A) 将字符串s2连接到s1末尾B) 将字符串s1连接到s2末尾
C) 测试字符串s1中是否包含s2 D) 比较两个字符串的大小
30.若有定义语句float a=3.1,b,*p=&b;
则对赋值语句*p=a; 和p=&a;的准确解释是【30】。

A) 两个语句都是将变量a的值赋予变量b
B) *p=a是使指针p指向变量a;p=&a是将变量a的值赋予变量b
C) *p=a是将变量a的值赋予变量b;p=&a是使指针p指向变量a
D) 两个语句都是使指针p指向变量a
31.下列程序段的输出结果是【31】。

char *s[]={"East","West","South","North"};
char **p=s;
printf("%d",p[0][1]);
A) 字符W的ASCII码值B) 字符W
C) 字符a 的ASCII码值D) 字符a
32.下列程序段的输出结果是【32】。

int a[]={1,3,5,7,9}, s=0, k, *p;
p=&a[1];
for(k=0;k<2;k++) s+=*(p+k);
printf("%d",s);
A) 8 B) 4
C) 3 D) 1
33.若有定义语句double b[5][4], (*p)[4]=b, *q=b[1];
则不能表示数组元素b[2][3]的是是【33】。

A) *(q+7) B) *(p+2)+3
C) *(b[2]+3) D) (*(p+2))[3]
34.若有如下函数定义
int fun(int *p)
{ ……
return *p; }
则函数fun的返回值是是【34】。

A) 一个整数B) 一个整型指针
C) 形参p的值D) 形参p的地址
35.数组名作函数的参数时,实参数组传递给形参数组的是【35】。

A) 数组的首地址B) 数组中全部元素的值
C) 数组中元素的个数D) 数组中第一个元素的值
36.函数fun的定义形式如下:
void fun(char ch, double x){……}
则以下对函数fun的调用语句中,正确的是【36】。

A) fun("abc",3.0); B) t=fun('D',16.7);
C) fun('65',7.9); D) fun('A',69);
37.若有如下语句:
struct sk{ int a; float b;};
struct sk data,*p=&data;
则对变量data中a成员的正确引用是【37】。

A) (*p).data.a B) (*p).a
C) (*p)->a D) *p->a
38.若有如下定义:
enum myE={e1, e2=5, e3};
则枚举常数e1和e3的值分别是【38】。

A) 0和2 B) 1和3
C) 0和6 D) 4和6
39.若文本文件myfile.txt中原有内容为:Hello,则运行下列程序段后,文件myfile.txt 中的内容是【39】。

FILE *fp;
fp=fopen("myfile.txt","w");
fprintf(fp,"abc");
fclose(fp);
A) Helloabc B) abclo
C) abc D) abcHello
40.执行下列程序段后,输出结果是【40】。

#define PT 3.5
#define S(x) PT*x*x
int a=1,b=2;
printf("%4.1f",S(a+b));
A) 14.0 B) 31.5
C) 7.5 D) 程序有错误,无输出结果
二、阅读程序题:(每题 3 分,共30 分)
(说明:请将正确答案按照题号填写在“填空题答题处”)
1.下列程序的运行结果是【41】。

main()
{ int i,x;
for (i=1,x=1; i<=50; i++)
{ if (x>=6) break;
if (x%2==1)
{ x+=5;
continue; }
x-=3;
}
printf("%d %d\n",x,i );
}
6 2
2.下列程序的运行结果是【42】。

main()
{ int i=105;
printf("%s\n",(i%3==0 && i%5==0 &&i%7==0)? "yes": "no");
}
yes
3.下列程序的运行结果是【43】。

main()
{ unsigned int a=135;
do
{ printf("%d", a%10);
a=a/10;
} while(a!=0);
}
531
4.下列程序的运行结果是_ 【44】。

#define N 5
main()
{ int i,a[N]={1,3,5,7,9},t;
for(i=0;i<=N/2;i++)
{ t=a[i]; a[i]=a[N-i-1]; a[N-i-1]=t; }
for(i=0;i<N;i++)
printf("%d",a[i]);
}
97531
5.下列程序的运行结果是_ 【45】。

main()
{ int i,a[2][4]={45,6,35,-12,100,11,3,-40};
int *p=a[0], *q=p;
for(i=1;i<8;i++)
if(*q<p[i]) q=&p[i];
printf("%d",*q);
}
100
6.下列程序的运行结果是【46】。

main()
{ char *name[ ]={“Follow me”, ”Visual Basic ”,”FORTRAN”, ”Computer design”};
char **p;
int i;
for(i=0; i<4; i+=2 )
{ p=name+i; printf(“%s ”,*p); }
}
Follow me FORTRAN
7.下列程序的运行结果是【47】。

void swap(int a, int b)
{ int t;
t=a, a=b, b=t;
}
main()
{ int x=5,y=10;
swap(x,y); /* 函数调用*/
printf("x=%d,y=%d\n",x,y);
}
x=5, y=10
8.下列程序的运行结果是【48】。

struct st
{ int x; int *y;} *p;
int dt[4]={ 10,20,30,40 };
struct st aa[4]={ 50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};
main()
{ p=aa+1; printf("%d\n",*p->y); }
20
9.下列程序的运行结果是【49】。

f( int a)
{ int b=0;
static int c = 3;
b++; c++;
return( (a+b)*c );
}
main()
{ int a = 2, i;
for(i=0; i<a; i++) printf("%d ", f(a));
}
12 15
10.下列程序的运行结果是【50】。

#define QWE(x, y) x*y
main()
{ int c;
c=QWE(2, 2+3)*2;
printf("c=%d\n", c); }
c=10
三、程序改错题:(每题 6 分,共12 分)
(说明:请将”found error”行的错误更正, 并将正确答案按照题号填写在“程序改错题答题处”,不可增加语句)
1.若一个字符串正读和反读都一样,如level、madam称为回文。

下列程序的功能是判断输入的字符串是否为回文。

#include <stdio.h>
#include <string.h>
main()
{ char str[80];
int i,k,m=1;
scanf("%s", &str); /* found error 【51】*/ 答案:scanf("%s",str);
k=strlen(str);
for(i=0;i<k/2;i++)
if( str[i] != str[k-i] ) /* found error 【52】*/ 答案:if(str[i]!=str[k-i-1])
{ m=0;break;}
if( m=1 ) /* found error 【53】*/答案:if(m==1)
printf("%s是回文\n",str);
else
printf("%s不是回文\n",str);
}
2.下列程序的功能是从键盘输入10个单精度浮点数,求这10个中的最大值、最小值,以及这10个数的平均值,并输出,输出平均值时保留小数点后面2位。

#include <stdio.h>
main()
{ float x,max,min,a,k;
scanf("%f",&x);
max=min= x; /* found error 【54】*/ 答案:max=min=a=x;
for(k=2;k<=10;k++)
{ scanf("%f",&x);
if(max<x) max=x;
else min=x; /* found error 【55】*/答案:if(min>x) min=x;
a+=x; 或else if(min>x) min=x;
}
printf("最大值=%f, 最小值=%f\n",m ax,min);
printf("平均值=%f \n",a/10); /* found error 【56】*/
答案:printf("平均值=%.2f\n",a/10);
}
四、完善程序填空题:(每空2分,共18分)
(说明:请将正确答案按照题号填写在“程序改错题答题处”)
1.下面程序的功能是:利用公式 ++++≈!3!213
2x x x e x
,从键盘输入x ,求e x 的近似值 ,直到最后一项的绝对值小于10-6为止。

#include <stdio.h>
#include <math.h>
main()
{ int n=1;
float t=1.0, x, s= 【57】 ;
scanf("%f", &x);
do
{ 【58】 ;
n+=1;
s+=t;
}while( 【59】 );
printf("%f\n",s);
}
1.0
t=t*x/n ;
fabs(t)>1e-6
2.下面程序的功能是:从键盘输入5个字符串,然后用“选择排序法”按升序排序,最后由小到大的顺序输出。

请填空完善程序。

#include <stdio.h>
#include 【60】
main()
{ char a[5][10],b[10],*p;
int i,j;
for(i=0;i<5;i++) gets(a[i]); /* 输入5个字符串 */
for(i=0;i<4;i++) /* 排序 */
{ p=a[i];
for( 【61】 ;j<5;j++)
if(strcmp(a[j], p)<0) 【62】 ;
if(strcmp(a[i],p)!=0)
{ strcpy(b,a[i]); strcpy(a[i],p); strcpy(p,b); }
}
for(i=0;i<5;i++) puts(a[i]); /* 由小到大的顺序输出5个字符串 */ }
<string.h>
j=i+1
p=a[j]
3.下面程序的功能是:把字符串"I am a teacher."写入到文本文件d:\\test中,要求只把"teacher."读到ss数组中并显示到屏幕上。

请填空完善程序。

#include <stdio.h>
main()
{ FILE 【63】;
char s[20]="I am a teacher.",ss[20]={'\0'}, c;
int i=0;
fp=fopen("d:\\test", 【64】);
fputs(s,fp);
fseek(fp, 【65】, 0);
i=0;
while((c=fgetc(fp))!=EOF)
{ ss[i]=c; i++; };
puts(ss);
fclose(fp);
}
*fp
"w+"
7
标准答案:
一、单项单选题
1"A" 2"B" 3"B" 4"C" 5"C" 6"C" 7"D" 8"B" 9"D" 10"A" 11"B" 12"D" 13"A" 14"C" 15"B" 16"D" 17"B" 18"A" 19"C" 20"C" 21"B" 22"B" 23"C" 24"D" 25"B" 26"B" 27"B" 28"C" 29"D" 30"C" 31"C" 32"A" 33"B" 34"A" 35"A" 36"D" 37"B" 38"C" 39"C" 40"C"
二、阅读程序题
41.6 2
42. yes
43.531
44. 97531
45.100
46.Follow me FORTRAN
47.x=5, y=10
48.20
49.12 15
50. c=10
三、程序改错题
51.scanf("%s", &str);改为scanf("%s", str) ;
52.if( str[i] != str[k-i] ) 改为if(str[i]!=str[k-i-1])
53.if( m=1 )改为if(m==1)
54.max=min= x; 改为max=min=a=x;
55. else min=x; 改为if(min>x) min=x; 或else if(min>x) min=x;
56. printf("平均值=%f \n",a/10); 改为printf("平均值=%.2f\n",a/10);
四、完善程序填空题
57. 1.0或1
58. t=t*x/n
59. fabs(t)>1e-6
60. <string.h>
61. j=i+1
62. p=a[j]
63. *fp
64. "w+"
65. 7。

相关文档
最新文档