首页 > 其他分享 >C语言6 DAY

C语言6 DAY

时间:2024-07-31 09:27:31浏览次数:9  
标签:case 语句 int C语言 printf else DAY 表达式

分支结构

分支结构:又被称为选择结构。

概念

选择结构:根据条件成立与否,选择相应的操作。

条件构建

  • 关系表达式:含有关系运算符的表达式(>,<,>=,<=,!=,==)

  • 逻辑表达式:含有其逻辑运算符的表达式(&&,||,!),往往是用来构建复杂的符合条件,比如:

if(year%100==0&&year%4!=0)//既有关系表达式又含有逻辑表达式的条件叫做复合条件
  • 常量/变量:值是否非0,取值(0|1) 注意:类似以下写法,是无效的,没有意义的。

if(x+y) // 编译通过,但是没有实际意义,不建议这样写
if(5*6)

选择结构的形式

单分支

语法:

if(条件表达式)
{
    语句1;
}

说明: 条件表达式 成立,执行 语句1 ,否则跳过该分支结构。单分支条件不满足可以不执行。

例子:

int a = 5;
if(a < 0)
{
    a = -a;
}
printf("a=%d\n",a)

例子:

/**
* 需求:从键盘输入一个字符,如果输入的是英文大写字母,则将它转换成小写字母后输出,否则输出原来输入的字符
*/
#include <stdio.h>
int main()
{
    // 声明一个变量,存放从键盘录入的字符
    char c;
    printf("请输入一个英文字母:\n");
    scanf("%c",&c);
    // 判断
    if(c >= 'A' && c <= 'Z')
    {
        // c = c + 32;
        c += 32;
    }
    printf("输入的字符是:%c\n",c);
    return 0;
}

双分支

语法:

if(条件表达式)
{
    语句1;
}
else
{
    语句2;
}

说明: 条件表达式 成立,执行 语句1 ,否则执行 语句2 。双分支不管条件是否满足,都要执行。

例子:

#include <stdio.h>
int main(void)
{
    // 申明三个变量来存放计算数
    double x,a,y;
    // 通过键盘录入x,a
    printf("请输入两个数值:\n");
    scanf("%lf,%lf",&x,&a);
    // 检验除数
    if(x != 0 && a != 0)
    {
        y = 1.0/x + 1.0/a;
    }
    else
    {
        y = 10000;
    }
    // 输出
    printf("y=%f\n",y);
    return 0;
}

三目运算符

语法:

1 表达式1 ? 表达式2 : 表达式3;

说明: ?: 条件运算符,主要可以简化双分支为同一变量赋值的操作。

求值过程:先计算 表达式1 的值,非0,则将 表达式2 的结果作为条件运算符的最终结果;否则将 表达

式3 的结果作为 条件运算符 的 最终结果 。

案例:

#include <stdio.h>
int main()
{
    // 需求:求a,b两个数中最大数
    // 写法1:正常写法
    int a = 5,b = 3;
    if(a > b)
    {
        printf("最大数是:%d\n",a);
    }
    else
    {
        printf("最大数是:%d\n",b);
    }
    // 写法2:省略{}
    int a1 = 5,b1 = 3;
    if(a1 > b1)
    printf("最大数是:%d\n",a1);
    else
    printf("最大数是:%d\n",b1);
    // 写法3:三目运算符
    int a2 = 5,b2 = 3;
    int ret = a2 > b2 ? a2 : b2;
    printf("最大数是:%d\n",ret);
    return 0;
}

案例:

#include <stdio.h>
int main()
{
    // 需求:输入两个实数,按代数值由 小到大的顺序输出这两个实数。
    // 申明变量,存储操作数
    int a,b;
    printf("请输入两个数值作为操作数:\n");
    scanf("%d,%d",&a,&b);
    // 校验
    // 方式1
    if(a > b)
    {
        printf("由小到大的顺序是:%d,%d\n",b,a);
    }
    else
    {
        printf("由小到达的顺序是:%d,%d\n",a,b);
    }
    // 方式2
    // 创建一个临时变量,用来存放交换信息
    int t = 0;
    if(a > b)
    {
        t = a;
        a = b;
        b = t;
    }
    printf("由小到大的顺序是:%d,%d\n",a,b);
}

案例:

#include <stdio.h>
int main()
{
    // 需求:输入3个数a,b,c,要求按由小到大的顺序输出这3个数
    // 申明变量,用来存放操作数
    int a,b,c,tmp;
    printf("请输入三个整数:\n");
    scanf("a=%d,b=%d,c=%d",&a,&b,&c);
    // 条件判断
    if(a > b)
    {
        tmp = a;
        a = b;
        b = tmp;
    }
    if(a > c)
    {
        tmp = a;
        a = c;
        c = tmp;
    }
    if(b > c)
    {
        tmp = b;
        b = c;
        c = tmp;
    }
    printf("a,b,c三个数按照由小到大的顺序是:%d,%d,%d\n",a,b,c);
    return 0;
}

