20学年第二学期c语言期末考题及答案.docx
《20学年第二学期c语言期末考题及答案.docx》由会员分享,可在线阅读,更多相关《20学年第二学期c语言期末考题及答案.docx(11页珍藏版)》请在冰点文库上搜索。
20学年第二学期c语言期末考题及答案
xxx大学
xxxx学年第一学期期末
《C程序设计》
考试A卷
班级______________学号_________
姓名______________成绩_________
班号学号姓名成绩
《C程序设计》期末考试卷
注意事项:
1、此卷为闭卷考试,120分钟完成;
2、笔试成绩为卷面成绩*0.7。
题目:
一、阅读下列程序并回答问题(20分,每题5分)
1、若有以下程序
#include
voidmain()
{
chara[20];
scanf(“%s”,a);
printf(“%s\n”,a);
}
从键盘上输入19个字符:
oneworldonedream,则输出为D。
A.oneworldonedreamB.oneworldoneC.oneworldD.one
2、有一函数关系如下:
x-1x<0
y=xx=0
x+1x>0
下列程序能够正确表示上述关系的________________C_________。
A.y=x+1;B.y=x-1;
if(x>=0)if(x!
=0)
if(x==0)y=x;if(x>0)y=x+1;
elsey=x-1;elsey=x;
C.if(x<=0)D.y=x;
if(x<0)y=x-1;if(x<=0)
elsey=x;if(x<0)y=x-1;
elsey=x+1;elsey=x+1;
3、请写出以下程序的输出结果:
____a=12,b=9,c=3_____________。
#include
voidswap(int*ptr1,int*ptr2)
{
inti;
i=*ptr1;
*ptr1=*ptr2;
*ptr2=i;
}
voidexchange(int*q1,int*q2,int*q3)
{
if(*q1<*q2)swap(q1,q2);
if(*q1<*q3)swap(q1,q3);
if(*q2<*q3)swap(q2,q3);
}
voidmain()
{
inta,b,c;
a=9,b=3,c=12;
exchange(&a,&b,&c);
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
}
4、若有以下程序
#include
intsum(intk);
voidmain()
{
ints,i;
for(i=1;i<=10;i++)s=sum(i);
printf(“s=%d\n”,s);
}
intsum(intk)
{
staticintx=0;
x+=k;
return(x);
}
(1)上述程序的功能是什么?
运行结果是什么?
(2)若将sum()函数中的变量说明语句staticintx=0;改为intx=0;,程序的运行结果是又什么?
为什么?
(1).计算1+2+……+10的值
s=55
(2)
s=10
二、程序填空题(20分,每题5分)
1、下面程序是整元换零钱问题。
把1元兑换成1角、2角和5角的零钱,打印所有的不同的换法。
#include
voidmain()
{
intx,y,z,n;
_n=0_____;
for(x=0;x<=10;x++)
for(y=0;y<=5;y++)
for(z=0;z<=2;z++)
if(_x+y*2+z*5==10__________)
{
n++;
printf("换法%2d:
1角%2d张+2角%d张+5角%d张\n",n,x,y,z);
}
}
2、以下函数利用插入排序方法对含有n个元素的数组x[]进行排序。
voidinsert(intx[],intn)
{
inti,j;
inttemp;
for(i=1;i{
temp=x[i];
j=i-1;
while(j>=0&&temp{
x[j+1]=x[j];
j--;
}
x[j+1]=temp;
}
}
3、下面程序显示从3起小于100的所有双素数(双素数:
如果p和q都是素数且q=p+2,则p/q称为双素数,例如3/5,5/7都是双素数)。
#include"stdio.h"
intprime(intm);
intmain(intargc,char*argv[])
{
intp,q;
for(p=3;p<100;p+=2)
{
q=p+2;
if(prime(p)&&prime(q))printf("%d/%d\n",p,q);
}
return0;
}
intprime(intm)
{
inti;
for(i=2;i<=m/2;i++)
if(m%i==0)break;
if(i>m/2)return1;
elsereturn0;
}
4、下面的函数strcat()实现将字符串str2连接到字符串str1的功能。
请在程序的空白处填入一条语句或一个表达式。
char*strcat(char*str1,char*str2)//此函数类型为字符指针型,函数名为srrcat
{
char*t=str1;
while(*str1)str1++;
while(*str2)
{
*str1=*str2;
str1++;
str2++;
}
*str1=‘\0’;
return(t);
}
三、编程题(60分)
1、输入一个正整数n(110分
a[i][j]=i*n+j+1(0≤i≤n-1,0≤j≤n-1)
例如n=3时:
123147
A=456转置成B=258
789369
#include
voidmain()
{
intn;
printf(“请输入一个正整数\n”);
scanf(“%d”,&n);
inta[6][6],b[6][6],i,j;
for(i=0;ifor(j=0;ja[i][j]=i*n+j+1;
for(i=0;ifor(j=0;jb[i][j]=a[j][i];
printf(“得到的方阵为\n”);
for(i=0;i{
for(j=0;jprintf(“%-5d”,b[i][j]);
printf(“\n”);
}
}
2、请设计函数doubleexp(doublex),利用e
=1+x+x2/2!
+x3/3!
+x4/4!
+…,计算ex的近似值,要求误差小于10-6。
20分
#include
#include
doubleexp(doublex);
voidmain()
{
doublex;
printf(“请输入未知数x的值\n”);
scanf(“%lf”,&x);
printf(“近似值为%lf\n”,exp(x));
}
doubleexp(doublex)
{
inti,t=1;
doublesum=1,y=1;
for(i=1;y>=0.000006;i++)
{
t=t*i;
y=pow(x,i)/t;
sum=sum+y;
}
returnsum;
}
3、Fibonacci数列A={1,1,2,3,5,8,…}有如下性质:
30分
a0=a1=1
ai=ai-1+ai-2i>1
对于给定的n,另外有一个由n个元素组成的数列X={x0,x1,…,xn-1},该数列中各元素的值为:
xi=ai/ai+1i=0,1,2,…,n-1,请将X中的元素按由小到大排序,排序用选择法或冒泡法,排序后的数列X输出到文本文件x.txt中,X中的各元素仍以分数形式表示。
例如,当n=5时,排序前的X={1/1,1/2,2/3,3/5,5/8},排序后X={1/2,3/5,5/8,2/3,1/1}。
#include
#include
#definen10
structfenshu
{
intm1;
intm2;
};
voidmain()
{
inti,j,k,a[n+1]={1,1};
for(i=2;ia[i]=a[i-1]+a[i-2];
floatx[n];
fenshuy[n],temp;
for(i=0;i{
x[i]=a[i]/a[i+1];
y[i].m1=a[i];
y[i].m2=a[i+1];
}
floatt;
for(i=0;i{
k=i;
for(j=i+1;jif(x[j]k=j;
if(k!
=i)
{t=x[i];x[i]=x[k];x[k]=t;
temp=y[i];y[i]=y[k];y[k]=temp;}
}
FILE*fp;
if((fp=fopen(“x.txt”,”w”))==NULL)
{
printf(“打开文件出错\n”);
exit(0);
}
for(i=0;ifprintf(fp,”%d/%d,”,y[i].m1,y[i].m2);
fclose(fp);
}