目录
上几节我们学习了分支结构程序的if语句和Switch语句,在程序的循环控制我们将会学习都语句、while语句、和for语句。从前面看到到这里的你实在是太棒啦!
我们先来学习do语句
do语句
前几章节中我们在判断奇偶数时,只能进行操作一次,现在我们来使程序询问我们是否进行相同操作:
#include<stdio.h>
int main()
{
int retry;
do
{
int no;
printf("请输入一个整数:");
scanf("%d", &no);
if(no % 2 )
{
puts("这个整数是奇数。");
}
else
puts("这个整数时偶数");
printf("还要重复一次吗?[yes~~~0 / no~~~9]" );
scanf("%d", &retry);
}while(retry == 0);
return 0;
}
我们用结构图来展示do语句的组成:
do是执行的意思,while是在……期间的意思。只要控制表达式的结果不为0,语句就会循环执行。
do语句的循环对象也被称为循环体。
复合语句(程序块)中的声明
上例子中,对于变量no的声明是在复合语句部分中进行的。需要注意的是,仅在复合语句中使用的变量通常要在复合语句中进行声明,这一点很重要。
读取一定范围内的值
使用do语句,从键盘读取的数值是有限制的。
我们用选取的数值来猜拳
/*根据读取的整数来显示出什么拳*/
#include<stdio.h>
int main()
{
int hand;//出拳
do
{
printf("请选择出什么拳【0……石头/1……剪刀/2……布】:\n");
scanf("%d", &hand);
}while(hand < 0 && hand > 2);/*也可以写为!(hand >= 0 && hand <= 2)*/
printf("您选择了:");
switch(hand)
{
case 0:printf("石头。\n");
break;
case 1:printf("剪刀。\n");
break;
case 2:printf("布。\n");
break;
}
return 0;
}
如果读取的数值是“0、1、2”这样的合法值,就会显示石头剪刀布,反之若输入的是非法的值,就会提醒您再次输入。并且,当输入的值为合法的值时,控制表达式的判断结果为int类型的1.
逻辑非运算符·德摩根定律
德摩根定律:对个条件去非,然后将逻辑与变为逻辑或,将逻辑或变为逻辑与然后取其否定,结果和原条件一样,与高中关于“命题的四种类型”是一致的。
a && b 和 !(!a || !b)等价
a || b 和!(!a && !b)等价
逻辑非运算符 !a 当a为0时判断结果的值为1,反之判断结果就为0。(判断结果是int类型) |
我们用图来具体展现下:
求多个整数以及平均值
不停地输入整数,显示它们的和及其平均值。
#include<stdio.h>
int main()
{
int sum = 0;//求和
int cnt = 0;//输入的整数个数
int retry;//是否进行继续处理
do
{
int t;
printf("请输入一个整数:");
scanf("%d", &t);
sum = sum + t;
cnt = cnt + 1;
printf("是否进行继续输入?【Yes……0/No……9】:");
scanf("%d", &retry);
}while(retry == 0);
printf("和为%d,平均值为%.2f。\n", sum, double(sum) / cnt);
}
程序运算的流程分解
让我们来简述下程序计算的步骤:
1.准备(初始化和及个数)
首先进行求和的准备工作。假设变量cnt储存着整数的个数,变量sum储存着整数值的和,它们的初始值都为0。
2. 更新和及其个数
再循环体中,首先变量t读入整数值,之后执行以下赋值,sum = sum + t;即将sum + t的值再次赋值给sum;
接下来的cnt = cnt + 1;也是同样的道理。比如cnt = 0 + 1 = 1;cnt = 1 + 1 =2;一直循环,直到循环结束。
复合赋值运算符
让我们对上面程序关于sum的表达式稍加改造
sum = sum + t;
sum += t;好处:减少输入次数(变量名sum只需输入一次),并且更加简洁。
像“+=”这样的运算符我们称之为复合赋值运算符。
包括+=在内,共有10个复合赋值运算符。
对于*、/、%、+、-、<<、>>、&、^、|这些运算符来说a @= b和a = a @ b,效果是一样的
后置递增运算符和后置递减运算符
后置递增运算符 a++ 使a的值增加1(a的值是增加前的值,例如a=1,增加一次后输入的值为1) |
后置递减运算符 a-- 使a的值减少1(a的值是减少前的值) |
其中,a++与a = a + 1几乎相同,注意是几乎,因为由于后置递增运算符的特性,a的值是增加前的值。对于a--也是一样的道理。
由于复合赋值运算符和后置递增运算符、后置递减运算符在数学中一般不会出现,刚开始使用时感到生涩是很正常的。
注意
后置递增运算符和后置递减运算符的名称中之所以有后置二字是因为++、--位于操作数之后
对上面的代码稍加改动:
明天,我们将会学习到while语句,然后是for语句。最后我们将学习新的知识数组,那时候我们才迈入了C语言的门槛。
最近流感盛行,祝福大家都有个健康的身体,千万不要因为天气冷就一直躺在被窝里呀,多运动哦。