C语言判断与循环

如果

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员希西子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值