c语言八个经典题型.docx
- 文档编号:26991165
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:20
- 大小:18.43KB
c语言八个经典题型.docx
《c语言八个经典题型.docx》由会员分享,可在线阅读,更多相关《c语言八个经典题型.docx(20页珍藏版)》请在冰豆网上搜索。
c语言八个经典题型
测试题
1、任何一个自然数m的立方均可写成m个连续奇数之和。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
编程实现:
输入一自然数n,求组成n3的n个连续奇数。
#include
voidmain()
{
intn,m,i;
printf("pleaseinputn:
");
scanf("%d",&n);
m=n*(n-1)+1;
printf("%d^3=",n);
for(i=1;i<=n;i++)
{
printf("%d+",m);
m=m+2;
}
printf("\b\n");(注意此句中的空格printf(“\b空格\n);)
}
2、知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合。
#include
voidmain()
{
inta,b,c,d;
for(a=0;a<10;a++)
{
for(b=0;b<10;b++)
{
for(c=0;c<10;c++)
{
d=(a*100)+(b*10)+(c)+(c*100)+(b*10)+(a);
if(e==1333)
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
}
}
}
3、编写子函数:
(1)用冒泡法将一个数组排成升序的函数---SUB1;
(2)在升序数组中插入一个数,并且保持该数组仍为升序数组的函数---SUB2。
主函数:
①输入任意10个正整数给数组;②调用SUB1对数组进行排序;③从键盘输入一个正整数,调用SUB2将其插入该数组。
#include
#include
voidmain()
{
inti,k,a[12]={0};//a[0]fornouse
voidsub1(intb[]),sub2(intb[],intk);
clrscr();
printf("Pleaseinput10numbers:
");
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
getchar();
sub1(a);
for(i=1;i<=10;i++)
printf("\na[%d]=%d\n",i,a[i]);
printf("\n\npleaseinputanumbertobeinsertedintothearray:
");
scanf("%d",&k);
sub2(a,k);
for(i=1;i<=11;i++)
printf("\na[%d]=%d\n",i,a[i]);
puts("\nAnykeytoexit!
");
getch();
}
voidsub1(b)
intb[];
{
inti,j,t;
for(i=1;i<10;i++)//thefirstoneisalwaysthesmallest
for(j=i;j<=10;j++)
if(b[i]>b[j])
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
voidsub2(intb[],intk)
{
inti;
for(i=10;i>=1;i--)
{
if(k
b[i+1]=b[i];
else
{
b[i+1]=k;
break;
}
}
}
4、编写函数:
(1)用选择法将数组排成降序的函数----SUB1;
(2)用折半查找法查找某数是否在给定的数组当中的函数----SUB2。
主函数:
输入任意10个正整数给数组,调用SUB1对数组进行排序,从键盘输入一个正整数,调用SUB2在数组中进行查找,找到后输出“OK”,没有找到则输出“NOFOUND!
”。
#include
#include
voidmain()
{
inti,key,a[11]={0},sub1(),sub2();
printf("pleaseinput10number:
");
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
getchar();
sub1(a);
for(i=0;i<=10;i++)
printf("a[%d]=%d,",i,a[i]);
printf("\npleaseinputakeynumber:
");
scanf("%d",&key);
sub2(a,key,1,10);
getch();
}
intsub1(intb[])
{
intt,i,j,post;
for(i=1;i<10;i++)
{
post=i;
for(j=i+1;j<=10;j++)
if(b[post]>b[j])
post=j;
if(post!
=i)
{
t=b[i];
b[i]=b[post];
b[post]=t;}
}
return0;
}
intsub2(intc[],intk,intn0,intn1)
{
inti=n0,j=n1,m;
m=(i+j)/2;
while(i<=j)
{
if(k
j=m-1;
if(k>c[m])
i=m+1;
if(k==c[m])
break;
m=(i+j)/2;
}
if(k==c[m])
printf("OK!
\n");
else
printf("NOFOUND!
\n");
return0;
}
5、编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排列,然后将这两个数组合并成一个升序数组。
#include
#include
#defineNA5
#defineNB5
voidSort(inta[],intnLen)
{
for(inti=0;i { intn=i; intp=a[i]; for(intj=i+1;j { if(a[j] { p=a[j]; n=j; } } intt=a[i]; a[i]=a[n]; a[n]=t; } } int*Merge(inta[],intnLena,intb[],intnLenb) { int*c=(int*)malloc((nLena+nLenb)*sizeof(int)); inti=0; intj=0; intn=0; while(i { if(a[i]<=b[j]) { c[n++]=a[i++]; } else { c[n++]=b[j++]; } } if(i { for(;i { c[n++]=a[i]; } } if(j { for(;j { c[n++]=b[j]; } } returnc; } voidmain() { inta[NA]={0}; intb[NB]={0}; printf("Input%dnumberfora[]: ",NA); for(inti=0;i { scanf("%d",&a[i]); } printf("Input%dnumberforb[]: ",NB); for(i=0;i { scanf("%d",&b[i]); } Sort(a,NA); Sort(b,NB); printf("a[]aftersort: "); for(i=0;i { printf("%d",a[i]); } printf("\nb[]aftersort: "); for(i=0;i { printf("%d",b[i]); } int*c=Merge(a,NA,b,NB); printf("\na[]b[]aftermerge: "); for(i=0;i { printf("%d",c[i]); } printf("\n"); } 6、耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒: 13人围坐一圈,从第一个开始报号: 1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。 #include #include #defineN13//一圈总的人数 #defineM3//报的数字 structperson { intnumber; intnextp; }link[N+1]; intmain() { inti,count,h; for(i=1;i<=N;i++) { if(i==N) link[i].nextp=1; else link[i].nextp=i+1; link[i].number=i; } count=0; h=N; printf("出圈顺序: \n"); while(count { i=0; while(i! =M) { h=link[h].nextp; if(link[h].number) i++; } printf("%5d",link[h].number); link[h].number=0; count++; } printf("\n最后留圈中的人的序号是: "); for(i=1;i<=N;i++) if(link[i].number) printf("%3d\n",link[i].number); return0; } 7、某班有5个学生,三门课。 分别编写3个函数实现以下要求: (1)求各门课的平均分; (2)找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩; (3)找出三门课平均成绩在85-90分的学生,并输出其学号和姓名 主程序输入5个学生的成绩,然后调用上述函数输出结果。 #include voidAverage(void); voidLow_score(void); voidHigh_Ave(void); floatscore[5][3]; floatave[3]; intflag[5]={0}; main() { printf("输入成绩依次为: 语文数学英语,各成绩间以空格间隔\n\n"); printf("请输入王强(学号为A001)的成绩: "); scanf("%f%f%f",&score[0][0],&score[0][1],&score[0][2]); printf("\n请输入徐明(学号为A002)的成绩: "); scanf("%f%f%f",&score[1][0],&score[1][1],&score[1][2]); printf("\n请输入黄立(学号为A003)的成绩: "); scanf("%f%f%f",&score[2][0],&score[2][1],&score[2][2]); printf("\n请输入周梅(学号为A004)的成绩: "); scanf("%f%f%f",&score[3][0],&score[3][1],&score[3][2]); printf("\n请输入陈怡(学号为A005)的成绩: "); scanf("%f%f%f",&score[4][0],&score[4][1],&score[4][2]); Average(); Low_score(); High_Ave(); printf("\n"); } //--------------------求各科平均分子函数-------- voidAverage(void) { inti,j; floatsum[3]={0}; printf("\n各科平均分: "); for(j=0;j<3;j++) for(i=0;i<5;i++) { sum[j]=sum[j]+score[i][j]; if(i==4) { ave[j]=sum[j]/5; switch(j) { case0: printf("\n语文平均分为: %0.2f",ave[j]);break; case1: printf("\n数学平均分为: %0.2f",ave[j]);break; case2: printf("\n英语平均分为: %0.2f",ave[j]);break; } } } } //---------------------两门及以上低于60统计-------- voidLow_score(void) { inti,j,k,n; intLowscore[5][3]; for(i=0;i<5;i++) for(j=0;j<3;j++) { Lowscore[i][j]=5; } printf("\n\n两门及以上成绩不及格统计: "); for(i=0;i<5;i++) {k=0; for(j=0;j<3;j++) { if(score[i][j]<60) { flag[i]++; Lowscore[i][k]=j; k++; } } if(flag[i]>=2) { switch(i) { case0: printf("\n王强(学号为A001): ");break; case1: printf("\n徐明(学号为A002): ");break; case2: printf("\n黄立(学号为A003): ");break; case3: printf("\n周梅(学号为A004): ");break; case4: printf("\n陈怡(学号为A005): ");break; } for(n=0;n<3;n++) { switch(Lowscore[i][n]) { case0: printf("语文%0.1f",score[i][0]);break; case1: printf("数学%0.1f",score[i][1]);break; case2: printf("英语%0.1f",score[i][2]);break; case5: break; } } } } } //------------三门课平均分在85至90之间------------ voidHigh_Ave(void) { inti,j; floatSum[5]={0}; floatAver[5]; printf("\n\n三门课平均分在85至90之间统计: "); for(j=0;j<5;j++) for(i=0;i<3;i++) { Sum[j]=Sum[j]+score[j][i]; if(i==2) { Aver[j]=Sum[j]/3; if(Aver[j]>=85&&Aver[j]<=90) { switch(j) { case0: printf("\n王强(学号为A001): 平均分为: %0.2f",Aver[0]);break; case1: printf("\n徐明(学号为A002): 平均分为: %0.2f",Aver[1]);break; case2: printf("\n黄立(学号为A003): 平均分为: %0.2f",Aver[2]);break; case3: printf("\n周梅(学号为A004): 平均分为: %0.2f",Aver[3]);break; case4: printf("\n陈怡(学号为A005): 平均分为: %0.2f",Aver[4]);break; } } } } } 8、找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没有“鞍点”),打印出有关信息。 #include intmain() { inta[3][4],i,j,p1,p2,p3,c1,c2,c3; for(i=0;i<3;i++) {for(j=0;j<4;j++) scanf("%d",&a[i][j]); } printf("\n"); c1=0; c2=0; c3=0; p1=a[0][0]; p2=a[1][0]; p3=a[2][0]; {for(j=0;j<4;j++) if(p1 {p1=a[0][j]; c1=j; }} {for(j=0;j<4;j++) //下面if后面加个大括号,下两处同
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 八个 经典 题型