C语言学习笔记

控制语句

程序是以主函数为入口,顺序执行的

if

基本结构:
if(表达式)
{
    代码块;
}
    语句;
​
​
​
作用:如果表达式里面的内容成立,则执行代码块的内容;若不成立,则跳过代码块的内容,顺序执行下面的语句块
如果if里面代码块只有一句,则可以省略{}不写
#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int a = 0;
    int b = 0;
    scanf("%d%d", &a, &b);
    if( a > b)
    {
        printf("a > b\n");
    }
    printf("-----------\n");
    return 0;
} 
​
结果:
3 2
a > b
-----------
​
2 3
-----------
​

如果想判断两个数的大小关系,则一个if就不够用了,此时需要用到if-else结构

if-else

if(表达式)
{
    代码块1;
}
else
{
    代码块2;
}
​
原理:
如果if后面的表达式成立,则执行代码块1,跳过代码块2
如果if后面的表达式不成立,则跳过代码块1,执行代码块2
#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int a = 0;
    int b = 0;
    scanf("%d%d", &a, &b);
    if( a > b)
    {
        printf("a > b\n");
    }
    else
    {
        printf("a <= b\n");
    }
    return 0;
} 
​
结果:
2 3
a <= b
 
2 2
a <= b
​
2 1
a > b
​

if-else if-else

if(表达式1)
{
    代码块1
}
else if(表达式2)
{
    代码块2
}
....
else
{
    代码块n
}
​
原理:
如果if里面的表达式1成立,则执行代码块1,跳过其余部分
如果if里面的表达式1不成立,则去寻找else if里面哪一个表达式是成立的,若else if里面某个表达式成立,则执行其对应的代码块,其余代码块不执行
如果if里面的表达式1不成立,且else if中也没有成立的表达式,则执行else里面的代码块,其它的代码块不执行
#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int a = 0;
    int b = 0;
    scanf("%d%d", &a, &b);
    if( a > b)
    {
        printf("a > b\n");
    }
    else if( a == b)
    {
        printf("a = b\n");
    }
    else
    {
        printf("a < b\n");
    }
    return 0;
} 
​
结果:
2 3
a < b
 
2 2
a = b
​
2 1
a > b

练习:

从键盘上输入三个整形数,打印其中的最大值

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int a = 0;
    int b = 0;
    int c = 0;
    scanf("%d%d%d", &a, &b, &c);
    if( a >= b && a >= c)
    {
        printf("max:%d\n", a);
    }
    else if( b >=a && b >= c)
    {
        printf("max:%d\n", b);
    }
    else
    {
        printf("max:%d\n", c);
    }
    return 0;
} 

if控制的嵌套

if(表达式)
{
    if(表达式)
    {
        
    }
​
}
#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int a = 0;
    int b = 0;
    scanf("%d%d", &a, &b);
    if( a < b)
    {
        if( a < 2)
        {
            putchar('!');
            putchar('\n');
        }
    }
    return 0;
} 
​

练习:

输入一个年份,判断它是不是闰年(能被400整除 或者 能被4整除但不能被100整除)

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int a = 0;
    scanf("%d", &a);
    /*
    if( 0 == a % 400)
    {
        printf("%d为闰年\n", a);
    }
    else if( 0 == a % 4)
    {
        if( 0 != a % 100)
        {
        printf("%d为闰年\n", a);
        }
        else
        {
        printf("%d为平年\n", a);
        }
    }
    else
    {
        printf("%d为平年\n", a);
    }
    */
    
    if( (0 == a % 400)  || ((0 == a % 4) && (0 != a % 100)))
    {    
        printf("%d为闰年\n", a);
    }
    else
    {
        printf("%d为平年\n", a); 
    }
    return 0;
} 
​

输入一个字符,

如果是一个1-9的数字,则输出它的十六进制;

如果是一个小写字母,它如果是前13个则转换为大写字母,其它的不变(a A; z z);

如果是一个大写字母,它如果是后13个则转换为小写字母,其它的不变;如果是其它字符,则输出error!;

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    char a = getchar();
    if( a >= '1' && a <= '9')
    {
        printf("%#X\n", a);
    }
    else if( a >= 'a' && a <= 'z')
    {
        if( a >= 'a' && a <= 'm')
        {
            printf("%c\n", a-32);
        }
        else
        {
            printf("%c\n", a);
        }
    }
    else if( a >= 'A' && a <= 'Z')
    {
        if( a >= 'N' && a <= 'Z')
        {
            printf("%c\n", a+32);
        }
        else
        {
            printf("%c\n", a);
        }
    }
    else
    {
        printf("error!\n");
    }
    return 0;
} 
​

switch

