国家开放大学春季学期电大考试C语言程序设计题库题库及答案.docx
《国家开放大学春季学期电大考试C语言程序设计题库题库及答案.docx》由会员分享,可在线阅读,更多相关《国家开放大学春季学期电大考试C语言程序设计题库题库及答案.docx(37页珍藏版)》请在冰豆网上搜索。
![国家开放大学春季学期电大考试C语言程序设计题库题库及答案.docx](https://file1.bdocx.com/fileroot1/2022-12/16/2663e90d-298f-479f-868f-da8a3a40e5e9/2663e90d-298f-479f-868f-da8a3a40e5e91.gif)
国家开放大学春季学期电大考试C语言程序设计题库题库及答案
特别说明:
题号后带有*的,该题有明显错误或疏漏,详细说明见《形考册勘误》
C语言程序设计作业1
(知识点覆盖范围:
第1章至第3章)
一、选择题
1.A2.D3.B4.D5.B6.A7.C8.A9.B10.C
11.C12.A13.B14.D15*.B16*.D17.A
二、填空题
1.;2.}3*.//4*.*/
5.#include6.用户7*.函数头8.printf
9*.void10.43-18=2511.warning12.error
13.0x19(或0X19)14.\n15.D16.72
17.418.119.420.4
21.int22.double23.const24.初始化
25.626.727.6.2528.4
29*.++x30.y=y+131.x32.x+y<=5
33.a<=b&&b!
=534.假35.真36.10
37.DataType38.整型常量表达式39.switch40.不停止
41.1042.break43.return44*.main
三、写出下列每个程序运行后的输出结果
1.*程序代码:
#include
voidmain(){
intx=5;
switch(2*x-3){
case4:
printf("%d",x);
case7:
printf("%d",2*x+1);
case10:
printf("%d",3*x-1);break;
default:
printf("%s","default\n");
}
printf("%s\n","switchend.");
}
运行结果:
1114switchend.
2.程序代码:
#include
voidmain(){
inti,s=0;
for(i=1;i<=6;i++)
s+=i*i;
printf("s=%d\n",s);
}
运行结果:
s=91
3.程序代码:
#include
voidmain(){
inti,s1=0,s2=0;
for(i=0;i<10;i++)
if(i%2)s1+=i;
elses2+=i;
printf("%d%d\n",s1,s2);
}
运行结果:
2520
4.程序代码:
#include
voidmain(){
intn=10,y=1;
while(n--){y++;y++;}
printf("y=%d\n",y);
}
运行结果:
y=21
5.程序代码:
#include
voidmain(){
intf,f1,f2,i;
f1=f2=1;
printf("%d%d",f1,f2);
for(i=3;i<=10;i++){
f=f1+f2;
printf("%d",f);
if(i%5==0)printf("\n");
f1=f2;
f2=f;
}
printf("\n");
}
运行结果:
11235
813213455
6.*程序代码:
#include
#include
voidmain(){
inti,n;
for(n=2;n<=20;n++){
inttemp=(int)sqrt(n);//sqrt(n)求出n的平方根。
然后取整
for(i=2;i<=temp;i++)
if(n%i==0)break;
if(i>temp)printf("%d",n);
}
printf("\n");
}
运行结果:
235711131719
7.程序代码:
#include
constintM=20;
voidmain(){
inti,c2,c3,c5;
c2=c3=c5=0;
for(i=1;i<=M;i++){
if(i%2==0)c2++;
if(i%3==0)c3++;
if(i%5==0)c5++;
}
printf("%d%d%d\n",c2,c3,c5);
}
运行结果:
1064
8.程序代码:
#include
constintM=20;
voidmain(){
inti,s;
for(i=1,s=0;i<15;i++){
if(i%2==0||i%3==0)continue;
printf("%d",i);
s+=i;
}
printf("%d\n",s);
}
运行结果:
157111337
特别说明:
题号后带有*的,该题有明显错误或疏漏,详细说明见《形考册勘误》
C语言程序设计作业2
(知识点覆盖范围:
第4章至第6章)
一、选择题
1.C2.C3.C4.A5.C
二、填空题
1.82.323.604.M*N
5.0~M-16.0~N-17.BB8.1
9.010.111.1112.n+1
13.比较14.复制15.1016.19
三、写出下列每个程序运行后的输出结果
1.(练习题4.2第1小题)程序代码:
#include
voidmain(){
inta[10]={12,39,26,41,55,63,72,40,83,95};
inti,i1=0,i2=0;
for(i=0;i<10;i++)
if(a[i]%2==1)i1++;elsei2++;
printf("%d%d\n",i1,i2);
}
运行结果:
64
2.*程序代码:
#include
#include
voidmain(){
inti;
char*a[5]={"student","worker","cadre","soldier","peasant"};
char*p1,*p2;
p1=p2=a[0];
for(i=0;i<5;i++){
if(strcmp(a[i],p1)>0)p1=a[i];
if(strcmp(a[i],p2)<0)p2=a[i];
}
printf("%s%s\n",p1,p2);
}
运行结果:
workercadre
3.*程序代码:
#include
inta[10]={4,5,6,15,20,13,12,7,8,9};
voidmain(){
inti,s0,s1,s2;
s0=s1=s2=0;
for(i=0;i<10;i++){
switch(a[i]%3){
case0:
s0+=a[i];break;
case1:
s1+=a[i];break;
case2:
s2+=a[i];break;
}
}
printf("%d%d%d\n",s0,s1,s2);
}
运行结果:
422433
4.程序代码:
#include
voidmain(){
chara[]="abcdbfbgacd";
inti1=0,i2=0,i=0;
while(a[i]){
if(a[i]=='a')i1++;
elseif(a[i]=='b')i2++;
i++;
}
printf("%d%d%d\n",i1,i2,i);
}
运行结果:
2311
5.(在二维数组中找最大元素及其下标)程序代码:
#include
voidmain(){
inta[3][4]={{1,2,7,8},{5,6,10,6},{9,12,3,4}};
intm=a[0][0];
intii=0,jj=0;
inti,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]>m){m=a[i][j];ii=i;jj=j;}
printf("%d%d%d\n",ii,jj,a[ii][jj]);
}
运行结果:
2112
6.(又是斐波纳契数列!
)程序代码:
#include
voidmain(){
inta,b;
for(a=1,b=2;b<50;){
printf("%d%d",a,b);
a=a+b;
b=a+b;
}
printf("\n");
}
运行结果:
12358132134
四、写出下列每个函数的功能
1.程序代码:
#include
intSA(inta,intb){
if(a>b)return1;
elseif(a==b)return0;
elsereturn-1;
}
函数功能:
比较两个整数a和b的大小。
如果a大于b则结果为1,a与b相等则结果为0,a小于b则结果为-1
2.程序代码:
intSC(inta,intb,intc){
if(a>=b&&a>=c)returna;
if(b>=a&&b>=c)returnb;
returnc;
}
函数功能:
返回a、b、c三个整数的最大值
3.(注意s初值为1,等于x0/(0+1))程序代码:
doubleSF(doublex,intn){//n为大于等于0的整数
doublep=1,s=1;
inti;
for(i=1;i<=n;i++){
p*=x;
s+=p/(i+1);
}
returns;
}
函数功能:
计算
4.*程序代码:
#include
intSG(intx){//x为大于等于2的整数
inta=(int)sqrt(x);//sqrt(x)取x的平方根
inti=2;
while(i<=a){
if(x%i==0)break;
i++;
}
if(i<=a)return0;elsereturn1;
}
函数功能:
判断整数x是否为素数,是则返回1,不是返回0
5.程序代码:
voidtrans(intx)
{
chara[10];
inti=0,rem;
do{
rem=x%16;
x=x/16;
if(rem<10)a[i]=48+rem;//'0'字符的ASCII码为48
elsea[i]=55+rem;//'A'字符的ASCII码为65
i++;
}while(x!
=0);
while(i>0)printf("%c",a[--i]);
printf("\n");
}
函数功能:
以十六进制形式输出整数x
五、根据下列每个题目要求编写程序
1.
voidfun4(char*a,intb[]){
inti;
for(i=0;i<10;b[i++]=0);
while(*a){
if(*a>='0'&&*a<='9')
b[*a-'0']++;
a++;
}
}
2.
doubleMean(doublea[M][N],intm,intn){
doublev=0;
inti,j;
for(i=0;ifor(j=0;jreturnv/m/n;
}
3.
intFF(inta[],intn)
{return(n<=0)?
1:
a[n-1]*FF(a,n-1);}
4*.(题目居然没有给出不等式!
可能是1+1/2+1/3+...+1/n≥5)
#include
voidmain()
{
inti=0;
doubles=0;
while(s<5)s+=1.0/++i;
printf("n=%d\n",i);
}
5*.(不等式应当是22+42+...+n2<1000)
#include
voidmain()
{
inti=0;//用i作为依次取值偶数的变量
ints=0;//用s作为累加变量
do{
i+=2;
s+=i*i;
}while(s<1000);
printf("n=%d\n",i-2);
}
6*.(应当是计算12+22+...+n2)
#include
voidmain()
{
intn,i,sum;
printf("请输入正整数n:
");
scanf("%d",&n);
if(n<=0){
printf("应输入正整数!
\n");
return;
}
for(i=1,sum=0;i<=n;sum+=i*i,i++);
printf("平方和为:
%d\n",sum);
}
特别说明:
题号后带有*的,该题有明显错误或疏漏,详细说明见《形考册勘误》
C语言程序设计作业3
(知识点覆盖范围:
第6章)
一、选择题
1*.C2*.C3.B4.B5.C6.B7.C8.B9.B10.C
11.B12.D13.D14.D15*.A16.D
二、填空题
1.函数体2.03.static4.递归
5.头6.函数体7.258.46
9.4610.4*i11.(char*)p12.int**
13.&p14.*p15.0
三、写出下列每个程序运行后的输出结果
1.程序代码:
#include
voidSB(charch){
switch(ch){
case'A':
case'a':
printf("WW");break;
case'B':
case'b':
printf("GG");break;
case'C':
case'c':
printf("PP");break;
default:
printf("BB");break;
}
}
voidmain(){
chara1='b',a2='C',a3='f';
SB(a1);SB(a2);SB(a3);SB('A');
printf("\n");
}
运行结果:
GGPPBBWW
2.程序代码:
#include
#include
doubleSD(inta,intb,charop){
doublex;
switch(op){
case'+':
x=a+b;break;
case'-':
x=a-b;break;
case'*':
x=a*b;break;
case'/':
if(b)x=(double)a/b;elseexit
(1);break;
default:
{printf("运算符错!
\n");exit
(1);}
}
returnx;
}
voidmain(){
intx=20,y=8;
printf("%3.2lf",SD(x,y,'-'));
printf("%3.2lf",SD(x,y,'*'));
printf("%3.2lf\n",SD(x+y,y,'/'));
}
运行结果:
12.00160.003.50
3.程序代码:
#include
voidWF(intx,inty){
x=x+y;
y=x+y;
printf("subs:
x,y=%d,%d\n",x,y);
}
voidmain(){
intx=18,y=23;
printf("main:
x,y=%d,%d\n",x,y);
WF(x,y);
x=2*x;
printf("main:
x,y=%d,%d\n",x,y);
}
运行结果:
main:
x,y=18,23
subs:
x,y=41,64
main:
x,y=36,23
4.(将字符串逆序。
注意for循环只到一半长度就前后交换完了。
如果循环整个长度则会前后交换两次,最终顺序不变)程序代码:
#include
#include
voidfun(charss[]);
voidmain(){
chars[15]="567891234";
fun(s);
printf("%s\n",s);
}
voidfun(charss[]){
inti,n=strlen(ss);
for(i=0;icharc=ss[i];
ss[i]=ss[n-1-i];
ss[n-1-i]=c;
}
}
运行结果:
432198765
5.(插入排序法降序排序。
模拟玩扑克时起牌的过程进行排序:
手上拿的牌(a[0]~a[i-1])已经排好序,拿起一张牌a[i],从a[i-1]开始一张张地找,如果比a[i]小则把这张牌a[j]向右挪,直到当前的牌a[j]不比a[i]小了,则将a[i]放到a[j]的右边。
注意在开始找之前要先把a[i]保存起来,因为把a[i-1]向右挪的时候就会执行a[i]=a[i-1],从而改变a[i]的值。
插入排序法升序排序见练习题6.3第2小题。
)程序代码:
#include
voidInsertSort(inta[],intn)
{
inti,j,x;
for(i=1;ix=a[i];
for(j=i-1;j>=0;j--)//为x顺序向前寻找合适的插入位置
if(x>a[j])a[j+1]=a[j];
elsebreak;
a[j+1]=x;
}
}
voidmain(){
inti;
inta[6]={20,15,32,47,36,28};
InsertSort(a,6);
for(i=0;i<6;i++)printf("%d",a[i]);
printf("\n");
}
运行结果:
473632282015
6.程序代码:
#include
voidmain(){
inta[8]={3,5,7,9,11,13,15,17};
inti,*p=a;
for(i=0;i<8;i++){
printf("%5d",*p++);
if((i+1)%4==0)printf("\n");
}
}
运行结果:
3579
11131517
7.程序代码:
#include
intLA(int*a,intn){
inti,s=0;
for(i=0;is+=a[i];
returns;
}
voidmain(){
inta[]={5,10,15,20,25,30};
intb=LA(a,4);
intc=LA(a+2,3);
printf("%d%d\n",b,c);
}
运行结果:
5060
8.程序代码:
#include
intLB(int*a,intn){
inti,s=1;
for(i=0;ireturns;
}
voidmain(){
inta[]={1,2,3,4,2,4,5,2};
intb=LB(a,4)+LB(&a[3],4);
printf("b=%d\n",b);
}
运行结果:
b=184
四、写出下列每个函数的功能
1.*程序代码:
intWB(inta[],intn,intx){
int