C语言程序设计笔记4:循环

这个系列是用来解决学校C语言课程的,并不适用于ACM和OI

本系列博客分为2部分,分别是 C语言程序设计笔记(网课) 和 课堂总结(线下课)

欢迎转载ssw02的博客: https://www.cnblogs.com/ssw02/p/15994555.html


C语言程序设计笔记4-1

1.复习和引入

Q:给出一个1-999范围内的正实数,请编写一个程序快速判断这个数是几位数?

思路:将这个数不断除以10,每除一次,数位+1,直到为0 e.g. 321(0)->32(1)->3(2)->0(3)

#include <stdio.h>
int main()
{
	int x , num = 1 ;
	scanf("%d", &x);
	printf("该输入数字位数为:") ;
	if( x=x/10 )num++ ; //先计算除法再赋值,最后再依据x是否为0决定数位是否+1
	if( x=x/10 )num++ ;
	if( x=x/10 )num++ ;
	printf("%d",num) ;
	return 0;
}

但是这个数一旦更大,我们一直重复写if( x=x/10 )num++ ;这个语句明显是浪费时间的行为,所以我们要引入循环语句

2.循环语句

最常见的形式:
while(条件){执行代码块}

只要满足条件,就会一直循环执行{执行代码块}中的语句,直到不符合条件为止,也可以使用break跳出循环,或者使用continue进入下一次循环

while改写上述的代码

#include <stdio.h>
int main()
{
	int x , num = 0 ;
	scanf("%d", &x);
	printf("该输入数字位数为:") ;
	while(x > 0){ //只要x未到0,就会一直执行下面两句代码
		x = x/10 ; 
		num++ ;
	}
	printf("%d",num) ;
	return 0;
}

接下来介绍另外一种循环语句:

do{
执行代码块
}while(条件);

这和之前我们看到的那种循环语句不一样的地方就在于,do-while会先执行一次{执行代码块}里的语句再进行判断

3.习题答案

1.下列说法是否正确?
while循环的条件满足的时候循环继续,而do-while的条件满足的时候循环就结束了 错误

2.求 i 的值

int i =10;
while ( i>0 ) {
    i /=2;
}//答案为0

3.求 i 的值

int i = 1;
do {
	i += 5;
} while (i<17);//答案为21

C语言程序设计笔记4-2

1.循环语句的运用

Q1:输入一个int范围内的正实数X,求logX(以2为底)

#include <stdio.h>
int main()
{
	int x;
	int ret = 0;
	scanf("%d", &x);
	int t = x;
	while ( x > 1 ) {
		x /= 2;
		ret ++;
	}
	printf("log2 of %d is %d.", t, ret);
	return 0;
}

Q2:写一个猜数游戏,让玩家输入一个1-100数后,告诉玩家猜大了还是小了,直到猜到为止,同时统计一共猜了多少次才猜到答案。

#include <bits/stdc++.h>//stdio.h里没有rand()函数,这里直接换成万能头文件
int main()
{
	int number = rand()%100+1;
	int count = 0;
	int a = 0;
	printf("我已经想好了一个1到100之间的数。");
	do {
		printf("请猜这个1到100之间数:");
		scanf("%d", &a);
		if ( a > number ) {
			printf("你猜的数大了。");
		} else if ( a < number ) {
			printf("你猜的数小了。");
		}
		count ++;
	} while (a != number);
	printf("太好了,你用了%d次就猜到了答案。\n", count);
	return 0;
}

Q3:动态计算平均数(每有一次输入就要有一次输出)

思路:注意平均数是带小数的,我们不能使用整形,而需要使用到 float 或者 double类型

Q4:数位拆分

#include <stdio.h>
int main()
{
	int x;
	scanf("%d", &x);
	int digit;
	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;
}

2.习题答案

1.以下哪种运算能从变量x中取得十进制最低位的数字 B

A.x / 10
B.x % 10
C.x * 10
D.10 / x

2.当需要累加一些值的时候,用来记录累加结果的变量应该被初始为:0

posted @ 2022-02-26 17:46  蓝银杏-SSW  阅读(355)  评论(0编辑  收藏  举报
//结束