当前位置:首页 >> 其它课程 >>

C语言


5.8 程序举例
[例] 用?/4?1-1/3+1/5-1/7+…的公式求?的近 似值,直到最后一项的绝对值小于10—6为止
#include “math.h” main() { int s; float n, t, pi; t=1; pi=0; n=1.0; s=1; while ((fabs(t))>=1.0e-6) { pi=pi+t; n=n+2

; s=-s; t=s/n; } pi=pi*4; printf(“pi=%10.6f\n”,pi);}
1

t=1,pi=0,n=1,s=1 当| t | ?10-6 pi=pi+t n=n+2 s=-s; t=s/n pi=pi*4
输出pi

[例] 求 s=1-1/2+1/3-1/4+… +1/99-1/100。
方法一:数列是正、负相间的,在这里可用一 个“开关”变量 t 来解决符号的问题。 main() { float s=0; int t=1,i ; for(i=1;i<101;i++)
在处理循环时应注意 初、终值的设定!

{ s+=1.*t / i ;
printf("s=%f\n",s); }
2

t= -t ;

}

方法二:分别求出正项和s1(奇数倒数)与负项 和s2(偶数倒数),则s=s1-s2. main() { float s,s1=0,s2=0; int i; for(i=1;i<101;i+=2)

{ s1+=1.0/ i;
s2+=1.0/(i+1); s=s1-s2; printf("s=%f\n",s); }
3

}

[例] 输入若干字母,将它们变成其后的第四个 字母, A-->E, W-->A.非字母字符忽略。
? 思路:

1. 建 立 循 环 , 循 环 结 束 以 输 入 回 车 符 为 准 while (c=getchar()!=?\n?) 2. 判断输入是否是字符,否则忽略 if ((c>=?a? && c<=?z?) || (c>=?A? && c<=?Z?)) 3.变成其后的第四个字母 c=c+4; 4. 若变换后超出z时,要轮回. If ((c>?Z? && c<?a?)||(c>?z?)) c=c-26

…A…Z….a….z…..
4

#include “stdio.h” main() { char c; while (c=getchar()!=?\n?) { if ((c>=?a? && c<=?z?) || (c>=?A? && c<=?Z?)){ c=c+4; if ((c>?Z? && c<=?a? )||(c>?z?)) c=c-26; } printf(“%c”,c); abdEgW } }

efhIkA

5

[例] 输入30个0~9的字符数字,计算数 字串中有多少个奇数,偶数和零 .
思路: 1. 输入30个字符数字char num,而不是整数 2. 30个字符的输入和30个数字的输入的区别 字符可以连续输入30个 009764146589…... 数字输入必须是用空格,Tab键或回车隔开 0 0 9 7 6 4 1 4 6 5 8 9 …… 3. 将字符变成数字后判断奇偶 i=num-?0?; 字符数字的ASCII码:48 49 50 51 52 53 54 55 56 57
6

步骤: 1. 计数变量n1,n2,n3初始值 设为零; 2. 输入1个字符num; 3. 循环变量初值为1; 4. 若i<=30,重复 ① 字符变成数字, num=num-?0? ② 判断num是否为0 ③ 判断num%2的值 ④ 循环变量i++ ⑤ 再输入1个字符num 5. 输出n1,n2,n3的值。
7

n1=0,n2=0,n3=0 输入num i=1 i<=30 num=num-?0? num==0

Y

N

n1++ num%2 Y n2++ i++

N n3++

输入num 输出n1,n2,n3 的值

main() { int i, n1=0,n2=0,n3=0; char num; scanf(“%c”,&num); for (i=1;i<=30;i++) { num=num-?0?; if (num==0) n1++; if (num%2) n2++; else n3++; scanf(“%c”,&num); } printf(?There are %2d evens, %2d odds, %2d zeros ”,n1,n2,n3,);}

259718528637908300264710031993 there are 9 evens,5 zeros, 16 odds.
8

[例] 输入一个整数,计算它的位数.并反向输出.

分析:设一个数13579,一位一位地切下末位
? 循环结束条件: num==0;

? 同时计数 count=count+1;
1357 9 13579 1357 135 7 135 135 13 13 9 7 5 bit bit=num%10 num=num/10 bit bit count=0;输入num num!=0 输出num%10 num=num/10 count++ 输出count

3

bit bit

1
9

