第七章 C控制语句分支和跳转

if

语法: if ( expression )
   statement
如果expression为真则执行statement。否则跳过

if else语句
语法: if (expression)
   statement1
  else
   statement2
如果expression为真则执行statement1。否则执行statement2

else if 多重选择
if (expression1)
 statement1
else if (expression2)
 statement2
else
 statement3
如果expression1为真则执行,statement1.如果2为真则执行statement2否则执行statement3

逻辑运算符

image.png

含义
与:当两边都是真时才为真
或:当两边有一个是真,变为真
非:当都是假时,才是真
求值顺序:
从左往右。发现有使整个表达式为假的因素是,立即停止求值。
x++ < 10 && x+y < 20
&&相当于一个序列点,保证在对右侧表达式进行求值时,已经递增x

条件运算符

expression1 ? expression2 : expression3
expression1为真。则执行expression2 否则执行expression3

循环辅助: continue和break

continue:跳转剩余部分开始新循环
break:结束当前循环

多重选择: switch

image.png

goto语句

不推荐使用,但是可以用来跳出一组循环

while (fun > 0)
    {
        for (i = 0; i < count; i++)
        {
            for ( j = 0; j < count; j++)
            {
                其他语句
                if (问题)
                    goto help;
                其他语句
            }
            其他语句
        }
        其他语句
    }
    其他语句
    help: 语句

编写一个程序读取输入,读到#字符停止,然后报告读取的空个数、换行符数和所有其他字符的数量

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char ch;
    int space_ =0, cc = 0, space__ = 0;

    while ((ch = getchar()) != '#')
    {
        if (!isspace(ch))
            cc++;
        else if(ch == ' ')
        {
            space_++;
        }
        else
        {
            space__++;
        }
        
        
        
    }
    printf("其他字符:%d个\n", cc);
    printf("空格:%d个\n回车%d个", space_, space__);

}

编写一个程序读取输入,到#字符停止。程序要打印每个输入的字符以及对应的ASCII码。一行打印8个字符

#include <stdio.h>

int main(void)
{
 char ch;
 int count = 0;

 while ((ch = getchar()) != '#')
 {
     if (ch == '\n')
     {
         count =0;
         printf("\n");
         continue;
         
     }
     count++;
     printf(" %c %d", ch, ch);
     if (count == 8)
     {
         count = 0;
         printf("\n");
     }

 }

}

编写一个程序,读取整数直到用户输入0。结束输入后,程序应该报告用户输入的偶数(不包括0)个数、这些偶数的平均值、输入的奇书个数及其奇数的平均值

#include <stdio.h>

int main(void)
{
    int num;
    int count_1 = 0, count_2 = 0;
    float avg_1 = 0, avg_2 = 0;

    while ((scanf("%d", &num)) == 1 && num != 0)
    {
        if (num % 2 == 0)
        {
            count_2++;
            avg_2 += num;
        }
        else
        {
            count_1++;
            avg_1 += num;
        }
        
    }
    printf("偶数个数是:%d,平均数是:%.2f", count_2, avg_2/count_2);
    printf("奇数个数是:%d,平均数是:%.2f", count_1, avg_1/count_1);
    

    return 0;
}

使用if else 语句编写一个程序读取输入。读到#停止。用感叹号替换句号。用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。

#include <stdio.h>

int main(void)
{
    char ch;
    int num = 0;

    while ((ch = getchar()) != '#')
    {
         if (ch == '.')
         {
             putchar('!');
             num++;
         }
         else if(ch == '!')
         {
             putchar('!');
             putchar('!');
             num++;
         }
         else
         {
             putchar(ch);
         }
    }
    printf("\n转换了%d次", num);

    return 0;
}

编写程序读取输入,到#停止。报告ei出现的次数

#include <stdio.h>

int main(void)
{
    char ch;
    int flag = 0;
    int num = 0;

    while ((ch = getchar()) != '#')
    {
        if (ch == 'e')
        {
            flag = 1;
        }
        else if (flag == 1)
        {
            flag = 0;
            if (ch == 'i')
            {
                num++;    
            }
            
        }
        
        
    }
    printf("%d", num);

    return 0;
}

编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入。做如下假设;

image.png
#include <stdio.h>
#define MONEY_HOUR 10
#define AMT1 300
#define AMT2 150
#define OVERTIME 1.5
#define TIME 40
#define TAX15 0.15
#define TAX20 0.20
#define TAX25 0.25

int main(void)
{
    double gross;
    double taxs;
    double hour;
    double net;

    printf("请输入工作时间:");
    scanf("%lf", &hour);
    if (hour <= TIME)
    {
        gross = TIME * MONEY_HOUR;
    }
    else
    {
        gross = TIME * MONEY_HOUR + (hour - TIME) * MONEY_HOUR * OVERTIME;
    }
    if (gross <= AMT1)
    {
        taxs = gross * TAX15;
    }
    else if ( gross <= (AMT1+AMT2) )
    {
        taxs = AMT1 * TAX15 + TAX20 * (gross - AMT1);
    }
    else
    {
        taxs = AMT1 * TAX15 + TAX20 * AMT2 + (gross - AMT1 - AMT2) * TAX25;
    }
    net = gross - taxs;
    printf("gross:$%.2f; taxs:$%.2f; net: $%.2f\n", gross, taxs, net);
    return 0;
}

