马井堂十个经典的C语言程序.docx
- 文档编号:10829770
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:11
- 大小:16.57KB
马井堂十个经典的C语言程序.docx
《马井堂十个经典的C语言程序.docx》由会员分享,可在线阅读,更多相关《马井堂十个经典的C语言程序.docx(11页珍藏版)》请在冰豆网上搜索。
马井堂十个经典的C语言程序
十个经典的C语言程序
【程序01】
题目:
古典问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析:
兔子的规律为数列1,1,2,3,5,8,13,21....
2.程序源代码:
#include"stdio.h"
#include"conio.h"
main()
{
longf1,f2;
inti;
f1=f2=1;
for(i=1;i<=20;i++)
{
printf("%12ld%12ld",f1,f2);
if(i%2==0)printf("\n");/*控制输出,每行四个*/
f1=f1+f2;/*前两个月加起来赋值给第三个月*/
f2=f1+f2;/*前两个月加起来赋值给第三个月*/
}
getch();
}
==============================================================
【程序02】
题目:
判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:
判断素数的方法:
用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
#include"math.h"
main()
{
intm,i,k,h=0,leap=1;
printf("\n");
for(m=101;m<=200;m++)
{
k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{
leap=0;
break;
}
if(leap)
{
printf("%-4d",m);
h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThetotalis%d",h);
getch();
}
==============================================================
【程序03】
题目:
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。
例如:
153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:
利用for循环控制100-999个数,每个数分解出个位,十位,百位。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
main()
{
inti,j,k,n;
printf("'waterflower'numberis:
");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
printf("%-5d",n);
}
getch();
}
==============================================================
【程序04】
题目:
将一个正整数分解质因数。
例如:
输入90,打印出90=2*3*3*5。
程序分析:
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
2.程序源代码:
/*zhengintisdividedyinshu*/
#include"stdio.h"
#include"conio.h"
main()
{
intn,i;
printf("\npleaseinputanumber:
\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
while(n!
=i)
{
if(n%i==0)
{
printf("%d*",i);
n=n/i;
}
else
break;
}
printf("%d",n);
getch();
}
==============================================================
【程序05】
题目:
利用条件运算符的嵌套来完成此题:
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,
60分以下的用C表示。
1.程序分析:
(a>b)?
a:
b这是条件运算符的基本例子。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
main()
{
intscore;
chargrade;
printf("pleaseinputascore\n");
scanf("%d",&score);
grade=score>=90?
'A':
(score>=60?
'B':
'C');
printf("%dbelongsto%c",score,grade);
getch();
}
==============================================================
【程序06】
题目:
输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:
利用辗除法。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
main()
{
inta,b,num1,num2,temp;
printf("pleaseinputtwonumbers:
\n");
scanf("%d,%d",&num1,&num2);
if(num1 { temp=num1; num1=num2; num2=temp; } a=num1;b=num2; while(b! =0)/*利用辗除法,直到b为0为止*/ { temp=a%b; a=b; b=temp; } printf("gongyueshu: %d\n",a); printf("gongbeishu: %d\n",num1*num2/a); getch(); } ============================================================== 【程序07】 题目: 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1.程序分析: 利用while语句,条件为输入的字符不为'\n'. 2.程序源代码: #include"stdio.h" #include"conio.h" main() { charc; intletters=0,space=0,digit=0,others=0; printf("pleaseinputsomecharacters\n"); while((c=getchar())! ='\n') { if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++; elseif(c=='') space++; elseif(c>='0'&&c<='9') digit++; else others++; } printf("allinall: char=%dspace=%ddigit=%dothers=%d\n",letters, space,digit,others); getch(); } ============================================================== 【程序08】 题目: 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 例如2+22+222+2222+22222(此时 共有5个数相加),几个数相加有键盘控制。 1.程序分析: 关键是计算出每一项的值。 2.程序源代码: #include"stdio.h" #include"conio.h" main() { inta,n,count=1; longintsn=0,tn=0; printf("pleaseinputaandn\n"); scanf("%d,%d",&a,&n); printf("a=%d,n=%d\n",a,n); while(count<=n) { tn=tn+a; sn=sn+tn; a=a*10; ++count; } printf("a+aa+...=%ld\n",sn); getch(); } ============================================================== 【程序09】 题目: 一个数如果恰好等于它的因子之和,这个数就称为“完数”。 例如6=1+2+3.编程 找出1000以内的所有完数。 1.程序分析: 请参照程序<--上页程序14. 2.程序源代码: #include"stdio.h" #include"conio.h" main() { staticintk[10]; inti,j,n,s; for(j=2;j<1000;j++) { n=-1; s=j; for(i=1;i { if((j%i)==0) { n++; s=s-i; k[n]=i; } } if(s==0) { printf("%disawanshu",j); for(i=0;i printf("%d,",k[i]); printf("%d\n",k[n]); } } getch(); } ============================================================== 【程序10】 题目: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米? 第10次反弹多高? 1.程序分析: 见下面注释 2.程序源代码: #include"stdio.h" #include"stdio.h" main() { floatsn=100.0,hn=sn/2; intn; for(n=2;n<=10;n++) { sn=sn+2*hn;/*第n次落地时共经过的米数*/ hn=hn/2;/*第n次反跳高度*/ } printf("thetotalofroadis%f\n",sn); printf("thetenthis%fmeter\n",hn); getch(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 马井堂 十个 经典 语言 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)