目录
while语句
用递减运算符简化代码程序
数据递增
字符常量和putchar函数
限定次数的循环
字符常量和字符串常量的区别:
混淆printf与putchar函数:
do语句和while语句
前置递增运算符和前置递减运算符
前置与后置的区别
do语句的显示
逆向显示整数值
复合赋值运算符的优点
·能够更加简洁的表示要进行的计算
·只需写一次左边的变量名
·左边的仅判断一次
结语
在上一章节中的do语对于循环条件的判断我们使用while(条件语句)来进行判断程序的循环。
现在我们来具体了解,关于while语句的详细用法把!
请输入一个正整数值并显示出它开始递减的0的每一个整数的代码:
#include
int main()
{
int no;
printf("请输入一个正整数:");
scanf("%d", &no);
while(no > 0)
{
printf("%d ", no);/**后置递减运算符显示递减前的值哦!*/
no--;
}
printf("\n");
return 0;
}
接下来我们展示while的结构图:
再让我们来看下while语句的流程图:
以上面的程序为例,我们来具体分析下变量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为例:
这次我们来编写与前面相反的程序,显示出从开始递增到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并且显示出你的屏幕上。
优点:引入一个新的变量可以让我们任意设置递增到结束的数值。
输入一个整数时,并排显示整数个*
#include
int main()
{
int no;
printf("请输入一个整数:");
scanf("%d", &no);
while(no-- > 0)
{
putchar('*');
}
putchar('\n');
return 0;
}
在while语句中像‘*’、‘\n’这样的用单引号‘’括起来的字符称为字符常量,并且字符常量是int类型。
字符常量:字符常量‘*’——表示单一的字符*
字符串常量:字符串常量“*”——表示单纯由字符*构成的一连串连续排列的字符。
注意:单一的字符是用‘’来表示。
通过使用putchar函数可以显示单一字符。
putchar(“A”);传递给putchar的是字符串
printf(‘A’);传递给printf的是字符常量
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语句和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语句我们将会踏上新征程——数组,并且在那里学到更多有用的知识。