main() { long int num; int count = 0; printf(“Please enter an integer:\n”); scanf(“%ld”,&num); do { printf(“%d”,num%10); num = num /10; count + +; } while (num !=0 ); printf(“ %d digits.”, count); } Please enter an integer: 3829 9283 4 digits.

10

[例] 用循环语句显示下面的图案。 *

***
***** *** *
本例还是要考虑每行的空格数、和星 号数问题,但要关注空格数与星号数在增 加到一定的时候又要减少的规律。
11

for(i=0;i<4;i++) {

for(j=0;j<20-i;j++) printf(“ ”); /*空格递减*/ 注意初、终值 #include <math.h> fabs(i)变化规律是: 从-2到2的目 for(k=0;k<2*i+1;k++) printf(“*”); /*星号递增 */ 2,1,0,1,2。 main() 的。 } 每行的空格数是: { int i,j,k; 20,19,18,19,20。

for(i= -2;i<=2;i++) { for(j=1;j<=18+fabs(i);j++) printf(" "); for(k=1;k<=5-2*fabs(i);k++) printf("*"); printf("\n"); 每行的星号数是: } 1,2,3,2,1。

}
12

[例] 汽车里程表上的读数是95859,7小时之 后里程表的读数是一个对称数(最大是5 位数),问汽车的速度(是一个整数)。 解题思路: ?检查所有的在95859到99999之间的对称 数,如果它与95859的差能被7整除,则商 是速度。 /* 第一种算法*/

13

main() { long i,a,b,c,e,d; 该程序需要执行循环 flaot f,g; 99999-95859次! i=95859; while (i<=99999 ) { a=i/10000; b=(i-a*10000)/1000; c=(i-a*10000-b*1000)/100; d=(i-a*10000-b*1000-c*100)/10; e=i-a*10000-b*1000-c*100-d*10; if ((a==e) && (b==d)) if((i-95859)%7)==0) printf(“The speed is %d”,(i-95859)/7);i++;} }
14

/*第二种算法*/ main() { long i,distance,a,b,c,d; (for i=1;i<=200;i++) { distance=95859+i*7; a=distance/10000 b=(distance-a*10000)/1000; c=(distance-a*10000-b*1000)/100; d=(distance-a*10000-b*1000-c*100)/10; e=distance-a*10000-b*1000-c*100-d*10; if (a==e) and (b==d) printf(“The speed is %d”,i); } 循环次数为 200-20 }
15

/*第三种算法*/ 该程序需要循环(9-6)*10+1次! main() { long i,j,distance,speed:real; for(i=6;i<=9;i++) { for (j=0;j<=9;j++) { distance=90000+i*1000+j*100+i*10+9; if (distanc%7)==0) printf(“The speed is %d”,distance/7); } } distance = distance-95959 if ((distance%7)==0) printf(“The speed is %d”,distance/7); }
16

分析:

( 1 ) 因 为 新 出 现 的 数 ( dcbcd ) 是 : 个位数字(d)与万位数字、十位数字(c)与 千位数字相同,而百位数字(b)只能是0~9, 表示万位和千位的变量a取值范围为:95~99。 所以,要将a分隔出的十位数字和个位数字分别 赋予d和c 。 (2)约束条件是:公里数对称且车速为整数。
注意:95859超过了整型量的范围,应使 用长整型量。

17

循环a=95;a<=99;a++ 求出万、千位上的数字 循环百位数字b=0;b<=99 找出对称的数字 计算路程、车速 车速为整且路程 为正 0 非0 跳出并输出
18

main() { int a,b,c,d,n,v; long int m; for(a=95;a<=99;a++) { d=a/10; c=a-d*10; /*分别求出万、千位上的数字 */ for(b=0;b<=9;b++) / *百位数从0到9循环 */ { m=(long)1000*a+100*b+10*c+d; n=m-95859; v=n/7; /*求出车速 */ if(n%7==0 && n>0) goto loop; } } loop: printf("v=%dkm/h m=%ldkm\n",v,m);
19

找出对称 的数字

车速为整数且路程为正 时转出循环并输出结果

}

在本例这样的情况下,从内循环体直 接使用goto语句跳出整个循环结构,收到 了事半功倍的效果。但我们再次强调,要 限制、最好不使用goto语句。 思考: (1)若将if语句后goto语句改为break语 句,结果如何?

(2)若将printf("v=%d m=%ld\n",v,m); 直接放在if语句后,结果又如何?

20

5. 9 课堂练习
?百钱买百鸡:鸡翁1,钱值5; 鸡母1,钱值3;鸡

