一、做判断——if语句
以计算时间差的程序为例:
#include <stdio.h>
int main(vido)
{
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、关系运算
- 计算两值之间的关系,所以叫做关系运算
运算符 意义 == 相等 != 不相等 > 大于 >= 大于或等于 < 小于 <= 小于或等于 -
相等是两个=,一个=是赋值。
2、关系运算的结果
当两个值的运算符合关系运算符的预期时,关系运算的结果为整数1,否则为整数0
3、优先级
低于算术运算,高于赋值运算。
注:==和!=的优先级比其他的低,而连续的关系运算是从左到右进行的;
如:5>3==6>4,即5>3是否等于6>4,这两个关系运算结果是否相等。
(三)找零计算器
输入购买的金额,输入支付的票面,计算找零结果或告知余额不足。
#include <stdio.h>
int main(void)
{
int price=0;
int bill=0;;
printf("请输入金额");
scanf("%d",&price);
printf("请输入票面:");
scanf("%d",&bill);
printf("应该找您:%d\n",bill-price);
return 0;
}
但是以上代码无法判断票面够不够,所以有以下代码(加上if语句进行判断)
#include <stdio.h>
int main(void)
{
int price=0;
int bill=0;;
printf("请输入金额");
scanf("%d",&price);
printf("请输入票面:");
scanf("%d",&bill);
if(bill>=price)
{
printf("应该找您:%d\n",bill-price);
}
else
{
printf("抱歉,您的金钱不够。");
}
return 0;
}
(四)注释
-
//内容
(这是单行注释,c99独有)
-
/*内容*/
(这是多行注释,也可用于一行内注释,/*开始,*/结束)
(五)比较两数大小
以下有两种方式:
#include <stdio.h>
int main(void)
{
int a,b;
printf("请输入两个整数:");
scanf("%d %d",&a,&b);
int max=0;
if(a>b)
{
max=a;
}
else
{
max=b;
}
printf("大的那个是%d\n",max);
return 0;
}
#include <stdio.h>
int main(void)
{
int a,b;
printf("请输入两个整数:");
scanf("%d %d",&a,&b);
int max=b;
if(a>b)
{
max=a;
}
printf("大的那个是%d\n",max);
return 0;
}
(六)计算薪水
假设每小时薪水是8.25,一周标准工作时间40小时,加班工资为1.5倍。
#include <stdio.h>
int main(void)
{
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;
}
(七)判断成绩
100分的试卷,60分及格为例:
#include <stdio.h>
int main(void)
{
const int PASS=60;
int score;
printf("请输入成绩:");
scanf("%d",&score);
printf("你输入成绩是%d.\n",score);
if(score<PASS)
printf("很遗憾,这个成绩没有及格。");
else
printf("祝贺你,这个成绩及格了。");
printf("再见\n");
return 0;
}
二、循环
(一)while和do-while循环
判断一个正整数是几位数:
1.while循环——先判断再循环:
#include <stdio.h>
int main(void)
{
int x=0;
int n=0;
scanf("%d",&x);
while(n>0)
{
n++;
x/=10;
}
printf("%d\n",n);
return 0;
}
2.do-while循环——先循环再判断:
#include <stdio.h>
int main(void)
{
int x=0;
int n=0;
scanf("%d",&x);
do
{
n++;
x/=10;
} while(n>0);
printf("%d\n",n);
return 0;
}
注:do-while循环结尾while();后的“;”
(二)for循环
- for(初始动作;条件;每轮的动作){
}
- for循环等价于while循环,for中的每个表达式都可以省略;
for(;条件;)==while(条件)
1.阶乘
n!=1*2*3*……*n
#include <stdio.h>
int main(void)
{
int n;
int fact=1;
int i=1;
scanf("%d",&n);
while(i<=n)
{
fact*=i;
i++;
}
printf("%d!=%d\n",n,fact);
return 0;
}
变为for循环:
#include <stdio.h>
int main(void)
{
int n;
int fact=1;
int i=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
fact*=i;
}
printf("%d!=%d\n",n,fact);
return 0;
}
2.for循环
- for循环像一个计数循环:设定一个计数器,初始化它,然后在计数器到达某值之前,重复执行循环体,而每执行一轮循环,计数器值以一定步进进行调整,比如加一减一甚至乘二:
for(i=0;i<5;i=i+1)
{
printf("%d",i);
}
- for可以理解为对于,如for(count=10;count>0;count--)
读成“对于一开始的count=10,当count>0时,重复做循环体,每一轮循环在做完循环体内语 句后,使得count--。”
- 循环控制变量i只在循环里被使用,在循环外面它没有任何用处。因此,我们可以把变量i的定义写到for语句里面去(但只能C99)。
注:求和程序,记录结果的变量应该初始化为0,而求积时,记录结果变量应该初始化为1.
3.try
将1*2*……*n转为n*n-1*……*1.
#include <stdio.h>
int main(void)
{
int n;
int fact=1;
int i=1;
scanf("%d",&n);
for(i=n;i>1;i--)
{
fact*=i;
}
printf("%d!=%d\n",n,fact);
return 0;
}
或
#include <stdio.h>
int main(void)
{
int n;
int fact=1;
int i=n;
scanf("%d",&n);
for(n=n;n>1;i--)
{
fact*=n;
}
printf("%d!=%d\n",i,fact);
return 0;
}
4.循环次数
for(i=0;i<n;i++)
循环次数是n,i的值是n,循环的控制变量i,是选择从0开始还是从1开始,是判断i<n还是判断i<=n,对循环的次数,循环结束后变量的值都有影响。例:
#include <stdio.h>
int main(void)
{
int i;
for(i=0;i<5;i++)
{
printf("i=%d",i);
}
printf("\n最后i=%d\n",i);
return 0;
}
(三)Tips
- 有固定次数,用for;
- 必须执行一次,用do-while;
- 其他情况用while。