C语言练习题-精品文档资料整理.doc

上传人:安*** 文档编号:28614550 上传时间:2022-07-28 格式:DOC 页数:12 大小:90KB
返回 下载 相关 举报
C语言练习题-精品文档资料整理.doc_第1页
第1页 / 共12页
C语言练习题-精品文档资料整理.doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《C语言练习题-精品文档资料整理.doc》由会员分享,可在线阅读,更多相关《C语言练习题-精品文档资料整理.doc(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C语言练习题例1.已知圆柱体的底半径为 radius ,高为 high ,求其体积。 #include main() float radius,high,vol,pi=3.1415926; printf(Please input radius & high: ); scanf(%f%f,&radius,&high); /* 从键盘输入两个实数赋给变量 r,h*/ vol=pi*radius*radius*high; printf(radius=%7.2f, high=%7.2f, vol=%7.2fn,radius,high,vol); 程序运行结果如下: Please input radiu

2、s & high: 2.5 2.0 8 radius= 2.50,high= 2.00,vol= 39.27 /* 例2 试编写求梯形面积的程序,数据由键盘输入。 分析:设梯形上底为A,下底为B,高为面职为,则S=(AB)*2*/#include void main() float a,b,h,s; printf(please input a,b,h:); scanf(%f%f%f,&a,&b,&h); s=0.5*(a+b)*h; printf(a=%6.3f b=%6.3f h=%6.3fn,a,b,h); printf(s=%8.4fn,s);/*例3-1 输入一组学生成绩,评定其等级。

3、方法是:90100分为A,8089分为B,7079分为C,6069分为D,60分以下为E。使用if语句实现的程序段如下:*/#include void main()int x;scanf(%d,&x);if (x=90)printf(A);else if (x=80)printf(B);else if (x=70) printf(C);else if (x=60)printf(D);elseprintf(E);/* 例3-2 将例3-1 使用switch.语句来实现的程序如下*/#include void main()int x;printf(Enter x=?);scanf(%d,&x);s

4、witch(int)(x/10) case 10:case 9: printf(A);case 8: printf(B);case 7: printf(C);case 6: printf(D);Default:printf(E);/* 例4 计算sinx=1-x3/3!+x5/5!-x7/7!+. 直到最后一项的绝对值小于1e-7时为止。分析:这道题使用递推方法来做。让多项式的每一项与一个变量n对应,n的值依次为1,3,5,7,.,从多项式的前一项算后一项,只需将前一项乘一个因子:(-x2)/(n-1)*n)用s表示多项式的值,用t表示每一项的值,程序如下:*/#include #includ

5、e void main() double s,t,x; int n; printf(please input x:); scanf(%lf,&x); t=x; n=1; s=x;do n=n+2; t=-t*x*x/(n-1)/n; /* 计算通项 */ s=s+t; /* 累加求和 */ while(fabs(t)=1e-7); /* 当累加项的值大于1e-7继续循环 */ printf(sin(%f)=%lf,x,s);例5:输出9*9口诀。1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。2.程序源代码:以下是引用片段:#include main() int i,j,resul

6、t; printf(/n); for (i=1;i10;i+) for(j=1;j10;j+) result=i*j; printf(%d*%d=%-3d,i,j,result);/*-3d表示左对齐,占3位*/ printf(/n);/*每一行后换行*/ 例6:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。2.程序源代码:以下是引用片段:#include main() int i,j,k,n

7、; printf(water flowernumber is:); for(n=100;nn; (2)m除以n得余数r; (3)若r=0,则n为求得的最大公约数,算法结束;否则执行(4); (4)mn,nr,再重复执行(2)。*/#include void main() int n,m,nm,r,t;printf(Enter m,n=?);scanf(%d%d,&m,&n);nm=n*m;if (mn) t=m; m=n; n=t; r=m%n; while (r!= 0) m=n;n=r;r= m%n;printf(The max Gyshu=%dn, n);printf(The min G

8、bshu=%dn, nm/n); /* 例8 打印由数字组成的如下所示金字塔图案。 1 222 33333 4444444 555555555 66666666666 7777777777777 888888888888888 9999999999999999编程分析:打印图案一般可由多重循环实现,外循环用来控制打印的行数,内循环控制每行的空格数和字符个数。实现打印上金字塔图案的程序如下:*/#include void main() int i,k,j; for(i=1;i=9;i+) /* 外循环控制打印行数 */ for (k=1;k=10-i;k+) /* 每行起始打印位置 */ pri

9、ntf( ); for (j=1;j=2*i-1;j+) /* 内循环控制打印个数 */ printf(%c,48+i); /* 打印内容 数字1的Ascii码为49 */ printf(n); /* 换行 */ /* 例9 判断一个给定的整数是否为素数。*/*程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。*/#include #include void main() int m,i,k; printf(Enter m=n); scanf(%d,&m); k=sqrt(m); for(i=2;i=k) printf(Yesn);

10、 else printf(Non); /*例10 将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合? 分析:如果用x,y,z来分别代表5元、1元和0.5元的零钞的张数,根据题意只能得到下面两个方程: x+y+z=100 5x+y+0.5z=100 显然从数学上,本问题无法得到解析求解,但用计算机便可方便地进行求出各种可能的解,这类问题属于穷举法(又称枚举法)问。*/#include void main()int x, y, z,n; printf( 5yun 1yun 0.5yunn); n=0; for(x=1; x=100;x+

11、) for(y=1;y=100;y+) for(z=1;z=100;z+) if(x+y+z=100 & 5*x+y+0.5*z=100) printf( %d %d %dn,x,y,z); n+; printf( Total %d,n); /* 例11用迭代法求某个数的平方根。 */#include #include void main() float x, x0, x1, a; printf(Enter a number a=?n); scanf(%f,&a); if (fabs(a)0.000001) x=0; else if(a 0.00001) x0 = x1; /* 为下一次迭代作

