南昌大学 信工学院 C 语言程序设计 综合练习.docx
《南昌大学 信工学院 C 语言程序设计 综合练习.docx》由会员分享,可在线阅读,更多相关《南昌大学 信工学院 C 语言程序设计 综合练习.docx(22页珍藏版)》请在冰豆网上搜索。
南昌大学信工学院C语言程序设计综合练习
一、简答题
1.用N-S图表示判断素数的算法。
2.阅读以下程序,写出程序的运行结果:
#include
voidmain()
{
charc1,c2;
c1='a';
c2='b';
c1=c1-32;
c2=c2-32;
printf("%c%c",c1,c2);
}
程序运行结果为__AB__________________
3.阅读以下程序,写出程序的运行结果:
main()
{
intc=5;
printf("%d,%d,%d\n",c+=c++,c+8,++c);
c=5;
printf("%d\n",(c+=c++,c+8,++c));
c=5;
printf("%d\n",c+=c++,c+8,++c);
}
程序运行结果为_:
12,14,6
12
12_
4阅读以下程序,写出程序的运行结果:
main()
{
intday,x1,x2;
day=9;
x2=1;
while(day>0){
x1=(x2+1)*2;
x2=x1;
day--;
}
printf(“total=%d\n”,x1);
}
程序运行结果为____________________
4.阅读以下程序,写出程序的运行结果:
#include
voidmain()
{
inti;
intf[10]={1,1};
for(i=2;i<10;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<10;i++)
{
if(i%5==0)printf("\n");
printf("%12d",f[i]);
}
}程序运行结果为____________________
5.阅读以下程序并写出其运行结果
#include
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
case3:
a++;b++;
}
printf(“a=%d,b=%d\n”,a,b);
}
程序的运行结果是
6.阅读以下程序并写出其运行结果
#include
main()
{inta[]={1,2,3,4},y,*p=&a[3];
--p;y=*p;printf(“y=%d\n”,y);
}
程序的运行结果是
7.阅读以下程序并写出其运行结果
#include
voidfun(int*s,intnl,intn2)
{inti,j,t;
i=nl;j=n2;
while(i}
main()
{inta[10]={1,2,3,4,5,6,7,8,9,0},k;
fun(a,0,3);fun(a,4,9);fun(a,0,9);
for(k=0;k<10;k++)printf(“%d”,a[k]);printf(“\n”);
}
程序运行的结果是
8.阅读以下程序并写出其运行结果
#include
intf(intx)
{inty;
if(x==0||x==1)return(3);
y=x*x-f(x-2);
returny;
}
main()
{intz;
z=f(3);
printf(“%d\n”,z);
}
程序的运行结果是
9.阅读以下程序并写出其运行结果
#include
#include
typedefstruct{charname[9];charsex;floatscore[2];}STU;
voidf(STUa)
{STUb={“Zhao”,’m’,85.0,90.0};inti;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2;i++)a.score[i]=b.score[i];
}
main()
{STUc={“Qian”,’p’,95.0,92.0};
f(c);
printf(“%s,%c,%2.0f,%2.0f\n”,c.name,c.sex,c.score[0],c.score[1]);
}
程序的运行结果是
10.阅读以下程序,写出程序的运行结果:
#include
voidmain()
{
inti,j,row=0,colum=0,max;
inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{max=a[i][j];
row=i;
colum=j;
}
printf("max=%d,row=%d,colum=%d\n",max,row,colum);
}
程序运行结果为____________________
11.阅读以下程序,写出程序的运行结果:
#include
#definePI3.1415926
#defineS(r)PI*r*r
voidmain()
{floata,area;
a=3.6;
area=S(a);
printf("r=%6.2f\narea=%6.2f\n",a,area);
}
程序运行结果为____________________
12.阅读以下程序,写出程序的运行结果:
#include
voidmain()
{
voidexchange(int*q1,int*q2,int*q3);
inta,b,c,*p1,*p2,*p3;
a=22;b=56;c=128;
p1=&a;p2=&b;p3=&c;
exchange(p1,p2,p3);
printf("\n%d,%d,%d\n",a,b,c);
}
voidexchange(int*q1,int*q2,int*q3)
{
voidswap(int*pt1,int*pt2);
if(*q1<*q2)swap(q1,q2);
if(*q1<*q3)swap(q1,q3);
if(*q2<*q3)swap(q2,q3);
}
voidswap(int*pt1,int*pt2)
{
inttemp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
程序运行结果为____________________
13.阅读以下程序,写出程序的运行结果:
#include
voidmain()
{
intfac(intn);
inti;
for(i=1;i<=5;i++)
printf("%d!
=%d\n",i,fac(i));
}
intfac(intn)
{
staticintf=1;
f=f*n;
return(f);
}
程序运行结果为____________________
14.阅读以下程序,写出程序的运行结果:
#include
voidmain()
{
intn;
for(n=100;n<=120;n++)
{if(n%3==0)
continue;
printf("%d",n);
}
}
程序运行结果为____________________
15.阅读以下程序并写出其运行结果
#include
main()
{intx[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;
for(i=0;i<4;i++)
{p[i]=&x[2*i+1];
printf(“%d”,p[i][0]);
}
printf(“\n”);
}
程序的运行结果是
16.阅读以下程序并写出其运行结果
#include
voidfun(intx)
{if(x/2>0)fun(x/2);
printf(“%d”,x);
}
main()
{fun(3);
printf(“\n”);
}
程序的运行结果是
17.阅读以下程序并写出其运行结果
#defineMAX(a,b)(a>b)?
a:
b
main()
{
intx,y;
x=25;
y=56;
printf("theresultis:
%d\n",MAX(x,y));
}
程序的运行结果是
18.阅读以下程序并写出其运行结果
#include
main()
{
inti,j;
i=1;
while(i<=5){
j=1;
while(j<=i){
printf("%5d",j);
j++;
}
printf("\n");
i++;
}
}
程序的运行结果是
19.阅读以下程序并写出其运行结果
#incude
main()
{
inti,n3,n2,n1;
i=1;
while(i<=99){
n3=i/100;
n2=(i-n3*100)/10;
n1=i%10;
if((i%3==0)&&(n2==5||n1==5))
printf("%5d",i);
i++;
}
}
程序的运行结果是
20.阅读以下程序并写出其运行结果
#include
main()
{intx=8;
for(;x>0;x--)
{if(x%3){printf(“%d,”,x--);continue;}
printf(“%d,”,--x);
}
}
程序的运行结果是
21.阅读以下程序并写出其运行结果
#include
main()
{ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++)c[s[i]]++;
for(i=1;i<5;i++)printf(“%d”,c[i]);
printf(“\n”);
}
程序的运行结果是
22.阅读以下程序并写出其运行结果
#include
#include
voidfun(char*s[],intn)
{char*t;
inti,j;
for(i=0;ifor(j=i+1;jif(strlen(s[i])>strlen(s[j])){t=s[i];s[i]=s[j];s[j]=t;}
}
main()
{char*ss[]={“bcc”,”bbcc”,”xy”,”aaaacc”,”aabcc”};
fun(ss,5);printf(“%s,%s\n”,ss[0],ss[4]);
}
程序的运行结果是
23.阅读以下程序并写出其运行结果
#include
voidfun(char*a,char*b)
{while(*a==’*’)a++;
while(*b=*a){b++;a++;}
}
main()
{char*s=”****a*b****”,t[80];
fun(s,t);
puts(t);
}
程序的运行结果是
24.阅读以下程序并写出其运行结果
#include
main()
{FILE*fp;
inta[10]={1,2,3},i,n;
fp=fopen(“dl.dat”,”w”);
for(i=0;i<3;i++)fprintf(fp,”%d”,a[i]);
fprintf(fp,”\n”);
fclose(fp);
fp=fopen(“dl.dat”,”r”);
fscanf(fp,”%d”,&n);
fclose(fp);
printf(“%d\n”,n);
}
程序的运行结果是
25.阅读以下程序并写出其运行结果
#include
voidswap(int*a,int*b)
{int*t;
t=a;a=b;b=t;
}
main()
{inti=3,j=5,*p=&i,*q=&j;
swap(p,q);printf(“%d%d\n”,*p,*q);
}
程序的运行结果是
26.阅读以下程序并写出其运行结果
#include
main()
{inta[5]={2,4,6,8,10},*p;
p=a;p++;
printf(“%d”,*p);
}
程序的运行结果是
27.阅读以下程序并写出其运行结果
#defineLAB11
#defineLAB22
main()
{
inttemp;
#ifdefLAB1
temp=LAB1;
#else
temp=LAB2;
#endif
printf("temp=%d\n",temp);
}
程序的运行结果是
28.阅读以下程序并写出其运行结果
#include
main()
{
inti,j;
charch;
i=1;
while(i<=5){
j=1;
ch='a';
while(j<=i){
printf("%2c",ch);
ch=ch+1;
j++;
}
printf("\n");
i++;
}
}
程序的运行结果是
29.阅读以下程序并写出其运行结果
#include
main()
{
inta[21],i,j;
for(i=0;i<=20;i++)
a[i]=i;
i=1;
while(i<20){
i++;
if(a[i]!
=0){
printf('%6d",a[i]);
for(j=1;i*j<=20;j++)
a[i*j]=0;
}}
}程序的运行结果是
二、阅读以下各段代码,在其中空白处填入合适的语句,使之成为一个正确的程序或函数。
1.以下程序从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上。
请填空:
#include
main()
{FILE*fp;
charch;
fp=fopen( );
ch=fgetc(fp);
whlie(!
feof(fp))
{putchar(ch);
ch=fgetc(fp);
}
putchar(‘\n’);
fclose(fp);
}
2.下述程序用“碾转相除法”计算两个整数m和n的最大公约数。
该方法的基本思想是计算m和n相除的余数,如果余数为0则结束,此时的被除数就是最大公约数。
否则,将除数作为新的被除数,余数作为新的除数,继续计算m和n相除的余数,判断是否为0,等等,请填空使程序完整。
main(){
intm,n,w;
scanf(“%d,%d”,&m,&n);
while(n){
w=;
m=;
n=;
}
printf(“%d”,m);
}
3.下面函数的功能是将一个整数字符串转换为一个整数,例如:
"1234"转换为1234,请填空使程序完整。
intchnum(char*p){
intnum=0,k,len,j;
len=strlen(p);
for(;;p++){
k=;
j=(--len);
while()k=k*10;
num=num+k;
}
return(num);
}
4.下面程序调用getone函数开辟一个动态存储单元,调用assone函数把数据输入此动态存储单元,调用outone函数输出此动态存储单元中的数据,填空完成此程序。
#include"stdlib.h"
voidgetone(int**s);
voidassone(int*);
voidoutone(int*);
voidgetone(int**s){
s=(__________)malloc(sizeof(int));
}
voidassone(int*s){
scanf("%d",__________);
}
voidoutone(int*b){
printf("%d\n",__________);
}
main(){
int*p;
getone(&p);
assone(p);
outone(p);
}
5.完成以下字符串拷贝函数(将*from串拷贝到*to串):
voidcopy_string(char*from,char*to)
{
for(;*from!
='\0';__________________;)
________________________;
to[i]='\0';
}
6.以下程序从键盘输入10个整数到数组a,然后依次输出10个数组元素
#include
voidmain()
{
int*p,i,a[10];
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
____________________;
for(__________________________)
printf("%d",*p);
}
7.所谓“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。
例如,153是一个“水仙花数”,因为153=13+53+33。
完成以下程序使之可打印出100~1000内的全部”水仙花数“。
main()
{
inti,j,k,n;
printf(““水仙花数”是:
”);
for(n=100;n<1000;n++)
{
i=n/100;;/*取百位数*/
j=___________;/*取十位数*/
k=n%10;/*取个位数*/
if(_________________________)
printf(“%4d”,n);
}
printf(“\n”);
}
8.以下程序用来求两整数的绝对值和。
请填空。
#include
voidmain()
{intx,y;
printf("Pleaseinputx,y:
");
scanf("%d%d",&x,&y);
if(x<0)____________;
if(_________)y=-y;
printf("\n|x|+|y|=%d\n",x+y);
}
9.以下程序可计算1名学生10门课成绩的平均分,将缺省语句填上。
#include
floataverage(floatarray[10])
{inti;floataver,sum=array[0];
for(i=1;i<10;i++)
sum+=______________;
aver=sum/10;;
return(aver);
}
voidmain()
{floatscore[10],aver;
inti;
printf("\ninput10scores:
");
for(i=0;i<10;i++)scanf("%f",&score[i]);
aver=___________;
printf("\naveragescoreis%5.2f\n",aver);
}
10.以下程序中函数fun的功能是:
统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并做为函数值返回。
请填空:
#include
#defineN3
typedefstruct
{intnum;
charnam[10];
charsex;
}SS;
intfun(SSperson[])
{inti,n=0;
for(i=0;ireturnn;
}
main()
{SSW[N]={{1,”AA”,’F’},{2,”BB”,’M’},{3,”CC”,’M’}};
intn;
n=fun(W);
printf(“n=%d\n”,n);
}
11.以下程序的功能是计算函数
请填空使程序完整。
#include
;
main(){
floatx,y,z,f;
scanf(“%f,%f,%f”,&x,&y,&z);
f=fun();
f+=fun();
printf(“f=%d”,f);
}
floatfun(floata,floatb){
return(a/b);
}
12.下面函数的功能使统计子串substr在母串str中出现的次数,请填空使程序完整。
intcount(char*str,char*substr){
inti,j,k,num=0;
for(i=0;;i++)
for(,k=0;substr[k]==str[j];k++;j++)
if(substr[]==’\0’){
num++;break;