循环知识点总结(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小时内删除。