秋季《C语言程序设计》期末考试题A卷答案答案修改后.docx
《秋季《C语言程序设计》期末考试题A卷答案答案修改后.docx》由会员分享,可在线阅读,更多相关《秋季《C语言程序设计》期末考试题A卷答案答案修改后.docx(13页珍藏版)》请在冰豆网上搜索。
秋季《C语言程序设计》期末考试题A卷答案答案修改后
A卷
2005—2006学年第二学期
《程序设计语言(C)》试卷
参考答案和评分标准
专业班级
姓名
学号
开课系室软件工程系
考试日期2006年7月3日
题号
一
二
三
总分
得分
阅卷人
程序设计语言(C)试卷(A卷)答题卡
说明:
1.选择题和判断题必须填在答题卡上才有效,综述题写在指定位置。
得分
2.本试卷连同封面共13页,不得拆开。
一、单项选择题(正确的答案涂黑或画圈,每题1分,共20分)
1
A
C
D
11
A
C
D
2
A
C
D
12
A
C
D
3
A
B
D
13
A
B
D
4
A
C
D
14
A
B
C
5
A
C
D
15
B
C
D
6
A
C
D
16
A
C
D
7
A
B
D
17
B
C
D
8
A
C
D
18
A
C
D
9
A
B
D
19
A
C
D
10
A
B
C
20
A
B
C
得分
二、读程序填空题(在空格处填写正确答案,每空2分,共20分)
⑴
q—或q=q-1或--q
⑹
x>=0或x>0
⑵
fac/i或1.0/i
⑺
return(-x)或return-x
⑶
s
⑻
n/2或(n+1)/2
⑷
!
feof(fp)或ch!
=EOF
⑼
1
⑸
fp
⑽
1
一、单项选择题(每题1分,20分)
1.现有程序完成a、b两个值的交换,空白处正确的答案应该是_______。
main()
{inta,b,t;
t=b ;
b=a ;
________ ;
}
A.a=bB.a=tC.b=tD.t=a
2.如果程序中用到标准库函数log(),那么该程序应含下面哪条语句_________。
A.#include”stdio.h”B.#include”math.h “
C.#include”string.h”D.#include”stdlib.h”
3.intx=6;则下方程序段运行结果是_________。
switch(x)
{case1:
printf(“apple“);break;
case2:
printf(“hello“);break;
case3:
printf(“world“);
default:
printf(“thankyou“);
}
A.appleB.helloC.thankyouD.worldthankyou
4.在C语言中,不合法的int型常量是_________。
A.32767B.0578C.0XAACD.32768L
5.设x,y,z和k都是int型变量,则执行表达式:
x=(y=2,z=15,k=30)后,x的值为________。
A.52B.30C.15D.2
6.设x为int型变量,则执行以下语句后,x的值为________。
x=10;x+=x-=x-x;
A.30B.20C.10D.40
7.在下列运算符中,优先级最高的运算符是()
A.==B.!
=C.%D.||
8.设x,y,t均为int型变量,则执行语句:
x=y=3;t=++x||--y;后y的值为________。
A.4B.3C.2D.1
9.语句printf(“%%%%\n”);的输出为________。
A.####B.%%%%\nC.%%D.%%%%
10.#include
main()
{
chara1,a2,a3,a4,a5,a6;
scanf(“%c%c%c%c”,&a1,&a2,&a3,&a4);
a5=getchar();
a6=getchar();
putchar(a1);
putchar(a2);
printf(“%c%c\n”,a5,a6);
}
如:
123回车
45678回车结果是_________。
A.1267B.1256C.1278D.1245
11.若有intx,y,z;scanf("%d%d%d",&x,&y,&z);则运行时输入方式错误的是________。
A.456B.4,5,6
C.4D.45
566
12.下面程序段执行结果是________。
inty=25;
while(y--);
printf(“y=%d”,y);
A.0B.-1C.1D.无限循环
13.不正确的字符串赋值或赋初值方式是________。
A.char*str;str="string";
B.charstr[7]={'s','t','r','i','n','g',‘\0’}C.charstr1[10];str1="string";
D.charstr1[]="string",str2[]="12345678";
14.对于inta[]={1,2,3,4,5,6},*p;p=a;*(p+3)+=2;则程序段执行后*(p+3)的值为_________。
A.5B.3C.4D.6
15.若有说明语句:
inta[]={1,2,3,4,5,6,7,8},*p=a;且0≤i≤7,则________是对数组元素的错误表示。
A.p+iB.a[p-a]C.*(a+i)D.p[i]
16.以下选项中不能正确把c1定义成结构体变量的是
A.structcolorB.structcolorcl
{intred;{intred;
intgreen;intgreen;
intblue;intblue;
};};
structcolorc1;
C.structcolorD.struct
{intred;{intred;
intgreen;intgreen;
intblue;intblue;
}cl;}cl;
17.对于inta[3][2]={1,2,3};元素a[1][1]的值为_________。
A.0B.1C.3D.不能确定
18.设x和y均为int型变量,则执行下面的循环后,y的值为______。
for(y=1,x=1;y<=20;y++)
{if(x==8)
break;
if(x%2==1)
{x+=5;
continue;
}
x-=3;
}
A.2B.4C.6D.8
19.假定所有变量均已正确定义,则下列程序段运行后x的值是_________。
a=0;b=0;c=0;
x=35;
if(!
a)x=x-1;
elseif(b)
x=x+1;
if(c)x=3;
elsex=4;
A.34B.4C.35D.3
20.现有一个文本文件,想以追加方式打开,下列方式正确的是__________。
if((fp=fopen("fname.dat","____"))==NULL)
{printf("cannotopenfile!
\n",num);exit(0);}
A.wB.abC.bD.a
二、读程序填空(每空2分,共20分)
1.判断一个字符串是否回文(顺读和逆读相同,如字符串“abcba”就是回文)
/*该函数返回值为1代表是回文,返回0代表不是回文*/
intverse(char*p)
{char*q=p;
while(*q!
=’\0)
q++;
⑴;
while(pif(*p++!
=*q--)return0;
return1;
}
2.以下函数的功能是计算s=1+
+
+……+
的值,请填空。
doublefun(intn)
{doubles=0.0,fac=1.0;inti;
for(i=1;i<=n;i++)
s=s+⑵;
return⑶;
}
3.下面的程序用来统计文本文件fname.dat中的字符数,将程序补充完整。
#include"stdio.h"
voidmain()
{FILE*fp;
longnum=0;
charch;
if((fp=fopen("fname.dat","r"))==NULL)
{printf("cannotopenfile!
\n",num);exit(0);}
ch=fgetc(fp);
while(⑷)
{num++;ch=fgetc(fp);}
printf("num=%d\n",num);fclose(⑸);}
4.设fun()是用户自定义函数,其功能是求一个数的绝对值,请填空。
#include
#include"math.h"
intfun(intx)
{if⑹;
return(x)
else⑺;
}
main()
{inta;
scanf("%d",&a);
printf("绝对值是%d\n",fun(a));
}
5.将数组a中的n个整数按相反顺序存放。
voidinv(intx[],intn)
{intt,k,j;
for(k=0;k<⑻;k++)
{t=x[n-1-k];
x[n-1-k]=x[k];
x[k]=t;
}
}
voidmain()
{inti,a[6]={3,7,9,11,0,6};
inv(a,6);
for(i=0;i<6;i++)
printf("%d,",a[i]);
printf("\n");
}
6.下列程序段运行后输出的结果是a=⑼,b=⑽。
intx=0,a=0,b=0;
switch(x)
{case0:
b++;
case1:
a++;break;
case2:
a++;b++;
}
printf(“a=%d,b=%d\n”,a,b);
得分
三、编程题(60分,在下面的空白处编写程序)
1、编程计算下面函数的值,其中x为实数,由键盘输入。
(12分)
-1x≤-5
y=(x-1)2-5x≥5
参考答案:
#include
main()
{
floatx,y;
printf("请输入实数x:
");
scanf("%f",&x);
if(x<=-5)y=-1;
elseif(x<5)
y=(x-1)*(x-1);
else
y=1/x;
printf("y=%f",y);
}
[评分标准]:
头文件、程序框架占2分;读入x值占1分;每个分支语句各占3分,共9分。
2.设有一组数{12,32,23,45,44,65,67,9,100,80},编写一个完整的程序实现从小到大排序。
(12分)
参考答案:
#include
main()
{
inta[10]={12,32,23,45,44,65,67,9,100,80};
inti,j,t;
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
}
[评分标准]:
头文件、程序框架占2分;数组a定义及初始化占2分;外层循环占2分;内层循环占2分;元素交换部分占4分。
3.编程将字符串s2的内容连接到字符串s1后,如s1中存放“hello”,s2中存放“world”,连接后s1的内容为“helloworld”(不能使用strcat函数,字符串结束标志为’\0’)。
(10分)
参考答案:
#include
#include
main()
{
charstr1[80],str2[80];
inti=0,j=0;
printf("输入两个字符串:
");
gets(str1);
gets(str2);
i=strlen(str1);
while(str1[i++]=str2[j++]!
='\0');
printf("连接之后的字符串为:
%s",str1);
}
[评分标准]:
头文件、程序框架占2分;字符数组str1、str2初始化占3分;求出str1长度占2分;str2内容赋值到str1中占3分。
4.编一个名为average的函数,其功能是求形参数组的平均值。
调用average的主函数部分源代码如下。
(10分)
floataverage(floatscore[],intn)
{
inti;
floarave=0;
for(i=0;iave+=score[i];
returnave/n;
}
main()
{floatscore[10],aver;
inti;
printf("input10scores:
\n");
for(i=0;i<10;i++)
scanf("%f",&score[i]);
printf("\n");
aver=average(score,10);
printf("averagescoreis%5.2f",aver);
}
[评分标准]:
函数头正确定义占4分;ave初始化及返回值占2分;循环求累加和占4分。
5.编写一个函数fun,其功能是:
将一个字符串str1(元素起始下标为0)中的所有偶数位上的小写字母复制成为一个新字符串str2。
如str1串为“abCDefgh123”,则新串str2为“aeg”。
主函数部分源代码如下。
(10分)
#include
#include
fun(charstr1[],charstr2[])
{/*请填写函数主体内容*/
inti=0,j=0;
while(str1[i]!
='\0')
{
if(str1[i]>='a'&&str1[i]<='z')
str2[j++]=str1[i];
i+=2;
}
str2[j]='\0';
}
main()
{charstr1[20],str2[10];
printf("inputastring\n");
gets(str1);
fun(str1,str2);
puts(str2);
}
[评分标准]:
变量i、j定义及初始化部分占1分;str1结束条件判断占2分;偶数位及小写字母判断占4分;str2赋字符串结束标记占1分;str2中符合条件的字符赋值到str1中占2分。
6.编写一个函数,函数的功能是:
为一个偶数寻找两个素数,这两个素数之和等于该偶数,求满足这样要求的素数的组数。
(6分)
/*isp是求素数的函数,返回1代表m是素数,返回0代表m不是素数*/
isp(intm)
{inti;
for(i=2;iif(m%i==0)break;
if(i==m)return1;
elsereturn0;
}
fun(intn,intcount)/*n是偶数,count是符合条件的组数*/
{
inti;
count=0
for(i=2;iif(isp(i)&&isp(n-i))
count++;
}
[评分标准]:
count初始化占1分;循环控制占2分,函数调用判断是否为素数及两个素数的和为n部分占2分;符合条件的数统计占1分。