12、准备 */ x1 = 0.5 * (x0 + a / x0); x = x1; printf(%f s sqrt is:%fn, a,x); 例12 试编写程序,把 560 分钟换算成用小时和分钟表示,然后进行输出。 分析:( 1 )可用表达式 560/60 把分钟换算成小时和分钟,商就是小时数,余数是分钟数。 ( 2 )确定变量的名字和定义变量的类型:在程序中把小时数放在变量 h 中,把分钟数放在变量 m 中。这两个变量的类型可以是整型,也可以是实型。 ( 3 )确定算法:求商在 C 语言中用整除的算法,语句是 h=560/60; 求余数则用语句: m=560%60; 。 ( 4 )设计输出

13、格式。若输出形式定为:小时:分钟,则按此形式设计输出语句。 #include main() int h,m; h=560/60; m=560%60; printf(“The result: %3d:%3dn”,h,m); 运行结果是: The result: 9: 20 例13 编写程序,读入 3 个整数给 a 、 b 、 c ,然后交换他们中的数,把 a 中原来的值给 b ,把 b 中原来的值给 c, 把 c 中原来的值给 a 。 分析: ( 1 )定义 4 个整型变量 a 、 b 、 c 和 t, 变量 a 、 b 、 c 分别存放读入的 3 个整数, t 用作临时存储单元。 ( 2 )设

14、计输入语句,以及在此之前用于提示输入的 (printf) 语句。 ( 3 )输出 a 、 b 、 c 中的值,以便于比较。 ( 4 )交换步骤如下: 把c中的值赋给t。 把 b中的值赋给c。 把 a中的值赋给b。 把 t中的值赋给a。 经过以上步骤,已按要求进行了交换。 ( 5 )输出 a 、 b 、 c 中的值。 #include main() int a,b,c,t; printf(“Enter a,b,c:n”); scanf(“%d%d%d”,&a,&b,&c); printf(“a=%d,b=%d,c=%dn”,a,b,c); t=c;c=b;b=a;a=t; printf(“a=%

