C语言课堂实例.docx
- 文档编号:11775855
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:12
- 大小:18.12KB
C语言课堂实例.docx
《C语言课堂实例.docx》由会员分享,可在线阅读,更多相关《C语言课堂实例.docx(12页珍藏版)》请在冰豆网上搜索。
C语言课堂实例
顺序结构课堂练习综合实例
例1输入三角形的三条边长,求三角形面积。
(为了简单起见,设输入的三边长a,b,c能构成三角形)
#include″math.h″
main()
{
floata,b,c,s,area;
scanf(″%f,%f,%f″,&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(″a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n″,a,b,c,s);
printf(″area=%7.2f\n″,area);}
运行情况如下:
3,4,6
a=3.00,b=4.00,c=6.00,s=6.50
area=5.33
例2从键盘输入一个大写字母,要求改用小写字母输出。
#include″stdio.h″
main()
{
charc1,c2;
c1=getchar();
printf(″%c,%d\n″,c1,c1);
c2=c1+32;
printf(″%c,%d\n″,c2,c2);
}
运行情况如下:
A↙
A,65
a,97
选择结构课堂练习综合实例
通过一些例子,进一步说明选择结构的程序设计方法。
例1求一个整数的平方根,若为负数,则求出它的负数平方根。
#include"stdio.h"
#include"math.h"
main()
{
intn;
floatroot;
printf("Enteranumber:
\t");
scanf("%d",&n);
if(n>=0)
{
root=sqrt(n);printf("sqrt(%d)=%f",n,root);
}
else
{
root=sqrt(abs(n));
printf("sqrt(%d)=%fi",n,root);
}
}
例2从键盘上输入3个实数,求出其中的最小值并输出其值。
main()
{
floata,b,c,temp;
printf("Pleaseentera,b,c:
\n");
scanf("%f,%f,%f",&a,&b,&c);
if(a>=b)
{
temp=a;a=b;b=temp;
}
if(a>=c)
{
temp=a;a=c;c=temp;
}
printf("Min=%f\n",a);
}
程序运行情况:
1.2,-34.5,678↙
Min=-34.500001
也可以用如下方法解决此题:
main()
{
floata,b,c,temp;
printf("Pleaseentera,b,c:
\n");
scanf("%f,%f,%f",&a,&b,&c);
a=(a
a:
b;
a=(a a: c; printf("Min=%f\n",a); } 例3输入一个年份,判断它是否是闰年。 main() { intyear,leap; printf("Pleaseenteryear: \n"); scanf("%d",&year); if(year%400==0) leap=1; else if((year%4==0)&&(year%100! =0)) leap=1; else leap=0; if(leap! =0) printf("%disaleapyear.\n",year); else printf("%disnotaleapyear.\n",year); } 程序运行情况: Pleaseenteryear: 2008↙ 2008isaleapyear. 1989↙ 1989isnotaleapyear. [说明] (1)若年号能被400整除或能被4整除且不能被100整除,则该年号为闰年,否则不是闰年。 (2)事实上,还可以用一个逻辑表达式概括闰年的所有条件,从而上述程序可以简化为如下形式: main() { intyear,leap; printf("Pleaseenteryear: \n"); scanf("%d",&year); if(year%400==0‖year%4==0&&year%100! =0) printf("%disaleapyear.\n",year); else printf("%disnotaleapyear.\n",year); } 例4求ax2+bx+c=0方程的解。 [分析]从代数知识可知: ①a=0,不是二次方程。 ②b2-4ac=0,有两个相等实根。 ③b2-4ac>0,有两个不等实根。 ④b2-4ac<0,有两个虚根。 #include"math.h" main() { floata,b,c,d,disc,x1,x2,realpart,imagepart; printf("Pleaseentera,b,c: \n"); scanf("%f,%f,%f",&a,&b,&c);/*方程系数*/ printf("Theequation"); if(fabs(a)<=1e-6)/*判别a=0*/ printf("isnotquadratic"); else disc=b*b-4*a*c;/*Δ*/ if(fabs(a)<=1e-6)/*Δ=0*/ printf("hastwoequalroots: %8.4f\n",-b/(2*a)); elseif(disc>1e-6)/*Δ>0*/ { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("hasdistinctrealroots: %8.4fand% 8.4f\n",x1,x2); } else/*Δ<0*/ { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("hascomplexroots: \n"); printf("%8.4f+%8.4fi\n",realpart,imagpart); printf("%8.4f-%8.4fi\n",realpart,imagpart); } } 运行结果: Pleaseentera,b,c: 3,4,5 Theequationhascomplexroots: -0.6667+1.1055i -0.6667-1.1055i Pleaseentera,b,c: 1,2,1 Theequationhastwoequalroots: -1.0000 程序中用disc代表b2-4ac,用fabs(disc)<=1e-6来判别disc的值是否为零,是因为实数0在机器内存储时存在微小的误差,往往是以一个非常接近0的实数存放,所以采取的办法是判别disc的绝对值(fabs(disc))是否小于一个很小的数,如果小于此数,就认为disc=0。 循环结构程序设计课堂练习综合实例 例1求两个整数m和n的最大公约数。 [分析]求两个正数的最大公约数通常是采用“辗转相除法”,具体算法为: 第1步: 输入两个正数m和n; 第2步: 用m除以n,得余数r(0≤r 第3步: 判断余数r是否为0,若为0,输出当前值即为最大公约数,算法结束;否则,执行下一步; 第4步: 当余数r≠0时,更新被除数和除数,再转到第2步执行。 main() { intm,n,a,b,r; printf("Pleaseinput2nonnegativenumbersm,n: \n"); scanf("%d,%d",&m,&n); a=m;b=n; do { r=a%b; a=b; b=r; } while(r! =0); printf("Thegreatestcommondivideof%d,%dis%d\n",m,n,a); } 程序运行结果为: Pleaseinput2nonnegativenumbersm,n: : 345,12↙ Thegreatestcommondivideof345,12is3 例2求Fibonacci数列前20个数。 这个数列有如下特点: 第1 个数值是1,第2个数也是1。 从第3个数开始,该数是其前面两个数 之和。 main() { longintf1,f2; inti; f1=1;f2=1; for(i=1;i<=10;i++) { printf("%8ld%8ld",f1,f2); if(i%2==0)printf("\n"); f1=f1+f2; f2=f2+f1; } } 运行结果为: 1123 581321 345589144 233377610987 1597258441816765 例3求100~200间的全部素数。 main() { intm,k,i,n=0; for(m=101;m<=200;m=m+2) { k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0)break; if(i>=k+1){printf("%d",m);n=n+1;} if(n%10==0)printf("\n"); } printf("\n"); } 运行结果如下: 101103107109113127131137139149 151157163167173179181191193197 199 [说明] (1)除了1和它本身之外不能被任何一个整数整除的数称为素数,又称质数。 判断一个数i是否为素数时,把i被2至i的平方根中的所有整数去除,若能被其中任一个数除尽,则说明i不是素数,反之,则是素数。 (2)n的作用是累计输出素数的个数,控制每行输出10数据。 例4.12译密码。 为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文,例如,可以按以下规律将电文变成密码。 将A→E,B→F,a→e,即变成其后的第4个字母,如“China! ”转换为“Glmre! ”。 #include"stdio.h" main() { charc; while((c=getchar())! =´\n´) { if((c>=´a´&&c<=´z´)‖(c>=´A´&&c<=´Z´)) {c=c+4; if(c>=´Z´&&c<=´Z´+4‖c>´z´)c=c-26; } printf("%c",c); } } 运行结果为: China! Glmre! [说明]程序中对输入的字符处理办法是先判断它是否大写字母或小写字母,若是,则将其值加4(变成其后的第4个字母)。 如果加4以后字符值大于´Z´或´z´,则表示原来的字母在V(或v)之后,应按规律将它转换为A~D(或a~d)之一。 办法是使c减26。 例4设计一个程序用枚举法求百鸡问题。 公鸡5元一只,母鸡3元一只,小鸡1元三只。 现100元要买100只鸡,需包含公鸡、母鸡和小鸡,求可能有哪几种方案。 main() { inti,j,k,n=0; for(i=1;i<18;i++) for(j=1;j<31;j++) { k=100-i-j; if(3*5*i+3*3*j+k==300) { n++; printf("n=%d,cook=%d.hen=%d,chick=%d\n", n,i,j,k); } } 程序运行结果为: n=1,cook=4,hen=18,chick=78 n=2,cook=8,hen=11,chick=81 n=3,cook=12,hen=4,chick=84
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课堂 实例