电商专业学习嵌入式软件开发第二十八天

  • C第二天

今天讲的是三大结构中的分支,明天就要讲循环了,今天的内容理解起来没问题,就是做题时逻辑上的问题会绕不过来,包括老师之前讲过的题目今天再次做一样会出现写不出来的情况。老师给我们留的写简易计算器的作业就让我觉得不知道该把参数放在哪儿,不知道如何嵌套。

程序的三大结构:
1.顺序结构:程序从上往下,从左往右,顺序执行
2.分支结构:做出判断,选择要执行的分支语句
3.循环结构:反复执行一段代码

分支结构:做判断,执行判断正确的那一路
1.简单if语句

    if(条件)
    {
        语句块;
    }
    ...

注:先判断条件,如果条件成立(真的),则执行对应的语句块,否则,则执行{}之后的语句。

例:
#include <stdio.h>
void main()
{
    int a=1;
    if(a==2)
    {
        printf("yes\n");
    }
    printf("xxx\n");
}
/*
    注:一个等号“=”表赋值
        两个等号"=="表判断
        不要在if后面加";"
*/

2.2路分支结构

if(条件1)
{
    语句块1;
}
else
{
    语句块2;
}

注:如果条件1成立,则只执行语句块1;否则,只执行语句块2.

#include <stdio.h>
void main()
{
    int a=1;
    if(a==2)
    {
        printf("条件成立\n");
    }
    else
    {
        printf("条件不成立\n");
    }
    printf("xxx\n");
}
/*
    程序书写的格式:
    1.同一层次的语句左对齐,不同层次的语句,一个tab键的缩进。程序应该是锯齿状的,即层次分明。
    2.书写的普通代码通常都是小写字符,遇到特殊意义的字符要大写,如宏定义的字符。
    3.一个合格的程序应该是有适当的注释,便于阅读,但是注释不是文档,不要太多。
*/

3.多重if语句

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

例:

#include <stdio.h>
void main()
{
    int a=5;
    if(a==2)
    {
        printf("2\n");
    }
    else if(a==5)
    {
        printf("3\n");
    }
    else if(a==5)
    {
        printf("1\n");
    }
    else if(a==4)
    {
        printf("4\n");
    }
    else
    {
        printf("haha\n");
    }
}

注:程序自上往下一次执行,对条件依次做出判断,如果条件不成立,就继续判断下一个条件,直到遇到成立的条件,则执行相应的分支语句,之后的条件将不再判断与执行;如果所有的条件都不成立,则执行else对应的分支语句。

4.嵌套if语句

if(条件)
{
    if()
    {
        if()
        {
            if()
            {}
        }
    }
    else
    {
    
    }
}
else
{
    if()
    {
        if()
        {}
    }
}

注:if...else..中嵌套if...else..结构
例:

#include <stdio.h>
void main()
{
    int a=10;
    if(a>5)
    {
        if(a>7)
        {
            if(a>10)
            {
                printf("10\n");
            }
            else
            {
                printf("a=%d\n",a);
            }
        }
        else
        {
            if(a>6)
            {
                printf("6\n");
            }
        }
    }
    else
    {
        printf("xxx\n");
    }
}

注:分支结构格式书写自由,各种格式可以自由切换。
if后面可以没有大括号,但是只会顾及到后面的第一条指令.
else后面可以没有大括号,但是只会顾及到后面的第一条指令.
if...else..结构,如果if中有多条指令,则必须加上大括号,因为这个结构要求if后面的语句都必须是if分支的。

练习:输入一个数,判断是奇数还是偶数

#include <stdio.h>
void main()
{
    int data;
    printf("input a data:");
    scanf("%d",&data);
    if(data%2 == 0 )
        printf("是偶数\n");
    else
        printf("是奇数\n");
}    

练习:从键盘上输入3个数,输出最大值。

#include <stdio.h>
void main()
{
    int a,b,c,max;
    printf("please input 3 data:");
    scanf("%d %d %d",&a,&b,&c);
    if(a>b)
        max=a;
    else
        max=b;
    if(max<c)
        max=c;
    printf("max:%d\n",max);
}

逻辑运算符:与(&&) 或(||) 非(!)
与:条件1 && 条件2
两个条件同时成立,整个表达式才成立
0(假的,不成立)
非0(1,真的,成立)
例:

if(0)
{}
if(1)
{}
if(2)
{}
1 && 1 => 1 真的,成立
0 && 1 => 0 假的
1 && 0 => 0 假的
0 && 0 => 0 假的。

或:条件1 || 条件2
两个条件,只要有一个条件成立,整个表达式就成立
1 || 1 => 1
1 || 0 => 1
0 || 0 => 0
0 || 1 => 1

非: !条件
如果条件是假的,整个表达式就是真的
如果条件是真的,整个表达式就是假的

#include <stdio.h>
void main()
{
    int a;
    a=0 || 0;
    //a=1 && 1
    printf("%d\n",a);
}
//逻辑运算符是会有运算结果的,如果整个表达式是真的,那么返回1,如果整个表达式是假的,则会返回0.
//0表示假的,非0表示真的。

