C控制语句:分支与跳转

1.前导程序

//统计字符、单词和行
#include<stdio.h>
#include<ctype.h>        //为isspace()提供函数原型
#include<stdbool.h>        //为bool、true和flase提供定义
#define  STOP  ‘|‘
int main(void)
{
    char c;                //读入字符
    char prev;            //前一个读入字符
    long n_chars=0L;    //字符数
    int n_lines=0;        //行数
    int n_words=0;        //单词数
    int p_lines=0;        //不完整的行数
    bool inword=false;    //如果C在一个单词中,则 inword等于true

    printf("Enter text to be analyzed(| to terminate):\n");
    prev=‘\n‘;            //用于识别完整的行
    while((c=getchar())!=STOP)
    {
        n_chars++;        //统计字符
        if(c==‘\n‘)
            n_lines++;    //统计行
        if(!isspace(c)&&!=inword)
        {
            inword=true;    //开始一个新单词
            n_words++;        //统计单词
        }
        if(isspace(c)&&inword)
            inword=false;    //到达单词的结尾
        prev=c;                //保存字符值
    }

    if(prev!=‘\n‘)
        p_lines=true;
    printf("characters=%ld,words=%d,lines=%d,",
            n_chars,n_words,n_lines);
    printf("partial lines=%d\n",p_lines);
    return 0;
}

统计字符、单词和行

2.If语句

  • 在If语句中,判断和执行(如果可能的话)仅有一次,而在while循环中,判断和执行可以重复多次。
  • 判断语句通常是一个关系表达式,表达式的值为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 total:%.1f%% were below freezing.\n",
            all_days,100.0*(float)cold_days/all_days);
    if(all_days==0)
        printf("No data entered!\n");
    return 0;
}

求出温度低于零度的天数的百分比

3.在If 语句中添加else关键字

if(expression)
      statement1
else
      statement2
//如果希望在if和else之间有多条语句,则必须用于{}
  • ch=getchar();  ==  scanf("%c",&ch);
  • ch=putchar();  ==  printf("%c",ch);//他们不需要格式说明符,因为他们只对字符起作用
  • 字符实际上是作为整数被存储的。
  • c风格:while((ch=getchar())!=‘\n‘)  //ch不等于换行符。

改变输入,只保留其中的空格
//改变输入,只保留其中的空格
//getchar()和putchar()只对字符起作用,不需要格式说明符
#include<stdio.h>
#define   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;
}

改变输入,只保留其中的空格

  • 在多重选择else if语句中,如果没有花括号指明,则else和它最接近的if配对,编译器是忽略编排的。#显示一个数的约数!<stdbool.h>

4.获得逻辑性

  • (exp1  && exp2)  运算符“与”,当两个关系表达式都为真的时候为真。
  • (exp1  ||  exp2)   运算符“或”,当两个表达式中至少一个为真时为真。
  • (!q)                    运算符“非”。
  • 优先级:最好使用().逻辑表达式从左到右求值,一旦发现有使表达式为假的因素,立即停止求值。
  • if(10<=n<=30)  //请不要这样书写表达式,该代码是个语义错误不是语法错误,所以编译器并不会捕获它。

5.条件运算符?:(唯一一个 三元运算符)

  • 这个运算符带着三个操作数,每个操作数都是一个表达式 。
  • expression1 ? expression 2:expression 3  //如果1为真,整个表达式的值为2,否则为3.

//使用条件运算符
#include<stdio.h>
#define CONVERACE  200
int main(void)
{
    int sq_feet;
    int cans;

    printf("Enter number of square feet to be painted:\n");
    while(scanf("%d",&sq_feet)==1)
    {
        cans=sq_feet/CONVERACE;
        cans+=((sq_feet%CONVERACE==0))?0:1;
        printf("You need %d %s of print.\n",cans,cans==1?"can":"cans");
        printf("Enter next value(q to quit):\n");
    }
    return 0;
}

使用条件运算符

 6.循环辅助手段continue和break

(1)continue适用于三种循环模式,当运行到该语句时它导致剩下的迭代部分被忽略,开始下一次迭代。可以再主语句中消除一级缩排,还可以作为占位符。

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

{   if(ch==‘\t‘)

continue;

putchar(ch);

}//该循环跳过制表符,并且仅当遇到换行符时退出。

