C程序例题集-.pdf

上传人:索**** 文档编号:76249909 上传时间:2023-03-08 格式:PDF 页数:19 大小:48.50KB
返回 下载 相关 举报
C程序例题集-.pdf_第1页
第1页 / 共19页
C程序例题集-.pdf_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《C程序例题集-.pdf》由会员分享,可在线阅读,更多相关《C程序例题集-.pdf(19页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、1 编程题集例 1两数互换。main()int a,b,c;printf(Please input a,b:);scanf(%d,%d,&a,&b);printf(a,b=%d,%dn,a,b);c=a;a=b;b=c;printf(a,b=%d,%dn,a,b);例 2从十个数中选出最大数。main()int a,b,n;printf(Please input a:);scanf(%d,&a);printf(Please input b:);for(n=0;n9;n+)scanf(%d,&b);if(a=b)a=b;printf(max digit is:%dn,a);例 3求 12!。(注

2、意:在求阶乘值时,长整型、无符号长整型仅能输出12!=479001600,13!=6227020800,达 62 亿多,而无符号长整型最大只能达4294967295,约 43 亿)2 main()int i;/*整型最大能达32767,约 3 万 3 千*/unsigned int t;/*无符号长整型最大能达4294967295,约 43 亿*/t=1;i=2;do t=t*i;i+;while(i=12);if(t32767*/printf(%d!=%lun,i-1,t);/*%lu 无符号长整型格式符*/例 4求两个正整数 m和 n 的最大公约数的流程图。main()int m,n,r;

3、scanf(%d,%d,&m,&n);r=m%n;while(r!=0)m=n;n=r;r=m%n;printf(max common divisor is:%dn,n);例 5绘制余弦曲线:在屏幕上用“*”显示 0360的余弦函数 cos(x)曲线。3#include /*预处理指令*/#include /*包含数学函数*/main()double y;int x,n;for(y=1;y=-1;y-=0.1)/*y 为列方向,值从1 到-1,步长为-0.1*/m=acos(y)*10;/*计算出 y 对应的弧度值m,乘 10 为图形放大倍数*/for(x=1;xm;x+)printf();p

4、rintf(*);/*生成同一行中左侧*号*/for(;x62-m;x+)printf();printf(*n);/*生成同一行中右侧*号*/说明:1.“62”由来是2=6.28*10 的整数部分。2画*号时,在同一行上先画出两个对称的*号。3对称轴为x=处。例 6求的近似值:122122.7656543432122nnnn精度要求:先求出前2n 项的 值,再求出 2n+2 项的 值,直到两者之差小于 10-5为止。(注:99 春 C语言上机试卷(C1)程序如下:(书上的参考答案)#include#include main()float pi1,pi2=1,term;float n=1;ter

5、m=(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;4 printf(n=%f pi=%fn,n,2*pi2);程序 2:#include main()float l,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);a

6、n=an*l;for(t=1,an1=1;t1e-5);printf(n=%f pi=%fn,n,2*an1);注意:此算法不好,重复运算次数过多(for 循环每次都从1 开始循环),影响程序效率,浪费运算时间。程序 3:#include#include main()int n=1;float pi1=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=p

7、i2*term;printf(n=%d pi=%fn,n-1,2*pi2);例 7求能被 3 整除且其中至少有两位数字为6 的四位数,并求出5 满足条件的四位数的个数。如9669,9666 均为满足条件的四位数。程序代码如下:(1999 年春上机试卷(C2)#include#include main()int i,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

8、=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=%dn,count);程序 2:#include main()int a,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;#define A a!=6#define B b!=6#define C c!=6#define

9、 D d!=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);6 printf(n);例 8改错题:(1998 年秋上机试卷(C2)假设有一叠卡片,编号为152,并且所有卡片的下面朝上。从卡号2 开始,把凡是偶数的卡片都翻成正面朝下。再从 3 号卡片开始,把凡是卡片号为 3 的倍数的卡片都翻一个面(即把正面朝上的翻成正面朝下,正面朝下的翻成正面朝上)。下一步从4 号卡片开始,把凡是卡片号为4 的倍数的卡片都翻转一次,依次类推。含有错误的源程序为:#define N 5

10、3 main()int aN,i,j,k;for(i=1;iN;i+)ai=1;/*1代表正面朝上,我的注释*/for(i=1;iN;i+)/*i=2;iN;i+=2*/ai=0;/*0代表正面朝下,我的注释*/for(j=3;jN;j+)for(i=1;jN;j+)/*i=j;iN;i+=j*/if(ai=0)ai=1;/*ai=0*/else ai=0;printf(the final result:n);for(i=1;iN;i+)printf(%d,ai);printf(n);k=0;for(i=1;iN;i+)if(ai=1)/*aI=1*/k=k+1;printf(the face

11、 up is:%dn,i);printf(total is:%d,k);例 9谭教材上 p258习题 10.13(以及教材 p245 要求)7 写一个用矩形法求定积分的通用函数,分别求:(说明:sin、cos、exp 已在系统的数学函数库中,程序开头要用#include )#include main()float integral(float(*p)(float),float a,float b,int n);float fsin(float);float fcos(float);float fexp(float);float a1,b1,a2,b2,a3,b3,c,(*p)(float);/

12、*(*p)(float)为指向函数的指针*/int n=20;/*分割成的小矩形数量*/printf(Input a1,b1:);scanf(%f,%f,&a1,&b1);printf(Input a2,b2:);scanf(%f,%f,&a2,&b2);printf(Input a3,b3:);scanf(%f,%f,&a3,&b3);p=fsin;c=integral(p,a1,b1,n);printf(The integral of sin(x)is:%fn,c);p=fcos;c=integral(p,a2,b2,n);printf(The integral of cos(x)is:%

13、fn,c);p=fexp;c=integral(p,a3,b3,n);printf(The integral of exp(x)is:%fn,c);float integral(float(*p)(float),float a,float b,int n)int i;float x,h,s;h=(b-a)/n;x=a;s=0;for(i=1;i=n;i+)x=x+h;10sin xdx11cos xdx20dxex函数声明输入所求各函数定积分的上下限8 s=s+(*p)(x)*h;return(s);float fsin(float x)return sin(x);float fcos(flo

14、at x)return cos(x);float fexp(float x)return exp(x);例 10改错题:(2001年春上机试卷(C2)本程序读入一字符串(以“#”结束),将串中含同一字母重复出现次数最多的那个单词(若这样的单词多于一个,则只取第一个),以及该单词中重复次数最多的那个字母和重复次数显示输出。假定串中只含小写字母和其他非字母字符,把由非字母字符隔开的字母串叫做单词,而不管它是否有意义。含有错误的源程序为:#include char a100,ch;int i,big,f,t;testword(int i)/*testword()*/int j,k,b26;char

15、c,ch1;for(j=0,j26;j+)/*for(j=0;j=a)&(ai=z)bai-97+;i+;for(c=a;ck)k=bc-97;ch1=c;if(kbig)9 big=k;f=j;t=i-1;ch=ch1;/*big 为最大重复次数,f 为重复次数最 大字母所在单词的起点,t 为终点,ch 为最大重复次数的字母*/main()int n=-1;do a+n=getchar();while(an=#);/*an!=#*/getchar();i=0;big=0;while(i=a)&(ai=f;i-)/*i=f;i=t;i+*/putchar(ai);printf(“have%d

16、letter%cn”,big,ch);注:调试程序后时,可以随意输入测试数据。最后运行本程序时,必须从键盘上输入下列数据:tootow program asdededere reeber q#要求:1、把上述程序写到笔记本上,把错误之处指出,并加以改正。2、错误含语法错误及逻辑错误。3、改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删除去整条语句。例 11编程题:(2001年春上机试卷(C2)题目:首先将正整数:121、221、2198、1234、2111、0(“0”只作结束标记)存入整型数组中,然后在这些正整数中找出连续两个数

17、字(或更多个数字)同为奇数字或同为偶数字的所有正整数。例如,221 便是这样的一个数。将所有这样的数写入文件myf2.out 中。要求:1将源程序取名为myf2.c,输出结果文件取名为myf2.out。2数据文件的打开、使用、关闭均按Turbo C 文件操作实现。#include main()/*n 中为用于当前处理的数字*/FILE fp;/*k 为处理过程中的中间变量*/10 int m1,m2,k,flag,n;/*m1,m2 为相邻两数*/int i=0,num6;/*flag 为是否符合要求的标志变量*/fp=fopen(myf2.out,w);for(i=0;i0)k=n;flag

18、=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;else m1=m2;if(flag)fprintf(fp,%6d,n);n=num+i;fprintf(fp,n);fclose(fp);程序 2:#include int find(int i)/*自定义函数,返回值为1 则把写入文件*/int r=0,j=0,k,m,num5;int flag=0;m=i;while(m0)/*把主程序中的ai 各位数字写入数组num 中*/r=m%10;numj=r;m=m/10;j=j+1;for(k

19、=0;kj-1;k+)/*如果相邻两数同为奇数或偶数,返回1*/if(numk%2!=0)=(numk+1%2!=0)flag=1;return(flag);11 main()int i=0,flag;int a6=121,221,2198,1234,2111,0;FILE*fp;fp=fopen(myf2.out,wb);for(i=0;i6;i+)flag=find(ai);if(flag=1)fprintf(fp,%6d,ai);fclose(fp);例 12写一函数,使给定的一个二维数组(33)转置,即行列互换。(教材 p1868.4)#define N 3 int arrayNN;v

20、oid convert(int array33)/*函数类型可定义为void,也可用默认的int*/int i,j,t;/*因为函数形实参是数组,按地址传递*/*两个数组所用空间相同,函数无需返回值*/for(i=0;iN;i+)for(j=i+1;jN;j+)/*j=i+1 防止两元素对调后再次恢复原位*/t=arrayij;arrayij=arrayji;arrayji=t;main()int i,j;void convert(int);/*注意此处的 形式,表明是二维数组*/printf(Input array:n);/*因为函数原型处仅检查形参个数、类型名、for(i=0;iN;i+)

21、/*顺序,而不检查形参名。所以只写成 形式for(j=0;jN;j+)/*即可。仅对 void 时如此,对int 似乎不成立?*/12 scanf(%d,&arrayij);printf(noriginal array:n);for(i=0;iN;i+)for(j=0;jN;j+)printf(%5d,arrayij);printf(n);convert(array);printf(convert array:n);for(i=0;iN;i+)for(j=0;jN;j+)printf(%5d,arrayij);printf(n);例 13已有一个已排好序的数组,今输入一个数,要求按原来排序的规

22、律将它插入数组中。(C教程p141习题 7.4)main()int a11=1,4,6,9,13,16,19,28,40,100;int place,number,end,i,j;printf(array a:n);for(i=0;iend)a10=number;else for(i=0;inumber)place=i;break;for(j=9;j=place;j-)/*注意 j=place 中的运算符不应该是=*/13 aj+1=aj;aplace=number;printf(Now,array a:n);for(i=0;i11;i+)printf(%6d,ai);printf(n);ma

23、in()/*谭提供算法*/int a11=1,4,6,9,13,16,19,28,40,100;int temp1,temp2,number,end,i,j;printf(array a:n);for(i=0;iend)a10=number;else for(i=0;inumber)temp1=ai;ai=number;for(j=i+1;j11;j+)temp2=aj;aj=temp1;temp1=temp2;break;printf(Now,array a:n);for(i=0;i11;i+)printf(%6d,ai);14 printf(n);例 14直接插入排序法:main()int

24、 a10=3,9,6,7,123,23,56,72,36,99;int i,j,x;for(i=0;i10;i+)printf(%d,ai);printf(n);for(i=2;i=0&xaj)aj+1=aj;/*已排序元素后移,腾出空间*/j=j-1;/*向前寻找插入位置*/aj+1=x;for(i=0;iy?x:y;return(z);3)用下面的scanf 函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=A,c2=a。问在键盘上如何输入?main()int a,b;float x,y;char c1,c2;scanf(“a=%d b=%d”,&a,&b);scanf(“

25、%f%e”,&x,&y);scanf(“%c%c”,&c1,&c2);16 printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c n”,a,b,x,y,c1,c2);解:可按如下方式在键盘上输入:a=3 b=7 8.5 71.82 A a 输出为:a=3,b=7,x=8.500000,y=71.820000,c1=A,c2=a 请注意:在第三个scanf 函数双引号中第一个字符为空格字符。如果没有这个空格字符,而写成:scanf(“%c%c”,&c1,&c2);按以上的输入,输出就会变成以下两行:a=3,b=7,x=8.500000,y=71.820000,c1=,c

26、2=A 注意:第二、三行的scanf函数就相当于一行scanf函数,即scanf(“%f%e%c%c”,&x,&y,&c1,&c2);如果第一个%c 前无空格的话,则相当于scanf(“%f%e%c%c”,&x,&y,&c1,&c2);则在输入数据时,%e 数据读完后,其后的任何一个字符都会被读入c1中。这是因为在输入完第二行后按的回车键被作为一个字符送到内存输入缓冲区中,因此第三个scanf 函数中的第一个变量c1 读入了回车符(实际上是回车符的ASCII 码)。第三行输入的第一个字符A 被 c2 读取,所以在执行 printf 函数输出c1 时,就输出一个回车符,输出c2 时就输出字符A。

27、在程序第三个scanf 函数双引号中第一个字符处放了一个空格符,这样第二行末尾输入的回车符就不会输入给c1,而是与该空格字符对应,第三行输入的第一个字符A 就被 c1 读取。也可以不在scanf 函数中加空格,而在第三个函数前加一个getchar函数:getchar();(注意加#include )将前面的回车符“吃掉”。在一个函数中如果有几个scanf 函数,在输入数据时往往会也出现一些意想不到的情况,其中一个很重要的原因就是由回车符引起的。4)求一个 3 3 矩阵对角线元素之和。main()int a33,sum=0;int i,j;printf(“enter data:n”);for(i

28、=0;i3;i+)17 for(j=0;j3;j+)scanf(“%d”,&aij);for(i=0;i3;i+)sum=sum+aii;printf(“sum=%5dn”,sum);main()float a33,sum=0;int i,j;printf(enter data:n);for(i=0;i3;i+)for(j=0;j3;j+)scanf(%f,&aij);/*在%f 前有一空格,否则无法输入数据*/for(i=0;i3;i+)sum=sum+aii;printf(sum=%6.2fn,sum);在 Tubo C 2.0 环境下运行此程序时,出现运行错误,在输入数据后系统显示出错信

29、息:scanf:floating point formats not linked Abnormal program termination 经检查,程序的逻辑和语法都是正确的,而且在其他的C 系统中(如 Borland C+)系统中可以正常运行。出现这种情况的原因是所用的C 编译系统不完善。现在只能迁就所用的C 系统,修改程序,避开其缺陷。修改方案:把原来的第57 行改为:for(j=0;j3;j+)scanf(“%f%f%f”,&a0j,&a1j,&a2j);上机验证后,正常运行。注意,如果输入如下数据:1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 则其对应的内存

30、存储结构应该为:1.1 4.4 7.7 2.2 5.5 8.8 3.3 6.6 9.9 通过此例我们可知,在上机调试程序时出错但程序本身又无语法、逻辑错误时,只好采取“迂回”的办法,使程序能正常运行。18 定义一个结构体变量(包括年、月、日)。计算该9 在本年中是第几天,注意闰年问题。露:解法一:见图111。结构体变量da 舵中的成员对应于输人的年、月、日。day5 为天数。struct int year;id 咖 nth 5 iDt doy g 3 山 t。E 阳;n()I mt daysl 队 mtf(yI 卯 u L yla?咖 nth?dAy:”)3 scanf(“d,d,dP,Lda

31、te邓 ar,8Ldate moMth,8Ldateday)swuch(dde 咖 nth)ca8e1:daysdate da 炸凹 sG 2:daysdateday 十 31;ca8e 3:dsy5企 tlday 十 59;田 5c 4:daysd5b d9y 十 90P 船舱 5:da阳 daeday 十 120l case 6:dapMe切十 151;taIe 7:d 印 sdotL day41815 coIe 8:doysdatL day 十 2129 cas29:doysdabdBy 十 2 械 E c05e10:d 勾 5date day十 273 ca3e H:d“膨 daed

32、印十 304 c8sel2:days da 论 d 盯十 334 if(date 州 r4 O 6LL ds 论阴 r 奶 1002 o 此 e阳 r400 o)8A6L date 咖 nth 3)dM 阳十 1;四 Mtf(”nd d mthedth dayin L”,date month,date da 入 days,date 咽 r)运行情况如下:InpMt y 仍 r,m。nth,d 叮:Lj!旦 JLLJi 之10 1th22 花 th dayin 2000解法二:main()1Int;,dB 田 6,n L day abLU 40,31,28,H,30,31,30,3l,31,30

33、,31,30,19 31 pHntf(”Inl)ut ylsr?month,day:”);scsnf(”d,d,dJ,dsta烟 r,da 亿删 nth,6Lhteday)6 days 06 for(P1li4d3LL month 6门1)d 印 s十 dsy abLil;da 阳十 daf day;if(date yMr 4:O LdateWrI 00 moHth 3)days 十 15 112 写一个函数days,实现上面的计算。由主函数将年、月、日传递给 days函数,计算后将臼数传回主函数输出。解:函数da邢的程序结构基本与111 题相同。解法一;113 编写一个函数办nt,打印一个学生的成绩数组,该数组中有5个学生的数据记录每个记录包括num、name、scoreL32,用主函数输入这些记录,用pr:nt 函数输出这些记录。114 在上题的基础上,编写一个函数i。P皿,用来输入5 个学生的数据记录解:吨?ut 函数的程序结构类似于113 题中主函数的相应部分。115 有 10 个学生,每个学生的数据包括学号、姓名、3r1 课的成绩,从键盘输入10 个学生的数据,要求打印出3r1 课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3r1 课成绩、平均分数)。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术标书

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com