C语言-4.循环

89 阅读5分钟

@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循环的意思就是:当条件满足时,不断地重复循环体内的语句。 循环执行之前判断是否继续循环,所以有可能循环一次也没有被执行; 条件成立是循环继续的条件。 看程序的运行结果 人脑模拟计算机的运行,在纸上列出所有的变量,随着程序的进展不断重新计算变量值。当程序运行结束时,留在表格最下面的就是程序的最终结果。 例如

xn
3520
351
32
03

用这样的方式可以调试代码 也可以在程序中插入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);
}