第六章 循环结构的程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二类关键:必须将它的各位数字分拆开(%,/) (1) 个位数字=n%10。例:371%10=1。 (2) 十位数字=(n/10)%10。例:371/10=37,37%10=7。 (3) 百位数字=(n/10/10)%10。例: (371/10)/10=37/10=3,3%10=3。 即:分离是从低位数字到高位数字的过程,若 x !=0 循环做:x%10: 分离出 x 的个位数 x /10 : 求出未被分离的余下的数 NS结构图为: …… 当 x !=0 y=x%10; …… x /=10; main() { int x ,y ; scanf(―%d‖,x); …… 程序框架: while (x) {y=x%10; …… x/=10; } printf(―%d\n‖, …); }
Do_while结构
读入整数 x max=x; i=2; 读入x ; if (x >max) max=x; i++; 直到 i<=10 main() { int x , i , max ; scanf(―%d‖,&x); max=x ; i=2; do {scanf(―%d‖,&x); max=(x>max)?x:max; i++;} while (i<=10) ; printf(―max=%d‖,max); }
sum= 0;i=1;
x=1.0;
读入整数 n sum=0; i=1; x=1.0; 当 i<=n
x =…… x/i; sum+=x; i++; 打印sum
while(i<=n) { x= x/i; sum+=x; i++;}
printf(―sum=%d‖,sum); }
第二类题:分离各个位(%,/) (1) 求一正整数 x 为几位数。( x=24365 ) (2) 求一正整数 x 各个位之和。 如: x=24365 ,则个位之和sum=2+4+3+6+5 (3) 求倒序数? 如: x=24365,倒序数 re_x=56342 (4) 在3位数中找一个满足下列要求的正整数n:其各位 数字的立方和恰好等于它本身。例如,371=33+73+13
流程图:
变量初始化
循环体
循环语句
NS结构图:
变量初始化 循环语句 循环条件
非0
循环条件
0
例题 6-3 while sum=0; i=1; 当 i<=n sum+=1/i;i++;
s=1+1/2+1/3+……+1/i Do_while sum=0; i=1;
sum+=1/i;i++; 当 i<=n
main() { int n,i , sum; scanf(“%d”,&n); sum= 0;i=1;x=1.0; do {sum+=1/i; i++;} while (i<=n); printf(“sum=%d”,sum); }
main() { int n,i ; float sum; scanf(―%d‖,&n); sum=0; i=1; while (i<=n)
读入整数 n
sum=0; i=1; 当 i<=n
if (i % 2) sum += 1/ (float)(2*i-1) ; else sum -= 1/ (float)(2*i-1) ; i++;
while 与 do – while区别
1、结构相反 2、while 中的循环语句最少执行0次。 do-while 中的循环语句最少执行1次。
例6—9 求10个数中的最大值。
从键盘上输入第一个数,并假定它是最大值存放在变量max中。 以后每输入一个数便与max进行比较,若输入的数较大,则最大值 是新输入的数,把它存放到max。当全部10个数输入完毕,最大值 也确定了,即max中的值。
例6-11 在3位数中找一个满足下列要求的正整数n:其各 位数字的立方和恰好等于它本身。例如,371=33+73+13 读入x …… sum=0;
当 x !=0
y=x%10; ……+= y*y*y; sum x /=10; 若x==sum 打印 sum
main() { int x ,y, sum ; scanf(―%d‖,x); …… sum=0; while (x) {y=x%10; …… +=y*y*y ; sum x/=10; } if (x==sum) printf(―%d\n‖,sum); }
例3:求倒序数?
如: x=24365
倒序数 re_x=56342
读入x
…… re_x=0; 当 x !=0 y=x%10; …… re_s=re_s*10+y; x /=10; 打印位数
main() { int x , y, re_x ; scanf(―%d‖,x); …… =0; re_x while (x) {y=x%10; …… re_s=re_s*10+y; x/=10; } printf(―%d\n‖,sum); }
sum=0; i=1; 当 i<=100 sum+=i; i++;
注意
1、循环体如果包含一个以上语句,应该用复 合语句({语句组}) 2、循环体中应有使循环趋向于结束的语句 3、循环语句,最少只执行0次。
6.3
一般形式:
do - while 语句设计循环结构
do 循环语句 while (循环条件);
goto 语句及goto语句构成的循环 1、形式: goto 语句标号;
2、说明: 3、功能: 语句标号定义与变量一样。
无条件转到由语句标号指定的语句去执行。
与 4、循环构成: if 语句一起。
main() { int i=1, sum=0; loop: if (i<=100) { sum += i ; i++ ; goto loop; } printf(“%d”,sum); }
例2、求一正整数 x 各个位之和。 如: x=24365 ,则个位之和sum=2+4+3+6+5
读入x
…… sum=0; 当 x !=0 y=x%10; ……+= y; sum x /=10; 打印位数 main() { int x ,y, sum ; scanf(―%d‖,x); …… sum=0; while (x) {y=x%10; …… +=y ; sum x/=10; } printf(―%d\n‖,sum); }
变量初始化 循环条件 循环语句
循环体
•例6-2:sum=1+2+3+……+n
分解: sum= 0;i=1; sum+=i;i++; sum+=i;i++; …… sum+=i;i++; 其中 i<=n
初始化 Sum=0; i=1; 0
循环语句
结束条件
i<=n
非0
Sum+=i; i++;
main() { int n,i , sum; scanf(“%d”,&n); sum=0; i=1; while (i<=n) { sum+=i; i++; } printf(“sum=%d”,n,sum); }
main() { int n , i , s; scanf(―%d‖,&n); s=i=1; while (i<=n) { s *=i; i++;} printf(―s=%d‖,s); }
s=n!=1*2*3*……*(n-1)*n Do_while s=1; i=1;
s *=i;i++; 当 i<=n
{if (i%2) sum +=1/(float)(2*i-1); else sum -=1/(float)(2*i-1); i++; } 打印 Π printf(―Π =%d‖,sum);
}
sum = (i % 2) ? sum+1/(2*i-1) : sum-1/(2*i-1);
注意
1、do - while先执行一次循环体,即使条件一开始就不 成立。 2、一般情况下,while 与 do-while 处理同一问题时,结 果相同。
循环 结构
•循环三要素
– 变量赋初值 – 循环语句 – 循环条件 sum=0; i=1; sum+=i;i++; i<=n
•循环两概念
– 循环变量:在循环中表示循环增量的变量。i – 步长语句:在循环语句中循环变量的变化语句。i ++
•C中循环的实现方法
– goto 和 if – while – do - while – for
main() { int n,i ; float sum; scanf(“%d”,&n); sum= 0;i=1; while(i<=n) { sum+=(float)(1/i); i++;} printf(“sum=%d”,sum); }
例题 6-4
while s=1; i=1; 当 i<=n s *=i ;wenku.baidu.com++;
注意:尽量不用
6.2
1、形式:
2、功能: 3、框图:
用 while 语句设计循环结构
While (循环条件) 循环语句; 当循环条件表达式值为非0 时执行while中 内嵌的循环语句(循环体)
变量初始化 循环条件 非0 循环语句 0
注意:只包含了两个要 初始化应放在while前面. N_S结构图表示的流程:
例6-1:sum=1+2+3+……+n
变量初始化 sum=0 每步执行语句(累加)
1,2, 3…n可以用 分解1: 一计数变量i表示 sum= 0; sum+=1; sum+=2; …… sum+=n;
分解2: sum= 0;i=1; sum+=i;i++; sum+=i;i++; …… sum+=i;i++; 其中 i<=n
main() { int n , i , s; scanf(―%d‖,&n); s=i=1; do {s *=i; i++;} while (i<=n); printf(―s=%d‖,s); }
例6-5:Π /4=1-1/3+1/5-……+(-1)n+1(1/(2*n-1))
a. 累加变量初值 sum=0 b. 循环做 ( i 从 1 到 n) 若 i 为奇数: sum += 1/当前项值 (2*i-1) 否则: sum -= 1/当前项值 (2*i-1)
while 结构: 读入整数 x max=x; i=2; 当 i<=10 读入整数x ; if (x >max) max=x; i++; 打印max main() { int x , i , max; scanf(―%d‖,&x); max=x ; i=2; while (i<=10) {scanf(―%d‖,&x); max=(x>max)?x:max; i++;} printf(―max=%d‖,max); }
当 i<=n
x=…… sum += x ; i++; ……
程序框架:
X—分项的值
例:s=1+1/2!+1/3!+……+1/n!
1、累加变量初值 sum=0 , X0=1 2、 i 从1 到 n 循环做 求第i项值: Xi = Xi-1/ i 累加:sum += Xi main() { int n,i,sum;float x; scanf(―%d‖,&n);
例1、求一正整数 x 为几位数。( x=24365 )
main() { int x , y ,i ; scanf(―%d‖,x); …… i=0; while (x) {y=x%10; …… i++; x/=10; } printf(―%d\n‖,i); }
读入x
…… i=0; 当 x !=0 y=x%10; …… i++ ; x /=10; 打印位数
第六章 循环控制(4学时)
Loops
6.1
循环的基本概念
例:求1+2+3+4+5+6+7+8+9+10 ? sum=1+2+3+4+5+6+7+8+9+10
如果求1+2+3+ +100 呢? 或者求1+2+3+ +n (n为某一任意指定的 数)呢 ?
计算机的操作是一步一步执行的
步骤分解原则: 计算机的操作是一步一步执行的,步步分解。
打印max
6.8 程序举例 第一类题:求和类
1、n!=1*2*3……*n 2、s=1-3+5-……+(-1)n+1(2*n-1) 3、s=2/1+3/2+5/3+8/5+…… (前n项) 4、s=1+1/2!+1/3!+……+1/n! 5、S=a+aa+aaa+……+aa…a (n个a)
NS结构图为: sum= 0(或者1);i=1; sum= 0(或者1);i=1; …… while (i<=n) {x=…… sum += x ;i++; …… }
相关文档
最新文档