}
}
case 11:
cout << 30 << endl; break;
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
cout << 31 << endl; break;
cout << \
default:
return 0;
练习题:成绩转换
百分制成绩转换为五级计分制时,90分以上为A,80~89分为B,70~79分为C,60~69分为D,0~59分为E。(建议使用switch语句完成) Input
测试有多组,每组输入1个整数score。处理到输入结束。 Output
逐行输出百分制成绩score对应的字符等级。若score非法,输出\Sample Input 1 61 102
Sample Output E D error!
2、do……while语句
do……while 循环语句格式: do
循环体 while(循环条件);
do……while语句先做一次循环体,再判断循环条件,在满足循环条件时反复执行循环体。循环体中需要有循环变量改变使循环趋于结束的语句,以避免死循环。若循环体有多条语句,则必须以{}构成复合语句 例11:用do……while循环求[1,n]累加和 #include
int main() { }
do……while语句与while语句的区别在于若一开始循环条件就不成立时,do……while语句执行1次循环体,while语句执行0次循环体。
思考:如何保证输入的数据一定在[1,10]范围内? sum=0;
int i=1;//循环变量赋初值 do {//循环体
cout << sum << endl;
return 0;
sum += i;
i++;//循环变量改变使循环趋于结束 int n, sum; cin>>n;
}while(i<=n);//满足循环条件则执行循环体
提示:使用do……while语句,当不在[1,10]范围内时重复输入。
六*、编译预处理
编译预处理主要包括宏定义、文件包含、条件编译,以#开始,不需要用分号结束,一般单独写在一行上。
宏定义只是简单字符串替换,经常用来实现带名常量定义,如: #define PI 3.1415926
文件包含是指一个源文件可以将另外一个头文件或源文件的全部内容包含进来,即将另外的文件包含到本文件之中。C++语言提供了#include命令用来实现“文件包含”的操作。在#include命令中,文件名可以用双引号或尖括号括起来:
#include <文件名> #include “文件名”
二者的区别是:用尖括弧时,系统到存放C++库函数头文件所在的目录中寻找要包含的文件,这称为标准方式;用双引号时,系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找(即再按尖括号的方式查找)。
一般来说,如果为调用库函数而用#include命令来包含相关的头文件,则用
尖括号,以节省查找时间。如果要包含的是用户自己编写的文件(这种文件一般都在当前目录中),一般用双引号。
条件编译是带#的if语句(有多种形式),以#endif结束。我们在Online Judge系统中提交代码时常常在main函数开始处写上下面的语句: #ifndef ONLINE_JUDGE
freopen(\freopen(\#endif
上面的freopen函数分别以读、写方式打开输入文件e:\\\\input.txt和输出文件e:\\\\ output.txt,以便于在没有定义符号常量ONLINE_JUDGE的本地代码中以文件的方式来提供测试数据。
宏定义(#define)命令亦称宏替换命令,与其相关的还有取消宏定义(#undef)命令。宏定义命令的功能是用一个称为宏名的标识符代表一段字符串,后者称为宏替换体。在预处理过程中,把程序中出现的所有该宏名,用替换体取而代之,其格式为:
#define <宏名> <宏替换体>
例如: #define YES 1 #define PI 3.14159 #define RAD PI/180
#define PRT1 cout<<\
#define Max(a,b)((a)>(b)?(a):(b)) #define ZERO 0.000001 其中:
? #:指明为预处理命令。 ? define:指明为宏定义命令。
? 宏名:为一标识符,习惯上用大写字母组成,它代替宏替换体出现在程序中。 ? 宏替换体:为一任意字符串。它可能是一个数字常量,可计算值的算术表达式,字符
串常量也可以是一个语句。
几点说明:
(1)宏定义可以作为常量说明。例如,符号常量 YES 为整数 1,PI 为浮点常量 3.14159,
其作用类似于后面介绍的常量说明,但二者是有区别的。
(2)宏名也可以出现在另一个宏定义的宏替换体中,例如: #define RAD PI/180
当然在这个宏定义之前应已有宏名 PI 的定义。在预处理过程中要经过两重替换。
(3)宏替换体可以是符号或字符串,例如: #define BEGIN { #define END }
#define ERROR \
前两个宏定义,使得在程序中可以像 Pascal 语言那样用 BEGIN、END 表示程序块的开始和结束;后一个宏定义可用 ERROR 代替字符串“can't find the file!”输出。
(4)宏替换可以是可执行的表达式语句,如上例中 PRT1 的定义,在程序中使用:
PRT1;
实际上是执行一个字符串输出语句 cout<<\。
(5)宏替换体也可以为空。其作用可在后文中见到,它表示该宏名已经被定义过。如:
#define ONLINE_JUDGE
(6)一种复杂的宏替换是带参数的宏替换,其格式为: #define <宏名><形参> <宏替换体>
其中的形参,可以在程序调用时用实参(表达式)替换。下面的例子说明其使用方法:
#include
#define PUTOUT(k) cout<
int main() {
int m=2,n=3,p; p=MAX(2*m, m+n); PUTOUT(p); PUTOUT(MAX(4,m)); return 0; }
注意:<宏替换体>中的参数最好都用“()”括起来,以避免简单字符串替换。 (7)取消宏定义命令,是用来改变原有定义内容的手段,例如: #define ZERO 0.000001 #undef ZERO
条件编译命令使得程序可以根据条件来决定哪部分程序参加编译,哪部分程序不参加编译。这种功能有助于程序员完成以下工作: (1)避免生成不必要的程序代码。 (2)在调试中加入若干调试语句。
(3)使程序对不同计算机和操作系统具有可移植性。 条件编译命令有 4 组: #if 和#endif #ifdef 和#endif #ifndef 和#endif