@TOC
4.1循环
4.1.1循环:有些事情就得用循环才能解决
数数几位数 程序要读入一个4位以下(含4位)的正整数,然后输出这个整数的位数。如: 输入:352,输出:3 因为明确了是四位以下的数所以:可以用判断语句直接写 代码:
#include<stdio.h>
int main()
{
int x;
scanf_s("%d",&x);
if (x > 999)
{
printf("4");
}
else if (x > 99)
{
printf("3");
}
else if (x > 9)
{
printf("2");
}
else
{
printf("1");
}
return 0;
}
但是如果位数很大,那么就要写很多个判断语句,所以就可以用C语言的循环语句while语句 代码:
#include<stdio.h>
int main()
{
int x;
int n = 0;
scanf_s("%d",&x);
while (x > 0)
{
x = x / 10;
n++;
}
printf("%d",n);
return 0;
}
4.1.2while循环:就像if一样条件满足就不断地做后面大括号里面的句子
循环语句中,写在大括号里的句子叫做循环体,循环体要有改变条件的机会,如果没有,就会出现无限循环。 while循环 如果我们把while翻译作“当”,那么一个while循环的意思就是:当条件满足时,不断地重复循环体内的语句。 循环执行之前判断是否继续循环,所以有可能循环一次也没有被执行; 条件成立是循环继续的条件。 看程序的运行结果 人脑模拟计算机的运行,在纸上列出所有的变量,随着程序的进展不断重新计算变量值。当程序运行结束时,留在表格最下面的就是程序的最终结果。 例如
| x | n |
|---|---|
| 352 | 0 |
| 35 | 1 |
| 3 | 2 |
| 0 | 3 |
用这样的方式可以调试代码 也可以在程序中插入printf输出每一个变量的值,观察是否正确
#include<stdio.h>
int main()
{
int x;
int n = 0;
scanf_s("%d",&x);
while (x > 0)
{
x = x / 10;
n++;
printf("x=%d n=%d",x,n);
}
printf("%d",n);
return 0;
}
4.1.3do-while循环:不管三七二十一,先做循环内的句子再判断条件
因为上面的代码如果输入0,计算机输出的结果是0,所以我们要修改代码
#include<stdio.h>
int main()
{
int x;
int n = 0;
scanf_s("%d",&x);
n++;
x/=10;
while (x > 0)
{
x = x / 10;
n++;
printf("x=%d n=%d",x,n);
}
printf("%d",n);
return 0;
}
这样代码就可以在判断之前就计算一次,因此在C语言中有一种语句do-while循环语句可以先做循环内的句子再判断条件,完成上面代码的过程。 代码:
#include<stdio.h>
int main()
{
int x;
int n = 0;
scanf_s("%d",&x);
do
{
x /= 10;
n++;
} while (x > 0);
printf("%d",n);
}
4.2循环应用
4.2.1循环计算
** log2x**
int x;
int ret = 0;
scanf("%d",&x);
while(x>1)
{
x/=2;
ret++;
}
printf("lon2 of %d is %d.",x,ret);
运行这个代码会发现,当我们输入x的值时,显示出来的不是预期的结果。 这是因为我们在循环的时候x的值会跟着改变。因此我们要提前将x的值存在另一个变量中。 代码如下:
int x;
int ret = 0;
scanf("%d",&x);
int t=x;
while(x>1)
{
x/=2;
ret++;
}
printf("lon2 of %d is %d.",t,ret);
小套路 计算之前先保存原始的值,后面可能用。 计算循环
#include<stdio.h>
int main()
{
int count=100;
while(count>0)
{
count--;
printf("%d\n",count);
}
printf("发射");
}
这个循环执行多少次? 小套路:如果要模拟运行一个很大次数的循环,可以模拟较少循环次数,然后做出循环。
4.2.2猜数游戏
让计算机来想一个数,然后让用户来猜,用户每输入一个数,就告诉它是大了还是小了,直到用户猜中为止,最后还要告诉用户它猜了多少次。 因为需要不断重复让用户猜,所以需要用到循环。 在实际写程序之前,我们可以用文字描述程序的过程。 核心重点是循环的条件。 步骤: 1.计算机随机想一个数,记在变量中number里。 2.一个负责记次数的变量count初始化为0. 3.让用户输入一个数字a。 4.count加一 5.判断a和number的大小关系 6.如果a和number不相等,程序回到循环 7.否则,程序输出“猜中”和次数,然后结束。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(0));
int number=rand()%100+1;
int a;
int count=0;
do
{
printf("请输入要猜的数\n");
scanf("%d",&a);
if(a>number)
{
printf("大了\n");
}
else if(a<number)
{
printf("小了\n");
}
count++;
} while (a!=number);
printf("对了,猜了%d次",count);
}
随机数 每次召唤rand()就得到一个随机的整数。 %100 x%n的结果是【0,n-1】的一个整数。 使用时要用 #include<stdlib.h> #include<time.h>
4.2.3算平均值
让用户输入一系列的正整数,最后输入-1表示输入结束,然后程序计算出这些数字的平均数,输出输入的数字的个数和平均数 变量-->算法-->流程图-->程序 变量 一个记录到整数的变量 平均值要怎么算? 只需要每读到一个数,就把它加到一个累加的变量里,到全部数据读完,再拿它去除读到的数的个数就可以了 一个变量记录累加的结果,一个变量记录数读到的个数 算法 初始化变量sum和count为0; 读入number; 如果number不是-1,则将number加入sum,并将count加1,回到2; 如果number是-1,则计算和打印出sum/count
#include<stdio.h>
int main()
{
int count=0;
int x;
float add=0;
do
{
printf("请输入");
scanf("%d",&x);
add+=x;
count++;
}while(x!=-1);
printf("%f",(add+1)/(count-1));
}
4.2.4整数求逆
*整数的分解 一个整数是由1至多位数字组成的,如何分解出整数的各个位上的数字,然后加以计算。 对一个整数做%10的操作, 就得到它的个位数 对一个整数做/10的操作就去掉了它的个位数; 然后再对2的结果做%10,就得到原来数的十位数; 代码如下:
#include<stdio.h>
int main()
{
int number;
scanf("%d",&number);
int temp=0;
int digit=0;
while(number != 0)
{
temp=number%10;
number/=10;
digit=digit*10+temp;
}
printf("%d",digit);
}