while先判断后执行,其中的语句可能一次也不执行
do-while先执行后判断,其中的语句至少执行一次
实例:猜数字小游戏
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
srand(time(0));//每次运行给出的数不同
int number = rand()%100+1;//每次召唤rand()就得到一个随机整数
int count = 0;
int a = 0;
printf("我想好了一个1-100之间的数\n");
do{
printf("猜猜这个1-100之间的数\n");
scanf("%d",&a);
count++;
if(a > number){
printf("猜大了");
}
else if(a < number){
printf("猜小了");
}
}while(a!=number);
printf("你用了%d次猜到了答案为%d",count,number);
return 0;
}
实例:算平均数
#include<stdio.h>
int main(void)
{
int number;
int sum = 0;
int count = 0;
scanf("%d",&number);
while(number!=-1)
{
sum += number;
count++;
scanf("%d",&number);
}
printf("平均值是%.2f",1.0*sum/count);
return 0;
}
break和continue都只能让它所在的那一层循环停止。
实例:输入一个钱数,用一毛两毛五毛去凑
#include<stdio.h>
int main(void)
{
int x = 2;
int one,two,five;
int exit = 0;
for(one = 1;one < x*10; one++){
for(two = 1; two < x*10/2; two++){
for(five = 1; five < x*10/5; five++){
if(one+two*2+five*5 == x*10)
{
printf("可以用%d个一角,%d个二角,%d个五角得到%d元",one,two,five,x);
exit = 1;
break;
}
}
if (exit == 1) break;
}
if (exit == 1) break;
}
return 0;
}
但我学过了算法设计与分析,发现该程序时间复杂度达到了n的三次方,遂尝试使用回溯法,能力暂时未达到,未果。然后发现可以投机取巧使用贪心算法,遂尝试。
#include<stdio.h>
int main(void)
{
float num;
scanf("%f",&num);
float x = num;
float one = 0.1;
float two = 0.2;
float five = 0.5;
int fiveCoin = 0;
int twoCoin = 0;
int oneCoin = 0;
fiveCoin = x/0.5;
x -= fiveCoin*0.5;
twoCoin = x/0.2;
x -= twoCoin*0.2;
oneCoin = x/0.1;
printf("可以用%d个一角,%d个二角,%d个五角得到%.2f元",oneCoin,twoCoin,fiveCoin,num);
return 0;
}
该算法时间复杂度为1,嗯,不愧是我
但货币种类只有三种,我觉得太少了,我再试试改进一下,使用回溯法,未果。
感觉这些还挺重要的,首更24.01.19,之后大概会补充吧