//使用continue跳过部分循环
//程序接受输入一系列数字,然后输出最小值和最大值
#include<stdio.h>
int main(void)
{
    const float MIN=0.0f;
    const float MAX=100.0f;

    float score;
    float total=0.0f;
    int n=0;
    float min=MAX;
    float max=MIN;

    printf("Enter the first score(q to quit):");
    while(scanf("%f",&score)==1)
    {
        if(score<MIN||score>MAX)
        {
            printf("%0.1f is an invalid value,try again:",score);
            continue;
        }
        printf("Accepting %0.1f:\n",score);
        min=(score<min)?score:min;
        max=(score>max)?score:max;
        total+=score;
        n++;
        printf("Enter next score (q to quit):");
    }
    if(n>0)
    {
        printf("Average of %d scores is %0.1f.\n",n,total/n);
        printf("Low=%0.1f,high=%0.1f\n",min,max);
    }
    else
        printf("No valid scores were entered.\n");
    return 0;
}

使用continue跳过部分循环

(2)break语句导致程序终止包含它的循环,并进行程序的下一阶段。break语句使程序转到紧接着该循环后的第一天语句去执行,在for循环中,与continue不同,控制段的更新部分也将被跳过,嵌套循环中的break语句只是使程序跳出了里层的循环,要跳出外层的循环则需要另外的break语句。

使用break语句跳出循环
//使用break语句跳出循环
#include<stdio.h>
int main(void)
{
    float length,width;

    printf("Enter the length of the rectangle:\n");
    while(scanf("%f",&length)==1)
    {
        printf("Length=%0.2f:\n",length);
        printf("Enter its width:\n");
        if(scanf("%f",&width)!=1)//导致程序终止包含它的循环,并进行程序的下一阶段
            break;
        printf("Width=%0.2f:\n",width);
        printf("Area=%0.2f:\n",length*width);
        printf("Enter the length of the rectangle:\n");
    }
    printf("Done.\n");
    return 0;
}

使用break语句跳出循环

7.多重选择:switch和break