基本结构:
​
switch(变量/表达式)
{
    case 常量1:要执行的语句;break;
    case 常量2:要执行的语句; break;
    ......
    
    default:要执行的语句;
}
​
变量和case后面的常量相比较,如果相等,则执行后面的语句,然后通过break跳出该结构
​
计算器:

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int a = 0;
    int b = 0;
    char c = 0;
    scanf("%d%c%d", &a, &c, &b);
    switch(c)
    {
        case '+':printf("%d + %d = %d\n", a, b, a+b);break;
        case '-':printf("%d - %d = %d\n", a, b, a-b);break;
        case '*':printf("%d ✖ %d = %d\n", a, b, a*b);break;
        case '/':if( 0 == b)
                 { 
                     printf("error!除数不能为0\n");
                 }
                 else
                 {
                     printf("%d ➗ %d = %d\n", a, b, a/b);
                 }
                 break;
        case '%':printf("%d %% %d = %d\n", a, b, a%b);break;
        default:printf("error!\n");
    }
    return 0;
} 

练习:

输入一个0-100的成绩,判断其成绩等级

90-100 A

80-89 B

70-79 C

60-69 D

0-59 E

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int a = 0;
    scanf("%d", &a);
    switch(a/10)
    {
        case 10:if( a == 100)
                {
                    printf("A\n");
                }
                else
                {
                    printf("error\n");
                }
                break;
        case 9: printf("A\n");break;
        case 8: printf("B\n");break;
        case 7: printf("C\n");break;
        case 6: printf("D\n");break;
        case 5:
        case 4:
        case 3:
        case 2:
        case 1:
        case 0:printf("E\n");break;
        default:printf("error\n");
    }
    return 0;
} 

while

while(表达式)
{
    代码块;
}
​
作用:如果表达式满足,则执行代码块;执行完毕之后,返回表达式继续判断;直到表达式不满足,则退出循环
​
while(-1)
{
​
}
这是一个死循环
​
当表达式不满足或者表达式为0时,不执行循环;在c语言中,非0为真,即while(-1)也是一个死循环
​
ctrl + c
结束程序
​
while常用于知道循环结束的条件时使用

水仙花数

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int a = 100;
    int b = 0;
    int c = 0;
    int d = 0;
    while( a <= 999)
    {
        b = a / 100;
        c = a % 100 / 10;
        d = a % 10;
        if( b*b*b + c*c*c + d*d*d == a)
        {
            printf("%5d", a);
        }
        a++;
    }
    putchar('\n');
    return 0;
} 

数字炸弹

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    srand((unsigned)time(NULL));
    int a = rand()%101;
    while(1)
    {
        int num = 0;
        scanf("%d", &num);
        if( num > a)
        {
            printf("big\n");
        }
        else if( num < a)
        {
            printf("small\n");
        }
        else
        {
            printf("boom!\n");
            break;
        }
    }
    return 0;
} 

rand()

随机数函数,生成随机数种子,使用前加上

srand((unsigned)time(NULL));

使随机数会随时间变化

do while

基本结构:
do{
    代码块
}while(表达式);

练习:从键盘输入一个数,求这个数的阶乘

#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int a = 0;
    int b = 1;
    scanf("%d", &a);
    do{
        b = b * a;
        a--;
    }while(a != 0);
​
    printf("b:%d\n", b);
    return 0;
}

for

基本结构:
for(表达式1;表达式2;表达式3)
{
    代码块
}
​
进入for循环,先执行表达式1,然后判断表达式2是否满足,若满足,则执行代码块,然后执行表达式3;
再去判断表达式2,若满足则执行代码块,然后执行表达式3,循环往复,直到表达式2不满足
​
for循环常常用于确定循环次数的循环
#include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int i = 0;
    for( i = 0; i < 10; i++)
    {
        printf("i:%-3d", i);
    }
    putchar('\n');
    return 0;
} 
​
for(;;):死循环

for循环的嵌套

include <stdio.h>
​
int main(int argc, char *argv[])
{ 
    int i = 0;
    int j = 0;
    for( i = 0; i < 10; i++)
    {
        for( j = 0; j < 10; j++)
        {
            for( int k = 0; k < 10 ; k++)
                putchar('a');    
        }
    }
    return 0;
} 
​
外层共循环10次;
中层共循环10*10次;
内层共循环10*10*10;

break:

用于循环语句中,跳出循环

continue:

跳过本次循环,继续执行下一次循环

goto:

跳转指令(不建议使用,打破了顺序结构)

int main(int argc, char *argv[])
{ 
    goto flag;
    printf("***\n");
flag:
    printf("---\n");
    return 0;
} 
​
结果:
---

return:

退出函数,并设置函数的返回值(函数部分细讲)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值