循环知识点总结(while和do while)
计算1-100的和(for语句) | 计算1-100的和(while语句) |
#include<stdio.h> void main() {int n,sum=0; for(n=1;n<=100;n++) sum+=n; printf("sum=%d",sum); } | #include<stdio.h> void main() {int n,sum=0; n=1; while(n<=100) {sum+=n; n++;} printf("sum=%d",sum); } |
计算两个整数的最大公约数(while实现) | |
计算两个数的最大公约数,算法描述: ● 定义三个变量,a,b,t;//a,b是参加计算的整数,t表示最大公约数 ● 从键盘接收a,b的值 ● 令t取值a,b中较小的数 ● 在循环中,判断a%t和b%t是否等于0,若是,结束循环;若不是,执行t--,重复上诉判断; ● 打印输出t,即a,b的最大公约数。 | #include<stdio.h> void main() {int a,b,t; scanf("%d%d",&a,&b); t=a>b?b:a; while(t>=1) {if(a%t==0&&b%t==0)break; t--; } printf("最大公约数是 %d\n",t); } |
计算1-100的和(while语句) | 计算1-100的和(dowhile语句) |
#include<stdio.h> void main() {int n,sum=0; n=1; while(n<=100) {sum+=n; n++;} printf("sum=%d",sum); } | #include<stdio.h> void main() {int n,sum=0; n=1; do {sum+=n; n++;} while(n<=100); printf("sum=%d",sum); } |
计算两个整数的最小公倍数(do while实现) | |
计算两个数的最小公倍数,算法描述: ● 定义三个变量,a,b,t;//a,b是参加计算的整数,t表示最小公倍数 ● 从键盘接收a,b的值 ● 令t取值a,b中较大的数 ● 在循环中,判断t%a和t%b是否等于0,若是,结束循环;若不是,执行t++,重复上诉判断; ● 打印输出t,即a,b的最小公倍数。 | #include<stdio.h> void main() {int a,b,t; scanf("%d%d",&a,&b); t=a>b?a:b; do {if(t%a==0&&t%b==0)break; t++; } while(t<=a*b); printf("最小公倍数是 %d\n",t); } |
三种循环结构的比较
for | while | do while |
for(表达式1;表达式2;表达式3) { 循环体语句; } | 表达式1; while(表达式2) { 循环体语句; 表达式3; } | 表达式1; do { 循环体语句; 表达式3; } while(表达式2); |
break与continue的比较
continue的作用 | 举例 | 代码功能 |
● 跳过循环体中剩余的语句而强行执行下一次循环; ● continue语句只用在for、while、do-while等循环体中; ● 常与if条件语句一起使用,用来加速循环。 | #include<stdio.h> void main() {int m; for(m=1;m<=100;m++) {if(m%5!=0)continue;while语句怎么输出 printf("%5d",m); } } | //定义一个整型变量m //m的值从1到100,步长为1 //如果m不是5的倍数,结束本次循环,后面的输出语句不被执行 |
break的作用 | 举例 | 代码功能 |
● break语句通常用在循环语句和switch中。 ● 当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句; ● 当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句 ● 通常break语句总是与if语句联在一起,即满足条件时便跳出循环 | #include<stdio.h> void main() { intx,t; scanf(“%d”,&x); for(t=2;t<x;t++) if(x%t==0)break; if(x==t)printf(“%d是素数!\n”,x); else printf(“%d不是素数!\n”,x); } | //从键盘接收一个整数x //令t取2到x-1 //如果x被t整除,结束循环 //循环结束后,如果t= =x,则x使素数 //否则,x不是素数 |
循环应用案例:货币兑换问题
用10元人民币兑换角币角币有1角、2角、5角,有多少种兑换方法? | |
算法分析: ● 都是1角的,最多可以有100张 ● 都是2角的,最多可以有50张 ● 都是5角的,最多可以有20张 ● 1角的张数i:0-100 ● 2角的张数j:0-50 ● 5角的张数k:0-20 ● 如果i*1+j*2+k*5= =100,即我们所要求的一种兑换方法。 | #include<stdio.h> void main() { int i,j,k; //i表示一角;j表示两角;k表示5角 for(i=0;i<=100;i++) for(j=0;j<=50;j++) for(k=0;k<=20;k++) if(i*1+j*2+k*5==100)printf("%d\t%d\t%d\n",i,j,k); } |
优化算法一:循环共进行了多少次? | |
优化目的:统计循环执行的次数 算法: 增加一个变量m,初值为0 在循环体内增加一条语句“m++;” 循环结束后,输出m,即循环执行的次数; | #include<stdio.h> void main() { int i,j,k; int m=0; for(i=0;i<=100;i++) for(j=0;j<=50;j++) for(k=0;k<=20;k++) {m++; if(i*1+j*2+k*5==100)printf("%d\t%d\t%d\n",i,j,k); } printf(“循环共执行了%d次!\n”,m); } |
优化算法二:统计共有多少种兑换方法 | |
优化目的:统计满足条件的数据组数 算法分析: 每有一组i,j,k,满足条件,不仅输出这组数据,同时还要用一个变量记录个数。 | #include<stdio.h> void main() {int i,j,k; int m=0,n=0; for(i=0;i<=100;i++) for(j=0;j<=50;j++) for(k=0;k<=20;k++) {m++; if(i*1+j*2+k*5==100){n++;printf("%d\t%d\t%d\n",i,j,k);} } printf(“循环共执行了%d次!\n”,m); printf(“共有%d种兑换方法!\n”,n); } |
优化算法三:循环共进行了多少次?是否可以减少循环次数? | |
优化目的:减少循环执行的次数 算法: 如果“一角”的张数是i,那么“两角”的张数最多应该是(100-i)/2; 如果“一角”的张数是i,“两角”的张数是j,那么“五角”的张数最多应该是(100-i-2*j)/5; | #include<stdio.h> void main() {int i,j,k; int m=0,n=0; for(i=0;i<=100;i++) for(j=0;j<=(100-i)/2;j++) for(k=0;k<=(100-i-2*j)/5;k++) {m++; if(i*1+j*2+k*5==100){n++;printf("%d\t%d\t%d\n",i,j,k);} } printf(“循环共执行了%d次!\n”,m); printf(“共有%d种兑换方法!\n”,n); } |
循环应用案例:猜数游戏
使用随机函数产生一个0-100之间的整数,从键盘输入数据,猜对,提示:恭喜你,猜对了;否则提示:对不起,猜错了。 | |
算法分析: 随机函数是什么?如何用? 需要几个变量? 从键盘输入几个? 如何比较? | #include<stdio.h> #include<stdlib.h> void main() { int x,y; x=rand(); scanf(“%d”,&y); if(x==y)printf(“恭喜你,猜对了!\n”); else printf(“对不起,猜错了!\n”); } |
三种情况都有提示:大了,小了,对了 | |
如果 y==x 对了 否则 如果y>x 大了 否则 小了 | #include<stdio.h> #include<stdlib.h> void main() { int x,y; x=rand(); int i; scanf("%d",&y); if(x==y) printf("恭喜你,猜对了!\n"); else if(y>x)printf("对不起,猜大了!\n"); else printf("对不起,猜小了!\n"); } |
猜10次:对了结束,错了继续,10次后结束 | |
循环控制上面代码重复执行10次即可。 猜对了,要强行结束循环,break 猜不对,继续执行循环,直到循环满10次结束 | #include<stdio.h> #include<stdlib.h> void main() { int x,y; srand(4); x=rand(); int i; for(i=1;i<=10;i++) {scanf("%d",&y); if(y==x){printf("恭喜你,猜对了\n");break;} else if(y>x)printf("对不起,大了\n"); else printf("对不起,小了\n"); } } |
#include<stdio.h>
#include<stdlib.h>
void main()
{
int x,y;
srand(4);
x=rand();
int i;
for(i=1;i<=10;i++)
{
scanf("%d",&y);
if(x==y){printf("恭喜你,猜对了!\n");break;}
else if(y>x)printf("对不起,猜大了!\n");
else printf("对不起,猜小了!\n");
printf("您还有%d次机会,加油哦!\n",10-i);
}
if(i>10)
printf("对不起,您浪费了10次机会,游戏结束了\n");
}
rand(产生随机数)
表头文件: #include<stdlib.h>
定义函数 :int rand(void)
函数说明 :因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。
返回值:返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。
0~RAND_MAX每个数字被选中的机率是相同的。
范例:/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考
srand()*/
#include<stdlib.h>
main()
{int i,j;
for(i=0;i<10;i++)
{j=1+(int)(10.0*rand()/(RAND_MAX+1.0));printf("%d ",j);
}
} 执行:9 4 8 8 10 2 4 8 3 69 4 8 8 10 2 4 8 3 6 //再次执行仍然产生相同的随机数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论