C程序例题集.docx
- 文档编号:9851744
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:26
- 大小:38.68KB
C程序例题集.docx
《C程序例题集.docx》由会员分享,可在线阅读,更多相关《C程序例题集.docx(26页珍藏版)》请在冰豆网上搜索。
C程序例题集
编程题集
例1.两数互换。
main()
{inta,b,c;
printf("Pleaseinputa,b:
");
scanf("%d,%d",&a,&b);
printf("a,b=%d,%d\n",a,b);
c=a;a=b;b=c;
printf("a,b=%d,%d\n",a,b);
}
例2.从十个数中选出最大数。
main()
{
inta,b,n;
printf("Pleaseinputa:
");
scanf("%d",&a);
printf("Pleaseinputb:
");
for(n=0;n<9;n++)
{
scanf("%d",&b);
if(a<=b)a=b;
}
printf("maxdigitis:
%d\n",a);
}
例3.求12!
。
(注意:
在求阶乘值时,长整型、无符号长整型仅能输出12!
=479001600,13!
=6227020800,达62亿多,而无符号长整型最大只能达4294967295,约43亿)
main()
{
inti;/*整型最大能达32767,约3万3千*/
unsignedintt;/*无符号长整型最大能达4294967295,约43亿*/
t=1;i=2;
do
{t=t*i;
i++;
}
while(i<=12);
if(t<32767)/*7!
=5040*/
printf("%d!
=%d\n",i-1,t);
else/*8!
=40320>32767*/
printf("%d!
=%lu\n",i-1,t);/*%lu无符号长整型格式符*/
}
例4.求两个正整数m和n的最大公约数的流程图。
main()
{
intm,n,r;
scanf("%d,%d",&m,&n);
r=m%n;
while(r!
=0)
{m=n;
n=r;
r=m%n;}
printf("maxcommondivisoris:
%d\n",n);
}
例5.绘制余弦曲线:
在屏幕上用“*”显示0°~360°的余弦函数cos(x)曲线。
#include
#include
main()
{doubley;
intx,n;
for(y=1;y>=-1;y-=0.1)/*y为列方向,值从1到-1,步长为-0.1*/
{m=acos(y)*10;/*计算出y对应的弧度值m,乘10为图形放大倍数*/
for(x=1;x printf("*");/*生成同一行中左侧*号*/ for(;x<62-m;x++)printf(""); printf("*\n");/*生成同一行中右侧*号*/ } } 说明: 1.“62”由来是2π=6.28*10的整数部分。 2.画*号时,在同一行上先画出两个对称的*号。 3.对称轴为x=π处。 例6.求π的近似值: 精度要求: 先求出前2n项的π值,再求出2n+2项的π值,直到两者之差小于10-5为止。 (注: 99春C语言上机试卷(C1)) 程序如下: (书上的参考答案) #include #include main() {floatpi1,pi2=1,term; floatn=1; term=(2.0*n)/(2.0*n-1)*(2.0*n)/(2.0*n+1); pi1=pi2; pi2=pi2*term; while(fabs(pi2-pi1)>1e-5) {n++; term=(2.0*n)/(2.0*n-1)*(2.0*n)/(2.0*n+1); pi1=pi2; pi2=pi2*term; } printf("n=%fpi=%f\n",n,2*pi2); } 程序2: #include main() {floatl,t,n=1,an=1.0,an1=1.0; do{ n++; for(t=1,an=1;t<=n;t++)/*此循环求2n项*/ {l=2.0*t*2.0*t/((2.0*t-1)*(2.0*t+1)); an=an*l;} for(t=1,an1=1;t<=n+1;t++)/*此循环求2n+2项*/ {l=2.0*t*2.0*t/((2.0*t-1)*(2.0*t+1)); an1=an1*l;} }while(fabs(an1-an)>1e-5); printf("n=%fpi=%f\n",n,2*an1); } 注意: 此算法不好,重复运算次数过多(for循环每次都从1开始循环),影响程序效率,浪费运算时间。 程序3: #include #include main() {intn=1; floatpi1=1.0,pi2,term; pi1=(2.0/1.0)*(2.0/3.0); pi2=pi1*(4.0/3.0)*(4.0/5.0); for(n=3;fabs(pi2-pi1)>1e-5;n++) {pi1=pi2; term=(2.0*n)/(2.0*n-1)*(2.0*n)/(2.0*n+1); pi2=pi2*term; } printf("n=%dpi=%f\n",n-1,2*pi2); } 例7.求能被3整除且其中至少有两位数字为6的四位数,并求出满足条件的四位数的个数。 如9669,9666均为满足条件的四位数。 程序代码如下: (1999年春上机试卷(C2)) #include #include main() {inti,j,k,m,count=0; for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) for(m=0;m<=9;m++) {if((i*1000+j*100+k*10+m)%3==0) if(i==6&&j==6||i==6&&k==6||i==6&&m==6||j==6&&k==6 ||j==6&&m==6||k==6&&m==6) {if(count%15==0)printf("\n");/*1行满15个数则换行*/ printf("%d",i*1000+j*100+k*10+m); count++;}/*累积满足条件的数字个数*/ } printf("\ncount=%d\n",count); } 程序2: #include main() {inta,b,c,d,t,i=0; for(t=1000;t<=9999;t++) {a=t/1000; b=t/100-10*a; c=t/10-100*a-10*b; d=t-1000*a-100*b-10*c; #defineAa! =6 #defineBb! =6 #defineCc! =6 #defineDd! =6 if(! ((A&&B&&C&&D)||(A&&B&&C)||(A&&B&&D)||(B&&C&&D)||(A&&C&&D))&&(t%3==0)) {if(i++%15==0)printf("\n"); printf("%d",t); } } printf("\n"); } 例8.改错题: (1998年秋上机试卷(C2)) 假设有一叠卡片,编号为1~52,并且所有卡片的下面朝上。 从卡号2开始,把凡是偶数的卡片都翻成正面朝下。 再从3号卡片开始,把凡是卡片号为3的倍数的卡片都翻一个面(即把正面朝上的翻成正面朝下,正面朝下的翻成正面朝上)。 下一步从4号卡片开始,把凡是卡片号为4的倍数的卡片都翻转一次,依次类推。 含有错误的源程序为: #defineN53 main() {inta[N],i,j,k; for(i=1;i a[i]=1;/*‘1’代表正面朝上,我的注释*/ for(i=1;i a[i]=0;/*‘0’代表正面朝下,我的注释*/ for(j=3;j for(i=1;j if(a[i]=0)a[i]=1;/*a[i]==0*/ elsea[i]=0; printf("thefinalresult: \n"); for(i=1;i printf("%d",a[i]); printf("\n"); k=0; for(i=1;i if(a[i]=1)/*a[I]==1*/ {k=k+1; printf("thefaceupis: %d\n",i);} printf("totalis: %d",k); } 例9.谭教材上p258习题10.13(以及教材p245要求) 写一个用矩形法求定积分的通用函数,分别求: (说明: sin、cos、exp已在系统的数学函数库中,程序开头要用#include #include main() {floatintegral(float(*p)(float),floata,floatb,intn); floatfsin(float); floatfcos(float); floatfexp(float); floata1,b1,a2,b2,a3,b3,c,(*p)(float);/*(*p)(float)为指向函数的指针*/ intn=20; /*分割成的小矩形数量 */ printf("Inputa1,b1: "); scanf("%f,%f",&a1,&b1); printf("Inputa2,b2: "); scanf("%f,%f",&a2,&b2); printf("Inputa3,b3: "); scanf("%f,%f",&a3,&b3); p=fsin; c=integral(p,a1,b1,n); printf("Theintegralofsin(x)is: %f\n",c); p=fcos; c=integral(p,a2,b2,n); printf("Theintegralofcos(x)is: %f\n",c); p=fexp; c=integral(p,a3,b3,n); printf("Theintegralofexp(x)is: %f\n",c); } floatintegral(float(*p)(float),floata,floatb,intn) {inti; floatx,h,s; h=(b-a)/n; x=a; s=0; for(i=1;i<=n;i++) {x=x+h; s=s+(*p)(x)*h; } return(s); } floatfsin(floatx) {returnsin(x);} floatfcos(floatx) {returncos(x);} floatfexp(floatx) {returnexp(x);} 例10.改错题: (2001年春上机试卷(C2)) 本程序读入一字符串(以“#”结束),将串中含同一字母重复出现次数最多的那个单词(若这样的单词多于一个,则只取第一个),以及该单词中重复次数最多的那个字母和重复次数显示输出。 假定串中只含小写字母和其他非字母字符,把由非字母字符隔开的字母串叫做单词,而不管它是否有意义。 含有错误的源程序为: #include chara[100],ch; inti,big,f,t; testword(inti)/*testword()*/ {intj,k,b[26];charc,ch1; for(j=0,j<26;j++)/*for(j=0;j<26;j++*/ b[j]=0; j=i;k=0; while((a[i]>=’a’)&&(a[i]<=’z’)) {b[a[i]-97]++;i++;} for(c=’a’;c<=’z’;c++) if(b[c-97]>k) {k=b[c-97];ch1=c;} if(k>big) {big=k;f=j;t=i-1;ch=ch1;}/*big为最大重复次数,f为重复次数最 }大字母所在单词的起点,t为终点,ch为 最大重复次数的字母*/ main() {intn=-1; doa[++n]=getchar(); while(a[n]==’#’);/*a[n]! =’#’*/ getchar();i=0;big=0; while(i if((a[i]>=’a’)&&(a[i]<=’z’)) testword(); elsei++; for(i=t;i>=f;i--)/*i=f;i<=t;i++*/ putchar(a[i]); printf(“have%dletter%c\n”,big,ch); } 注: 调试程序后时,可以随意输入测试数据。 最后运行本程序时,必须从键盘上输入下列数据: tootowprogramasdedederereeberq# 要求: 1、把上述程序写到笔记本上,把错误之处指出,并加以改正。 2、错误含语法错误及逻辑错误。 3、改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删除去整条语句。 例11.编程题: (2001年春上机试卷(C2)) 题目: 首先将正整数: 121、221、2198、1234、2111、0(“0”只作结束标记)存入整型数组中,然后在这些正整数中找出连续两个数字(或更多个数字)同为奇数字或同为偶数字的所有正整数。 例如,221便是这样的一个数。 将所有这样的数写入文件myf2.out中。 要求: 1.将源程序取名为myf2.c,输出结果文件取名为myf2.out。 2.数据文件的打开、使用、关闭均按TurboC文件操作实现。 #include main()/*n中为用于当前处理的数字*/ {FILEfp;/*k为处理过程中的中间变量*/ intm1,m2,k,flag,n;/*m1,m2为相邻两数*/ inti=0,num[6];/*flag为是否符合要求的标志变量*/ fp=fopen("myf2.out","w"); for(i=0;i<=5;i++) {scanf("%d",&num[i]); } n=num[i=0]; while(n>0) {k=n;flag=0; m1=k%10;k=k/10; while(k! =0) {m2=k%10;k=k/10; if((m1%2! =0)==(m2%2! =0)) {flag=1;k=0;} elsem1=m2; } if(flag)fprintf(fp,"%6d",n); n=num[++i]; } fprintf(fp,"\n"); fclose(fp); } 程序2: #include intfind(inti)/*自定义函数,返回值为1则把写入文件*/ {intr=0,j=0,k,m,num[5]; intflag=0; m=i; while(m>0)/*把主程序中的a[i]各位数字写入数组num中*/ {r=m%10; num[j]=r; m=m/10; j=j+1;} for(k=0;k if((num[k]%2! =0)==(num[k+1]%2! =0)) {flag=1; return(flag);} } main() {inti=0,flag; inta[6]={121,221,2198,1234,2111,0}; FILE*fp; fp=fopen("myf2.out","wb"); for(i=0;i<6;i++) {flag=find(a[i]); if(flag==1) fprintf(fp,"%6d",a[i]); } fclose(fp); } 例12.写一函数,使给定的一个二维数组(3×3)转置,即行列互换。 (教材p186_8.4) #defineN3 intarray[N][N]; voidconvert(intarray[3][3])/*函数类型可定义为void,也可用默认的int*/ {inti,j,t; /*因为函数形实参是数组,按地址传递*/ /*两个数组所用空间相同,函数无需返回值*/ for(i=0;i for(j=i+1;j {t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t; } } main() { inti,j; voidconvert(int[][]); /*注意此处的[][]形式,表明是二维数组*/ printf("Inputarray: \n"); /*因为函数原型处仅检查形参个数、类型名、 for(i=0;i 所以只写成[][]形式 for(j=0;j 仅对void时如此,对int似乎不成立? */ scanf("%d",&array[i][j]); printf("\noriginalarray: \n"); for(i=0;i {for(j=0;j printf("%5d",array[i][j]); printf("\n"); } convert(array); printf("convertarray: \n"); for(i=0;i {for(j=0;j printf("%5d",array[i][j]); printf("\n"); } } 例13.已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。 (C教程 p141-习题7.4) main() {inta[11]={1,4,6,9,13,16,19,28,40,100}; intplace,number,end,i,j; printf("arraya: \n"); for(i=0;i<10;i++) printf("%5d",a[i]); printf("\n"); printf("Insertdata: "); scanf("%d",&number); end=a[9]; if(number>end) a[10]=number; else {for(i=0;i<10;i++) if(a[i]>number) {place=i;break;} for(j=9;j>=place;j--)/*注意j>=place中的运算符不应该是<=*/ a[j+1]=a[j]; a[place]=number; } printf("Now,arraya: \n"); for(i=0;i<11;i++) printf("%6d",a[i]); printf("\n"); } main()/*谭 提供算法*/ {inta[11]={1,4,6,9,13,16,19,28,40,100}; inttemp1,temp2,number,end,i,j; printf("arraya: \n"); for(i=0;i<10;i++) printf("%5d",a[i]); printf("\n"); printf("Insertdata: "); scanf("%d",&number); end=a[9]; if(number>end) a[10]=number; else {for(i=0;i<10;i++) {if(a[i]>number) {temp1=a[i]; a[i]=number; for(j=i+1;j<11;j++) {temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } printf("Now,arraya: \n"); for(i=0;i<11;i++) printf("%6d",a[i]); printf("\n"); } 例14.直接插入排序法: main() {inta[10]={3,9,6,7,123,23,56,72,36,99}; inti,j,x; for(i=0;i<10;i++) printf("%d",a[i]); printf("\n"); for(i=2;i<10;i++) {x=a[i]; /*确定未排序数x*/ j=i-1; /*确定已排序数的位置*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 例题