其他分享
首页 > 其他分享> > C语言学习-翁凯(第四章笔记)

C语言学习-翁凯(第四章笔记)

作者:互联网

C语言

第四章

4.1.1循环

数数几位数

人VS计算机

程序实现

int x;
int n = 1;

scanf("%d",&x);

if(x>999){
    n = 4;
}else if(x>99){
    n = 3;
}else if(x>9){
    n = 2;
}else{
    n = 1;
}

printf("%d\n",n);

换个方式想

数数

三位数逆序的题

人VS计算机

试试代码

int x;
int n=0;

scanf("%d",&x);

n++;
x/10;
if(x>0){
    n++;
    x/=10;
    if(x>0){
        n++;
        x/=10;
        if...
    }
}
printf("%d",n);
int x;
int n=0;

scanf("%d",&x);

n++;
x/10;
while(x>0){
    n++;
    x/=10;
}

printf("%d",n);

4.1.2WHILE循环

if(x>0){
    x/=10;
    n++;
}
//与while语句
while(x>0){
    x/=10;
    n++;
}
//不同点是if是一次性的,while是反复执行

在这里插入图片描述

(循环体内要有改变条件的机会)

while循环

再想想

int x;
int n=0;

scanf("%d",&x);

n++;
x/10;
while(x>0){
    n++;
    x/=10;
}

printf("%d",n);
int x;
int n=0;

scanf("%d",&x);

while(x>0){
    n++;
    x/=10;
}

printf("%d",n);

看程序运行结果

验证

调试

int x;
int n=0;

scanf("%d",&x);

n++;
x/10;
while(x>0){
    //printf("x=%d,n=%d\n",x,n);
    n++;
    x/=10;
}

printf("%d",n);

4.1.3DO-WHILE循环

数位数的算法

  1. 用户输入x;
  2. 初始化n为0;
  3. x=x/10,去掉个位;
  4. n++;
  5. 如果x>0,回到3;
  6. 否则n就是结果。

do-while循环

do
{
    <循环体语句>
}while(<循环条件>);

在这里插入图片描述

在这里插入图片描述

(左边do-while,右边while)

两种循环

int x;
int n=0;
scanf("%d",&x);
do{
    n++;
    x/=10;
}while(x>0);
printf("%d",n);

4.2.1循环计算

log₂x

int x;
int ret=0;
scanf("%d",&x);
while(x>1){
    x/=2;
    ret ++;
};
printf("log₂x of %d is %d.",x,ret);

输出结果每次都是1,因为循环除以2最后永远是1(整数)。那么,这个log₂x错在哪呢?

小套路

int x;
int ret=0;
scanf("%d",&x);
int t=x;
while(x>1){
    x/=2;
    ret ++;
};
printf("log₂x of %d is %d.",t,ret);

这些值是怎么定的?

int x;
int ret=0;
scanf("%d",&x);
int t=x;
while(x>1){
    x/=2;
    ret ++;
};
printf("log₂x of %d is %d.",t,ret);

为什么ret从0开始?

为什么while的条件里面是x>1?

因为在循环中,各个数值之间是有关联的,比如做累加,初始值一般为0,但如果累乘就一般为1。

计数循环

int count=100;
while(count>=0){
    count--;
    printf("%d\n",count);
}
printf("发射!\n");

(小套路:如果要模拟运行一个很大次数的循环,可以模拟较少的循环次数,然后作出推断。)

4.2.2猜数游戏

猜数游戏

  1. 计算机随机想一个数,记在变量number里;
  2. 一个负责记次数的变量count初始化为0;
  3. 让用户输入一个数字a;
  4. count递增(加1);
  5. 判断a和number的大小关系,如果a大,就输出“大”;如果a小就输出“小”;
  6. 如果a和number是不相等的(无论大还是小),程序转回到第3步;
  7. 否则,程序输出“猜中”和次数,然后结束。

(循环的条件是a和number不相等)

scrand(time(0))
    int number=rand()%100+1;
int count=0;
int a=0;
printf("我已经想好了一个1到100之间的数。");
do{
    printf("请猜这个1到100之间数:");
    scanf("%d",&a);
    count++;
    if(a>number){
        printf("你猜的数大了。");
    }else if(a<number){
        printf("你猜的数小了。");
    }
}while(a != number);
printf("太好了!你用了%d次就猜到了答案。\n",count);

随机数

%100

4.2.3算平均数

算平均数

在这里插入图片描述

变量

算法

  1. 初始化变量sum和count为0;
  2. 读入number;
  3. 如果number不是-1,则将number加入sum,并将count加1,回到2;
  4. 如果number是-1,则计算和打印出sum/count(注意换成浮点来计算)。

在这里插入图片描述

#include<stdio.h>

int main(){
	int number;
	int sum=0;
	int count=0;
	
	do{
		scanf("%d",&number);
		if(number!=-1){
			sum+=number;
			count++;
			scanf("%d",&number);
		}
	}while(number != -1);
	
	printf("%f\n",1.0*sum/count);
	
	return 0;
} 

4.2.4整数逆序

整数的分解

#include<stdio.h>

int main(){
	int x;
	scanf("%d",&x);
	int digit=0;
	int ret=0;
	
	while(x>0){
		digit=x%10;
		printf("%d",digit); 
		ret=ret*10+digit;
		//printf("x=%d,digit=%d,ret=%d\n",x,digit,ret);
		x/=10;
	}
	//printf("%d",ret);
	
	return 0;
} 

(这里有个小问题,输入007,输出为7,输入其他第一个数字不为0的都可以顺利逆置)

标签:10,int,翁凯,C语言,++,while,循环,printf,第四章
来源: https://blog.csdn.net/qq_43104872/article/details/120579446