C语言一些较重要的例题.docx
- 文档编号:2370928
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:26
- 大小:39.22KB
C语言一些较重要的例题.docx
《C语言一些较重要的例题.docx》由会员分享,可在线阅读,更多相关《C语言一些较重要的例题.docx(26页珍藏版)》请在冰豆网上搜索。
C语言一些较重要的例题
一些较重要的例题
一.例6.1求1+2+3+…+100,即
解题思路:
这是累加问题,需要先后将100个数相加
要重复100次加法运算,可用循环实现
后一个数是前一个数加1而得
加完上一个数i后,使i加1可得到下一个数。
#include
intmain()
{
inti=1,sum=0;
while(i<=100)
{sum=sum+i;
i++;
}
printf("sum=%d\n",sum);
return0;
}
国王的许诺。
相传国际象棋是古印度舍罕王的宰相达依尔发明的。
舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。
一位聪明的宰相指着8×8共64格的象棋盘说:
陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。
舍罕王让人扛来一袋麦子,他要兑现他的许诺。
国王能兑现他的许诺吗?
试编程计算舍罕王共要多少麦子赏赐他的宰相,这些麦子合多少立方米?
(已知1立方米麦子约1.42e8粒)
总粒数为:
sum=1+2+20+23+…+263
方法1:
#defineCONST1.42e8
#include
#include
main()
{
intn;
doubleterm,sum=0;/*累加求和变量赋初值*/
for(n=1;n<=64;n++)
{
term=pow(2,n-1);/*根据累加项的规律计算累加项*/
sum=sum+term;/*作累加运算*/
}
printf("sum=%e\n",sum);/*打印总麦粒数*/
printf("volum=%e\n",sum/CONST);/*打印折合的总麦粒体积数*/
}
方法2:
#defineCONST1.42e8/*定义符号常量CONST值为1.42e8*/
#include
main()
{
intn;
doubleterm=1,sum=1;/*累乘求积、累加求和变量赋初值*/
for(n=2;n<=64;n++)
{
term=term*2;/*根据后项总是前项的2倍计算累加项*/
sum=sum+term;/*作累加运算*/
}
printf("sum=%e\n",sum);/*打印总麦粒数*/
printf("volum=%e\n",sum/CONST);/*打印折合的总麦粒体积数*/
}
例6.5输出以下4*6的矩阵。
12346
246810
3691216
48121620
解题思路:
可以用循环的嵌套来处理此问题。
用外循环来输出一行数据。
用内循环来输出一列数据。
按矩阵的格式(每行5个数据)输出。
#include
intmain()
{inti,j,n=0;
for(i=1;i<=4;i++)
for(j=1;j<=5;j++,n++)
{if(n%5==0)printf(“\n”);
printf("%d\t",i*j);
}
printf("\n");
return0;
}
例6.4在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。
编程思路:
循环次数不确定,但最多循环1000次
在循环体中累计捐款总数
用if语句检查是否达到10万元
如果达到就不再继续执行循环,终止累加
计算人均捐款数
变量amount,用来存放捐款数
变量total,用来存放累加后的总捐款数
变量aver,用来存放人均捐款数
定义符号常量SUM代表100000
#include
#defineSUM100000
intmain()
{floatamount,aver,total;inti;
for(i=1,total=0;i<=1000;i++)
{printf("pleaseenteramount:
");
scanf("%f",&amount);
total=total+amount;
if(total>=SUM)break;
}
aver=total/i;printf(“num=%d\naver=%10.2f\n”,i,aver);
return0;
}
例6.6要求输出100~200之间的不能被3整除的数。
编程思路:
对100到200之间的每一个整数进行检查
如果不能被3整除,输出,否则不输出
无论是否输出此数,都要接着检查下一个数(直到200为止)。
循环体如下:
for(n=100;n<=200;n++)
{if(n%3==0)
continue;
printf("%d",n);
}
例6.7用公式求的近似值,直到发现某一项的绝对值小于10-6为止(该项不累计加)。
解题思路:
求π近似值的方法很多,本题是一种
每项的分子都是1
后一项的分母是前一项的分母加2
第1项的符号为正,从第2项起,每一项的符号与前一项的符号相反。
数据分析
累加和存入pi
累加项为t
分母为n
符号为s
#include
#include
intmain()
{intsign=1;doublepi=0,n=1,term=1;
while(fabs(term)>=1e-6)
{pi=pi+term;
n=n+2;
sign=-sign;
term=sign/n;
}
pi=pi*4;
printf("pi=%10.8f\n",pi);
return0;
}
例6.8求费波那西(Fibonacci)数列的前40个数。
这个数列有如下特点:
第1、2两个数为1、1。
从第3个数开始,该数是其前面两个数之和。
即:
#include
intmain()
{intf1=1,f2=1,f3;inti;
printf("%12d\n%12d\n",f1,f2);
for(i=1;i<=38;i++)
{f3=f1+f2;
printf("%12d\n",f3);
f1=f2;
f2=f3;
}
return0;
}
改进后的代码:
#include
intmain()
{intf1=1,f2=1;inti;
for(i=1;i<=20;i++)
{printf("%12d%12d",f1,f2);
if(i%2==0)printf("\n");
f1=f1+f2;
f2=f2+f1;
}
return0;
}
马克思手稿中有一道趣味数学题:
有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?
解方程组
穷举法
#include
main()
{
intx,y,z;
printf("Man\tWomen\tChildern\n");
for(x=0;x<=30;x++)
for(y=0;y<=30;y++)
for(z=0;z<=30;z++)
if(x+y+z==30&&3*x+2*y+z==50)
printf("%3d\t%5d\t%8d\n",x,y,z);
}
改进型:
#include
main()
{
intx,y,z;
printf("Man\tWomen\tChildern\n");
for(x=0;x<=16;x++)
for(y=0;y<=25;y++)
{
z=30–x-y;
if(3*x+2*y+z==50)
printf("%3d\t%5d\t%8d\n",x,y,z);
}
}
例6.9输入一个大于3的整数n,判定它是否素数(prime,又称质数)。
解题思路:
让n被i整除(i的值从2变到n-1)
如果n能被2~(n-1)之中任何一个整数整除,则表示n肯定不是素数,不必再继续被后面的整数除,因此,可以提前结束循环
注意:
此时i的值必然小于n
#include
intmain()
{intn,i;
printf(“n=?
");scanf("%d",&n);
for(i=2;i<=n-1;i++)
if(n%i==0)break;
if(i elseprintf("%dis\n",n); return0; } 例6.10求100~200间的全部素数。 解题思路: 使用例6.9的算法 在例6.9程序中只要增加一个外循环,先后对100~200间的全部整数一一进行判定即可 …… for(n=101;n<=200;n=n+2) {k=sqrt(n); for(i=2;i<=k;i++) if(n%i==0)break; if(i>=k+1) {printf("%d",n); m=m+1; } if(m%10==0)printf(“\n”); } 例7.1对10个数组元素依次赋值为0,1, 2,3,4,5,6,7,8,9,要求按逆序输出。 解题思路: 定义一个长度为10的数组,数组定义为整型 要赋的值是从0到9,可以用循环来赋值 用循环按下标从大到小输出这10个元素 #include intmain() {inti,a[10]; for(i=0;i<=9;i++) a[i]=i; for(i=9;i>=0;i--) printf("%d",a[i]); printf("\n"); return0; } 例7.2用数组处理求Fibonacci数列问题 解题思路: 例6.8中用简单变量处理的,缺点不能在内存中保存这些数。 假如想直接输出数列中第25个数,是很困难的。 如果用数组处理,每一个数组元素代表数列中的一个数,依次求出各数并存放在相应的数组元素中 #include intmain() {inti;intf[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) {if(i%5==0)printf(“\n”); printf(“%12d”,f[i]); } printf("\n"); return0; } 例7.3有10个地区的面积,要求对它们按由小到大的顺序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 一些 重要 例题