20学年第二学期c语言期末考题及解答 3.docx
《20学年第二学期c语言期末考题及解答 3.docx》由会员分享,可在线阅读,更多相关《20学年第二学期c语言期末考题及解答 3.docx(10页珍藏版)》请在冰豆网上搜索。
20学年第二学期c语言期末考题及解答3
xxxx大学
xxxx学年第二学期期末
《C程序设计》
考试A卷
班级______________学号_________
姓名______________成绩_________
班号学号姓名成绩
《C程序设计》期末考试卷
注意事项:
1、此卷为闭卷考试,120分钟完成;
2、笔试成绩为卷面成绩×0.6。
题目:
一、选择题(30分,每题3分)
1、下列说法不正确的是A。
A)主函数main中定义的变量在整个文件或程序中有效
B)不同函数中,可以使用相同名字的变量
C)形式参数是局部变量
D)在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效
2、程序段:
intk=1;for(k;1;k++)if(k)break;
for语句的循环次数是B。
A)0B)1C)2D)死循环
3、以下有关switch语句的正确说法是B。
A)break语句是语句中必须的一部分
B)在switch语句中可以根据需要使用或不使用break语句
C)break语句在switch语句中不可以使用
D)在switch语句中的每一个case都要用break语句
4、在下面的语句中:
只有一个在功能上与其他三个语句不等价(其中s1和s2表示某个C语句),这个不等价的语句是D。
A)if(a) s1;else s2;B)if(!
a)s2;else s1;
C)if(a!
=0) s1;else s2;D)if(a==0) s1;else s2;
5、以下叙述不正确的是D。
A)一个变量的作用域的开始位置完全取决于变量定义语句的位置
B)全局变量可以在函数以外任何位置定义
C)局部变量的生存期只限于本次函数调用,因此不可能将局部变量的运算结果保存至下一次调用
D)一个变量说明为static存储类是为了限制其它编译单位引用
6、若用数组名作为函数调用时的实参,则实际上传递给形参的是A。
A)数组的首地址 B)数组的第一个元素值
C)数组中全部元素的值D)数组元素的个数
7、声明为inta[3][4];下列表达式与a[2][1]等价的有C。
A)*(a[1]+2);B)a[9];C)*(a[2]+1);D)*(*(a+2))+1;
8、下列的定义中,正确使用字符串初始化的是C。
A)char str[7]="FORTRAN";
B)char str[]={F,O,R,T,R,A,N,0};
C)char *str="FORTRAN";
D)char str[]={'F','O','R','T','R','A','N'};
9、设有intx,y; if(x=y)printf("xisequaltoy.");
以下语句判断x和y是否相等,正确的说法是该语句B。
A)语法错 B)不能判断x和y是否相等
C)编译出错 D)能判断x和y是否相等
10、fread(buf,32,2,fp)的功能D。
A)从fp文件流中读出整数32,存放在buf中
B)从fp文件流中读出32个字节的字符,存放在buf中
C)从fp文件流中读出整数32和2,存放在buf中
D)从fp文件流中读出2块32个字节的字符,存放在buf中
二、填空题(20分,每题4分)
1、下面这个程序功能:
读入5个整数,当程序读入的数据为正整数时,则显示该数,否则,不显示。
读入5个数据后,程序结束运行。
#include
voidmain()
{
int i,n;
for(i=1;i<=5;i++)
{
printf("Pleaseentern:
");
scanf("%d",&n);
if(n<=0) continue;
printf("n=%d\n",n);
}
printf("Programisover!
\n");
}
2、以下程序对输入的1000以下的正整数(不含1000),求出其相应的个位数、十位数和百位数。
#include
voidmain()
{
intx,a,b,c;
do{
printf("输入一个1000以下的整数:
");
scanf("%d",&x);
printf("\n");
}while( x<0||x>=1000 );
a=x/100;
b=(x-a*100)/10;
c= x%10 ;
printf("%d的个位数是%d,十位数是%d,百位数是%d\n",x,c,b,a);
}
3、用“起泡法”对输入的小于10个字符排序后按从小到大的次序输出。
#include
#include
#defineN11
voidsort(charstr[N],intn);
voidmain()
{
charstr[N];
inti;
printf(“输入任意长度小于10的字符串:
”);
scanf("%s",str);
printf("\n")
sort(str,strlen(str));
for(i=0;str[i]!
='\0';i++)
printf("%c",str[i]);
printf("\n");
}
voidsort(char*str,intn)
{
inti,j;
chart;
for(j=1;jfor(i=0;iif(str[i]>str[i+1])
{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
4、以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。
(本程序中二阶矩阵用一维数组来表示。
)
例如,矩阵为:
3003
2573
1042
则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。
add(intm,intn,intarr[])
{
inti,j,sum=0;
for(i=0;ifor(j=0;jsum=sum+*((arr+i*n)+j);
for(j=0;jfor(i=1;isum=sum+arr[i*n+j];
return(sum);
}
5、假设有40个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),试统计调查结果,并用*打印出如下形式的分数统计直方图。
Grade Histogram
1 *****
2 **********
3 *******
...
10**
#include
#defineN40
voidmain()
{
int i,j,grade;
int score[N],count[11]={0};
printf("Pleaseentertheresponsescore:
\n");
for(i=0;i scanf( “%d”,&score[i] );
for(i=0;i count[score[i]]++ ;
printf("Grade\tCount\tHistogram\n");
for(grade=1; grade<=10 ;grade++)
{
printf("%5d\t",grade);
for(j=0; j printf("%c",'*');
printf("\n");
}
}
三、编程题(50分)
编程题缩进、空格、空行、标识符命名等编程规范占2分。
1、下面程序的功能是求解爱因斯坦数学题。
爱因斯坦曾出过这样一道数学题:
有一条长阶梯,若每步跨2阶,最后剩下1阶;若每步跨3阶,最后剩下2阶;若每步跨5阶,最后剩下4阶;若每步跨6阶,最后剩下5阶;只有每步跨7阶,最后才正好1阶不剩。
编程打印这条阶梯共有多少阶。
(10分)
#include
voidmain()
{
int x,find;
x=0;
do{
++x;
find=x%2==1&&x%3==2&&x%5==4&&x%6==5&&x%7==0;
}while(!
find);
printf("x=%d\n",x);
}
2、编写程序输出3到10000内的可逆素数。
可逆素数是指:
一个素数将其各位数字的顺序倒过来构成的反序数也是素数。
如157和751均为素数,它们是可逆素数。
(20分)
要求:
使用子函数实现,intprime(inta)函数用于判定素数,1为素数,0为非素数;intinvert(inta)函数用于倒序一个数,如a=123,则invert函数返回值为321。
#include
#include
#include
intinvert(inta)
{
ints=0;
while(a>0)
{
s=10*s+a%10;
a/=10;
}
returns;
}
intprime(inta)
{
inti;
for(i=2;i<=(int)sqrt(a);i++)
if(a%i==0)return0;
return1;
}
intmain()
{
inti;
for(i=3;i<10000;i++)
if(prime(i))
if(prime(invert(i)))printf("%5d",i);
printf("\n");
return0;
}
3、给定程序中,函数fun的功能是:
将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。
例如:
形参s所指的字符串为:
def35adh3kjsdf7,执行结果为:
defadhkjsdf3537。
(20分)
#include
void fun(char *s)
{
int i, j=0, k=0;
char t1[80], t2[80];
for(i=0; s[i]!
=’\0’; i++)
if(s[i]>=’0’ && s[i]<=’9’)t2[j++]=s[i];
else t1[k++]=s[i];
for(i=0; i for(i=0; i}
voidmain()
{
char s[80]="def35adh3kjsdf7";
printf("\nThe original string is :
%s\n",s);
fun(s);
printf("\nThe result is :
%s\n",s);
}