15、d,b=%d,c=%dn”,a,b,c); 输出结果: Enter a,b,c: 1 2 3 8 a=1,b=2,c=3 a=3,b=1,c=2例14 鸡兔共有 30 只,脚共有 90 只,编写一个程序计算鸡兔各有多少只。 分析: 依题意,设有鸡 i 只,则兔有 30 i 只, i 从 0 到 15 进行循环,找出满足条件 2*i+4*(30-i)=90 的 i 即可。 实现本题功能的程序如下: #include main() int i; for(i=0;i=15;i+) if(2*i+4*(30-i)=90) printf( 鸡 =%d 只 兔 =%d 只 n,i,30-i); 程序运行结

16、果如下: 鸡 =15 只 兔 =15 只 例15 完成用一百元人民币换成一元、两元、五元的所有兑换方案。 分析: 本题应该先分析算法,再编程。可以先从 5 元分析起,再考虑 2 元,最后为 1 元,因此,本题要用到 2 层循环。 实现本题功能的程序如下: #include main() int i,j,k,l=1; for(i=0;i=20;i+) for(j=0;j0) printf(%2d;%2d;%2d ,i,j,k); l=l+1; if(l%5=0) printf(n); 例16 编写一个程序将一个正整数分解成质因数。例如:输入 90 ,打印出 90=2*3*3*5 。 分析: 对

17、n 进行分解质因数,应先找到一个最小的质数 k ,然后按下述步骤完成: (1) 如果这个质数恰等于 n ,则说明分解质因数的过程已经结束,打印出即可。 (2) 如果 nk ,但 n 能被 k 整除,则应打印出 k 的值,并用 n 除以 k 的商 , 作为新的正整数 n ,重复执行第一步。 (3) 如果 n 不能被 k 整除,则用 k+1 作为 k 的值,重复执行第一步。 实现本题功能的程序如下: #include main() int n,i; printf(nPlease input a number:n); scanf(%d,&n); /* 输入 n 的值 */ printf(%d=,n)

18、; for(i=2;i=n;i+) /* 从 2 开始循环一直到 n 本身 */ while(n!=i) /* 如果 n 不为自己,也就是 n 不为素数 */ if(n%i=0) /* n 能被 i 除尽,即找到 n 的因数 */ printf(%d*,i); n=n/i; /* 继续找下一个因数,把 n/i 作为新的 n 值 */ else break; printf(%d,n); 程序运行结果如下: Please input a number: 88 8 88=2*2*2*11 例17 有 1 、 2 、 3 、 4 这 4 个数字,能组成多少个互不相同且无重复数字的三位数?编写程序打印这

19、些三位数?要求每行打印 10 个数。 分析: 可填在百位、十位、个位的数字都是 1 、 2 、 3 、 4 。每一位置上的数字有 4 种循环,有三个位置,所以循环的嵌套有三层。循环组成所有的排列后再去掉不满足条件(即有重复位置的数字)的排列。 实现本题功能的程序如下:#include main() int i,j,k,t=0; /* i,j,k 用来表示每个位置上的数, t 控制输出格式 */ printf(n); for(i=1;i5;i+) for(j=1;j5;j+) for(k=1;k5;k+) if(i!=k)&(i!=j)&(j!=k) t+; if(t%10=0) /*t 对 1

20、0 取模,为 0 则换行 */ printf(%d%d%dn,i,j,k); else printf(%d%d%d,i,j,k); 例18-1(选择排序) 假设有10个数,要求将它们按照从小到大的顺序排列。分析:先将10个数存入数组a10中,按照下面的基本思路进行。选择排序:第一轮,先将a0与其后的各个数进行比较,凡出现比a0小的数就记下它的位置。经过这一轮(共比较9次)后,最小的数就被选择出来,将它与a0交换位置。这样,经过第一轮比较,a0就是最小的数。第二轮,将第二个数a1与其后的各个数进行比较,凡出现比a1小的数就记下它的位置。经过这一轮的(共比较8次)后,次小的数就选择出来了,将它与a

