第三周:判断与循环

一、做判断——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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值