多分支

语法:

if(条件1)
{
语句1;
} else if(条件2)
{
语句2;
}
...
else {
语句n+1;
}

案例:

#include <stdio.h>
int main()
{
    // 需求:编一程序,要求输入一个x值,输出y值
    // 方式1:嵌套的if..
    int x,y;
    printf("请输入一个整数:\n");
    scanf("%d",&x);
    // 条件判断
    if(x < 0)
    {
        y = -1;
    }
    else
    {
        // x >= 0
        if(x == 0)
        {
            y = 0;
        }
        else
        {
            y = 1;
        }
    }
    printf("方式1:x=%d,y=%d\n",x,y);
    // 方式2:多分支if..else if....else..
    // 条件判断
    if(x < 0)
    {
        y = -1;
    }
    else if(x == 0)
    {
        y = 0;
    }
    else
    {
        y = 1;
    }
    printf("方式2:x=%d,y=%d\n",x,y);
}

案例:

#include <stdio.h>
/**
* 需求:高校要求粤嵌对实训学生根据实训成绩进行评级
范围:0 <= score <= 100;
评级:
score >= 90 优秀
score >= 80 良好
score >= 70 中等
score >= 60 及格
score < 60 不及格
*/
int main()
{
    // 声明一个变量,存储成绩
    int score;
    printf("请录入学生成绩:\n");
    scanf("%d",&score);
    // 对score进行合法校验
    if(score >= 0 && score <= 100)
    {
        // 对合法输入的成绩进行评级
        if(score >= 90)
        {
            printf("优秀\n");
        }
        else if(score >= 80)
        {
            printf("良好\n");
        }
        else if(score >= 70)
        {
            printf("中等\n");
        }
        else if(score >= 60)
        {
            printf("及格\n");
        }
        else
        {
            printf("不及格\n");
        }
    }
    else
    {
    printf("成绩录入不合法!\n");
    }
}

switch

语法:

switch(表达式) // 不能是布尔型和 浮点型
{
    case 常量表达式1:
        语句体1;
        break;
    case 常量表达式2:
        语句体2;
        break;
    ...
    case 常量表达式n:
        语句体n;
        break;
    default:
        语句体n+1;
        break;// 可以省略
}

说明:

  1. switch后括号内的表达式可以是任何类型的表达式;

  2. 若表达式的值与某个常量表达式的值相等时,执行此case后面的语句;若没有相等的值时,执行default后面的语句;

  3. 每个case后面的常量表达式的值都必须不相同,否则出现矛盾;

  4. 各个case 和default出现的次序不影响执行结果;

  5. case后面的语句中如果没有break语句,则执行完本case后的语句会接着执行下面的case(case穿透) ;

  6. 多个case可共用一组语句。

注意:

  1. 表达式一般写一个变量,变量的值是一个确定的常量。

  1. 当遇到break或者switch语句的右大括号时,switch语句结束。

  1. 表达式中的数据类型:char,short,int,long,long long,不能是浮点型。表达式和常量的数据类型要一致(支持隐式转换),比较是否相同。

案例:

/*
需求:根据成绩进行评级
score <= 100;
评级:
90 <= score < 100 优秀 90~99/10 == 9 && 100/10 ==10
80 <= score < 90 良好 80~89/10 == 8
70 <= score < 80 中等 70~79/10 == 7
60 <= score < 70 及格 60~69/10 == 6
score < 60 不及格
*/
#include <stdio.h>
int main()
{
    int score;// 成绩
    printf("请输入实训成绩:\n");
    scanf("%d",&score);
    if(score >= 0 && score <= 100)
    {
        // 对成绩进行加工
        int l = score / 10;
        switch(l)
        {
            case 10:// 100分
            case 9:// 90~99分
            printf("优秀\n"); // 这里:多个case共用一块代码
            break;
            case 8:
            printf("良好\n");
            break;
            case 7:
            printf("中等\n");
            break;
            case 6:
            printf("及格\n");
            break;
            default:
            printf("不及格\n");
        }
    }
    else
    {
        printf("成绩录入不合法!\n");
    }
}

案例:

/*
需求:实现一个简易计算器,要求实现+,-,×,/运算
*/
#include <stdio.h>
int main()
{
    printf("简易计算器 v1.0\n");
    printf("请输入两个操作数:\n");
    double x,y;// 存放计算数
    char ch;// 运算符
    scanf("%lf,%lf",&x,&y);
    scanf("%c",&ch);// 消除上面产生的最后一个回车符
    printf("请输入运算符:(+、-、.*、/)\n");
    scanf("%c",&ch);
    // 计算
    switch(ch)
    {
        case '+':
        printf("%.2lf+%.2lf=%.2lf\n",x,y,x+y);
        break;
        case '-':
        printf("%.2lf-%.2lf=%.2lf\n",x,y,x-y);
        break;
        case '.':
        case '*':
        printf("%.2lf*%.2lf=%.2lf\n",x,y,x*y);
        break;
        case '/':
        if(y == 0)
        {
            printf("除数不能为0\n");
        }
    else
        {
            printf("%.2lf/%.2lf=%.2lf\n",x,y,x/y);
        }
        break;
    default:
        printf("输入错误!");
    }
    return 0;
}

