学习笔记——《C Prime Plus》

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

  • 7.1 if 语句
  • 7.2 if else 语句
    • 7.2.1 介绍 getchar() 和 putchar()
  • 7.4 一个统计单词的程序

7.1 if 语句

下程序读取一列数据,每个数据都表示每日的最低温度(℃),然后打印统计的总天数和最低温度在 0℃ 以下的天数占总天数的百分比。程序中的循环通过 scanf() 读入温度值。while 循环每迭代一次,就递增计数器增加天数,其中的 if 语句负责判断 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;
}

运行结果:

程序分析

  • while 循环的测试条件利用 scanf() 的返回值来结束循环,因为 scanf() 在读到非数字字符时会返回 0。temperature 的类型是 float 而不是 int, 这样的程序既可以接受 -2.5 这样 的值,也可以接受 8 这样的值。
  • 循环中 if 的语句:如果刚读取的值(temperature)小于 0,就把 cold_days 递增 1;如果 temperature 不小于 0,就跳过 cold_days++; 语句,while 循环继续读取下一个温度值。
  • 接着,该程序又用了两次 if 语句控制程序的输出。如果有数据,就打印结果;如果没有数据,就打印一条信息。
  • 为避免整数除法,该程序实例把计算后的百分比强制转换为 float 类型。

if 语句被称为分支语句(branching statement)或选择语句(selection statement)
它相当于一个交叉点,程序在两条分支中选择一条执行。对条件判断为真(非 0),则执行 statement;否则,跳过 statement。

7.2 if else 语句

简单形式的 if 语句可以让程序选择执行一条语句,或者跳过这条语句。
C 还提供了 if else 形式,可以在两条语句之间作选择。

if (all_days != 0)printf("%d days total: %.1f%% were below freezing.\n",all_days, 100.0 * (float) cold_days / all_days);
elseprintf("No data entered!\n");//if else 语句的通用形式:
if(expression)statement1
elsestatementf2

如果 if 判断为真 (非 0),则执行 statement1;如果 expression 为假或 0,则执行 else 后面的 statement2。
如果要在 if 和 else 之间执行多条语句,必须用花括号把这些语句括起来成为一个块。

7.2.1 介绍 getchar() 和 putchar()

对字符输入/输出函数:getchar() 和 putchar()
getchar() 函数不带任何参数,它从输入队列中返回下一个字符。例如,下面的语句读取下一个字符输入,并把该字符的赋值给变量 ch:

ch = getchar();
//等同于下面的语句
scanf("%c", &ch);

putchar() 函数打印它的参数。例如,下面的语句把之前赋给 ch 的值作为字符打印出来:

putchar(ch);
//等同于下面的语句
printf("%c", ch);

由于这些函数只处理字符,所以它们比更通用的 scanf() 和 printf() 函数更快、更简洁。而且,注意 getchar() 和 putchar() 不需要转换说明,因为它们只处理字符。这两个函数通常定义在 stdio.h 头文件。

7.4 一个统计单词的程序

编写一个统计单词数量的程序(即,该程序读取并报告单词的数量)。该程序还可以计算字符数和行数。
首先,该程序要逐个字符读取输入,知道何时停止读取。然后,该程序能识别并计算这些内容:字符、行数和单词。
编写伪代码:

读取一个字符
当有更多输入时递增字符计数如果读完一行,递增行数计数如果读完一个单词,递增单词计数读取下一个字符如循环输入模型:
while((ch = getchar()) != STOP)  //STOP表示能标识输入末尾的某个值。
{...
}
#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 等于 trueprintf("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;
}

运行结果:

