明解C语言 4-2while语句

知识点总结:

1.while语句:当表达式不为0 时,会循环执行其中的语句

2.后置递增运算符和后置递减运算符:题型3和6均有作书中详细解释

以a- -为例:

1.可说明为:使a的值减小1(该表达式的值是减小前的值)

2.即对表达式a--进行判定时,它还是递减之前的值。当no的值是11的时候,表达式no--的结果还是11,而不是10

3.字符常量和putchar函数 

1)字符常量:像' * ',' \n '这样,被用单引号'  '括起来的字符称为字符常量。字符常量是int类型。 

2)字符常量表示单一的字符 * ,用单引号' '表示

      字符串常量表示单纯由字符 * 构成的一连串连续排列的字符,用双引号" " 表示

3)像\n或\a这样的转义字符是作为一个字符来使用的

4)通过使用putchar函数,可以显示单一的字符

4.do语句和while语句

 5.前置递增运算符和前置递减运算符

以i=0开始

 ++i 经过了两个步骤:1.i的值递增1  

                                   2.显示i的值

即++i 为“在显示i的值之前递增”,最初显示的i的值,是0递增后得到的1

对使用后置递增/递减运算符的表达式进行判断后得到的是递增/递减  前的值

对使用前置递增/递减运算符的表达式进行判断后得到的是递增/递减  后的值

 6.do语句和while语句的区分

 

分类题型

1.输入1个整数值,显示出从它开始递减到0的每一个整数

代码清单4-5

利用后置递减运算符求值运行

int main()   
{
	int no;
	printf("请输入1个正整数"), scanf("%d", &no);
	while (no >= 0)
	{
		printf("%d ", no);//printf("%d",no--)
		no--;
	}
	printf("\n");
	return 0;
}

练习4-3:输入值为负数时,不执行换行操作(未解决问题)

2.用递减运算符简化程序代码

从输入的整数开始倒数到0

代码4-6:

int main()
{
	int no;
	printf("请输入1个整数:");
	scanf("%d", &no);
	while (no >= 0) {
//方法1
		//printf("%d\n", no);
		//no--
//方法2
		printf("%d\n", no--);
		//后置递减运算表达式  P89注意
;
	}
	printf("程序执行完毕");
	return 0;
}

练习4-4(未解决问题)

 3.数据递增

递增显示从0到输入的正整数为止的各个整数

int main()
{
	int nb,na;
	printf("请输入1个正整数:"), scanf("%d", &nb);
	na = 0;
	while (na <= nb) {
		printf("%d ", na++);//i的值在显示之后递增   p90底部文字注解
		printf("\n");
	}

 练习4-5(未解决问题)

4.升序输出小于输入值的所有正偶数

练习4-6

 

寻求多种解法,包括只使用while函数的情况下
int main()
{
	int i, nb;
	printf("请输入1个正整数:"), scanf("%d", &nb);
	i = 2;
	while (i <= nb) {
//方法1:使用if语句辅助实现
		if (i % 2 == 0)
			printf("%d ", i);
		i = i + 1;
//方法2
		printf("%d ", i );
		i = i + 2;
		//printf("%d ", i + 2);
	}
	return 0;

5.显示出小于输入的整数的所有2的乘方(未解决)

练习4-7

 6.限定次数的循环操作

输入1个整数后,并排连续显示出该整数个*

int main()
{
	int no;
	printf("请输入1个正整数:"), scanf("%d", &no);

	while (no-- > 0)
	{
		putchar('*');
		//putchar(' ');  同等道理
		printf(" ");
	}
	return 0;
}

 练习4-8(未解决)

7.输入规定个数整数并显示出它们的合计值和平均值

代码4-9

int main()
{
	int i = 0;//i为前置递增中间过渡数值
	int sum = 0;//sum为所有整数的和
	int num, tmp;//num为输入整数个数,tmp为输入的每一个整数值

	printf("要输入多少个整数");
	scanf("%d", &num);

	while (i < num)
	{
		printf("No.%d : ", ++i); //no后的序号数值不会超过输入的整数个数
		scanf("%d", &tmp); //输入整数
		sum += tmp;//加且赋值运算符,左加右的的结果赋值给左操作数
	}
	
	printf("合计值 :%d \n", sum);
	printf("平均数 : %.2f", sum / (double)num);

	return 0;
}

8.交替显示两个符号,总数等于输入的整数值(怎样做到当输入0以下整数时,什么也不显示)

练习4-9

怎样用do语句实现?
int main()
{
	int no;
		int i=1;
	printf("请输入1个正整数");
	scanf("%d", &no);

	while (i <= no)
	{
		
		if (i % 2 == 0)//注意这里别把i写成no!
			putchar('-');
		else
			putchar('+');
		i++;         //p89
	}
	return 0;
}

9.输出某个符号,总数等于输入的整数值(怎样做到当输入0以下整数时,什么也不显示)

练习4-10

int main()
{
	int a, c;
	int b = 0;
	printf("正整数:"), scanf("%d", &a);
	do
	{
		b++;
		putchar('*');   //while (a > b++){puts("*");   第二种方法
		

	} while (b < a);

			return 0;
}

以a=3为例推算

1)3  >  0

b=1

2)3   >1

b=2

3)3   >2

b=3

10.逆向显示整数值

代码4-10

在整数/整数的运算中,小数点以下会被忽略,则第一次a/10 的结果是196,会直接赋值给a。

int main()
{
	int a;
	
	do
	{
		printf("请输入1个正整数:"), scanf("%d", &a);
		if (a <= 0)
			printf("\a您输入的不是正整数");

	} while (a <= 0);

	printf("该整数逆向显示的结果是:");
	while (a > 0)
	{
		printf("%d", a % 10);   显示最后一位数

		a /= 10;    右移一位数
                    除且赋值运算符:将左操作数除以右操作数的结果赋值给左操作数
	}
	puts("。");
	return 0;
}

11.   对代码4-10作小修改,在显示结果的同时显示输入的整数值

练习4-11

int main()
{
	int a;

	do
	{
		printf("请输入1个正整数:"), scanf("%d", &a);
		if (a <= 0)
			printf("\a您输入的不是正整数");

	} while (a <= 0);

	printf("%d逆向显示的结果是:",a);     //在此步骤调整即可
	while (a > 0)
	{
		printf("%d", a % 10);

		a /= 10;
	}
	puts("。");
	return 0;
}

12.读取1个正整数,显示其位数

 练习4-12

 

int main()
{
	int a;
int i=0;

	do
	{
		printf("请输入1个正整数:"), scanf("%d", &a);
		if (a <= 0)
			printf("\a您输入的不是正整数");

	} while (a <= 0);

	printf("%d的位数是:", a);  
	while (a > 0)
	{
		
		//printf("%d", a % 10);

		a /= 10;
		
		i++;
	}
printf("%d", i);
	puts("。");
	return 0;
}

 以输入21为例,第一次运行结束a=2 ,i=1

第二次a=0 ,i=2直接输出   则21的位数是2

以输入1963为例,第一次运行结束 a=196,i=1

第二次 a=19 ,i=2

第三次 a=1 ,i =3

第四次 a = 0 ,i = 4  运行结束,输出i=4

则1963的位数是4 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值