C语言学习05.流程控制

分支结构:

笑话:程序员买瓜,老婆说:“买菜的时候带两个桃子回来吧,如果看到西瓜了,就买一个。”如果一般人看到了西瓜会买两个桃子和一个西瓜,但是程序员只会买一个桃子回来。因为他的心中会执行判断:没看到西瓜,买两个桃子;看到了西瓜,买一个桃子。这就是程序员的思维,但是这个笑话的笑点在于,程序员怎么会有老婆。。。。。。
笑话中的程序员的内心就执行了一种叫分支结构的判断,就是给程序的河流加一个岔路口,如果是真,则走一边;如果是假,则走另一边。写法是:

If(判断条件:是否看到西瓜)  //判断条件不用分号结尾。
    {  
         看到西瓜,买一个桃子。  
    }  
    Else  
    {  
         没看到西瓜,买两个桃子。  
    }  

也就是说,if后面的扩号加的是判断条件,为真,则执行if后面的大括号中的语句;为假,则执行else后面大括号中的语句。
If后面不一定要有else,但是else前面必须有if。
还有一些写法比如:

    if(1) //非0就是真
        int I = 8; //如果只有一句话可以省略大括号,但是不介意新手这样。
//或者:
    Bool B = true;
    if(B){}  //此时的B为真,一样执行if后面的语句。
//还可以:
    If(1 > 2)  //1并不大于2,则判断条件为假
//如果使用一个istream对象作为条件时:
    Int I = 0;
    While (std::cin >> i);
//其效果是检测流的状态,如果流是有效的,则为真。当遇到结束运算符,或者无效的输入时(例如读入的值不是定义的类型,例子中为整型),则为假。

if(12 == x)可以有效防止写成x = 12

Switch :

    switch(i) //Switch后的表达式(控制表达式)一般为字符或整形表达式(表达式的值不是整数自动取整),不能为实型。  
    {  
         case 0:
         {
             printf("input 0\n");
             return 0;
         }  
          //Case后的常量表达式应是字符型或整型,不允许含有变量或者函数调用,必须与switch后面括号内的表达式一个类型,且值要互不相同。  
         case 1:
          {
             printf("input 1\n");
             return 0;
         }   
         default://默认值,如果表达式的值与所有case后的值都不相等,则执行default后的语句  
    }

枚举类型(enum):
自定义数据类型,表示取值只有有限种情况的数据。很像一系列命名常量,case标识符一般就用枚举类型。

循环结构:

循环分为
入口条件循环(entry-condition cycle),不确定循环(indefinite loop)和计数循环(counting loop)。
出口条件循环(exit-condition loop),比如do-while。
计数循环:
1.必须初始化计数器;
2.计数器与有限的值作比较;
3.每次循环时递增计数器。

While可以一次都不执行,do-while必须执行一次。do-while末尾记得加分号。
While中的表达式的值一直为非零常量,则形成死循环;若为零,则循环体内的语句一次也不会执行。

    Int I = 1;//习惯性地赋值时初始化  
    Int sum = 0;  
    While(i<=100)  
    {  
          Sum + = I;  //sum = sum +I;组合写法。  
          I++;  
    }

For(初值;终值;增值)即初始化, 控制条件,修改循环变量使循环趋于结束。
C++可以直接在for语句中定义变量。
for( ;1 ;)也可以造成死循环

Int I = 1;  
    Int sum = 0;  
    For(;i<=100;i++) //For(初值;终值;增值)初值可以没有,也可以加上:for(i=1;i<=100;i++)  
    {  
           Sum += I ;  
    }  

循环语句一定要注意结束条件,如果结束条件有错误则会造成死循环!
跳出循环:
Break终止并跳出最近一层的循环体。即循环结束。
Continue 结束本次循环。回到循环开始,继续循环。
return 结束函数体。用于跳出多层循环。跳出多层循环还可以设置flag。

拓展:
分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。
答:

BOOL : if ( !a ) or if(a)
int : if ( a == 0)
float : const EXPRESSION EXP = 0.000001
if ( a < EXP && a >-EXP)
pointer : if ( a != NULL) or if(a == NULL)

一个利用流程控制判断字符数、单词数、行数的例子:

#include <stdio.h>
#include <ctype.h>// 为isspace()函数提供原型
#include <stdbool.h>// 为bool、true、false提供定义
#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 = 1;
    printf("characters = %ld, words = %d, lines = %d, ",n_chars, n_words, n_lines);
    printf("partial lines = %d\n", p_lines);

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

推荐阅读更多精彩内容