分支语句和逻辑运算符
2020-02-24 10:38:15 6 举报
AI智能生成
C++ plus
作者其他创作
大纲/内容
switch 语句
格式
子主题
<div><span class="Apple-tab-span" style="white-space:pre"> </span>switch (integer-expression)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>case lable1 :statement(s)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>case lable2 :statement(s)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>....</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>default :statenment(s)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div>
说明
integer-expression 必须是一个结果为整数的表达式,可以是字母
label 必须是整数常量表达式 ,int /char 常量(1,‘q’),也可以是<br>枚举量
int choice;<br>cin >> choice<br>while (choice != 5)<br>{<br>switch(choice)<br>{<br> case 1:<br> case 2:<br> default:<br>}<br>cin >> choice<br>}
如果输入的是字符,会有死循环。//why?<br>最好用字母输入<br>//不理解什么时候可以字符,什么时候可以字母??<br>字符可以和数字比较吗??字符可以与 数字比较
<div>int n;<br><br>cin>>n;</div><div>cout<<n; // 输入字母 ,输出0<br><br></div><div>n=cin.get();</div><div>cout<<n;//输入字母,输出字母的ascaii 码</div><div> <br>cin.get(n);</div><div>cout<<n; // 错误,cin.get(n),n不能是int 必须是char</div>
运行
语句后如果没有break,会继续执行后面的语句
枚举量作标签
原理
switch语句将 int 值和 枚举值比较时,将枚举值提升为int值
char 与 int 比较时也是这样吧。
应用代码
代码
子主题
说明
如果要自己引入用顺序的表格,可以用enum 的方法
if else switch选择
涉及取值范围、浮点测试、或两个变量比较——if else
所有选项都可以用整数常量标识。如果选项超过2个时,switch效率更高。<br>即可以使用if else if 语句,也可以使用switch 语句,当选项不少于3个时,使用switch 语句
break 、 continue语句
break
应用
循环结构,switch 语句
作用
使程序跳到 switch 或 循环后面的语句处执行
continue
应用
循环结构
作用
跳过循环体余下的代码,开始新一轮循环
注意
在 for 循环中,continue 不会跳过更新表达式
goto
作用
goto pairs;跳到 使用pair作为标签的位置。<br>char ch;<br>cin >> ch;<br>if (ch== 'p')<br> goto pairs;<br>cout<< ...<br>....<br>paris: cout << "YOU ..."
注意
少用,应该使用结构化控制语句来控制程序流程
读取数字的循环
数组
作用
将一系列数字读入到数组中,且允许未填满结束
方法
用cin>>n,可以用非数字输入结束数字循环.<br>while (i<MAX && cin>>fish[i])
说明
int n ;<br>cin >> n;<br>输入的是单词,结果:<br>1 n 的值保持不变。//???<br>2. 不匹配的输入留在输入队列中<br>3.cin 对象中的一个错误标记被设置<br>4.对cin 方法的调用返回false (如果被转换为bool 类型)
cin 在测试条件中,返回bool值
非数字输入设置错误标记要必须重置该标记。用 cin.clear()重置错误输入标记,同时也<br>重置文件尾(EOF).
clear 清除流的错误状态,使cin 能够输入。如果下面要输入其它 ,要吸收字母 用 cin.get()
有些系统中,要让窗口打开,可以添加额外的代码。<br>//下列代码按q结束输入<br>if ( !cin )<br>{<br> cin.clear( );<br> cin.get( ); //read q<br>}<br>cin.get(); //read end of line after last input<br>cin.get();
拒绝非数字输入
作用
若用户输入了非数字,提醒重新输入
步骤
1.重置cin接受新输入
2.删除错误输入
3.提醒用户重新输入
代码
while ( ! ( cin >> golf[i]) )<br>{<br> cin.get();<br> while ( cin.get() != '\n')<br> continue;<br> cout<<"please enter a number!";<br>}
注,就算 while里面条件不符合,也会执行cin >> golf[i]
简单文件输入/输出
文本I/O和文本文件
cin输入原理
原理
程序将输入视为一系列的字节,每个字节都被解释为字符编码。<br>不管什么目标数据类型,输入都是字符数据——文本数据。<br>cin对象负责将文本转换为其它类型。
例子
书p190
cout 输出原理
原理
与cin 相反,数据类型转换成字符类型输出
注意
本章讨论的I/O相当于控制台I/O ,仅适用于文本文件(txt??)
写入到文本文件中
前提条件
头文件 fstream
头文件fstream 定义了一个用于输出的ofstream类
需要声明一个或多个 ofstream 变量(对象),并命名
指明名称空间std
ofstream 在std中,其它不用
将ofstream 对象与文件关联起来。用open()方法
使用文件后,用close()
结合使用ofstream 对象和运算符<< 来输出各种类型数据
文件输出步骤
包含头文件 fstream
创建一个ofstream 对象
将该ofstream 对象和文件关联起来
像使用cout 一样使用 对象
关闭文件!!不要漏了
声明
ofstream outFile;<br>ofstream fout;
关联文件
法一<br>
outFile.open("fish.text")
法二<br>(自己输入)
char filename[50];<br>cin>>filename;<br>fout.open(filename);
说明
若文件不存在,会自己创建
文件已存在,首先截断该文件,将长度截到0——丢弃原有的内容
写入
double wt = 125.8;<br>outFile<<wt;
char line[80] ="Objects are closer than they appear."<br>fout<<line<<endl;
说明
可以像cout( 如 << , endl, setf() )那样使用 ofstream对象,<br>可使用cout的任何方法
cout.setf(ios_base::showpoint)--在数字前显示价钱符号$<br>可以 outFile.setf(ios_base::showpoint)
cout.precision(2);显示后两个小数点。<br>outFile.precision(2);
关闭文件
outFile.close( );
读取文本文件
前提条件
头文件fstream
头文件fstream 定义了一个用于处理输入的ifstream 类
声明ifstream变量(对象)
名称空间std
ifstream需要
对象与文件关联。open()
close()关闭
ifstream 对象和运算符 >> 读取各类型的数据
ifstream 对象和get()来读取一个字符,用 ifstream 对象和 getline()读取一行字符
结合使用ifstream 和 eof() fail() 判断输入是否成功
ifstream 被当测试条件时,最后一个读取操作成功,转换为Bool的true
声明
ifstream inFile;<br>ifstream fin;
文件关联
inFile.open("bowling.txt")
char filename[50];<br>cin>>filename;<br>fin.open(filename);
检查文件是否打开成功
打开失败
后果: 后面的输入失败
方法is_open()
使用
inFile.is_open()
返回值
打开成功 true
打开失败 false
代码
inFile.open("bowling.txt");<br>if( !inFile.is_open())<br>{<br> exit(EXIT_FAILURE);<br>}
说明
exit()在 cstdlib中,EXIT_FAILURE参数值???相当于0??。
is_open()是C++较新的内容,编译器不支持,<br>可以使用 good()替代。//一样的吗??
读取操作
double wt;<br>inFile>>wt;
char line[81];<br>fin.getline(line,81);
说明
像cin一样使用,cin任何方法可用于ifstream 对象
读取时问题
是否到尾部
inFile.eof()
返回值
结尾:1<br>非结尾:0
代码
if (inFile.eof() )
类型不匹配
inFile.fail()
返回值
不匹配: true<br>匹配: false
意外问题<br>(文件受损,<br>硬件故障。)
inFile.bad()
返回值
有问题:true<br>无:false
(总)检查读取是否成功
方法
inFile.good()
作用
没有发生任何问题时候,返回true
返回值
成功: true<br>失败: false
代码
int value;<br>inFile >> value;<br>while ( inFile.good() )<br>{<br> ....<br> inFile >> value;<br>}
关闭文件
inFile.close()
代码
子主题
说明
while ( inFile.good) 要循环输入值,可用<br>while ( inFile >> value )替代
其他
文本文件每行以回车字符和换行符结尾,读取文件时转换成换行符
if 语句
if else 格式可以是
if () {<br><br>}<br>else {<br><br>}<br><br>
条件运算符和错误防范
现象
if (a==C),写成了 if (a=C ),程序执行赋值操作,且不会报错
方法
variable == value 代替 value == variable
若出现 3 == x 这种情况,编译系统会报错
逻辑表达式
内容
|| && !
|| 运算符
概念
是个顺序点,先执行左,再执行右,左为true 不执行右
&& 运算符
概念
顺序点,左为false 不执行右
应用
取值范围
注意
if (17 < age < 35),编译器不会觉得是错误,(17 < age) < 35
! 运算符
细节
! 运算符的优先级高于所有的关系运算符和算术运算符
逻辑and 运算符高于 逻辑or
age > 50 || weight > 300 && donation > 1000,<br>=<br>age > 50 || ( weight > 300 && donation > 1000 ),<br>
最好用括号括起,就算不要括号也正确
另一种表示方式
&& —— and<br>|| —— or<br>! —— not
说明
不能将它们用作变量名,也不是关键字<br>//关键字是什么??
c++中不需要头文件,c 中需要头文件 iso646.h
字符函数库
头文件
ctype.h \ cctype
函数
isalpha()
作用
判断字符是否为字幕
格式
isalpha(ch)
返回值
字母
非0值
不是字母
0
对比
if ( (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'z' ) )
对 ascii码成立,其它不一定
if (isalpha (ch) )
ispunct()
作用
判断字符是否为标点符号
格式
ispunct(ch);
返回值
标点
true
但是这些返回值类型为int ,不是bool ,<br>通常bool 转换 可以将它们视为 bool//????
不是标点
false
?: 运算符
作用
可以代替 if else ,更加简洁
作隐藏代码
cout << ( (i<2)? !i ? x[i] : y : x[1])
说明
对于可读性 ,还是 if else 好点
格式
结果
是表达式,生成的是一个值 ,所以可以 c= a > b ? a : b
0 条评论
下一页