21、1交换位置。这样,经过第二轮比较,a1就是次小的数。依次类推,最后进行第9轮比较,即将a8和a9进行比较,必要时交换它们的位置。这样,最大的数就是a9,整个排序过程告以结束。选择排序总共要进行(n-1)+ (n-2)+1=n(n-1)/2 次比较和最多n-1次交换,并且是一种比较简单但效率较低的排序方法。实现本题功能的程序如下:#include #define n 10main()int i,j,k;float an,t;printf(Pleaseput %d,n);printf( numbers :n);for(i=0;in;i+)scanf(%f,&ai);for(i=0;in-1;i+)

22、k=i;for(j=i+1;jn;j+)if(ajak)k=j;if(i!=k)t=ai;ai=ak;ak=t;printf(the sorted numebers :n);for(i=0;in;i+)printf(%6.2f ,ai);程序运行结果如下:Pleaseput 10 numbers :1 4 6 8 65 75 -1 9 100 28the sorted numebers :-1.001.002.004.006.008.009.0065.0075.00 100.00例18-2冒泡排序:与选择排序不同,冒泡排序时,总是对两个相邻的元素做比较,其过程如下:第一轮,先将a0与a1比较,

23、若a0 a1,则将二者交换;然后将a1和a2比较,若a1 a2,则将二者交换;依次进行下面相邻元素的比较。经过这一轮9次比较后,最小数已经沉到数组的底部。第二轮,先将a0与a1比较,若a0 a1,则将二者交换;然后依次将a1与a2比较,直到a7 a8比较后,就将次小数沉到数组元素a8中。依次类推,最后一轮将a0和a1比较,最终将最大数上浮到数组顶部的a0中。在排序过程中,把大数比成气泡,使之不断向数组顶部上浮,当气泡一步一步上移到顶部时,排序过程即告结束。冒泡排序的比较次数和选择排序相同,但它的交换次数比选择排序多。实现本题功能的程序如下:#include main()float a11;in

24、t i,j,t;printf(Pleaseput 10 numbers :n);for(i=1;i11;i+)scanf(%f,&ai);printf(n);for(j=1;j=9;j+)for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;printf(the sorted numbers :n);for(i=1;i11;i+)printf(%6.2f,ai);程序运行结果如下:Pleaseput 10 numbers :1.2 -9.7 10 13 15 56 78 -91 5 20.18the sorted numbers :-91.00-9.701.205.0010.00

25、13.0015.0020.1056.0078.00例19从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以“!”结束。 程序源代码如下:#include main() FILE *fp;char str100,filename10;int i=0;if(fp=fopen(test,w)=NULL) printf(cannot open the filen);exit(0);printf(please input a string:n);gets(str);while(stri!=!) if(stri= a&stri=z)stri=str

26、i-32;fputc(stri,fp);i+;fclose(fp);fp=fopen(test,r);fgets(str,strlen(str)+1,fp);printf(%sn,str);fclose(fp);程序分析:本题考查的是文件的基本操作。首先是利用gets函数从键盘输入字符到字符数组str中,然后利用while循环和fputc函数将str字符串中的字符写入文件test。再以只读的方式打开文件test,将其中的字符读入字符串变量str,最后输出字符数组str。程序运行结果为:please input a string:abcdefghijkl!8ABCDEFGHIJKL文件test的

27、内容为:ABCDEFGHIJKL例20 输入5行字符,将其写入到C盘根目录的myfile.txt文件中 */#includevoid main() FILE *fp; char ch80,*p=ch; int n; if(fp=fopen(c:myfile.txt,w)=NULL) /* 打开文件失败 */ printf(Cannot open file the file exit!); exit(0); /* 退出程序 */ printf(input a string:n); for(n=1; n=5; n+) gets(p); /* 输入一行字符 */ while (*p!=0) /* 逐个字符写入文件 */ fputc(*p,fp); p+; fputc(n,fp); /* 写入换行符 */ fclose(fp);

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

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