C控制语句:分支和跳转

1.if语句

以下该程序读取一系列数据,每个数据表示每日的最低温度,然后打印统计的总天数和最低温度在0℃以下的天数占总天数的百分比

//colddays.c--找出0℃以下的天数占总天数的百分比
#include <stdio.h>
int main(void)
{
    const int FREEZING = 0;
    float temperature;
    int cold_days = 0;
    int all_days = 0;
    printf("enter the list of daily low temperatures.\n");
    printf("use celsius,and enter q to quit.\n");
    while (scanf("%f", &temperature) == 1);
    {
        all_days++;
        if (temperature < FREEZING)
            cold_days++;
    }
    if (all_days != 0)
        printf("%d days tatall:%.1f%% were below freezing .\n",
            all_days, 100.0*(float)cold_days / all_days);
    if (all_days == 0)
        printf("no date entered!\n");
    return 0;
}

为避免整数除法,该程序事例把计算后的百分比强制装换为float类型,all_days, 100.0*(float)cold_days / all_days),使用强制转换可以明确表达转换类型的意图,保护程序免受不同版本编译器的影响。if语句被称为分支语句(branching statement)或选择语句,因为他相当于一个交叉点,程序要在两天分支中选择一条执行。if语句的通用格式如下:

if (expression)

statement   如果对expression的求值为真(非0),则执行statement,否则,则跳过statement,if只能进行一次执行和测试,while语句可以执行和测试多次。通常EXPRESSION是关系表达式,既比较两个量的大小,statement部分可以是一条简单的语句,或者是一条用花括号括起来的复合语句(或块)。如

if (score > big)
printf("jackopt!\n");//简单语句
if (Joe > ron)
{               //复合语句
    joecash++;
    printf("you lose,ron.\n");
}
2.if else 语句

if可以选择执行或跳过一条语句,而if else语句可以在两条语句之间做选择

 if (all_days != 0)
        printf("%d days tatall:%.1f%% were below freezing .\n",
            all_days, 100.0*(float)cold_days / all_days);
    if (all_days == 0)
        printf("no date entered!\n");可以用ifelse改写为

 if (all_days != 0)
        printf("%d days tatall:%.1f%% were below freezing .\n",
            all_days, 100.0*(float)cold_days / all_days);
    else
        printf("no date entered!\n");

如果要在if和else之间执行多条语句,必须用花括号把这些语句括起来成为一个快。且if和else之间只允许有一条语句(简单语句或复合句)。

介绍getcher和putchar

对字符输入和输出的函数

getchar(0函数不带任何参数,他从输入列队中返回下一个字符。例如下面语句读取下一个字符输入,并把该字符的值赋予变量ch:ch=getchar(),该语句与scanf("%c",&ch)语句效果相同:;putchar()函数打印他的参数,如下面语句将之前赋给ch的值作为字符打印出来:putchar();与之相同效果的语句为printf("%ch",ch);由于这些函数只处理字符,所以它们比更通用的scanf和printf()函数更快更简洁。而且getchar和putchar函数不需要转换说明,因为它只处理字符,这两个函数通常定义在stdio.h头文件中

//cypherl.c--更改输入,空格不变
#include<stdio.h>
#define SPACE  ' '        //SPACE表示单引号—空格-单引号
int main(void)
{
    char ch;
    ch = getchar();         //读取一个字符
    while (ch != '\n')       //当一行结束时
    {
        if (ch ==  SPACE)     //留下空格
            putchar(ch);     //该字符不变
        else
            putchar(ch + 1);  //改变其他字符
        ch = getchar();      //获取下一个字符
    }
    putchar(ch);         //打印换行符
    return 0;
}

 ch = getchar();         //读取一个字符
    while (ch != '\n')       //当一行结束时
    {
        if (ch ==  SPACE)     //留下空格
            putchar(ch);     //该字符不变
        else
            putchar(ch + 1);  //改变其他字符
        ch = getchar();      //获取下一个字

可以替换为下面循环模式

while((ch=getchar()) !='\n')

{

……                                      //处理字符

}

while((ch=getchar()) !='\n')这体现了c特有的编程风格,把两个行为合并成一个表达式

ctype.h系列的字符函数

多重选择else if

例子:电力公司通常根据客户的总用电量来决定电费,下面是某电力公司的额电费清单,单位是千瓦时:首 360kwh   $0.13230/kwh

续 108kwh:  $0.15040kwh     续252kwh:  $0.30025/kwh    超过720kwh  $0.34025/kwh

//electric.c--计算电费
#include<stdio.h>
#define RATE1   0.13230        //首次使用360.0kwh的费率          
#define RATE2   0.15040
#define RATE3   0.30025
#define RATE4    0.34025
#define BREAK1   360.0             //费率第一个分界点
#define BREAK2    468.0
#define BREAK3    720.0
#define BASE1(RATE1*BREAK1)
#define BASE2 (BASE1 + (RATE2*(BREAK2-BREAK1)))
#define BASE3 (BASE1+BASE2 (RATE3*(BREAK3-BREAK2)))
int main(void)
{
    double kwh;                  //使用kwh
    double bill;                   //电费
    printf("piease enter the kwh used.\n");
    scanf("%1f", &kwh);
    if (kwh <= BREAK1)
        bill = RATE1*kwh;
    else if (kwh <= BREAK2)       //360~468kwh
        bill = BASE1 + (RATE2*(kwh - BREAK1));
    else if (kwh <= BREAK3)           //
        bill = BASE1 + BASE2(RATE3*(kwh - BREAK2));
    else
        bill = BASE3 + (RATE4*(kwh - BREAK3));
    printf("the charge for %.1f kwh is $%1.2f.\n", kwh, bill);
    return 0;

}

else与if配对原则如果没有花括号,else与离它最近的if匹配,如果最近的括起来,就与除括号外最近的匹配。

多层嵌套的if语句

//divisors.c--使用嵌套if语句显示一个数的均数
#include <stdio.h>
#include<stdbool.h>
int main(void)
{
    unsigned long num;        //特殊测试的数
    unsigned long div;       //可能的数
    bool isPrime;             //素数标记
    printf("please enter an integer for analysis;");
    printf("netrer q to quit .\n");
    while (scanf("%1u", &num) == 1)
    {
        for (div = 2, isPrime = true; (div*div) <= num; div++)
        {
            if (num %div == 0)
            {
                if ((div*div) != num)
                    printf("%1u is divisible by %1u .\n", num, div);
                isPrime = false;       //该数不是素数
            }
        }
        if (isPrime)
            printf("%1u is Prime.\n", num);
        printf("please enter another integer for analysis;");
        printf("enter q to quit .\n");
    }
    printf("bye .\n");
    return 0;

}

if 语句进行选择

形式1

If(expression)

statement

形式2

if(expression)

      statement1

else 

      statement2

形式3

if(expression)

     statement1

else if(expression2)

            statement2

else

          statement3

 


 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值