C语言沈阳理工大学考试复习习题docx.docx
《C语言沈阳理工大学考试复习习题docx.docx》由会员分享,可在线阅读,更多相关《C语言沈阳理工大学考试复习习题docx.docx(14页珍藏版)》请在冰豆网上搜索。
C语言沈阳理工大学考试复习习题docx
C语言,沈阳理工大学,考试复习习题
6.1:
求出1一100之间的素数,并以每行打印5个输出,当求得素数的个数超过20个时,不再计算。
6.1:
#includemain()
(inti,j,k,n=0;
for(i=l;i<=100;i++){k=sqrt(i);
for(j=2;j<=k;j++)if(i%j=0)break;
if(j>二k+1){printf("%3d”,i);n++;
if(n%5==0)printf("\n”);
if(n>=20)break;}))6.2:
键盘上输入两个正整数,分别赋给变量a和b,计算从a的值到b的值之间的所有整数之和,并输出结果。
5+6+7+8+9=356.2:
^includemain()
(inta,b,sum;
scanf(,&a,&b);if(a>b){t=a;a=b;b=t;}for(sum=0;a<=b;a++){sum+=a;
printf("%d+”,a);}
printf("\b=%d\n‘,sum);}6.3:
打印形状为直角三角形的九九表。
124369
481216,,
91827,,81数组
}*
6.3:
甘includemain(){inti,j;
for(i=l;i<10;i++)(for(j=l;j<=i;j++)
printf("%4d",i*j);printf("\n”);}}
7.1:
从键盘输入10个不为零的整数,将它们按正负数分开后,分别按从小到大的顺序打印出来。
7.1:
^includemain()
(inti,j,t,m=0,a[10];for(i=0;i<10;i++)
scanf("%d",&a[i]);printf("\n");for(i=0;i<9;i++)for(j=0;j<9-i;j++)
if(a[j]>a[j+l]){t=a[j];a[j]=a[j+l];a[j+l]=t;}for(i=0;i<10;i++)
if(a[i]<0){printf("%4d”,a[i]);m++;}printf(“\n”);for(i=m;i<10;i++)
printf("%4d”,a[i]);}8.2:
用起泡法对10个数排序。
(用函数实现)8.2:
^includemain()
{voidsort(intarray[],intn);inta[10],m=0,i;for(i=0;i<10;i++)
scanf("%d”,&a[i]);sort(a,10);
for(i=0;i<10;i++)
if(a[i]<0){printf("%4d”,a[i]);m++;}printf(“\n”);for(i=m;i<10;i++)
printf("%4d”,a[i]);}
voidsort(intarray,intn){inti,j,k,t;
for(i=0;ifor(j=i+l;jif(array[j]t=array[k];array[k]=array[i];array[i]=t;}
8.3:
用选择法对10个数排序。
(用函数实现)8.3:
^includemain()
{voidsort(intarray[],intn);inta[10],m=0,i;for(i=0;i<10;i++)
scanf("%d”,&a[i]);sort(a,10);
for(i=0;i<10;i++)
if(a[i]<0){printf("%4d",a[i]);m++;}printf("\n”);for(i=m;i<10;i++)
printf("%4d”,a[i]);}
voidsort(intarray,intn){inti,j,t;
for(i-0;iif(array[j]>array[j+1])
(t=array[j];array[j]=array[j+1];array[j+1]=t;}}}9.1输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
写3个函数:
①输入10个数;②进行处理;③输出10个数。
9.1:
#includemain()
{voidinput(intnumber[10]);
voidmax_min_value(intarray[10]);voidoutput(intarray[10]);intnumber[10];input(number);
max_min_value(number);output(number);}voidinput(intnumber[10])(inti;
for(i=0;i<=9;i++)
scanf(a%dv,&number[i]);}
voidmax_min_value(intarray[10]){int*max,*inin,*p,*array_end;array_end=array+10;max=min=array;
for(p=array+l;p*p=array[0];array[0]二*min;*min=*p;*p=array[9];array[9]=*max;*max=*p;}
voidoutput(intarray[10]){int*p;
for(p=array;p<=array+9;p++)printf("%4d”,*p);}10.1有10个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,和最高成绩。
10.1:
#includestructstudent(charnum[6];charname[8];intscore[3];floatavr;}stu[10];main()
(inti,j,max=0,maxi二0,sum=0;floataverage、。
;for(i-0;i<10;i++)
(scanf("%s%s”,stu[i].num,stu[i].name);for(j=0;j<3;j++)
scanf(a%dv,&stu[i].scoretj]);}for(i=0;i<10;i++)(sum=0;
for(j=0;j<3;j++)
sum+=stu[i].scoretj];stu[i].avr=sum/3.0;average+=stu[i].avr;
if(sum>max)(max=sum;maxi=i;}}
average/二10;
printf(^average=%6.2f\n,,,average);printf("Thehighestscore
is:
%s,%s,%d,%f”,stu[maxi].num,stu[maxi].name,max,stu[maxi].avr);}7.2:
***
7.2:
#includemain()
(chara[5]=(,*',,*',,*',,*',,*'};inti,j,k;
for(i=0;i<5;i++){for(j=0;j
printf("%c”,"”);for(k=0;k<5;k++)
printf("%c”,a[k]);printf("\n”):
})
8.1:
判断m是否是素数。
(用函数实现)8.1:
#includemain0
(intf(intm);intm,n;
scanf(“%d”,&m);n=f(m);
if(n)printf("%disaprimenumber\n,,,m);
elseprintf("%disnotaprimenumber\n,,,m);}
intf(intm)(inti,k,p;k=sqrt(m);
for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+l)p=l;elsep=0;returnp;}
选择结构
例5.1输入两个实数,按代数值由小到大的顺序输出这两个数。
#includemain()
{floata,b,t;
scanf(,f%f,%f”,&a,&b);if(a>b){t=a;a=b;b=t;}
printf("%5.2f,%5.2f\n",a,b);}
例5.2输入三个数,找出其中最大的数。
mainO
(inta,b,c,t;
scanf("%d%d%d”,&a,&b,&c);if(a>b)t=a;elset=b;if(tprintf("max=%d”,t);}
循环结构
例6.6判断m是否素数。
#include#includemainO
{intm,i,k;
scanf("%d”,&m);k=sqrt(m);
for(i=2;i<=k;i++)if(m%i=0)break;
if(i>=k+l)printf(〃%disaprimenumber'll”,m);
elseprintf(〃%disnotaprimenumber\n",m);}
例6.7求100〜200间的全部素数。
#includettincludemain()
(inti,j,k,n=0;
for(i=101;i<=200;i=i+2){k=sqrt(i);
for(j=2;j<=k;j++)if(i%j==0)break;
if(j〉=k+l){printf(〃%d〃,i);n=n+l;}
if(n%10=0)printf(〃\n〃);}
printf(〃\n");}
例6.8编写程序,从键盘输入6名学生的5门成绩,分别统计出每个学生的平均成绩。
^includemain()(inti,j;
floatscore,sum,ave;for(i=l;i<=6;i++)(sum=0;
for(j=l;j<=5;j++)
{scanf(,f%f",&score);sum+=score;}ave=sum/5;
printf("No.%dave=%5.2f\nv,i,ave);}
例6.9输出以下图形。
*************************includemain()(inti,j,k;
for(i=l;i<=4;i++)(for(j=l;j<=4-i;j++)printf("”);
for(k=l;k〈二2*iT;k++)printf(;printf("\n”);}for(i=l;i<=3;i++)
{for(j=l;j<=i;j++)printf("”);
for(k=l;k<=7~2*i;k++)printf(;printf("\n");}
例7.5:
有一个3X4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
甘includemain()
(inti,j,row=0,colum=0,max;
inta[3][4]=({1,2,3,4},{9,8,7,6},{TO,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(amax=%d,row=%d,colum=%d\n,?
max,row,colum);}指针
例9.2输入a和b两个整数,按先大后小的顺序输出a和b#includevoidmain()
{int*pl,*p2,*p,a,b;
scanf("%d,%d",&a,&b);pl=&a;p2=&b;if(a
{p=pl;pl=p2;p2=p;}printf("a=%d,b=%d\n”,a,b);printf
("max=%d,min=%d\n”,*pl,*p2);}
例9.3输入a和b两个整数,按先大后小的顺序输出。
ttincludevoidmain()
(voidswap(int*pl,int*p2);inta,b;
int*pointer_1,*pointer_2;
scanf("%d,%d”,&a,&b);pointer_1=&a;pointer_2=&b;if(a
voidswap(int*pl,int*p2){inttemp;temp=*pl;*pl=*p2;*p2=
temp;}
例9.4输入a、b、c3个整数,按大小顺序输出。
#includevoidmain()(voidexchange(int*ql,int*q2,int*q3);inta,b,c,*pl,*p2,*p3;
scanf(〃%d,%d,%d〃,&a,&b,&c);
pl=&a;p2=&b;p3=&c;exchange(pl,p2,p3);
printf("%d,%d,%d\n”,a,b,c);}
voidexchange(int*ql,int*q2,int*q3){voidswap(int*ptl,int*pt2)if(*qlV*q2)swap(ql,q2);if(*qlV*q3)swap(ql,q3);if(*q2<*q3)swap(q2,q3);}
voidswap(int*ptl,int*pt2)(inttemp;temp=*ptl;*ptl=*pt2;*pt2
=temp;}
例9.8:
用指针变量输出二维数组元素的值ttincludevoidmain()
(inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};int*p;
for(p=a[0];p==0)printf("\n");printf("%4d”,*p);))
例9.9:
输出二维数组任一行任一列元素的值
#includevoidmain(){inta[3][4]={1,3,5,7,9,11,
13,15,17,19,21,23};
int(*p)[4],i,j;p=a;
scanf("i=%d,j=%d”,&i,&j);
printf("a[%d][%d]=%d\n”,i,j,*(*(p+i)+j));}
运行情况如下:
i=1,j=2/a[1,2]=13例9.10:
有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。
#includevoidmain()
{voidaverage(float*p,intn);voidsearch(float(*p)[4],intn);floatscore[3][4]=({65,67,70,60),{80,87,90,81),(90,99,100,98}};average(*score,12);/*求12个分数的平均分*/search(score,2);
/*求序号为2的学生的成绩*/}
voidaverage(float*p,intn){float*p_end;floatsum=0,aver;p_end=p+n—1;
for(;pV=p_end;p++)sum=sum+(*p);aver=sum/n;printf
("average=%5.2f\n”,aver);}
voidsearch(float(*p)[4],intn)/*p是指向具有4个元素的一维数组的指针*/(inti;
printf("thescoreofNo.%dare:
\n",n);for(i=0;i<4;i++)
printf(〃%5.2f〃,*(*(p+n)+i));
}程序运行结果如下:
average=82.25
ThescoreofNo.2are:
90.0099.00100.0098.00
例9.11:
在上题基础上,查找有一门以上课程不及格的学生,打印出他们的全部课程的成绩。
#includevoidmain()
(voidsearch(float(*p)[4],intn);floatscore[3][4]=({65,57,70,60},{58,87,90,81),{90,99,100,98}};
search(score,3);}
voidsearch(float(*p)[4],intn)(inti,j,flag;
for(j=0;jfor(i=0;i<4;i++)
if(*(*(p+j)+i)<60)flag=1;
if(f1ag==l)
(printf(〃No.%dfails,hisscoresare:
\n〃,j+1);
for(i=0;i<4;i++)printf("%5.1f",*(*(p+j)+i));printf("\n”);}}
}程序运行结果如下:
No.1fails,hisscoresare:
65.057.070.0
58.087.090.0voidmain()
0No.2fails,hisscoresare:
{chara[]="Iama
boy.
〃,b[20];inti;
for(i=0;a[i]!
二'\0';
i++)
b[i]=a[i];b[i]二'\0';
0例9.14:
将字符串a复制为字符串b#include
printf("stringais:
%s\n”,a);printf("stringbis:
%s\n”,b);}运行情
况如下:
stringais:
Iamaboy.stringbis:
Iamaboy.
例9.16:
用函数调用实现字符串的复制。
}甘includevoidmain()
{voidcopy_string(char*from,char*to);char*a="Iamateacher.";char*b="youareastudent.”;
printf("stringa=%s\nstringb=%s\n,fa,b);printf("copystringatostringb:
\n〃);copy_string(a,b);
printf(^Xnstringa=%s\nstringb=%s\n〃,a,b);
}voidcopy_string(char*froni,char*to){for(;*from!
='\0';from++,to++)*to=*from;*to='\0z;}
程序运行结果如下:
stringa=Iamateacher,stringb=youareastudent,copystringatostringb:
stringa=Iamateacher,stringb=Iamateacher.
例9.18:
有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号以后,能输出该学生的全部成绩。
用指针函数来实现。
#includevoidmain()
{floatscore:
][4]={{60,70,80,90),{56,89,67,88},(34,78,90,66}};
float^search(float(^pointer)[4],intn);float*p;inti,m;printf("enterthenumberofstudent:
");scanf("%d”,&m);
printf("ThescoresofNo.%