如果
if(条件成立)
{
...
}
根据比较的结果,决定做、还是不做某些动作,就要用到if语句。
一个基本的if语句由一个关键字if开头,跟上在括号里的一个表示条件的逻辑表达式,然后是一对大括号“{}”之间的若干条语句。如果表示条件的逻辑表达式的结果为true,那么就执行后面跟着的这对大括号中的语句,否则就跳过这些语句不执行,而继续下面的其他语句。
程序:if语句计算时间差
#include<stdio.h>
int main()
{
int hour1, minute1;
int hour2, minute2;
scanf_s("%d %d",&hour1,&minute1);
scanf_s("%d %d",&hour2, &minute2);
int ih = hour2 - hour1;
int im = minute2 - minute1;
if (im < 0) {
im = 60 + im;
ih--;
}
printf("时间差是%d小时%d分。\n",ih,im);
return 0;
}
运算符 | 意义 |
== | 相等 |
!= | 不相等 |
> | 大于 |
>= | 大于或等于 |
< | 小于 |
<= | 小于或等于 |
计算两个值之间的关系,所以叫做关系运算。
关系运算的结果
当两个值的关系符合关系运算符的预期时,关系运算的结果为整数1,否则为整数0。
printf("%d\n",5>3);
printf("%d\n",5==3);
printf("%d\n",5>=3);
printf("%d\n",5<3);
printf("%d\n",5<=3);
printf("%d\n",5!=3);
优先级
所有关系运算符的优先级比算数运算符的低,但是比赋值的要高。
判断是否相等的==和!=的优先级比其他的低,而连续的关系运算符是从左到右进行的。
找零计算器
注释
以两个斜杠“//”开头的语句把程序分成了三个部分:
1.初始化
2.读入金额和票面
3.计算并打印找零
/**/注释
延续数行的注释,要用多行注释的格式来写。多行注释由一对字符序列“/*”开始,而结束以“*/”结束
也可以用于一行的注释。
else
else = "否则的话"
if(条件)
{
条件成立语句
}else{
条件不成立语句
}
if语句
#include<stdio.h>
int main()
{
int a, b,c;
scanf_s("%d %d",&a,&b);
if (a > b)
c = a;
else
c = b;
printf("%d",c);
return 0;
}#include<stdio.h>
int main()
{
int a, b,c;
scanf_s("%d %d",&a,&b);
if (a > b)
c = a;
else
c = b;
printf("%d",c);
return 0;
}
if( )
...
else
...
if()...else...语句没有大括号也可以。
循环
if语句可以判断条件是否满足,满足时才做相应的动作,而循环语句可以在满足条件时,不断地重复执行一些动作。
重复执行的语句(循环语句)可以多次执行其他语句,它检查一个逻辑条件是否满足,只在满足的时候执行它的循环体。
while语句是一个循环语句,它会首先判断一个条件是否满足,如果条件满足,则执行后面紧跟着的语句或语句括号,然后再次判断条件是否满足,如果条件满足则再次执行,直到条件不满足为止。后面紧跟的语句或语句括号,就是循环体。
do-while循环和while循环很像,唯一的区别是我们在循环体执行结束的时候才来判断条件。也就是说,无论如何,循环都会执行至少一遍,然后再来判断条件。与while循环相同的是,条件满足时执行循环,条件不满足时结束循环。
数数几位数
程序要读入一个4位以下(含4位)的正整数,然后输入这个整数的位数。如:
输入:352,输出:3
计算机的方式:判断数的范围来决定他的位数
352∈[100,999]-->3位
人不擅长,因为对数字的计算能力比文字弱
#include<stdio.h>
int main()
{
int x;
int n = 1;
scanf_s("%d", &x);
if (x > 999) {
n = 4;
}
else if (x > 99) {
n = 3;
}
else if (x > 9) {
n = 2;
}
else if(x<9) {
n = 1;
}
printf("位数是:%d",n);
return 0;
}
任意正整数呢?
如:4654564654561651685487489465465456456456456
人怎么数?从左往右数,一次划掉一个数字
计算机怎么划掉?
如果换一下,从右边开始划!
#include<stdio.h>
int main()
{
int x;
int n = 0;
scanf_s("%d", &x);
n++;
x /= 10;
while (x > 0) {
n++;
x /= 10;
}
printf("位数是:%d",n);
return 0;
}
while循环
如果我们把while翻译作“当”,那么一个while循环的意思就是:当条件满足时,不断的重复循环体内的语句。
循环执行之前判断是否继续循环,所以有可能循环一次也没有被执行;
条件成立是循环继续的条件。
看程序运行结果
人脑模拟计算机的运行,在纸上列出所有的变量,随着程序的进展不断重新计算变量的值。当程序运行结束时,留在表格最下面的就是程序的结果。
验证
测试程序常使用边界数据,如有效范围两端的数据,特殊的倍数等
个位数;
10;
0;
负数。
数位数的算法
1.用户输入x;
2.初始化n为0;
3.x=x/10,去掉个位;
4.n++;
5.如果n>0,回到3;
否则n就是结果。
do-while循环
在进入循环的时候不做检查,而是在执行完一轮循环体的代码之后,再来检查循环体的条件是否满足,如果满足则继续下一轮循环,不满足则结束循环。
do
{
<循环体语句>
}while(<循条件>);
#include<stdio.h>
int main()
{
int x;
int n = 0;
scanf_s("%d", &x);
do {
n++;
x /= 10;
} while (x > 0);
printf("位数是:%d",n);
return 0;
}
for循环
阶乘
n!=1*2*3*4*...*n
写一个程序,让用户输入n,然后计算输出n!
变量:
显然读用户的输入需要一个int的n,然后计算的结果需要有个变量保存,可以是int的factor,在计算中需要一个变量不断地从1递增到n,那可以是int的i
#include<stdio.h>
int main()
{
int n;
scanf_s("%d", &n);
int fact = 1;
int i = 1;
while (i<=n ) {
fact = fact * i;
i++;
}
printf("%d!=%d",n,fact);
return 0;
}
#include<stdio.h>
int main()
{
int n;
scanf_s("%d", &n);
int fact = 1;
int i = 1;
for (i = i + 1; i <= n;i++ ) {
fact = fact * i;
}
printf("%d!=%d",n,fact);
return 0;
}
for循环像一个计数循环:设定一个计数器,初始化它,然后在计数器到达某值之前,重复执行循环体,而每执行一轮循环,计数器值以一定步进进行循环,比如加1或者减1。
for(i=0;i<5;i=i+1){
printf("%d",i);
}
for=对于
for(count=10;count>0;count--)
就读成:“对于一开始的count=10,当count>0时,重复做循环体,每一轮循环在做完循环体内的语句后,使得count--。”
小套路
做求和程序时,记录结果的变量应该初始化为0,而做求积的变量时,记录结果的变量应该初始化为1
循环控制变量i只在循环里被使用了,在循环外面它没有任何用处。因此,我们可以把变量i的定义写到for语句里面去
try
1*1还是1,所以程序的循环不需要从1开始,那么改成多少开始合适呢?这样改之后程序对所有的n都正确嘛?这样改动有价值嘛?
除了可以从1乘到n来计算n!,还可以从n乘到1来计算,试试把循环换个方向来计算n。这时候,还需要循环控制变量i嘛?
#include<stdio.h>
int main()
{
int n;
scanf_s("%d", &n);
int fact = 1;
int i = 1;
for (i =n; i >=1; i--) {
fact = fact * i;
}
printf("%d!=%d",n,fact);
return 0;
}
循环次数
for(i=0;i<n;i++) = for(i=1;i<=5;i++)
则循环的次数是n,而循环结束后,i的值是n。循环的控制变量i,是选择从0开始还是从1开始,是先判断i<n还是判断i<=n,对循环的次数,循环结束后的变量值都有影响。
for(初始动作;条件;每轮的动作){
}
for中的每一个表达式都是可以省略的
for(;条件;)==while(条件)
for while do...while
Tip for loops
·如果有固定次数,用for
·如果必须执行一次,用do...while
·其他情况用while