C语言程序的循环控制之while语句

目录

while语句

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

数据递增

字符常量和putchar函数

限定次数的循环

 字符常量和字符串常量的区别:

混淆printf与putchar函数:

 do语句和while语句

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

 前置与后置的区别

 do语句的显示

逆向显示整数值

 复合赋值运算符的优点

·能够更加简洁的表示要进行的计算

·只需写一次左边的变量名

·左边的仅判断一次

结语​


在上一章节中的do语对于循环条件的判断我们使用while(条件语句)来进行判断程序的循环。

现在我们来具体了解,关于while语句的详细用法把!


while语句

请输入一个正整数值并显示出它开始递减的0的每一个整数的代码:

#include

int main()
{
	int no;
	
	printf("请输入一个正整数:");
	scanf("%d", &no);
	
	while(no > 0)
	{
		printf("%d ", no);/**后置递减运算符显示递减前的值哦!*/
		no--;
	}
	printf("\n");
	
	return 0;
}

接下来我们展示while的结构图:

C语言程序的循环控制之while语句_第1张图片

再让我们来看下while语句的流程图:

C语言程序的循环控制之while语句_第2张图片

以上面的程序为例,我们来具体分析下变量no被赋值过程中值的变化:(no = 6)

判断:首先对条件no > 0进行判断,值不为0执行句,由printf打印在屏幕上(%d后面跟上空格),接下来执行no--,no递减为5。

no = 5>0判断结果不为0,进行第一次循环,重复上述步骤,直到跳出循环。但是在结束时no的值已经变成了0,由于判断结果为0,不能通过执行语句(printf)进行打印。

让我们来看下no值的变化:6——5——4——3——2——1——0(0不能被执行)

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

在我们调用printf函数显示no--的值会按照如下步骤显示:

1.显示no的值

2.然后对no的值进行递减操作

 也就是说,在显示no的值时,立刻会对其进行递减操作。

我们以输入no = 11为例:

C语言程序的循环控制之while语句_第3张图片

数据递增

 这次我们来编写与前面相反的程序,显示出从开始递增到no的正整数:

#include

int main()
{
	int no, i;
	
	printf("请输入一个整数:");
	scanf("%d", &no);
	
	i = 1;
	while(i <= no)
	{
		printf("%d ", i++);
	}
	printf("\n");
	
	return 0;
}

该程序与前面最大程序的不同时引入了一个新的变量i,然后i的值会从1递增到no并且显示出你的屏幕上。

优点:引入一个新的变量可以让我们任意设置递增到结束的数值。

字符常量和putchar函数

限定次数的循环

输入一个整数时,并排显示整数个*

#include

int main()
{
	int no;
	
	printf("请输入一个整数:");
	scanf("%d", &no);
	
	while(no-- > 0)
	{
		putchar('*');
	}
	putchar('\n');
	
	return 0;
}

在while语句中像‘*’、‘\n’这样的用单引号‘’括起来的字符称为字符常量,并且字符常量是int类型。

 字符常量和字符串常量的区别:

字符常量:字符常量‘*’——表示单一的字符*

字符串常量:字符串常量“*”——表示单纯由字符*构成的一连串连续排列的字符。

 注意:单一的字符是用‘’来表示。

混淆printf与putchar函数:

通过使用putchar函数可以显示单一字符。

putchar(“A”);传递给putchar的是字符串

printf(‘A’);传递给printf的是字符常量

 do语句和while语句

do语句与while语句的执行在对条件判断的顺序上有很大不同:

do语句——先循环后判断:执行循环体之后进行判断

while语句——先判断后循环:执行循环体之后进行判断

下一章节中将要讲到的for语句也是先判断后循环

 也就是说:do语句至少会执行一次,而while语句可能一次都不会执行。

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

输入规定个数个整数显示出它们的总和及其平均值:

#include

int main()
{
	int i = 0;
	int sum = 0;//求和
	int num, tmp;//num所要输入整数的个数,tmp为输入的整数
	
	printf("输入整数的个数:");
	scanf("%d", &num);
	
	while(i < num)
	{
		printf("No.%d:", ++i);
		scanf("%d", &tmp);
		sum += tmp;
	}
	printf("合计值:%d\n", sum);
	printf("平均值:%.2f", (double)sum / num);
	return 0;
}

在这里我们使用了前置递增运算符,让我们看看前置递增运算符与前置递减运算符有何特点:

前置递增运算符和前置递减运算符
前置递增运算符          ++a    使a的值加1(显示的是该表达式递增后的值)
前置递减运算符          --a    使a的值减1(显示的是该表达式递减后的值)

 前置与后置的区别

以i=0为例

前置:i++——>int 1(得到的是递增后的值)

后置:i++——>int 0(得到的是递增前的值)

前置得到是递增/递减之后的值,后置得到是递增/递减之前的值。

 do语句的显示

由于do语句和while语句都使用关键词while,所以有时很难区分出while是do语句的一部分还是while语句的一部分。

a.do语句的循环体是单一语句

x = 0;
do
	x++;
while(x < 5);
while(x >= 0)
	printf("%d", x);

b.do语句的循环体是复合语句

x = 0;
do
{
	x++;
}	while(x < 5);
while(x >= 0)
	printf("%d", x);

正如b所示,将do语句的循环对象{}括起来,是之成为复合语句的程序。

根据下面的特征我们就很容易区分了

}while——开头有}      do语句的一部分

while——开头没有}     while语句的一部分

 我们可以得出:do语句的循环体即使是单一语句用{}扩起来后也可以成为复合语句。

逆向显示整数值

输入一个非负整数,并且逆向显示。

对于判断是不是非负整数我们先试用do语句进行判断,再使用while语句进行逆向显示。

#include

int main()
{
	int no;
	
	do
	{
		printf("请输入一个正整数:");
		scanf("%d", &no);
		if(no <= 0)
		{
			puts("请重新输入");
		}
	}while(no <= 0);
	
	printf("该整数逆向显示的结果是:");
	
	while(no > 0)
	{
		printf("%d", no % 10);
		no /= 10;
	}
	puts("。");
	
	return 0;
}

我们来讲解下怎么逆向显示的:(以no=1693为例)

由no%10求出1693最后一位数字3并且进行打印,在把no/10的值169赋值给no

重复进行以上操作,直至no/10后no的值小于0后跳出循环为止。

 复合赋值运算符的优点

·能够更加简洁的表示要进行的计算

·只需写一次左边的变量名

在变量名较长,或者在以后学习的数组和结构体中比较复杂的表达式中,复合赋值运算符能够减少输入错误,并且程序也更加易读。

·左边的仅判断一次

使用复合赋值运算符的最大优点便是左边的判断仅进行一次,在以后的学习中将会更加明显:

使用复合赋值运算符:computer.money[vec[++i] ] += 10;

不使用:++i;

              computer.money[vec[i] ] += 10 = computer.money[vec[i] ] + 10;

结语

在这里我们已经将while语句学完,并且又学习了几个新的知识点,学习完下一章节中for语句我们将会踏上新征程——数组,并且在那里学到更多有用的知识。

祝大家,学业有成,工作顺利,成功上岸,身体健康,合家欢乐。

你可能感兴趣的:(C语言,c语言,开发语言,数据结构,学习,c++,算法)