第7章 C控制语句:分支和跳转相关推荐

  1. C语言基础之7:C控制语句---分支和跳转

    Tips1: 关键字:if.else.switch.continue.break.case.default.goto 运算符:&&.||.?: 函数:getchar().putchar ...

  2. 《C Primer Plus》第七章--C控制语句:分支和跳转(if else switch continue break goto 逻辑运算符ctype.h)

    文章目录 C控制语句:分支和跳转 本章内容 if语句 if else语句 另一个示例:介绍getchar()和putchar() ctype.h系列的字符函数 多重选择else if else与if配 ...

  3. C语言学习(四)C控制语句:循环、分支和跳转

    参考书:<C Primer Plus>第六版 for循环.程序清单1. 出口条件循环:do while.程序清单2. 关系运算符的优先级比算术运算符低,关系运算符的优先级比赋值运算符高. ...

  4. python基础第三章选择结构答案-零基础学Python--------第3章 流程控制语句

    第3章 流程控制语句 3.1程序的结构 计算机在解决某个具体问题时,主要有3种情况,分别是顺序执行所有的语句.选择执行部分语句和循环执行部分语句.程序设计中的3种基本结构为顺序结构.选择结构和循环结构 ...

  5. 第6章 C控制语句:循环

    学习笔记--<C Prime Plus> 第6章 C控制语句:循环 6.1 再探 while 循环 6.1.1 程序注释 6.1.2 C风格读取循环 6.2 while 语句 6.2.1 ...

  6. 零基础学Python--------第3章 流程控制语句

    第3章 流程控制语句 3.1程序的结构 计算机在解决某个具体问题时,主要有3种情况,分别是顺序执行所有的语句.选择执行部分语句和循环执行部分语句.程序设计中的3种基本结构为顺序结构.选择结构和循环结构 ...

  7. 第3章 流程控制语句

    第3章 流程控制语句 第3章 流程控制语句 3.1程序的结构 计算机在解决某个具体问题时,主要有3种情况,分别是顺序执行所有的语句.选择执行部分语句和循环执行部分语句.程序设计中的3种基本结构为顺序结 ...

  8. c语言程序中必不可少的,C语言程序设计(第3章程序控制语句)2

    3.2 数据的输入与输出 在程序的运行过程中,往往需要由用户输入一些数据,而程序运算所得到的计算结果等又需要输出给用户,由此实现人与计算机之间的交互,所以在程序设计中,输入输出语句是一类必不可少的重要 ...

  9. MIPS指令集:运算指令、访存指令、分支和跳转、协处理器0指令

    计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程.通常一条指令包括两方面的内容: 操作码和操作数,操作码决定要完成的操作,操作数指参加运算 ...

最新文章

  1. JAVA加密算法(DSA)
  2. Linux救援模式实战
  3. 2017北京国庆刷题Day2 afternoon
  4. iPhone官方资料链接
  5. 实施工程师是干嘛的_CTO大怒:300万建设数据中台,啥也没看见,我要它干嘛?...
  6. hdu Hike on a Graph
  7. appscan 9.0.3.12 版本下载
  8. JAVA实现Html转Pdf(wkhtmltopdf)
  9. Excel 复制粘贴筛选出来的数据行
  10. python读取图片的exif信息
  11. 【温故而知新】计算机408之计算机网络速记
  12. Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training 详解
  13. 冬季药膳食疗强烈推荐
  14. python给ppt表格加边框_带你用Python玩转PPT
  15. hacks cheats injection
  16. 技术合伙人不是为了节省开发成本忽悠人的噱头
  17. windows系统目录programdata和program file(x86)
  18. 转行程序员日记--2020-08-10
  19. 整理了下这三天【面试】遇到的让人心惊胆颤的难题。
  20. 太极计算机 杨振,杨振基传太极拳内功心法

热门文章

  1. 论ORM框架—EntityFrameworkCore
  2. 2020 年 Service Mesh 技术展望
  3. 【壹个小技巧】一看就会的CI/CD :Github Actions
  4. 推荐高质量的公众号,值得跟进学习!
  5. WCF服务端的.NET Core支持项目Core WCF 正式启动
  6. .NET Core 批量重置 Azure Blob Storage 的 mime type
  7. Office转PDF,Aspose太贵,怎么办?
  8. asp.net core 3.0 gRPC框架小试
  9. Named Volume 在 MySQL 数据持久化上的基本应用
  10. .NET Core 2.2 新增部分功能使用尝鲜