使用swithch语句
//使用swithch语句
#include<stdio.h>
#include<ctype.h>
int main(void)
{
    char ch;
    printf("Give me a letter of the alphabet,and I will give an animal name\n");
    printf("beginning with that letter.\n");
    printf("Please type in a letter:type # to end my cat.\n");
    while((ch=getchar())!=‘#‘)
    {
        if(‘\n‘==ch)
            continue;
        if(islower(ch))
            switch(ch)
            {
            case ‘a‘:
                printf("argali,a wild sheep of Asia\n");
                break;
            case ‘b‘:
                printf("babirusa, a wild pig of Malay\n");
                break;
            case ‘c‘:
                printf("coati,racoonlike mammal\n");
                break;
            case ‘d‘:
                printf("desman,aquatic,molelike critter\n");
                break;
            case ‘e‘:
                printf("echidna,the spiny anteater\n");
                break;
            case ‘f‘:
                printf("fisher,brownish marten\n");
                break;
            default:
                printf("That‘s a stumper!\n");
        }//switch语句结束。
        else
            printf("I recognize only lowercase letters.\n");
        while(getchar()!=‘\n‘)
            continue;//跳过输入行的剩余部分
        printf("please type another letter or a #.\n");
    }//while循环结束
    printf("Bye!\n");
    return 0;
}
  • 紧跟在switch后圆括号里的表达式被求值,然后程序扫描标签列表,直到搜索到一个与该值相匹配的标签。
  • 如果没有break语句,从相匹配的标签到switch末尾的每条语句都将被处理。
  • 圆括号中的switch判断表达式应该具有整数值(包括char类型),不能用变量作为case标签。
  • 可以对一个给定的语句使用多重case标签。

8.goto语句

  • 应该避免goto语句,具有讽刺意味的是,C不需要goto,却有一个比大多数语言更好的goto,它允许在标签中使用描述性的标签而不仅仅是数字。
时间: 2024-11-10 05:25:39

C控制语句:分支与跳转的相关文章

C控制语句--分支和跳转

/*C控制语句--分支和跳转*/ /*关键字 if else switch continue break case default goto 运算符:&&(且) ||(或) ?:(三元运算符) 函数 getchar() putchar() 怎样使用if和if else 语句以及如何嵌套使用它们. 使用逻辑运算符将关系表达式组合为更加复杂的判断表达式. C的条件运算符. swich语句. break.continue.和goto跳转. 使用C的字符I/O函数 getchar()和putcha

Java控制语句——分支、循环、跳转

分支语句(if语句,switch语句): 循环语句(for,while,do...while); 跳转语句(break,continue,return): 分支语句(if语句,switch语句) if判断语句的格式: 格式1:适用于一种情况使用. if(判断的条件){ 符合条件执行的代码; } 格式2 : 适用于两种情况下去使用的. if(判断条件){ 符合条件执行的代码 }else{ 不符合条件执行的代码: } if-else 与三元运算符非常像: 三元运算符的优点: 结构比较简洁. 三元运算

【C语言学习】《C Primer Plus》第7章 C控制语句:分支与跳转

学习总结 1.if-else-从语义上看就能出用途,跟其他语言没差多少,只需要记住,世界上最遥远的距离之一:我走if你却走else. 2.根据个人几年的编程经验,太多的if-else-嵌套会加大代码的可读性和维护难度.个人认为代码最好不要超过三层if-else-的嵌套,否则最好使用布尔值控制流程. 3.逻辑运算符优先级:!>&&>|| 4.运行到continue语句将导致剩余的迭代部分被忽略,开始下一次迭代.continue仅用于循环,而break语句用于循环和switch中.

IT兄弟连 Java语法教程 流程控制语句 分支结构语句5

5  switch-case条件语句 Java中的第二种分支控制语句时switch语句,switch语句提供了多路支持,因此可以使程序在多个选项中进行选择.尽管一系列嵌套if语句可以执行多路测试,然而多数情况下使用switch则更为高效.其完整形式如下: switch(expression){ case constant1: statement sequence; break; case constan2: statement sequence; break; ... ... default:

IT兄弟连 Java语法教程 流程控制语句 分支结构语句1

不论哪一种编程语言,都会提供两种基本的流程控制结构:分支结构和循环结构.其中分支结构用于实现根据条件来选择性地执行某段代码,循环结构则用于实现根据循环条件重复执行某段代码.Java同样提供了这两种流程控制结构的语法,Java提供了if和switch两种分支语句,并提供了while.do-while和for三种循环语句.除此之外,JDK5还提供了一种新的循环:foreach循环,能以更简单的方式来遍历集合.数组的元素.Java还提供了break和continue来控制程序的循环结构. 分支结构语句

IT兄弟连 Java语法教程 流程控制语句 分支结构语句3

3  if-else if-else条件语句 if-else if-else的完整形式如下: if(判断条件A){ A语句块(判断条件A的值为true,执行) }else if(判断条件B){ B语句块(判断条件B的值为true,执行) }else{ C语句块(判断条件A和判断条件B的值都为false,执行) }… 当然,如果语句块中只有一条语句的话,也可以使用以下形式简化代码: if(判断条件A) A语句块; else if(判断条件B) B语句块; else C语句块; … 条件表达式被从上

C 语言 - 分支、跳转和循环语句

if 条件判断语句 if 语句结构 格式: if (表达式) { 语句; } 如果表达式成立,就执行大括号中的语句:否则跳过该 if 语句 #include <stdio.h> int main() { int num; printf("请输入一个数字:"); scanf("%d", &num); if (num > 10) { printf("该数字大于 10\n"); } return 0; } 运行结果 12 符合

C#流程控制语句--分支语句(if,switch,三位运算符)

分支语句  if if(判断条件表达式) {//表达式结果为ture时执行} else {//表达式结果为false时执行} For example Console.WriteLine("请输入一个数字:"); int iInput = Convert.ToInt32(Console.ReadLine());//记录用户的输入 if (iInput % 2 != 0)//使用if语句进行判断 { Console.WriteLine(iInput + " 是一个奇数!"

IT兄弟连 Java语法教程 流程控制语句 分支结构语句4

4  嵌套if-else条件语句 嵌套if语句是作为另一个if或else语句的目标的if语句.嵌套if语句在程序设计中非常普遍.Java中,关于嵌套if语句需要记住的是,else语句总是和同一代码块中最近的且没有else与之匹配的if语句相匹配,语法格式如下所示: if(判断条件A){ if(判断条件B){ A语句块 } if(判断条件C){ B语句块 }else{ C语句块 } }else{ D语句块 } 例:下面将演示嵌套if的执行流程: public class IfElseIfElseD