C++中用于输入和输出单个字符的函数:中用于输入和输出单个字符的函数:其中最常用的有其中最常用的有getchar函数和函数和putchar函数1. putchar函数(字符输出函数)函数(字符输出函数)putchar函数的作用是向终端输出一个字符例如函数的作用是向终端输出一个字符例如putchar(c);;它输出字符变量c的值它输出字符变量c的值3.4.3 用用getchar和和putchar 函数进行字符的输入和输出函数进行字符的输入和输出例例3.2 输出单个字符输出单个字符include //或者包含头文件或者包含头文件stdio.h:: #include using namespace std;int main( ){char a,b,c; a=′B′;b=′O′;c=′Y′; putchar(a);putchar(b);putchar(c);putchar(′\\n′); putchar(66);putchar(79);putchar(89);putchar(10); return 0;}运行结果为运行结果为BOYBOY可以看到:可以看到: 用用putchar可以输出转义字符,可以输出转义字符,putchar(′\\n′)的作用是输出一个换行符,使输出的当前位置的作用是输出一个换行符,使输出的当前位置移到下一行的开头。
移到下一行的开头putchar(66)的作用是将的作用是将66作为作为ASCII码转换为字符输出,码转换为字符输出,66是字母是字母′B′的的ASCII码码,因此,因此putchar(66)输出字母输出字母′B′其余类似其余类似putchar(10)中的中的10是换行符的是换行符的ASCII码,码,putchar(10)输出一个换行符,作用与输出一个换行符,作用与putchar(′\\n′) 相同也可以输出其他转义字符也可以输出其他转义字符,如,如 putchar(′\\015′) ((输出回车,不换行,使输出的输出回车,不换行,使输出的当前位置移到本行开头)当前位置移到本行开头)2. getchar函数(字符输入函数)函数(字符输入函数)此函数的作用是从终端输入一个字符其一般形式为此函数的作用是从终端输入一个字符其一般形式为getchar(( ),),函数的值就是从输入设备得到的字符函数的值就是从输入设备得到的字符例例3.3 输入单个字符输入单个字符include using namespace std;int main( ){char c; c=getchar( ); putchar(c+32); putchar(′\\n′); return 0;} 在运行时,如果从键盘输入大写字母在运行时,如果从键盘输入大写字母′A′并按回车并按回车键,就会在屏幕上输出小写字母键,就会在屏幕上输出小写字母′a′。
请注意,请注意,getchar( )只能接收一个字符只能接收一个字符getchar函数函数得到的字符可以赋给一个字符变量或整型变量,也可得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分以不赋给任何变量,作为表达式的一部分例例3.5 求方程求方程ax2+bx+c=0的根a,b,c由键盘输入由键盘输入include #include //!! using namespace std;int main( ){float a,b,c,x1,x2; cin>>a>>b>>c; x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a); cout<<″x1=″<
在写程序在写程序时,一定要注意将数学表达式正确地转换成合法的时,一定要注意将数学表达式正确地转换成合法的C++表达式可以看到:可以看到: 顺序结构的程序中的各执行语句是顺序顺序结构的程序中的各执行语句是顺序执行的这种程序最简单,最容易理解执行的这种程序最简单,最容易理解C++提供提供if语句来实现这种条件选择语句来实现这种条件选择条件如何形成呢?条件如何形成呢?简单条件简单条件复合条件复合条件3.6 关系运算和逻辑运算关系运算和逻辑运算C++的关系运算符有:的关系运算符有: ①① < (小于小于) ②② <= (小于或等于小于或等于)优先级相同优先级相同 (高高)③③ > (大于大于) ④④ >= (大于或等于大于或等于) ⑤⑤ == (等于等于) ⑥⑥ !!= (不等于不等于) 优先级相同优先级相同 (低低)3.6.1 关系运算和关系表达式关系运算和关系表达式C++增加了逻辑型数据逻辑型常量只有两个,即增加了逻辑型数据逻辑型常量只有两个,即false(假假)和和true(真真)逻辑型变量要用类型标识符逻辑型变量要用类型标识符boolbool来定义来定义,它的值只能,它的值只能是是true和和false之一。
如之一如bool found,flag=false; //定义逻辑变量定义逻辑变量found和和flag,,并使并使flag的初值的初值 为为falsefound=true; //将逻辑常量将逻辑常量true赋给逻辑变量赋给逻辑变量found由于逻辑变量是用关键字由于逻辑变量是用关键字bool来定义的,因此又称为来定义的,因此又称为布尔变量布尔变量逻辑型常量又称为布尔常量所谓逻辑型,逻辑型常量又称为布尔常量所谓逻辑型,就是布尔型就是布尔型3.6.2 逻辑常量和逻辑变量逻辑常量和逻辑变量在编译系统处理逻辑型数据时,将在编译系统处理逻辑型数据时,将false处理为处理为0,将,将true处理为处理为1因此,逻辑型数据可以与数值型数据因此,逻辑型数据可以与数值型数据进行算术运算进行算术运算如果将一个非零的整数赋给逻辑型变量,如果将一个非零的整数赋给逻辑型变量,则按则按“真真”处理处理,如,如flag=123; //赋值后赋值后flag的值为的值为truecout<
为真a||b 若若a,b之一为真,则之一为真,则a||b为真a 若若a为真,则为真,则!a为假3.6.3 逻辑运算和逻辑表达式逻辑运算和逻辑表达式①①能被能被4整除,但不能被整除,但不能被100整除②②能被能被100整除,整除,又能被又能被400整除用一个逻辑表达式来表示:用一个逻辑表达式来表示:(year % 4 == 0 && year % 100 != 0) || year % 400 == 0 if语句是用来判定所给定的条件是否满足,语句是用来判定所给定的条件是否满足,根据判定根据判定的结果(真或假)决定执行给出的的结果(真或假)决定执行给出的两种操作之一两种操作之一条件满足走一条处理路径;条件不满足走另一条处理条件满足走一条处理路径;条件不满足走另一条处理路径;注意最终都走在一起路径;注意最终都走在一起3.7 选择结构和if语句选择结构和if语句1. if(表达式)语句if(表达式)语句例如:例如:if(x>y) cout<
2. if((表达式)语句表达式)语句1 else 语句语句2例如:例如:if (x>y) cout<500) cost=0.15;else if(number>300) cost=0.10;else if(number>100) cost=0.075;else if(number>50) cost=0.05;else cost=0;图图3.66例例3.6 求三角形的面积求三角形的面积include #include //使用数学函数时要包含头文件使用数学函数时要包含头文件cmath#include //使用使用I/O流控制符要包含头文件流控制符要包含头文件iomanipusing namespace std;int main( ){ double a,b,c; cout<<″please enter a,b,c::″; cin>>a>>b>>c; if (a+b>c && b+c>a && c+a>b) { //复合语句开始复合语句开始 double s,area; //在复合语句内定义变量在复合语句内定义变量 s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); cout<
句结束如果在复合语句外使用如果在复合语句外使用s和和area,,则会在编则会在编译时出错,系统认为这两个变量未经定义将某些变译时出错,系统认为这两个变量未经定义将某些变量局限在某一范围内,与外界隔离,可以避免在其他量局限在某一范围内,与外界隔离,可以避免在其他地方被误调用地方被误调用条件运算符条件运算符(? ::)max=(a>b)?a::b; 其中其中“(a>b)?a::b”是一个是一个“条件表达式条件表达式”它是这它是这样执行的:如果样执行的:如果(a>b)条件为真,则条件表达式的值条件为真,则条件表达式的值就取就取“?”后面的值,即条件表达式的值为a,否则后面的值,即条件表达式的值为a,否则条件表达式的值为条件表达式的值为“::”后面的值,即后面的值,即b3.8 条件运算符和条件表达式条件运算符和条件表达式条件运算符要求有条件运算符要求有3个操作对象,称三目(元)运算个操作对象,称三目(元)运算符,符,它是它是C++中惟一的一个中惟一的一个三目运算符三目运算符条件表达式条件表达式的一般形式为的一般形式为表达式表达式1 ? 表达式表达式2 ∶ ∶表达式表达式3条件运算符的执行顺序是:先求解表达式条件运算符的执行顺序是:先求解表达式1,若为非,若为非0(真)则求解表达式(真)则求解表达式2,此时表达式2的值就作为整,此时表达式2的值就作为整个条件表达式的值。
若表达式个条件表达式的值若表达式1的值为的值为0(假),则求(假),则求解表达式解表达式3,表达式,表达式3的值就是整个条件表达式的值的值就是整个条件表达式的值例例3.7 输入一个字符,判别它是否为大写字母,如果输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换然后是,将它转换成小写字母;如果不是,不转换然后输出最后得到的字符输出最后得到的字符include using namespace std;int main( ){ char ch; cin>>ch; ch=(ch>=′A′ && ch<=′Z′)?(ch+32)::ch; //判别判别ch是否大写是否大写 字母,字母,是则转换是则转换 cout<
2) 当当switch表达式的值与某一个表达式的值与某一个case子句中的常量子句中的常量表达式的值表达式的值相匹配相匹配时时,就执行此,就执行此case子句中的内嵌语子句中的内嵌语句,若所有的句,若所有的case子句中的常量表达式的值都不能与子句中的常量表达式的值都不能与switch表达式的值匹配,就执行表达式的值匹配,就执行default语句要形成真正多分支,必须加要形成真正多分支,必须加break语句即在执行一即在执行一个个case子句后,使流程跳出子句后,使流程跳出switch结构,可以用一个结构,可以用一个break语句来达到此目的将上面的语句来达到此目的将上面的switch结构改写结构改写如下:如下:switch(grade) {{case ′A′:: cout<<″85~100\\n″;;break; case ′B′:: cout<<″70~84\\n″;;break; case ′C′:: cout<<″60~69\\n″;;break; case ′D′:: cout<<″<60\\n″;;break; default :: cout<<″error\\n″;;break; }}最后一个子句(最后一个子句(default))可以不加可以不加break语句。
如果语句如果grade的值为的值为′B′,,则只输出则只输出“70~84”流程图见流程图见图图3.7图图3.7(3) 多个多个case可以共用一组执行语句可以共用一组执行语句,如,如 ... case ′A′:: case ′B′:: case ′C′:: cout<<″>60\\n″;;break;break; ...当当grade的值为的值为′A′、、′B′或或′C′时都执行同一组语时都执行同一组语句因为,没加句因为,没加break.例例3.8 编写程序,判断某一年是否为闰年编写程序,判断某一年是否为闰年include //注意注意if—else的嵌套关系的嵌套关系using namespace std;int main( ) //注意注意if-else 配对的对应性!!配对的对应性!!{ int year; bool leap; cout<<″please enter year::″; //输出提示输出提示 cin>>year; //输入年份输入年份 if (year%4==0) //年份能被年份能被4整除整除 {if(year%100==0) //年份能被年份能被4整除又能被整除又能被100整除整除 {if (year%400==0) //年份能被年份能被4整除又能被整除又能被400整除整除 leap=true; //闰年,令闰年,令leap=true(真真) else leap=false;} //非闰年,令非闰年,令leap=false(假假) else //年份能被年份能被4整除但不能被整除但不能被100整除肯定是闰年整除肯定是闰年 leap=true;} //是闰年,令是闰年,令leap=true3.10 编写选择结构的程序编写选择结构的程序 else //年份不能被年份不能被4整除肯定不是闰年整除肯定不是闰年 leap=false; //若为非闰年,令若为非闰年,令leap=false if (leap) cout<
路程运输公司对用户计算运费路程(s)越远,每公越远,每公里运费越低标准如下:里运费越低标准如下: s<<250km 没有折扣没有折扣 250≤s<<500 2%%折扣折扣 500≤s<<1000 5%%折扣折扣 1000≤s<<2000 8%%折扣折扣 2000≤s<<3000 10%%折扣折扣 3000≤s 15%%折扣折扣设每公里每吨货物的基本运费为设每公里每吨货物的基本运费为p(price的缩写的缩写),货,货物重为物重为w(wright的缩写的缩写),距离为s,折扣为,距离为s,折扣为d(discount的缩写的缩写),则总运费,则总运费f(freight的缩写的缩写)的计算的计算公式为:公式为: f = p * w * s * (1 - d)图图3.8S转换为转换为C的的值,以形成多分支:值,以形成多分支:C=int (S/250)据此写出程序如下:据此写出程序如下: #include using namespace std;int main( ){int c,s; float p,w,d,f; cout<<″please enter p,w,s::″; cin>>p>>w>>s; if(s>=3000) c=12; else c=s/250;//由由c的值形成多分支的值形成多分支 switch (c) { case 0::d=0;break; case 1::d=2;break; case 2:: case 3::d=5;break; case 4:: case 5:: case 6:: case 7::d=8;break; case 8:: case 9:: case 10:: case 11::d=10;break; case 12::d=15;break; } f=p*w*s*(1-d/100.0);//计算公式计算公式 cout<<″freight=″<
需要反复执行某一操作时,就要用到循环结构v顺序结构、选择结构和循环结构是结构化程序设计顺序结构、选择结构和循环结构是结构化程序设计的的3 3种基本结构种基本结构,是各种复杂程序的基本构造单元是各种复杂程序的基本构造单元v因此程序设计者必须熟练掌握选择结构和循环结构因此程序设计者必须熟练掌握选择结构和循环结构的概念及使用方法的概念及使用方法3.11 循环结构和循环语句循环结构和循环语句一般形式如下:一般形式如下:while (表达式表达式) 语句语句其作用是:其作用是: 当指定的条件为真当指定的条件为真(表达式为非表达式为非0)时,执时,执行行while语句中的内嵌语句其流程图见图语句中的内嵌语句其流程图见图3.9其特点是:点是:先判断表达式,后执行语句先判断表达式,后执行语句while循环称为循环称为当型循环当型循环(当条件满足,循环之(当条件满足,循环之, 否则,不循环否则,不循环))图图3.93.11.1 用用while语句构成循环语句构成循环例例3.10 求求1+2+3+…+100根据流程图写出程序:根据流程图写出程序://程序输入格式程序输入格式#include using namespace std;int main( ){int i=1,sum=0; while (i<=100) { sum=sum+i; i++;//叫循环变量叫循环变量 }cout<<″sum=″<
括起来,以复合语句形式出现2) 在循环体中应有使循环趋向于结束的语句在循环体中应有使循环趋向于结束的语句do-while语句的特点是语句的特点是先执行循环体,然后判断循环先执行循环体,然后判断循环条件是否成立条件是否成立其一般形式为其一般形式为do 语句语句 while (表达式表达式);注意分号;注意分号它是这样执行的:先执行一次指定的语句它是这样执行的:先执行一次指定的语句(即循环体即循环体),然后判别表达式,当表达式的值为非零,然后判别表达式,当表达式的值为非零(“真真”) 时,返回重新执行循环体语句,如此反复,直到表达时,返回重新执行循环体语句,如此反复,直到表达式的值等于式的值等于0为止,此时循环结束可以用图为止,此时循环结束可以用图3.11表表示其流程示其流程3.11.2 用用do-while语句构成循环语句构成循环 图图3.11 图图3.12例例3.11 用用do-while语句求语句求1+2+3+…+100可编写出下面的程序:可编写出下面的程序: #include using namespace std;int main( ){int i=1,sum=0; do { sum=sum+i; i++; }while (i<=100); cout<<″sum=″<
2) 求解表达式求解表达式2,若其值为真,若其值为真(值为非值为非0),则执行,则执行for语句中指定的内嵌语句,然后语句中指定的内嵌语句,然后执行下面第执行下面第(3)步若为假步若为假(值为值为0),则结束循环,转,则结束循环,转到第到第(5)步3.11.3 用用for语句构成循环语句构成循环(3) 求解表达式求解表达式34) 转回上面第转回上面第(2)步骤继续执行步骤继续执行5) 循环结束,执行循环结束,执行for语句下面的一个语句语句下面的一个语句 一个循环体内又包含另一个完整的循环结构,称为循一个循环体内又包含另一个完整的循环结构,称为循环的嵌套内嵌的循环中还可以嵌套循环,这就是多环的嵌套内嵌的循环中还可以嵌套循环,这就是多层循环3.12 循环的嵌套循环的嵌套break;其作用为使流程从循环体内跳出循环体,其作用为使流程从循环体内跳出循环体,即提前结束即提前结束循环,接着执行循环体下面的语句循环,接着执行循环体下面的语句break语句只能语句只能用于循环语句和用于循环语句和switch语句内,不能单独使用或用于语句内,不能单独使用或用于其他语句中。
其他语句中3.13 break语句和语句和continue语句语句continue语句的一般格式为语句的一般格式为continue;其作用为其作用为结束本次循环,即跳过循环体中下面尚未执结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定行的语句,接着进行下一次是否执行循环的判定continue语句和语句和break语句的区别是语句的区别是::continue语句只语句只结束本次循环,而不是终止整个循环的执行而结束本次循环,而不是终止整个循环的执行而break语句则是结束整个循环过程,不再判断执行循语句则是结束整个循环过程,不再判断执行循环的条件是否成立环的条件是否成立 图图3.18 图图3.19例例3.12 用下面公式求用下面公式求π的近似值的近似值π/4≈1-1/3+1/5-1/7+…直到最后一项的绝对值小于直到最后一项的绝对值小于10-7为止根据给定的算法很容易编写程序如下:根据给定的算法很容易编写程序如下:#include #include #include using namespace std;int main( ){int s=1; //符号符号 double n=1,t=1,pi=0;//n 分母;分母;t某一项的值某一项的值 while((fabs(t))>1e-7) {pi=pi+t; n=n+2;3.14 编写循环结构的程序编写循环结构的程序 s=-s; t=s/n; } pi=pi*4; cout<<″pi=″<
例例3.14 找出找出100~200间的全部素数间的全部素数编写程序如下:编写程序如下:#include #include #include using namespace std;int main( ){int m,k,i,n=0; bool prime; //定义布尔变量定义布尔变量prime for(m=101;m<=200;m=m+2) //判别判别m是否为素数,由是否为素数,由101变化到变化到200,增量,增量2 {prime=true; //循环开始时设循环开始时设prime为真,即先认为为真,即先认为m为素数为素数 k=int(sqrt(m)); //用用k代表根号代表根号m的整数部分的整数部分 for(i=2;i<=k;i++) //此循环作用是将此循环作用是将m被被2至根号至根号m除,检查是否能整除除,检查是否能整除 if(m%i==0) //如果能整除,表示如果能整除,表示m不是素数不是素数m 为为素数条件:能被素数条件:能被2至至sqrt(m)的数的数整除整除{ prime=false; //使使prime变为假变为假 break; //终止执行本循环终止执行本循环} if (prime) //如果如果m为素数为素数 {cout<
为使电文保密,往往译密码为使电文保密,往往按一定规律将电按一定规律将电文转换成密码文转换成密码,收报人再按约定的规律将其译回原文收报人再按约定的规律将其译回原文例如,可以按以下规律将电文变成密码:将字母例如,可以按以下规律将电文变成密码:将字母A变变成字母成字母E,,a变成变成e,,即变成其后的第即变成其后的第4个字母个字母,,W变变成成A,,X变成变成B,,Y变成变成C,,Z变成变成D见图见图3.20字母按上述规律转换,按上述规律转换,非字母字符不变非字母字符不变如″Wonderful!″转换为转换为″Asrhivjyp!″输入一行字输入一行字符,要求输出其相应的密码符,要求输出其相应的密码 图图3.20程序如下:程序如下:#include using namespace std;int main( ){char c; while ((c=getchar( ))!=′\\n′) {if((c>=′a′ && c<=′z′) || (c>=′A′ && c<=′Z′)) {c=c+4; if(c>′Z′ && c<=′Z′+4 || c>′z′) c=c-26; } cout<
如果是换行符就执行如果是换行符就执行while语句中的复语句中的复合语句合语句(即花括号内的语句即花括号内的语句),对输入的非换行符的字,对输入的非换行符的字符进行转换处理符进行转换处理按前面分析的思路对输入的字符进行处理有一点请按前面分析的思路对输入的字符进行处理有一点请读者注意:内嵌的读者注意:内嵌的if语句不能写成语句不能写成if (c>′Z′|| c>′z′) c=c-26;因为所有小写字母都满足因为所有小写字母都满足“c>′Z′”条件,从而也条件,从而也执行执行“c=c-26;”语句,这就会出错因此必须限制其语句,这就会出错因此必须限制其范围为范围为“c>′Z′ && c<=′Z′+4”,,即原字母为即原字母为′W′到到′Z′,,在此范围以外的不是原大写字母在此范围以外的不是原大写字母W~Z,,不不应按此规律转换请考虑:为什么对小写字母不按此应按此规律转换请考虑:为什么对小写字母不按此处理,即写成处理,即写成c>′z′ && c<=′z′+4而只须写成而只须写成“c>′z′”即可作业:作业:第第3章所有例题章所有例题习题习题11,,18。