C5null第5章 循环结构程序设计第5章 循环结构程序设计 循环语句
break 和 continue 语句
循环嵌套5.1 循环语句5.1 循环语句问题
打印整数1~10
打印整数1~100
打印整数1~nprintf("%d", 1);
printf("%d", 2);
……
printf("%d", 10);i=1;
printf("%d", i); i++;
printf("%d", i); i++;
……
printf("%d", i); i++;i=1;
while(i sum
...
null第5章 循环结构程序设计第5章 循环结构程序设计 循环语句
break 和 continue 语句
循环嵌套5.1 循环语句5.1 循环语句问题
打印整数1~10
打印整数1~100
打印整数1~nprintf("%d", 1);
printf("%d", 2);
……
printf("%d", 10);i=1;
printf("%d", i); i++;
printf("%d", i); i++;
……
printf("%d", i); i++;i=1;
while(i<=10){
printf("%d", i);
i++;
}while 语句while 语句 while (表达式)
语句; 语 句表达式非00i=1;
while(i<=10){
printf("%d", i);
i++;
}循环体
循环不变式
改变循环条件null 10
求 sum= i
i=1
sum=0
sum+1 —> sum
sum+2 —> sum
sum+3 —> sum
……
sum+10 —> sumsum=sum+?sum=0;
i=1;
while(i<=10){
sum=sum+i;
i++;
}循环不变式for 语句for 语句for (exp1; exp2; exp3)
语句; exp3exp2非00 exp1 语 句循环体while 和 forwhile 和 for while (表达式)
语句;for (exp1; exp2; exp3)
语句;exp1;
while(exp2){
语句;
exp3;
}while 和 forwhile 和 forwhile (表达式)
语句;for (exp1; exp2; exp3)
语句;exp1;
while(exp2{
语句;
exp3;
}sum=0;
i=1;
while(i<=10){
sum=sum+i;
i++;
}sum=0;
for(i=1; i<=10; i++)
sum=sum+i;程序举例程序举例例T1-1 求1+2+3+4+……+ n
例T1-2 求1+1/2+1/3+1/4+……+ 1/n
例T1-3 求1-1/2+1/3-1/4+…… 1/n
例T1-4 求1-1/3+1/5-1/6+…… 前n项之和
例T2-1 求n!
例T2-2 求xn
例T3-1 求1-1/3+1/5-1/7+…… ,直到最后1项的绝对值<10-5
例T4-1 输入100个整数,求其中正数之和
例T4-2 输入一个正整数n, 再输入n个数,输出最大值
例T5 输出Fibonacci序列前20个数例T1-1 求1+2+3+4+……+ n例T1-1 求1+2+3+4+……+ n算法:
i =1 to n
s=s+t
t++
i++程序段:
s=0;
for(i=1; i<=n; i++)
s=s+i;算法:
i =1 to n
s=s+i
i++例T1-2 求1+1/2+1/3+……+ 1/n例T1-2 求1+1/2+1/3+……+ 1/n算法:
i =1 to n
s=s+t
t=1.0/i
i++程序段:
s=0;
for(i=1; i<=n; i++)
s=s+1.0/i;算法:
i =1 to n
s=s+t
t++
i++例T1-3 求1-1/2+1/3-1/4+…… 1/n例T1-3 求1-1/2+1/3-1/4+…… 1/ni =1 to n
s=s+t
t=1.0/i
i++程序段:
s=0; flag=1;
for(i=1; i<=n; i++){
s=s+1.0/i*flag;
flag=-flag;
}算法:
i =1 to n
s=s+t
t=1.0/i*flag
flag=-flag
i++
例T1-4 求1-1/3+1/5-…… 前n项和例T1-4 求1-1/3+1/5-…… 前n项和算法:
i =1 to n
s=s+t
t=1.0/i*flag
flag=-flag
i++程序段:
s=0;flag=1;tt=1;
for(i=1; i<=n; i++){
s=s+1.0/tt*flag;
tt+=2;
flag=-flag;
}算法:
i =1 to n
s=s+t
t=1.0/tt*flag
flag=-flag
tt=tt+2
i++例T2-1 求n!例T2-1 求n!算法:
i =1 to n
f=f*t
t++
i++程序段:
f=1;
for(i=1; i<=n; i++)
f=f*i;算法:
i =1 to n
f=f*i
i++例T2-2 求xn例T2-2 求xn算法:
i =1 to n
f=f*t
t++
i++程序段:
f=1;
for(i=1; i<=n; i++)
f=f*x;算法:
i =1 to n
f=f*t
t=x
i++例T3-1 求1-1/3+1/5-…直到最后1项的绝对值<10-5例T3-1 求1-1/3+1/5-…直到最后1项的绝对值<10-5i =1 to n
s=s+t
t=1.0/tt*flag
flag=-flag
tt=tt+2
i++程序段:
s=0; flag=1; tt=1; t=1;
while(fabs(t) >= 1E-5){
s = s+t;
flag = -flag;
tt += 2;
t = 1.0/tt*flag;
}算法:
while |t|>=1E-5
s=s+t
flag=-flag
tt=tt+2
t=1.0/tt*flag 例T4-1 输入100个整数,求其中正数之和例T4-1 输入100个整数,求其中正数之和# include
void main()
{
int i , sum=0, x;
for (i=0; i<100; i++){
scanf("%d", &x);
if (x>0) sum=sum+x;
}
printf("%d",sum);
}例4-7 求最大值例4-7 求最大值输入3个数,输出其中的最大值。
#include
void main( )
{
int a, b, c, max;
printf("input a, b, c:\n");
scanf("%d%d%d", &a, &b, &c);
max = a;
if(max < b) max = b;
if(max < c) max = c;
printf("max is %d\n", max);
}a max
b
cmaxmax例T4-1输入一个正整数n, 再输入n个数,输出最大值例T4-1输入一个正整数n, 再输入n个数,输出最大值void main()
{ int i , max, n, x;
scanf("%d", &n);
if(n>=1){
scanf("%d", &x);
max=x;
for (i=1; i0);
printf("sum=%d", sum);
}void main( )
{
int x, sum=0;
scanf("%d", &x);
while (x>0){
sum + = x;
scanf("%d", &x);
};
printf("sum=%d", sum);
}输入 1 2 5 -10输入 -10 1 2 5sum-x5.2 break 和 continue 语句5.2 break 和 continue 语句#include "stdio.h"
void main( )
{
char c;
int i=0;
for (i=0; i<10;i++) {
c=getchar();
if (c=='\n') break;
putchar(c);
}
}循环何时结束? c=getchar();
for (i=0; i<10 && c! ='\n'; i++){
putchar(c);
c=getchar();
} for (i=0; ;i++) {
c=getchar();
if ( i >= 10 || c == '\n) break;
putchar(c);
}1break 流程break 流程结束循环
while(exp){
语句1
if (expb) break;
语句2
} continue 流程 continue 流程跳过continue后面的语句,继续下一次循环
while(exp){
语句1
if (expc) continue;
语句2
}break 和 continuebreak 和 continue#include "stdio.h"
void main( )
{
char c;
int i=0;
for (i=0; i<10;i++) {
c=getchar();
if (c=='\n') break;
putchar(c);
}
}#include "stdio.h"
void main( )
{
char c;
int i=0;
for (i=0; i<10;i++) {
c=getchar();
if (c=='\n') continue;
putchar(c);
}
}输入:abc ↙
efgh ↙
123 ↙输出:abcefgh1输出:abc例T6 输入m,判断m是否为素数例T6 输入m,判断m是否为素数算法:除了1和m,不能被其它数整除。
m %2 %3 %4 %5
不是素数 || =0 =0
是素数 && !=0 !=0 程序段:
n=sqrt(m);
for(i=2; i<=n; i++)
if(m%i==0) break;
if(i>n) printf("yes\n")
else printf("no\n”);例T7 将一个正整数逆序输出例T7 将一个正整数逆序输出确定:循环条件和循环不变体 12345 5 4 3 2 1
12345 % 10 = 5 12345 / 10 = 1234
1234 % 10 = 4 1234 / 10 = 123
123 % 10 = 3 123 / 10 = 12
12 % 10 = 2 12 / 10 = 1
1 % 10 = 1 1 / 10 = 0 结束循环不变式 x%10 x=x/10
循环条件 x==0scanf( “%d”, &x);
while (x!=0){
digit = x %10;
x = x/10 ;
printf( “%d ”, digit);
}例4-10例4-10# include
void main( )
{ char c;
printf("Please input a character:\n");
c = getchar();
if(c>='a' && c <= 'z' || c>='A' && c <= 'Z')
printf("This is a letter.\n");
else if(c>='0' && c <= '9')
printf("This is a digit.\n");
else
printf("This is an other character. \n");
}
输入一行字符,统计英文字母、数字和其他字符。例T8 输入一行字符,统计英文字母、数字和其他字符例T8 输入一行字符,统计英文字母、数字和其他字符# include
void main( )
{ char c;
int letter=0, digit=0, other=0;
c = getchar();
while(c!='\n'){
if(c>='a' && c <= 'z' || c>='A' && c <= 'Z')
letter++;
else if(c>='0' && c <= '9')
digit++;
else
other++;
c=getchar();
}
printf("%d %d %d", letter, digit, other);
} while((c = getchar())!='\n')5.3 循环嵌套5.3 循环嵌套 while (表达式)
语句;例T9-1.1 1!+2!+……+n! 例T9-1.1 1!+2!+……+n! 算法:
k=1 to n
s = s + f
f = k!
k++s=0;
for(k=1; k<=n; k++){
s=s+f;
} f=1; /* n! */
for(i=1; i<=n; i++)
f=f*i;f=1;
for(i=1; i<=k; i++)
f=f*i;例T9-1.2 1!+2!+……+n! 例T9-1.2 1!+2!+……+n! 算法:
k=1 to n
s = s + f
f = k!
k++s=0;f=1;
for(k=1;k<=n;k++){
f=f*k;
s=s+f;
} 算法:
k =1 to n
s = s+f
f = f*k
k++例T9-2 兑换零钱例T9-2 兑换零钱将10元钱换成5角、2角、1角的零钱(至少各一枚),列出所有可能的。
c5: 5角的数量, [1, 20)
c2: 2角的数量, [1, 50)
c1: 1角的数量, [1, 100)
5*c1+2*c2+c5==100null将10元钱换成5角、2角、1角的零钱
c5: 5角的数量, [1, 20)
c2: 2角的数量, [1, 50)
c1: 1角的数量, [1, 100)
5*c5+2*c2+c1==100for (c5=1; c5<20; c5++)
for (c2=1; c2<50; c2++)
for (c1=1; c1<100; c1++)
if (5*c5+2*c2+c1==100 )
printf("%d %d %d\n", c5, c2, c1);c5=1
c2=1
c1=1 992 492 19null将10元钱换成5角、2角、1角的零钱
c5: 5角的数量, [1, 20)
c2: 2角的数量, [1, 50)
c1: 1角的数量, [1, 100)
5*c5+2*c2+c1==1000for (c5=1; c5<20; c5++)
for (c2=1; c2<50; c2++)
for (c1=1; c1<100; c1++)
if (5*c5+2*c2+c1==1000 )
printf("%d %d %d\n", c5, c2, c1);for (c5=1; c5<20; c5++)
for (c2=1; c2<50; c2++)
printf("%d %d %d\n", c5, c2, 1000- 5*c5+2*c2);例T9-3 输出100~200间所有素数例T9-3 输出100~200间所有素数算法:
m =100 to 200
if m是素数
print mn=sqrt(m);
for(i=2; i<=n; i++)
if(m%i==0) break;
if(i>n) printf("yes\n")
else printf("no\n”);for(m=100; m<=200; m++){
n=sqrt(m);
for(i=2; i<=n; i++)
if(m%i==0) break;
if(i>n) printf("%d",m)
}5.3 循环嵌套5.3 循环嵌套循环嵌套均是大循环嵌小循环
绝对不允许循环体交叉!
for ( ){
.........
do {
..........
}
} while(....)
for ( ) {
.........
do {
} while( )
}5.3 循环嵌套5.3 循环嵌套break 与循环
for ( ){
.........
while( ){
..........
break;
..........
}
.........
}
本文档为【C5】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。