修改练习7的假设a,让程序可以给出一个供选择的工资等级单。

#include <stdio.h>
#define AMT1 300
#define AMT2 150
#define OVERTIME 1.5
#define TIME 40
#define TAX15 0.15
#define TAX20 0.20
#define TAX25 0.25
#define SIGN "***************************"
#define QUIT 5

int main(void)
{
    double taxes, gross, net, time, base;
    int code = 0;

    help:while (code != QUIT)
    {
        printf("%s",SIGN);
        printf("%s\n", SIGN);
        printf("1) $8.75/hr             2) $9.33/hr\n");
        printf("3) $10.00/hr            4) $11.20/hr\n");
        printf("5) quit\n");
        printf("%s%s\n",SIGN, SIGN);
        printf("请输入数字1~5:");
        scanf("%d", &code);
        switch (code)
        {
            case 1:
                base = 8.75;
                break;
            case 2:
                base = 9.33;
                break;
            case 3:
                base = 10.00;
                break;
            case 4:
                base = 11.20;
                break;
                default:
                    goto help;
        }
        printf("请输入工作时间:");
        scanf("%lf", &time);
        if (time <= TIME)
        {
            gross = time * base;
        }
        else
        {
            gross = TIME * base + (time - TIME) * base;
        }
        if (gross <= AMT1)
        {
            taxes = TAX15 * gross;
        }
        else if( gross <= AMT1 + AMT2)
        {
            taxes = TAX15 * AMT1 + (gross - AMT1) * TAX20;
        }
        else
        {
            taxes = TAX15 * AMT1 + TAX20 * AMT2 + (gross - AMT1 - AMT2) * TAX25;
        }
        
        net = gross - taxes;

        printf("gross: $%.2lf; taxes: $%.2lf; net:$%.2lf\n\n", gross, taxes, net);
        
        
    }
    
    
    return 0;
}

编写一个整数只接受正整数输入,然后显示所有小于或等于该数的素数;

#include <stdio.h>

void main(void)
{
    unsigned int num;
    int div, flag;
    printf("请输入正整数:");
    scanf("%d", &num);
    for ( ; num > 1; num--)
    {  
        for ( div = 2, flag = 1; (div * div) <= num; div++)
        {
            if (num % div == 0)
            {
                flag = 0;
            }
            
            
        }
        if (flag == 1)
        {
            printf("%u ", num);
        }
        
    }
    
}

1988年的美国联邦税收计划是近代最简单的税收方案。他分为4个类别。每个类别有两个等级。下面是该税后计划的摘要

image.png
image.png
#include <stdio.h>
#define ARTICHOKE 2.05
#define BEET 1.15
#define CARROT 1.09
#define DISCOUNT 0.05
#define POUNDS0_5 6.5
#define POUNDS5_20 14
#define POUNDS20 0.5
#define SIGN "************************"


void main(void)
{
    double A_pounds = 0.0, B_pounds = 0.0, C_pounds = 0.0;
    double pounds;
    char ch = 'x';
    double gross, discount = 0, trans, A, B, C, Algross;

    help: while (ch != 'q')
    {
        printf("%s%s\n", SIGN, SIGN);
        printf("a) ARTICHOKE $2.05      b) BEET $1.15\n");
        printf("c) CARROT $1.09      q) quit\n");
        printf("%s%s\n", SIGN, SIGN);
        printf("请输入选项(输错不管):");
        scanf("%s", &ch);
        switch (ch)
        {
        case 'a':
            printf("Weight of input ARTICHOKE:");
            scanf("%lf", &pounds);
            A_pounds += pounds;
            printf("ARTICHOKE:%.2lfP\n", A_pounds);
            break;
        case 'b':
            printf("Weight of input BEET:");
            scanf("%lf", &pounds);
            B_pounds += pounds;
            printf("BEET:%.2lfP\n", A_pounds);
            break;
        case 'c':
            printf("Weight of input CARROT:");
            scanf("%lf", &pounds);
            C_pounds += pounds;
            printf("CARROT:%.2lfP\n", A_pounds);
            break;       
        default:
            goto help;
        }
    }
    A = ARTICHOKE * A_pounds;
    B = BEET * B_pounds;
    C = CARROT * C_pounds;
    gross = A + B + C;
    if (gross >= 100)
    {
        discount = gross * DISCOUNT;
    }
    pounds = A_pounds + B_pounds + C_pounds;
    if (pounds <= 5)
        trans = 6.5;
    else if (pounds <= 20)
    {
        trans = 14;
    }
    else
    {
        trans = 14 + (pounds - 20) * 0.5;
    }
    Algross = gross - discount + trans;
    
    printf("物品售价\t订购重量(磅)\t订购蔬菜费用\t折扣\t运费和包装\t需付金额\n");
    printf("ARTICHOKE\t%12.2lf\t%12.2lf\n", A_pounds, A);
    printf("BEET     \t%12.2lf\t%12.2lf\n", B_pounds, B);
    printf("ARTICHOKE\t%12.2lf\t%12.2lf\n", C_pounds, C);
    printf("\t\t\t\t\t%12.2lf\t%8.2lf\t%8.2lf\n", discount, trans, Algross);
    
}

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

推荐阅读更多精彩内容