资源描述
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
A卷
— 第二学期
《程序设计语言(C)》试卷
参考答案和评分标准
专业班级
姓 名
学 号
开课系室 软件工程系
考试日期 7月3日
题 号
一
二
三
总分
得 分
阅卷人
程序设计语言(C)试卷( A卷) 答题卡
说明: 1.选择题和判断题必须填在答题卡上才有效, 综述题写在指定位置。
得分
2.本试卷连同封面共13页, 不得拆开。
一、 单项选择题( 正确的答案涂黑或画圈,每题1分, 共20分)
1
A
g
C
D
11
A
g
C
D
2
A
g
C
D
12
A
g
C
D
3
A
B
g
D
13
A
B
g
D
4
A
g
C
D
14
A
B
C
g
5
A
g
C
D
15
g
B
C
D
6
A
g
C
D
16
A
g
C
D
7
A
B
g
D
17
g
B
C
D
8
A
g
C
D
18
A
g
C
D
9
A
B
g
D
19
A
g
C
D
10
A
B
C
g
20
A
B
C
g
得分
二、 读程序填空题( 在空格处填写正确答案, 每空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()
{int a,b,t;
t=b ;
b=a ;
________ ;
}
A. a=b B. a=t C. b=t D. t=a
2. 如果程序中用到标准库函数log(), 那么该程序应含下面哪条语句_________。
A. #include ”stdio.h” B. #include ”math.h ”
C. #include ”string.h” D. #include ”stdlib.h”
3. int x=6;则下方程序段运行结果是_________。
switch(x)
{ case 1: printf(”apple”);break;
case 2: printf(”hello”);break;
case 3: printf(”world ”);
default: printf(”thank you”);
}
A. apple B. hello C. thank you D. world thank you
4. 在C语言中, 不合法的int型常量是_________。
A. 32767 B. 0578 C. 0XAAC D. 32768L
5. 设x, y, z和k都是int型变量, 则执行表示式: x=(y=2, z=15, k=30)后, x的值为________。
A. 52 B. 30 C. 15 D. 2
6. 设x为int型变量, 则执行以下语句后, x的值为________。
x=10; x + = x - = x - x;
A. 30 B. 20 C. 10 D. 40
7. 在下列运算符中, 优先级最高的运算符是( )
A.= = B.!= C.% D.||
8. 设x, y, t均为int型变量, 则执行语句: x=y=3; t=++x||--y; 后y的值为________。
A. 4 B. 3 C. 2 D. 1
9. 语句 printf(”%%%%\n”); 的输出为________。
A. #### B. %%%%\n C. %% D. %%%%
10. #include<stdio.h>
main()
{
char a1,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. 1267 B. 1256 C.1278 D. 1245
11.若有int x, y, z ; scanf("%d%d%d",&x,&y,&z); 则运行时输入方式错误的是________。
A.4 5 6 B. 4, 5, 6
C. 4 D. 4 5
5 6 6
12. 下面程序段执行结果是________。
int y=25;
while(y--);
printf(”y=%d”,y);
A. 0 B. -1 C. 1 D. 无限循环
13. 不正确的字符串赋值或赋初值方式是 ________。
A. char *str; str= "string";
B. char str[7]={ 's', 't', 'r', 'i' , 'n', 'g', ‘\0’}
C. char str1[10]; str1= "string";
D. char str1[]= "string", str2[]= "12345678";
14. 对于int a[ ]={1,2,3,4,5,6}, *p; p=a; *(p+3)+ = 2; 则程序段执行后*(p+3)的值为_________。
A. 5 B. 3 C . 4 D. 6
15. 若有说明语句: int a[ ]= {1,2,3,4,5,6,7,8}, *p=a ; 且 0≤i≤7, 则________是对数组元素的错误表示。
A. p + i B.a[p-a] C. *(a + i) D.p[i]
16.以下选项中不能正确把c1定义成结构体变量的是
A. struct color B. struct color cl
{ int red; { int red;
int green; int green;
int blue; int blue;
}; };
struct color c1;
C. struct color D. struct
{ int red; { int red;
int green; int green;
int blue; int blue;
} cl; } cl ;
17.对于int a[3][2] = {1, 2, 3}; 元素a[1][1]的值为_________。
A.0 B. 1 C. 3 D. 不能确定
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.2 B.4 C.6 D.8
19. 假定所有变量均已正确定义, 则下列程序段运行后x的值是_________。
a=0;b=0;c=0;
x=35;
if(!a) x=x-1;
else if(b)
x=x+1;
if(c) x=3;
else x=4;
A.34 B.4 C.35 D.3
20. 现有一个文本文件, 想以追加方式打开, 下列方式正确的是__________。
if((fp=fopen("fname.dat","____"))==NULL)
{printf("can not open file! \n",num); exit(0);}
A. w B.ab C.b D.a
二、 读程序填空( 每空2分, 共20分)
1.判断一个字符串是否回文( 顺读和逆读相同,如字符串”abcba”就是回文)
/* 该函数返回值为1代表是回文, 返回0代表不是回文 */
int verse(char *p)
{ char *q=p;
while(*q!=’\0)
q++;
⑴ ;
while(p<q)
if(*p++!=*q--) return 0;
return 1;
}
2.以下函数的功能是计算s=1+++……+的值, 请填空。
double fun(int n)
{ double s=0.0,fac=1.0; int i;
for(i=1;i<=n;i++)
s=s+ ⑵ ;
return ⑶ ;
}
3.下面的程序用来统计文本文件fname.dat中的字符数, 将程序补充完整。
#include "stdio.h"
void main( )
{ FILE *fp;
long num=0;
char ch;
if((fp=fopen("fname.dat","r"))==NULL)
{printf("can not open file! \n",num); exit(0);}
ch=fgetc(fp);
while( ⑷ )
{ num++; ch=fgetc(fp) ; }
printf("num=%d\n",num); fclose( ⑸ ); }
4. 设fun()是用户自定义函数, 其功能是求一个数的绝对值,请填空。
#include <stdio.h>
#include "math.h"
int fun(int x)
{ if ⑹ ;
return(x)
else ⑺ ;
}
main()
{ int a;
scanf("%d",&a);
printf("绝对值是%d\n", fun(a)) ;
}
5.将数组a中的n个整数按相反顺序存放。
void inv(int x[ ], int n)
{ int t,k,j;
for(k=0;k< ⑻ ;k++)
{ t=x[n-1-k];
x[n-1-k]=x[k];
x[k]=t;
}
}
void main()
{ int i,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= ⑽ 。
int x=0,a=0,b=0;
switch(x)
{case 0: b++;
case 1: a++;break;
case 2: a++;b++;
}
printf(”a=%d,b=%d\n”,a,b);
得分
三、 编程题( 60分, 在下面的空白处编写程序)
1、 编程计算下面函数的值, 其中x为实数, 由键盘输入。( 12分)
-1 x≤-5
y= ( x-1)2 -5<x<5
x≥5
参考答案:
#include <stdio.h>
main()
{
float x,y;
printf("请输入实数x:");
scanf("%f",&x);
if(x<=-5) y=-1;
else if(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 <stdio.h>
main()
{
int a[10]={12,32,23,45,44,65,67,9,100,80};
int i,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 <string.h>
#include <stdio.h>
main()
{
char str1[80],str2[80];
int i=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分)
float average(float score[],int n)
{
int i;
floar ave=0;
for(i=0;i<n;i++)
ave+=score[i];
return ave/n;
}
main()
{float score[10], aver;
int i;
printf("input 10 scores: \n");
for(i=0; i<10; i++)
scanf("%f", &score[i]);
printf("\n");
aver=average(score,10);
printf("average score is %5.2f", aver);
}
[评分标准]: 函数头正确定义占4分; ave初始化及返回值 占2分; 循环求累加和占4分。
5. 编写一个函数fun, 其功能是: 将一个字符串str1( 元素起始下标为0) 中的所有偶数位上的小写字母复制成为一个新字符串str2。如str1串为”abCDefgh123”, 则新串str2为”aeg”。主函数部分源代码如下。( 10分)
#include<stdio.h>
#include<string.h>
fun(char str1[], char str2[])
{ /*请填写函数主体内容*/
int i=0,j=0;
while(str1[i]!='\0')
{
if(str1[i]>='a'&&str1[i]<='z')
str2[j++]=str1[i];
i+=2;
}
str2[j]='\0';
}
main()
{ char str1[20],str2[10];
printf("input a string\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(int m)
{int i;
for(i=2;i<m;i++)
if(m%i==0) break;
if(i==m) return 1;
else return 0;
}
fun(int n,int count) /* n是偶数, count是符合条件的组数 */
{
int i;
count=0
for(i=2;i<n/2;i++)
if(isp(i)&&isp(n-i))
count++;
}
[评分标准]: count初始化占1分; 循环控制占2分, 函数调用判断是否为素数及两个素数的和为n部分占2分; 符合条件的数统计占1分。
展开阅读全文