nullnull第5章 循环结构的C程序设计 循环是计算机解
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
的一个重要特征。由于计算机运
算速度快,最适宜做重复性的工作。当我们在进行程序
设计时,总是要把复杂的不易理解的求解过程转换为容
易理解的操作的多次重复,从而降低了问题的复杂度,
同时也减少程序书写及输入的工作量。null实现循环的语句 null语句功能:5.1 if /goto 语句语句格式: 语句标号:语句;
… …
if (
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式) goto 语句标号;
… … 当(表达式)的值为非零时则重复
执行“语句标号”后面的语句。 标识程序中某
个语句的位置 null 请用C语言实现右侧程序
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图所描述的算法:
即:sum=1+2+3+4+……+100 设:i 计数器:i=i+1 sum 为累加器:sum=sum+iEXAMPLE[5-1]:null
main( )
{
}int sum=0, i=1;sum=sum+i;sum+=i;i=i+1;if (i<=100) printf(“%d\n”, sum);goto aa; aa:i++; 语句标号:语句;
… …
if (表达式) goto 语句标号;null 从键盘输入100个有符号整数,请
分别统计其中正整数和负整数的个数。 EXERCISES[5-1]:nullBeginnum=0 sum1=0 sum2=0num++输出sum1
sum2Endsum1++FX>0T输入 xsum2++num<100F111、设计算法null2、实现算法
main( )
{
}int sum1, sum2, num, x;scanf(“%d”, &x);num++;if (x>0) printf(“%d,%d\n”, sum1,sum2);goto bb; bb:sum1++;sum1=sum2=num=0;else sum2++;if (num<100) null语句功能:5.2 while 语句语句格式: while(表达式)
{ statements; }当表达式的值为非零时,重复statements。 关系、逻辑
赋值表达式 body of loop真(非零) 循环体假(零)null main()
{ int n=0;
while (n<3)
{ printf(“%d,”, n );
n++;
}
printf(“%d\n”, n);
} 0, main( )
{ int n=3;
while (n)
printf(“%d,”, n--);
n=-3;
printf(“\n”);
while (n)
printf(“%d,”, n++);
} 1,2,33,2 ,1,-3,-2, -1,EXAMPLE[5-2]:n0123210-3-2-10null 从键盘输入100个整型数据,请找出
其中最大的数,并指出这个最大的数是
从键盘第几次输入的。
要求:1、用流程图设计算法;
2、用C语言实现算法。HOMEWORK[5-1]:null 请分别统计在输入的字符串中
字母、数字和其它字符的个数。
(以回车键作为输入结束标记)
要求:1、用流程图设计算法;
2、用C语言实现算法。HOMEWORK[5-2]:book12pen5%*#( )[ ]&字母: 7数字: 3字符: 8null main()
{ int d1,d2,d3; char ch;
d1=d2=d3=0;
scanf(“%c”, &ch);
while(ch!=‘\n’)
{ if ((ch>=‘A’&&ch<=‘Z’) || (ch>=‘a’&&ch<=‘z’))
d1++;
else if (ch>=‘0’ && ch<=‘9’) d2++;
else d3++;
scanf(“%c”, &ch);
}
printf( “%d,%d,%d\n”, d1,d2,d3);
}null语句功能:5.3 do-while 语句语句格式: do
{ statements; }
while(表达式);当表达式的值为非零时,重复statements 。 body of loop真(非零) 循环体假(零) 首先无条件地执行一次循环体中的语句,然后再判断表达式的值, 若表达式值为 “真” (即非零值), 则执行循环体中的语句;然后再计算再判断, 如此重复,直到表达式值为“假”(即0值)时,则跳出循环 null1+2+3+4+5+ … …+100 main()
{ int i, sum;
} do printf(“%d\n”, sum); sum=0; i=1; i++; } while( ); { sum+=i; } while(i<=100); EXAMPLE[5-3]:null main( )
{ int x;
x=-1;
do
{ x=x*x;
} while( !x );
}EXERCISES[5-4]:A) 是死循环
B) 循环执行三次
C) 循环执行一次
D) 有语法错误 x=0; nullwhile和do~while比较#include
main()
{ int i,sum=0;
scanf("%d",&i);
do
{ sum+=i;
i++;
}while(i<=10);
printf("%d",sum);
}#include
main()
{ int i,sum=0;
scanf("%d",&i);
while(i<=10)
{ sum+=i;
i++;
}
printf("%d",sum);
}在if、while语句中,表达式后面都没有分号,而在do-while语句的表达式后面则必须加分号。null 为了使电文保密,往往按一定规律将其转换成
密码,收报人再按约定的规律将其译回原文。
例如,可以按以下规律将电文变成密码:
将字母A变成字母E(a变e,即将变成其后的第4
个字母)W变成字母A,X变成字母B,Y变成字母C,Z
变成字母D。
要求:字母按上述规律转换,非字母字符不变。
如,“China” 应转换为 “Glmre” 。
请输入一行字符,要求输出其相应的密文。请设计一个 译密码 的程序HOMEWORK[5-3]:null语句功能:5.4 for 语句语句格式: for(表达式1;表达式2;表达式3)
{ statements; } 当表达式2的值为真时,重复执行statements 。 null for(表达式1;表达式2;表达式3)
{ statements; } 表达式1— 循环初始表达式,用于进入循环体前为循环变量赋初值
由算术、赋值、逻辑和逗号表达式构成。 表达式2— 循环控制表达式,用于控制循环体语句的执行次数由关
系表达式或逻辑表达式构成。表达式3— 修改循环变量表达式,即每循环一次使得表达式1的值
就要变化一次。由算术、赋值、逻辑和逗号表达式构成。null main()
{ int n;
for(n=1; n<=10; n++)
printf(“%d,” ,n);
}1, 2, 3, 4, 5 ,6 ,7, 8 , 9 , 10 , for(表达式1;表达式2;表达式3)
{ statements; } EXAMPLE[5-4]: main()
{ int n;
n=1;
while(n<=10 )
{ printf(“%d,” ,n);
n++; }
}null main()
{ int x, y;
for(x=0,y=0; x+y<=50; x++,y++)
{ printf(“%3d ”, x+y );
if (x%5==0)
printf(“\n”);
}
}EXERCISES[5-8]:写出右侧
程序段的
运行结果 0
2 4 6 8 10
12 14 16 18 20
22 24 26 28 30
32 34 36 38 40
42 44 46 48 50nullmain( )
{ int sum, i ;
for(sum=0,i=1; i<=100; i++)
sum+=i;
printf(“sum=%d\n”, sum );
}main( )
{ int sum=0, i =1;
do
{ sum+=i; i++;
} while( i<=100 );
printf(“sum=%d\n”, sum );
}main( )
{ int sum=0, i =1;
while( i<=100 )
{ sum+=i; i++; }
printf(“sum=%d\n”, sum );
}main( )
{ int sum=0, i =1;
label: if( i<=100)
{ sum+=i; i++;
goto label; }
printf(“sum=%d\n”, sum );
}1+2+3+4+5+ … …+100 null 请输出26个小写的英文字母以及
每个字母所对应的ASCII码值。HOMEWORK[5-5]:main()
{ char ch;
for (ch=‘a’;ch<=‘z’;ch++)
printf(“%c,%d, ”, ch,ch);
} null
省略表达式1
该种格式常用于无需
给变量赋初值的情况 main()
{ int n;
for( ; n<=10; n++ )
printf(“%d,” ,n);
} main()
{ int n;
n=1;
for( ; n<=10; n++ )
printf(“%d,” ,n);
}for 语句的特殊使用格式null
省略表达式2
即失去了对循环变量的
控制为此将导致无限循环 main()
{ int n;
for( n=1; ; n++ )
printf(“%d,”,n);
} main()
{ int n;
for( n=1; ; n++ )
if (n>100)
break;
printf( “%d,” ,n );
}null
省略表达式3
即失去了修改循环变量的值
为此,在体内必须设有替代
表达式3的功能。 main()
{ int n;
for(n=1; n<=10; )
printf(“%d,”,n);
} main()
{ int n;
for(n=1; n<=10; )
{ printf(“%d,”,n);
n++;
}
}null
省略表达式1、3
该种格式完全等价于while 语句
即进入循环体前必须有赋初值语
句,而且在体内要有修改循环变
量的值的语句。 main()
{ int n;
for ( ; n<=10 ; )
printf(“%d,”, n );
} main()
{ int n ; n=1;
for( ; n<=10; )
{ printf(“%d,”,n);
n++; }
} while(n<=10) null
#include “string.h”
main()
{ char ch;
for ( ; (ch =getchar()) !=‘\n’ ; )
printf( “ %c ”, ch );
}
省略所有的表达式
完全等价于 while(1) main()
{ int n;
for( ; ; )
printf(“%d,”, n );
}while(1) null5.5 嵌套循环 嵌套循环是循环中的循环。嵌套
循环的深度可达两层、三层、四层,
甚至更多。实际层数可根据应用程序
的需要而定,但超过三层的嵌套循环
不多见。 … …
for(i=1; i<=9; i++)
{ for(j=1; j<=9; j++)
… …
}
… … … …
while(a!=b)
{ for(n=1; n=5; n++)
… …
}
… …
do
{ … …
for(; ;)
{ … … }
… …
}while( );
for(; ;)
{ … …
while( )
{ … … }
… …
}
while( )
{ … …
while( )
{ … … }
… …
} null … …
for(i=1; i<=9; i++)
{ for(j=1; j<=9; j++)
… …
}
… … 内层循环 外层循环null 请编写求解下列问题的程序
t=1*2*3*… …10n main()
{ int n, t;t=1;for(n=1; n<=10; n++)t=t*n; printf(“t=%d\n”, t);
} t=1, n=1n<=10t=t*nn++输出 t(1~10)null 请设计求解下列问题的C语言程序:
s=1!+2!+3!+… …+20!1!= 12!= 1*23!= 1*2*34!= 1*2*3*4 5!= 1*2*3*4*5
… …
20!= 1*2*3*4*5… …*20 i 1- 11~ i 1~20EXAMPLE[5-6]:1- 21- 31- 41- 5 1- 20j t=t*j nulls=1!+2!+3!+… …+20! s=0, t i (1~20) t=1j (1~i) 输出 st*=js+=tnull main()
{ int i, j, t; long s=0;
} for ( ) i=1; i<=20; i++ for ( ) j=1; j<=i; j++ t=t*j; s+=t; { } printf(“%l\n”, s); s=1!+2!+3!+… …+20! i (1-20) j (1-i)t=1; null请设计按下列格式打印九九表程序。 1*1=1 1*2=2 1*3=3 … … 1*9= 9
2*1=1 2*2=4 2*3=6 … … 2*9=18
… …
9*1=9 9*2=18 9*3=27 … … 9*9=81 EXAMPLE[5-7]:abp=a*bnull a,b,p a (1~9)b (1~9)输出 a*b=p 1*1=1 1*2=2 1*3=3 … … 1*9= 9
2*1=1 2*2=4 2*3=6 … … 2*9=18
… … null main()
{ int a, b, p;
}p=a*b for ( ) a=1; a<=9; a++ for ( ) b=1; b<=9; b++ printf( ); p=a*b; “%d a,b,p *%d =%d ”, { } { } printf(“\n”); 1*1=1 1*2=2 1*3=3 … … 1*9= 9
2*1=1 2*2=4 2*3=6 … … 2*9=18
… … null 前面我们介绍了四种能够实现循环的语句,它
们退出循环的方式通常都是以某个表达式的结果作
为判断条件,当其值为零时结束循环。除了这种正
常结束循环的方式外,还可以利用C 语言提供的专
门退出循环的语句。5.6 break 与 continue 语句nullbreak break 语句 nullcontinue continue 语句 null main()
{ int k=4, n=0;
for(; n0; i--)
{ for( j=1; j<=i; j++) putchar(‘#’);
for(j=0; j<=4-i; j++) putchar(‘*’);
putchar(‘\n’);
}
… … # # # # *
# # # * *
# # * * *
# * * * *HOMEWORK[5-11]:null 请编写打印下列图形的程序 *
* * *
* * * * *
* * * * * * *
* * * * * * * * * HOMEWORK[5-12]*: * * * * * * *
* * * * *
* * *
* null *
* * *
* * * * *
* * * * * * *
* * * * * * * * *
* * * * * * *
* * * * *
* * *
* main()
{ int n1,n2,n3;
for(n1=1;n1<=5;n1++)
{ for(n2=1;n2<=20-n1;n2++)
printf(“ ”);
for(n3=1;n3<=2*n1-1;n3++)
printf(“*”);
printf(“\n”);
}
for(n1=4; n1<=1; n1--)
{ for(n2=1;n2<=20-n1;n2++)
printf(“ ”);
for(n3=1;n3<=2*n1-1;n3++)
printf(“*”);
printf(“\n”);
}null 请编写按下列格式打印九九乘法表的程序 HOMEWORK[5-13]:null 语句标号:语句;
… …
if (表达式) goto 语句标号; Summary while (表达式)
{ statements; } do
{ statements;}
while(表达式); for(表达式1;表达式2;表达式3)
{ statements; }