4.1.1 循环
4.1.2 while循环
4.1.3 do-while循环
4.2.1 循环计算
4.2.2 猜数游戏
4.2.3 算平均值
4.2.4 整数逆序
知识点提炼
只用if不用else会怎么样?
这样写描述了x和n的关系,那如果我输入一个1000,你会发现四条语句都会执行,这是为什么?原因就在于C语言是描述步骤的语言,它只会一步一步执行写好的程序,而这样的顺序无疑让1000这个数据满足了全部的条件,因此这样写是不正确的。
从高位数开始判断(用大于号的话一般是从高位判断),这样还能省去判断上限的语句。
while循环
当,满足条件时,会不断地重复循环体内的语句。
if和while的区别仅仅在于,语句执行一次还是多次:而如果不满足条件,语句一句也不会执行。因此条件是很重要的,如果不给程序开始循环的条件会使语句无法执行,如果不给让其值自变的语句可能会使循环无法退出。也就是说,不想要一个死循环的话,循环体内要有改变条件的机会。 while(1)
do-while循环
先做事情,做完了再看是否继续:在进入循环的时候不做检查,而是在执行完一轮循环体的代码之后,再来检查循环的条件是否满足,如果满足则继续下一轮循环,不满足结束。
do
{
printf("输入一个数字: ");
scanf("%lf", &number);
sum += number;
}
while(number != 0.0) ;( 👈 注意)
计数循环
对于计数循环,计数变量的初始值、while的判断条件以及计数变量什么时候自增,这三个问题息息相关,一定要做好测试,梳理逻辑。
一定范围内生成随机数
rand():产生一个随机整数;
#include <stdlib.h>
#include <time.h>
int main(){
srand(time(0));
int a=rand();//随机产生一个数
a=a%100;//得到一百以内的数
}
比如7684%100=34,任何大于0的数%100之后就只能剩下0~99,因此再加上1之后,就可以获得0~100的数字。而且100以内的数字,最多只要猜7次
一个数%100,可以得到他的末尾两位数。
未知位数整数的分解
分析:由于不确定位数,那么只能从各个位上面取,取一位,消一位。
验证
通过输入不同特殊的数据来验证
在程序的适当位置插入printf,提交的时候调试的句子要注释掉。
项目学习记录
0211判断几位数
int x;
int n=0;
scanf("%d",&x);
n++;
x/=10;
while(x>0)
{
n++;
x/=10;
}
printf("%d\n",n);
——————————————————————————————————————
#include <stdio.h>
int main(){
int x;
int n=0;
scanf("%d",&x);
while(x!=0)
{
x/=10;
n++;
}
printf("%d\n",n);
}
//该程序对0无法正确读出0是一位数
0211算术平均数
#include <stdio.h>
int main(){
int num;
int n=0,sum=0;
while(1)
{
scanf("%d",&num);
if(num==-1)
{
break;
}
sum+=num;
n++;
}
printf("总和:%d\n",sum);
printf("%d个数\n",n);
printf("平均:%d",sum/n);
return 0;
}
printf("平均:%d",sum/n);
由于sum和n都是正整数,只能用%d,用%f会输出0.000000
解决办法:
printf("平均: %f",1.0*sum/n);
代码优化版:
0211log2X的函数
计算X是2的几次方,每次都除以2,然后计数
小套路:计算之前先保存原始的值,后面可能有用
0211猜数游戏
#include <stdio.h>
int main(){
const int num=68;
int x,count=0;
do{
scanf("%d",&x);
count ++;
if(x<68)
printf("小\n");
else if(x>68)
printf("大\n");
}
while(x!=num);
// while(x!=num){
// scanf("%d",&x);
// if(x<68)
// printf("小\n");
// else if(x>68)
// printf("大\n");
// count ++;
// }
printf("一共猜了%d次",count);
return 0;
}
0211整数的分解
#include <stdio.h>
int main(){
int num,sum;
scanf("%d",&num);
while(num!=0)
{
printf("%d\t",num%10);
sum+=num%10;
num/=10;
}
printf("%d",sum);
return 0;
}