第7章 C控制语句:分支和跳转
学习笔记——《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控制语句:分支和跳转相关推荐
- C语言基础之7:C控制语句---分支和跳转
Tips1: 关键字:if.else.switch.continue.break.case.default.goto 运算符:&&.||.?: 函数:getchar().putchar ...
- 《C Primer Plus》第七章--C控制语句:分支和跳转(if else switch continue break goto 逻辑运算符ctype.h)
文章目录 C控制语句:分支和跳转 本章内容 if语句 if else语句 另一个示例:介绍getchar()和putchar() ctype.h系列的字符函数 多重选择else if else与if配 ...
- C语言学习(四)C控制语句:循环、分支和跳转
参考书:<C Primer Plus>第六版 for循环.程序清单1. 出口条件循环:do while.程序清单2. 关系运算符的优先级比算术运算符低,关系运算符的优先级比赋值运算符高. ...
- python基础第三章选择结构答案-零基础学Python--------第3章 流程控制语句
第3章 流程控制语句 3.1程序的结构 计算机在解决某个具体问题时,主要有3种情况,分别是顺序执行所有的语句.选择执行部分语句和循环执行部分语句.程序设计中的3种基本结构为顺序结构.选择结构和循环结构 ...
- 第6章 C控制语句:循环
学习笔记--<C Prime Plus> 第6章 C控制语句:循环 6.1 再探 while 循环 6.1.1 程序注释 6.1.2 C风格读取循环 6.2 while 语句 6.2.1 ...
- 零基础学Python--------第3章 流程控制语句
第3章 流程控制语句 3.1程序的结构 计算机在解决某个具体问题时,主要有3种情况,分别是顺序执行所有的语句.选择执行部分语句和循环执行部分语句.程序设计中的3种基本结构为顺序结构.选择结构和循环结构 ...
- 第3章 流程控制语句
第3章 流程控制语句 第3章 流程控制语句 3.1程序的结构 计算机在解决某个具体问题时,主要有3种情况,分别是顺序执行所有的语句.选择执行部分语句和循环执行部分语句.程序设计中的3种基本结构为顺序结 ...
- c语言程序中必不可少的,C语言程序设计(第3章程序控制语句)2
3.2 数据的输入与输出 在程序的运行过程中,往往需要由用户输入一些数据,而程序运算所得到的计算结果等又需要输出给用户,由此实现人与计算机之间的交互,所以在程序设计中,输入输出语句是一类必不可少的重要 ...
- MIPS指令集:运算指令、访存指令、分支和跳转、协处理器0指令
计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程.通常一条指令包括两方面的内容: 操作码和操作数,操作码决定要完成的操作,操作数指参加运算 ...
最新文章
- JAVA加密算法(DSA)
- Linux救援模式实战
- 2017北京国庆刷题Day2 afternoon
- iPhone官方资料链接
- 实施工程师是干嘛的_CTO大怒:300万建设数据中台,啥也没看见,我要它干嘛?...
- hdu Hike on a Graph
- appscan 9.0.3.12 版本下载
- JAVA实现Html转Pdf(wkhtmltopdf)
- Excel 复制粘贴筛选出来的数据行
- python读取图片的exif信息
- 【温故而知新】计算机408之计算机网络速记
- Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training 详解
- 冬季药膳食疗强烈推荐
- python给ppt表格加边框_带你用Python玩转PPT
- hacks cheats injection
- 技术合伙人不是为了节省开发成本忽悠人的噱头
- windows系统目录programdata和program file(x86)
- 转行程序员日记--2020-08-10
- 整理了下这三天【面试】遇到的让人心惊胆颤的难题。
- 太极计算机 杨振,杨振基传太极拳内功心法
热门文章
- 论ORM框架—EntityFrameworkCore
- 2020 年 Service Mesh 技术展望
- 【壹个小技巧】一看就会的CI/CD :Github Actions
- 推荐高质量的公众号,值得跟进学习!
- WCF服务端的.NET Core支持项目Core WCF 正式启动
- .NET Core 批量重置 Azure Blob Storage 的 mime type
- Office转PDF,Aspose太贵,怎么办?
- asp.net core 3.0 gRPC框架小试
- Named Volume 在 MySQL 数据持久化上的基本应用
- .NET Core 2.2 新增部分功能使用尝鲜