1.判断
简单时间判断
#include<stdio.h>
int main()
{
int hour1, minute1;
int hour2, minute2;
scanf("%d %d", &hour1, &minute1);
scanf("%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。
所有的关系运算符的优先级比算术运算的低,但是比赋值运算的高。
eg:printf("%d", 7 >= 3 + 4); → 1
判断是否相等的==和!=的优先级比其他的低,而连续关系运算时从左到右进行的。
eg:5 > 3 == 6 > 4
找零计算器
两个操作:输入购买的金额,输入支付的票面,而找零计算器根据用户的输入做出相应的动作:计算并打印找零,或告知用户余额不足以购买。
从计算机的角度看,这意味着程序需要读入用户的两个输入,然后进行一些计算和判断,最后输出结果。
#include<stdio.h>
int main()
{
int price = 0;
int bill = 0;
printf("请输入金额:");
scanf("%d", &price);
printf("请输入票面:");
scanf("%d", &bill);
if (bill >= price){
printf("应该找您:%d", bill - price);
}else{
printf("您的余额不足");
}
return 0;
}
if和else后面也可以没有{ }而是一条语句。(但是if和else后面应规范化加{ }以输出多条)
计算薪水
#include<stdio.h>
int main()
{
const double RATE = 8.25;
const int STANDARD = 40;
double pay = 0.0;
int hours;
printf("请输入工作的小时数:");
scanf("%d", &hours);
printf("\n");
if (hours > STANDARD)
pay = STANDARD * RATE + (hours - STANDARD) * (RATE * 1.5);
else
pay = hours * RATE;
printf("应付工资:%f\n", pay);
return 0;
}
最大数判断
#include<stdio.h>
int main()
{
int a, b, c;
printf("Please input three integers:");
scanf("%d %d %d", &a, &b, &c);
int max = 0;
if(a > b){
if(a > c){
max = a;
}
else{
max = c;
}
}
else{
if(b > c){
max = b;
}
else{
max = c;
}
}
printf("The max is : %d", max);
return 0;
}
2.循环
求位数(条件判断)
程序要读入一个4位以下(含4位)的正整数,然后输出这个整数的位数,如:输入352,输出3.(注:计算机的方式——判断数的范围来决定它的位数,如:352∈[100,999] → 3位)
//条件判断
#include<stdio.h>
int main()
{
int x;
int n = 1;
scanf("%d", &x);
if(x > 999){
n = 4;
}else if(x > 99){
n = 3;
}else if(x > 9){
n = 2;
}else{
n = 1;
}
printf ("%d", n);
return 0;
}
如上可知,要用条件判断求任意范围的数字的位数较难,所以改用循环来求。
whlie循环
如if,条件满足就不断地重复循环体内的语句。循环执行之前判断是否继续循环,所以有可能循环一次也没有被执行。条件成立是循环继续的条件。
求位数
//循环
#include<stdio.h>
int main()
{
int x;
int n = 0;
scanf("%d", &x);
n++;
x /= 10;
while(x > 0){
n++;
x /= 10;
}
printf("%d\n", n);
return 0;
}
验证:测试程序时常使用边界数据,如有效范围内两端的数据,特殊的数等。
- 个位数
- 10
- 0
- 负数
do-while循环
在进入循环时不做检查,在执行完一轮循环体的代码后,再检查循环体的条件是否满足,满足则进行下一轮,不满足则结束。
do
{
<循环语句>
}while(<循环条件>);
求位数
#include<stdio.h>
int main()
{
int x;
int n = 0;
scanf("%d", &x);
do{
x /= 10;
n++;
}while(x > 0);
printf("%d", n);
return 0;
}
for循环
for循环像一个计数循环,设定一个计数器,初始化它,然后在计数器到达某值之前,重复执行循环体,而每执行一轮循环,计数器值以一定步进行调整,如加一或减一。(for可以改写为while)
- 如 for(count = 10; count > 0; count–)
读作 “对于一开始的count = 10,当count > 0时,重复做循环体,每一轮循环在做完循环体内的语句后,使得count–”。
eg:阶乘:写一个程序,让用户输入n,然后计算出n!
阶乘
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int fact = 1;
int i =1;
for(i = 1; i <= n; i++){
fact *= i;
}
printf("%d! = %d\n", n, fact);
return 0;
}
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int fact = 1;
int i =1;
for(i = n; i > 1; i--){
fact *= i;
}
printf("%d! = %d\n", n, fact);
return 0;
}
Tips for loops:
- 如果有固定次数,用for
- 如果必须执行一次,用do-while
- 其他情况用while