a+=b <=> a=a+b
练习:编写一个程序,根据输入的学生成绩给出相应的判定。大于等于90输出“优”,大于等于80小于90输出“良”,大于等于60小于80输出“中”,否则输出“差”。

#include <stdio.h>
void main()
{
    float score;
    printf("please input score:");
    scanf("%f",&score);
    if(score>=90)
        printf("优!\n");
    else if(score>=80)
        printf("良!\n");
    else if(score>=60)
        printf("中!\n");
    else
        printf("差!\n");
}

练习:接受用户输入的三种商品的价格,如果其中有商品价格大于50或者三种商品价格之和大于100,则用户享受15%的优惠,问用户应付多少钱

#include <stdio.h>
void main()
{
    float a,b,c;
    printf("请输入3种商品的价格:");
    scanf("%f %f %f",&a,&b,&c);
    if(a>50 || b>50 || c>50 || (a+b+c)>100)
        printf("用户应付:%.1f\n",(a+b+c)*0.85);
    else
        printf("用户应付:%.1f\n",a+b+c);
}

练习:输入一个年份,判断是否为闰年
闰年:能被4整除但不能被100整除,或者是能够被400整除

#include <stdio.h>
void main()
{
    int year;
    printf("请输入一个年份:");
    scanf("%d",&year);
    if(year%4==0 && year%100!=0 || year%400==0)
        printf("是闰年!\n");
    else
        printf("不是闰年!\n");
}

练习:输入一个5位数,判断它是不是回文数,
如:12321 wan=12321/10000=1
qian=12321%10000/1000=2
shi=12321%100/10=2
ge=12321%10

#include <stdio.h>
void main()
{
    int data,wan,qian,shi,ge;
    printf("请输入一个5位数:");
    scanf("%d",&data);
    wan=data/10000;
    qian=data%10000/1000;
    shi=data%100/10;
    ge=data%10;
    if(wan==ge && qian==shi)
        printf("是回文数!\n");
    else
        printf("不是回文数!\n");
}

练习:输入2个整数a,b,输出较大的那个数

#include <stdio.h>
void main()
{
    int a=1,b=2,max;
    if(a>b)
    {
        max=a;    
        printf("max is: %d\n",max);
    }
    else
    {
        max=b;
        printf("max is: %d\n",max);
    }    
}
=>
#include <stdio.h>
void main()
{
    int a=1,b=2,max;
    max=a>b ? a : b;
    //如果a>b成立,那么整个表达式的结果就是a,否则就是b
    //条件运算符(? :),c语言中唯一的一个三目运算符
    printf("max is: %d\n",max);
}

条件运算符的优先级高于赋值运算符
运算符的优先级:单算关逻三赋逗

switch...case..:多路分支语句(开关语句)
格式:

switch(表达式)
{
    case 常量1:
        语句块1;
        break;
    case 常量2:
        语句块2;
        break;
    ...    
    default:
        语句
}

原理:先计算表达式的值,然后从第一个case语句开始,用case后面的常量和表达式的值进行比较,相等,则执行相应的case分支语句,不行等,就继续用下面的case分支的常量与表达式的值比较。如果没有一路case分支的常量与表达式的值相等,则默认执行default对应的语句。break的作用是负责跳出switch结构,使程序流程转而执行switch结构后面的语句。

1.每一路case 后面接的常量都必须具有唯一性,
2.default语句可以不写,也可以放在任何地方,除了最后,都必须加上break;
3.case分支对应的break,可以不写,但是执行完这一路分支之后并不会跳出switch结构,而是会继续往下执行,直到遇到break才会跳出switch.
4.case分支语句中可以不加{},但是当在分支语句中定义变量的时候,要加上{},限定变量的作用域。
例:

#include <stdio.h>
void main()
{
    int a;
    printf("请输入一个整数:");
    scanf("%d",&a);
    switch(a)
    {
        default:
            printf("xxx!\n");
            break;
        case 1:
        {
            printf("1!\n");
            int b=10;
            printf("b=%d\n",b);
            break;
        }
        case 2:
        {
            printf("2!\n");
            int b=5;
            printf("b=%d\n",b);
            break;
        }
        case 3:
            printf("3!\n");
            break;
        case 4:
            printf("4!\n");
            break;
    }
    printf("out of switch!\n");
}

练习:用户输入一个字母,判断它是不是元音字母。(a,e,i,o,u,A,E,I,O,U).

#include <stdio.h>
void main()
{
    printf("输入一个字符:");
    char ch=getchar();
    switch(ch)
    {
        case 'A':
        case 'E':
        case 'I':
        case 'O':
        case 'U':
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            printf("是元音字母!\n");
            break;
        default:
            printf("不是元音字母!\n");
    }
}

老师给我们留了一道homework:
写一个简单的加,减,乘,除,四则运算的计算器程序。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容