每走一步就近了一些,就不会觉得远了
if
#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;
}
格式
if(条件成立){
...
}
条件
计算两个值之间得关系,叫做关系运算
关系运算的结果
当两个值得关系符合关系运算符得预期时,关系运算得结果为整数1,否则为整数0
printf("%d\n",5==3); //0
printf("%d\n",5>3); //1
printf("%d\n",5<=3); //0
优先级
所有的关系运算符的优先级比算数运算的低,但是比赋值运算的高
7>=3+4 //1
int r=a>0
判断是否相等的==和!=优先级比其他低,而连续的关系运算是从左到右进行的
5>3==6>4
5>3>2
a==b==6
a==b>0
找零计算器
找零计算器需要用户做两个操作:输入购买的金额,输入支付的票面,而找零计算器则根据用户的输入做出相应的动作:计算并打印找零,或告知用户余额不足以购买
从计算机程序的角度看,这就是意味着程序需要读用户的两个输入,然后进行一些计算和判断,最后输出结果。
#include <stdio.h>
int main()
{
int price=0;
int bill=0;
printf("请输入金额:");
scanf("%d",&price);
printf("请输入票面:");
scanf("%d",&bill);
printf("应该找您:%d\n",bill-price);
return 0;
}
这是一开始的
如果我们输入的票面比金额小他会输出负数,这显然是不行的。
所以我们可以加上判断语句
#include <stdio.h>
int main()
{
int price=0;
int bill=0;
printf("请输入金额:");
scanf("%d",&price);
printf("请输入票面:");
scanf("%d",&bill);
if(price<bill){
printf("应该找您:%d\n",bill-price);
}else{
printf("钱少了");
}
return 0;
}
注释
单行注释:以两个斜杠“//”开头的语句
//是C99的注释,ANSIC不支持
多行注释
/**/
以/*开始*/结束
循环嵌套
比较4 5 6 这三个数
#include <stdio.h>
int main()
{
int a=4;
int b=5;
int c=6;
int max=0;
if(a>b){
max=a;
if (max<c){
max=c;
}}
else{
max=b;
if(max<c){
max=c;
}
}
printf("最大值%d\n",max);
return 0;
}
else的匹配
else总是和最近的那个if匹配
if-else级联
分段函数
f(x)=-1;x<0
0;x=0
2x;x>0
if(x<0){
f=-1;
}else if(x==0){
f=0;
}else{
f=2*x;
}
结构:
if(exp1)
st1;
if(exp2)
st2;
if(exp3)
st3;
Switch-case
if实现的功能
#include <stdio.h>
int main()
{
int a;
printf("请输入:");
scanf("%d",&a);
if(a==1)
printf("你好");
else if(a==2)
printf("早上好");
else if(a==3)
printf("晚上好");
else if(a==4)
printf("再见");
else
printf("啊,什么啊");
return 0;
}
这样程序再运行时,是从第一个if开始找的。
#include <stdio.h>
int main()
{
int a;
printf("请输入:");
scanf("%d",&a);
switch(a){
case 1:
printf("你好");
break;
case 2:
printf("早上好");
break;
case 3:
printf("晚上好");
break;
case 4:
printf("再见");
break;
default:
printf("啊,什么啊?");
}
return 0;
}
这样可以直接找到对应的a。
结构
switch(控制表达式){
case 常量:
语句
……
case 常量:
语句
……
default:
语句
……
}
注意:控制表达式只能是整数类型的结果
常量可以是常数,也可以是常数计算的表达式
break
switch语句可以看作是一种基于计算的跳转,计算控制表达式的值后,程序会跳转到相匹配的case处。分支标号只是说明switch内部位置的路标,再执行完分支中的最后一条语句后,如果后面没有break,就会顺序执行到下面的case里去,知道遇到一个break,或者switch结束为止。
#include <stdio.h>
int main()
{
int a;
printf("请输入:");
scanf("%d",&a);
switch(a){
case 1:
case 2:
printf("早上好");
case 3:
printf("晚上好");
break;
case 4:
printf("再见");
break;
default:
printf("啊,什么啊?");
}
return 0;
}
循环
数数几位数
程序要读入一个4位以下(含4位)的正整数,然后输出这个整数的位数。如:
输入:352,输出:3
程序实现
#include <stdio.h>
int main()
{
int x;
int n=0;
printf("请输入:");
scanf("%d",&x);
if(x>999){
n=4;
}else if(x>99){
n=3;
}else if(x>9){
n=2;
}
printf("%d\n",n);
return 0;
}
如果这个数无限大,那么就没法通过这样了。
#include <stdio.h>
int main()
{
int x;
int n=0;
printf("请输入:");
scanf("%d",&x);
n++;
x/=10;
while(x>0){
n++;
x/=10;
}
printf("%d\n",n);
return 0;
}
如果循环体内没有改变条件,那么程序可能会一直循环下去。
循环之前判断是否继续循环,所以有可能循环一次也没有被执行;
do-while
在进入循环的时候不做检查,而是在执行完一轮循环体的代码之后,再来检查循环的条件是否满足,如果满足则继续下一轮循环,不满足则结束循环
do
{
<循环体语句>
}while(<循环条件>);
while和do-while的区别是 while在循环之前判断,do-while在循环之后判断。
#include <stdio.h>
int main()
{
int x;
int n=0;
printf("请输入:");
scanf("%d",&x);
do{
n++;
x/=10;
}while(x>0);
printf("%d\n",n);
return 0;
}
猜数
计算机想一个数,让用户来猜,用户每输入一个数,就告诉它是大了还是小了,知道用户猜中为止,最后还要告诉用户它猜了多少次。
#include <stdio.h>
int main()
{
srand(time(0));
int number=rand()%100+1;
int count=0;
int a=0;
printf("我已经想好了一个1到100之间数");
do{
printf("猜一猜吧:");
scanf("%d",&a);
count++;
if(a>number){
printf("数大了");
} else if (a<number){
printf("数小了");
}
}
while(a!=number);
printf("你用了%d次猜到了答案",count);
return 0;
}
随机数
每次召唤rand()就得到一个随机的整数
整数分解逆序
一个整数是由1至多位数字组成的,如何分解出整数的各个位上的数字,然后加以计算
对一个整数做%10的操作者,就得到它的个位数;
对一个整数做/10的操作,就去交流它的个位数
然后再对2的结果做%10,就得到原来的十位数了
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
int dight;
int ret=0;
while(x!=0){
dight=x%10;
printf("%d",dight);
ret=ret*10+dight;
x/=10;
}
return 0;
}
for循环
阶乘
n!=1*2*3*4*5*……n
写一个程序,让用户输入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;
}
循环次数
for(i=0;i<n;i++)
循环次数是n
break&continue
break:跳出循环
continue:跳出循环这一轮剩下的语句进入下一轮