雏3,钱值1;何以百钱买百鸡?
main() { int x,y,z; for (x=1 to 20) for (y=1 to 33) if ((x*5+y*3+(100-x-y)/3.0)==100) printf(“x=%d,y=%d,z=%d”,x,y,100-x-y); }
21

main() { long int num; int count = 0; printf(“Please enter an integer:\n”); scanf(“%ld”,&num); do { printf(“%d”,num%10); num = num /10; count + +; } while (num !=0 ); printf(“ %d digits.”, count); } Please enter an integer: 3829 9283 4 digits.

22

?打印出100到200之间所有的素数

23

#include “math.h” main() { int n,m, i, k; for (n=100;n<=200;n++) { k=sqrt(n); for (i=2;i<=k;i++) if ((n % i)==0) break; if (i=k+1) printf(“%d prime number\n”,m); else printf(“%d not a prime\n”,m); }

课外练习
一、每个苹果0.8元,第一天买两个苹果。 从第二天开始,每天买前一天的2倍,当 每天购买苹果的数大于100时,则停止. 求 平均每天花多少钱? 二、输入一行字符,回车为结束,分别统计 出其中的英文字母,空格,数字和其它字 符的个数。

24

求分数数列前

2 3 5 8 13 21 - + - + - ....20项之和。 1 2 3 5 8 13

25

解法一: main() { int i,t,n=20,f=1; float a=2,b=1,s=0; for(i=1;i<=n;i++) { s=s+a/b; t=a; a=a+b; b=t; f=-f; } printf(“sum=%10.6f”,s); }

[例] 输入一个整数,计算它的位数.并反向输出.

分析:设一个数13579,一位一位地切下末位
? 循环结束条件: num==0;

? 同时计数 count=count+1;
1357 9 13579 1357 135 7 135 135 13 13 9 7 5 bit bit=num%10 num=num/10 bit bit count=0;输入num num!=0 输出num%10 num=num/10 count++ 输出count

3

bit bit

1
26


相关文章:
C语言编程实例100题
C语言编程实例100题_理学_高等教育_教育专区。浩浩联系·· C 语言程序实例 100 个(一)【程序 1】 题目:有 1、2、3、4 个数字,能组成多少个互不相同且无...
C语言经典算法100例
C语言经典算法100例_IT/计算机_专业资料。C语言经典算法100例 【程序 1】 题目:有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少...
c语言经典面试题
c语言经典面试题_IT/计算机_专业资料。我就是通过这个找到工作 C 语言面试题大汇总之华为面试题 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用...
c语言小游戏编程
c语言小游戏编程_计算机软件及应用_IT/计算机_专业资料。用c语言编写的小游戏,可进行设置,游戏结束时选择是否重新开始游戏,在vc6.0环境下运行 ...
C语言知识点总结【完美版】
C语言知识点总结【完美版】_理学_高等教育_教育专区。C 语言最重要的知识点总体上必须清楚的: 1)程序结构是三种: 顺序结构 、选择结构(分支结构)、循环结构。 ...
c语言中#和##的用法
c语言中#和##的用法_军事/政治_人文社科_专业资料。本文主要讲述 c 语言的一点基础语法和在内核的应用中其中的一点例子。 #,##分别在 c 语言中是怎么作用?...
《国家计算机二级c语言历年真题及答案》
(a)); } 程序运行后的输出结果是 A)7,4 B)4,10 C)8,8 D)10,10 (31)下面是有关 C 语言字符数组的描述,其中错误的是 A)不可以用赋值语句给字符...
C语言位运算符:与、或、异或、取反、左移和右移
C 语言位运算符:与、或、异或、取反、左移和右移语言位运算符:与、或、异或、取反、左移和右移 位运算是指按二进制进行的运算。 在系统软件中, 常常需要...
C语言概述及如何在VS2010中进行C语言编程
C语言概述及如何在VS2010中进行C语言编程_IT认证_资格考试/认证_教育专区。包括VS2010的安装步骤详解 第1章 概 述 作为本书的开始,我们不涉及 C 语言的语法和...
《C语言》教案
C 语言程序设计》 教案 课程代码: 总课时数: 030986 114 适用专业:计算机应用技术、计算机网络 系(部)名称: 教研室名称: 修订时间: 软件工程系 软件技术 ...
更多相关标签:
c语言入门 | c语言编程软件 | c语言程序设计 | c语言教程 | c语言教学视频 | java之父 | c语言下载 | c |