switch语句的case穿透:

  1. case穿透:当case后的break被省略;就会直接执行它后面紧跟的case中的语句(不会判断表达式是否和它后面的case常量是否相同),这样的现象称之为case穿透。

  1. default语句一般放在所有case之后,表明所有的case都不成立时,执行default中的语句;default语句可以放在switch语句{}内的任意位置。

总结

  • 如果只需要一个判断结果,使用 单分支

  • 如果需要两个判断结果,且只能有两个判断结果,使用 双分支

  • 如果需要判断N个结果中的某几个,或者所有,使用 多分支

扩展

条件表达式中的运算符优先级

逻辑非(!) > 算数运算符 (+-*/%)>关系运算符(> < >= <= != == )> 逻辑运算符(&&、||)> 赋

值运算符(=、+=)

设置vimtab字符数

set tabstop=4
set shiftwidth=4
set expandtab

标签:case,语句,int,C语言,printf,else,DAY,表达式
From: https://blog.csdn.net/2303_76763383/article/details/140780110

相关文章

  • 代码随想录 day40 打家劫舍 及其变体
    打家劫舍打家劫舍解题思路动态规划解决问题,通过前两个值决定第三个值,需要注意的是初始值的选择,第二个的值是取前两个数中较大的,这样是为了保证跳过不需要取的值知识点动态规划心得初始值的选择没有考虑到,其余的都写出来了打家劫舍二打家劫舍二解题思路前一题的改进,只......
  • 代码随想录算法训练营Day0| LeetCode704: 二分查找
    LeetCode704二分查找先看了一下数组理论基础:数组基础题目链接:704.二分查找啥也没看,凭感觉直接上手:classSolution(object): defsearch(self,nums,target): fornuminnums: ifnum==target: returnnums.index(num) break return-1通过倒是......
  • 嵌入式学习第12天——C语言循环结构
    循环结构什么是循环代码的重复执行,就叫做循环。循环的分类无限循环:程序设计中尽量避免无限循环(程序中的无限循环必须可控)。有限循环:循环限定循环次数或者循环的条件。循环的构成循环体循环条件当型循环的实现while语法: while(循环条件) { 循环语句;......
  • C语言——数组和排序
    C语言——数组和排序数组数组的概念数组的初始化数组的特点排序选择排序冒泡排序插入排序二分查找数组数组的概念数组是一组数据;数组是一组相同类型的数据或变量的集合;应用场景:用于批量的处理多个数据;语法:类型说明符数组名[常量表达式]类型说明符也就......
  • C语言程序设计(初识C语言前部分)
    新晋大学生计算机专业中的小小准程序员学习小笔记一,什么是C语言C语言是一门通用计算机编程语言,广泛用于底层开发,通俗的说就是人与计算机交流的计算机语言之一。底层开发就是指上图的下层(底层)部分。美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSIC,作为C语......
  • 数组及数组JVM内存划分day4
    java中第一个存储数据的容器:数组特点:1、数组的长度大小是固定的2、同一个数组中,存储的元素数据类型是一样的数组的定义语句格式:数据类型[]数组名;举例:int[]arr;//定义了一个可以存储int类型的一维数组,数组名叫做arr......
  • C语言理解——static、extern等
    目录1、static修饰局部变量2、static修饰全局变量3、static修饰函数4、extern修饰变量或函数5、register修饰变量6、const修饰变量7、typedef起别名8、#define文本替换1、static修饰局部变量普通的局部变量创建后是放在栈区中,这种局部变量进入作用......
  • 嵌入式day14
    数组的遍历(指针)迭代器([begin,end]):通过前一个元素找到了下一个元素(++),基于数组的有序性递归调用逆序:迭代器选择排序:迭代器冒泡排序:迭代器插入排序:快排(qsort):先设置基准数(begin),从右往左找,第一个比基准数小的数,从左往右找,第一个比基准数大的数,互换两个数,重复刚才的操作,......
  • 嵌入式day13
    指针地址和指针的概念指针是用来装地址的数据类型,其是一个变量变量的地址和指向变量的指针变量一般形式:指针变量名符合标识符定义的一般规则int*p:*为类型标识符指针变量p指向i   整型是用来装整数的数据类型;   指针是用来装地址的数据类型希望......
  • c语言笔记(2024.7.24)第三天
    常量与变量概念:·表面:程序运行过程中取值可以改变的数据·实际:变量其实代表了一块内存区域/单元/空间。变量名可视为该区域的标识。整个变量分为三部分:·变量名:这个只是变量的一个标识,我们借助变量名来存取数据。·变量空间/存储单元:这个就是内存中分配的一块用来存放......