C语言编程练习题绝对经典_第1页
C语言编程练习题绝对经典_第2页
C语言编程练习题绝对经典_第3页
C语言编程练习题绝对经典_第4页
C语言编程练习题绝对经典_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

马克思手稿中有一道趣味数学题:有 30 个人,其中有男人、女人和小孩,在一家饭馆里吃饭 共花了 50 先令,每个男人各花 3 先令,每个女人各花 2 先令,每个小孩各花 1 先令,问男人、 女人和小孩各有几人? 解方程组 编写程序,采用穷举法求出结果。 编写程序,根据以下公式求 e 的值。要求用两种方法计算: 1) for 循环,计算前 50 项 2)while 循环,直至最后一项的值小于 10-4 从键盘中输入一个数字(不限位数) ,用循环语句编程判断并输出这个数字的位数。 猴子吃桃子问题。猴子第一天摘下若干个桃,当即只一半,又多吃一个。第二天早上又将剩下 的一半吃掉一半,双多吃一个。以后每天早上都吃了前天剩下的一半零一个,到第 10 天早上 只剩下最后一个桃。问第一天摘了几个桃。 编程打印九九乘法表 青年歌手参加歌曲大奖赛,有 10 个评委打分,试编程求选手的平均得分(去掉一个最高分和 一个最低分) 。 从键盘中输入一个数字(可以包含小数点,其位数在 60 位以下,求其整数的有效位数,如输入 0123.456,返回值为整数有效位数为 3) 1) 输入数据为浮点型,不用数组,不用字符串,只有变量的算术运算实现此功能。 2) 使用数组来进行编程。 使用数组,编写一个十进制正整数转换为任意进制数的转换工具。 (大进制向小进制的转换。 (方法是相除去余) 10 进制 327 转八进制: 327/8 40 余数为 7 40/8 5 余数为 0 于是八进制数为 507(第一位 5 是最后的商) ) 使用数组,编写一个任意进制正整数转换为十进制的转换工具。 (以 2,10 进制互转为例,其 他请举一反三: 二进制数 1101 转十进制: 12 的三次幂12 的二次幂02 的一次幂12 的零次幂840113) 10 个小孩围成一圈分糖果,老师顺次分给每个人的糖块数为 12,2,8,22,16,4,10,6, 14,20。然后按下列规则调整,所有小孩同时把自己的糖果分一半给右边的小孩,糖块数变为 奇数的人,再向老师补要一块,问经过多少次调整后,大家的糖块一样多,且每人多少块。 111111 1 1!2!3!4!5! e n 编写一个函数,用以求 x2-5x+4 的值,x 做为函数的形参,调用此函数,求: y1= 22-52+4 Y2=(x+15)2-5(x+15)+4 Y3=(sinx)2-5sinx+4 sinx 可以加载”math.h” 库函数后使用,函数说明为 double sin( double x) 编写一个函数,使给定的一个二维数组(NN)行列互换(N3)。 从键盘中输入一个不超过 40 个字符的字符串,再输入一个位数,删除对应 位数的字符,然后 输出删除指定字符后的字符串 要求:1) 用 puts 输出指示信息 2) 用 gets 接收字符串 如果有一个正整数从左、右来读都是一样的,则称为回文式数(简称回数);比如 101,32123, 999 都是回数。数学中有名的“回数猜想”之迷,至今未解决。 回数猜想: 任取一个数,再把它倒过来,并把这两个数相加,然后把这个和数再倒过来,与原和 数相加,重复此过程,一定能获得一个回数。 例: 68倒过来是 86 68+86= 154 154+541= 605 605+506=1111 (回数) 编程,输入任意整数,按上述方法产生一个回数,为简便起见,最多计算 7 步,看是否能得到一个 回数。 要求: 主函数中接收键盘数据,必须用 scanf(“%ld”, long s=0,t=0; printf(“a=“); scanf(“%d“, printf(“n=“); scanf(“%d“, while(i0 要求: 1) 写出递归函数的原型 2) 编写程序 4 用递归法将一个整数转换成字符形式输出。例如输入 483,应输出字符串“483”。 其程序如 下,请验证,并修改程序,增加显示出输入数字的位数的功能,并使输出结果与下图一致。 void convert(long n) long i; if (i=n/10)!=0) convert(i); putchar(n%10+0); main() long number; scanf(“%ld“, if ( number2) /*如果是闰年且月份大于 2,总天数应该加一天*/ sum+; printf(“It is the %dth day.“,sum); getch(); =【程序 5】 题目:输入三个整数 x,y,z,请把这三个数由小到大输出。 1.程序分析:我们想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 xy 则将 x 与 y 的值进 行交换, 然后再用 x 与 z 进行比较,如果 xz 则将 x 与 z 的值进行交换,这样能使 x 最小。 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() int x,y,z,t; scanf(“%d%d%d“, if (xy) t=x;x=y;y=t; /*交换 x,y 的值*/ if(xz) t=z;z=x;x=t; /*交换 x,z 的值*/ if(yz) t=y;y=z;z=t; /*交换 z,y 的值*/ printf(“small to big: %d %d %dn“,x,y,z); getch(); =【程序 6】 题目:用*号输出字母 C 的图案。 1.程序分析:可先用*号在纸上写出字母 C,再分行输出。 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() printf(“Hello C-world!n“); printf(“ *n“); printf(“ *n“); printf(“ * n“); printf(“ *n“); getch(); =【程序 7】 题目:输出特殊图案,请在 c 环境中运行,看一看,Very Beautiful! 1.程序分析:字符共有 256 个。不同字符,图形不一样。 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() char a=176,b=219; printf(“%c%c%c%c%cn“,b,a,a,a,b); printf(“%c%c%c%c%cn“,a,b,a,b,a); printf(“%c%c%c%c%cn“,a,a,b,a,a); printf(“%c%c%c%c%cn“,a,b,a,b,a); printf(“%c%c%c%c%cn“,b,a,a,a,b); getch(); = 【程序 8】 题目:输出 9*9 口诀。 1.程序分析:分行与列考虑,共 9 行 9 列,i 控制行,j 控制列。 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() int i,j,result; printf(“n“); for (i=1;ik,但 n 能被 k 整除,则应打印出 k 的值,并用 n 除以 k 的商,作为新的正整数你 n, 重复执行第一步。 (3)如果 n 不能被 k 整除,则用 k+1 作为 k 的值,重复执行第一步。 2.程序源代码: /* zheng int is divided yinshu*/ #include “stdio.h“ #include “conio.h“ main() int n,i; printf(“nplease input a number:n“); scanf(“%d“, printf(“%d=“,n); for(i=2;i=90 分的同学用 A 表示,60-89 分之间的用 B 表示, 60 分以下的用 C 表示。 1.程序分析:(ab)?a:b 这是条件运算符的基本例子。 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() int score; char grade; printf(“please input a scoren“); scanf(“%d“, grade=score=90?A:(score=60?B:C); printf(“%d belongs to %c“,score,grade); getch(); = 【程序 16】 题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() int a,b,num1,num2,temp; printf(“please input two numbers:n“); scanf(“%d,%d“, if(num1=a/*第一天的桃子数是第 2 天桃子数加 1 后的 2 倍*/ x2=x1; day-; printf(“the total is %dn“,x1); getch(); = 【程序 22】 题目:两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定 比赛名单。有人向队员打听比赛的名单。a 说他不和 x 比,c 说他不和 x,z 比,请编程序找 出 三队赛手的名单。 1.程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() char i,j,k;/*i 是 a 的对手,j 是 b 的对手,k 是 c 的对手*/ for(i=x;i=z;i+) for(j=x;j=z;j+) if(i!=j) for(k=x;k=z;k+) if(i!=k getch(); =【程序 23】 题目:打印出如下图案(菱形) * * * * * * * 1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for 循环,第一层控制行,第二层控制列。 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() int i,j,k; for(i=0;i=3;i+) for(j=0;j=2-i;j+) printf(“ “); for(k=0;k=2*i;k+) printf(“*“); printf(“n“); for(i=0;i=2;i+) for(j=0;j=i;j+) printf(“ “); for(k=0;k=4-2*i;k+) printf(“*“); printf(“n“); getch(); = 【程序 24】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前 20 项之和。 1.程序分析:请抓住分子与分母的变化规律。 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() int n,t,number=20; float a=2,b=1,s=0; for(n=1;n=number;n+) s=s+a/b; t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜 t 的作用*/ printf(“sum is %9.6fn“,s); getch(); = 【程序 25】 题目:求 1+2!+3!+.+20!的和 1.程序分析:此程序只是把累加变成了累乘。 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() float n,s=0,t=1; for(n=1;n=20;n+) t*=n; s+=t; printf(“1+2!+3!.+20!=%en“,s); getch(); = 【程序 26】 题目:利用递归方法求 5!。 1.程序分析:递归公式:fn=fn_1*4! 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() int i; int fact(); for(i=0;i5;i+) printf(“40:%d!=%dn“,i,fact(i); getch(); int fact(j) int j; int sum; if(j=0) sum=1; else sum=j*fact(j-1); return sum; = 【程序 27】 题目:利用递归函数调用方式,将所输入的 5 个字符,以相反顺序打印出来。 1.程序分析: 2.程序源代码: #include “stdio.h“ #include “conio.h“ main() int i=5; void palin(int n); printf(“40:“); palin(i); printf(“n“); getch(); void palin(n) int n; char next; if(n=1) next=getchar(); printf(“n0:“); putchar(next); else next=getchar(); palin(n-1); putchar(next); = 【程序 28】 题目:有 5 个人坐在一起,问第五个人多少岁?他说比第 4 个人大 2 岁。问第 4 个人岁数,他说比 第 3 个人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最 后 问第一个人,他说是 10 岁。请问第五个人多大? 1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道 第四人的岁数,依次类推,推到第一人(10 岁),再往回推。 2.程序源代码: #include “stdio.h“ #include “conio.h“ age(n) int n; int c; if(n=1) c=10; else c=age(n-1)+2; return(c); main() printf(“%d“,age(5); getch(); = 【程序 29】 题目:给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 1. 程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数 002 班赵鑫提供) 2.程序源代码: #include “stdio.h“ #include “conio.h“ main( ) long a,b,c,d,e,x; scanf(“%ld“, a=x/10000;/*分解出万位*/ b=x%10000/1000;/*分解出千位*/ c=x%1000/100;/*分解出百位*/ d=x%100/10;/*分解出十位*/ e=x%10;/*分解出个位*/ if (a!=0) printf(“there are 5, %ld %ld %ld %ld %ldn“,e,d,c,b,a); else if (b!=0) printf(“there are 4, %ld %ld %ld %ldn“,e,d,c,b); else if (c!=0) printf(“ there are 3,%ld %ld %ldn“,e,d,c); else if (d!=0) printf(“there are 2, %ld %ldn“,e,d); else if (e!=0) printf(“ there are 1,%ldn“,e); getch(); =【程序 30】 题目:一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同。 1.程序分析:同 29 例 2.程序源代码: #include “stdio.h“ #include “conio.h“ main( ) long ge,shi,qian,wan,x; scanf(“%ld“, wan=x/10000; qian=x%10000/1000; shi=x%100/10; ge=x%10; if(ge=wan else printf(“this number is not a huiwenn“); getch(); .:.:经典 c 程序 100 例=31-40:.:. 经典 c 程序 100 例=31-40 【程序 31】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。 1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或 if 语句判断第二个 字母。 2.程序源代码: #include “stdio.h“ #include “conio.h“ void main() char letter; printf(“please input the first letter of somedayn“); while(letter=getch()!=Y)/*当所按字母为 Y 时才结束*/ switch (letter) case S:printf(“please input second lettern“); if(letter=getch()=a) printf(“saturdayn“); else if (letter=getch()=u) printf(“sundayn“); else printf(“data errorn“); break; case F:printf(“fridayn“);break; case M:printf(“mondayn“);break; case T:printf(“please input second lettern“); if(letter=getch()=u) printf(“tuesdayn“); else if (letter=getch()=h) printf(“thursdayn“); else printf(“data errorn“); break; case W:printf(“wednesdayn“);break; default: printf(“data errorn“); getch(); = 1求下列分段函数的值。 1 10 1 1 1 2 XX X X X Y 2求下列分段函数的值。 (a、b 由键盘输入 ) baba ba baba Y0 3求分段函数的值 2 1 1 log x x x z 0 0 0 x x x 4求分段函数的值 0ln 01 01 2 Xx X Xe Y x 5计算:s=1+1/1+1/2+ +1/n ,其中 n 由键盘输入。 6用台劳级数求 e 的近似值,直到最后一项小于 10-6 e=1+1/1!+1/2!+1/3!+ 7求 s=1-2+3-4+5+99-100 8输出 2001000 之间能被 7 整除的数,并统计其个数。 9任意输入 100 个整数,分别统计其中的正数、负数和零的个数。 10任意输入 N 个数,统计其中的正数个数和负数个数。 11任意输入 aNN个数,找出并输出其中的最大数和最小数,以及它们的下标。 12 求数组 a88中,主对角线和次对角线上各元素之和。 13任意输入 N 个数,将它们由大到小排序输出。 14编程打印下列的杨辉三角形。 (设 10 行) 1 11 121 1331 14641 15101051 15以“#”为字符,打印一个正三角形。 16以“”为字符,打印一个 6 行的倒正三角形。 17. 打印 101000 之间满足下列条件的所有数: 正序读和反序读都相同,例如:55、232 等。 18从键盘任意输入一个大于 0 且小于 1000 的整

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论