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=″< 运行情况如下: please enter p,w,s:100 20 300↙ freight=588000 练习(分支) 一、选择 1、下列运算符中,优先级最低的是 A.<= B.!= C.&& D.|| 2、下列运算符对中,优先级相同的是 A.+=,*= B.!,&& C.&,| D.>>,== 3、已知 int a=5;计算a-=a*=a+=a/a后,变量a的值是 A.0 B.1 C.2 D.3 4、下列关于表达式的描述中,错误的是 A.相同运算符组成的表达式的计算顺序都是从左到右的 B.任何一个合法的表达式都应该有确定的值和类型 C.关系表达式和逻辑表达式的值是逻辑值, 用1或0表示 D.逗号表达式的值和类型取决于组成该表达式的最后一个操作数的值和类型 5、已知 int i,j,k,a;i=j=k=0;a=10,运行下段程序后,a的值是 if(!i) ++a; else if(j); if(k) a=5; else a=8; A.10 B.11 C.5 D.8 二、看程序写结果。 int main(){//题9 int a; cin>>a; if (a%2==0) cout< 输入:5 int main(){//题10 int a,b,c; cin>>a>>b>>c; if (a cout< 输入:4 9 7 int main() {//noip2005-p1 int a, b; cin>>a; b = (a * (a * a)) + 1; if (b%3 == 0) b = b / 3; if (b%5 == 0) b = b / 5; if (b%7 == 0) b = b / 7; if (b%9 == 0) b = b / 9; if (b == 0) b = b / 11; if (b == 0) b = b / 13; if (b == 0) b = b / 15; cout<<(100*a-b) / 2; } 输入:10 int main(){ int a,b; a=b=1; if (b!=0) a=10; cout< cout< 三、专项编程练习:顺序结构 行驶了多远(程序文件名:s) 【问题描述】一辆汽车在公路上行驶的速度为 V m/s ,当行驶了t秒后,求小汽车行驶的路程S是多少米?已知v和 t,求s。【样例输入】2 9 【样例输出】18 矩形周长和面积(程序文件名:rec) 【问题描述】输入一个矩形的长和宽,求它的周长和面积。 【样例输入】9 2 【样例输出】22 18 7、阿基米德数字(程序文件名:arch) 【问题描述】所谓?阿基米德特性?是这样的一条性质:对任意两个整数a、b,保证b>a>0,总存在整数m,使得a*m>b 。 请编写一个程序,对输入的a、b,输出最小的m。 【样例输入】2 9 【样例输出】5 作业本问题(程序文件名:exercise) 【问题描述】四年级的时候,老师在课堂上出了一道题:小华和小青都有一些作业本。如果小华给小青a本,两个人的作业本就一样多;如果小青给小华b本,小华的作业本就是小青的c倍,问小华和小青共有多少个作业本。 【输入格式】输入为一行,依次为a、b、c三个整数 【输出格式】输出小华和小青一共有的作业本数量。 【样例输入】3 2 3 【样例输出】20 【数据范围】输入三个数为大于等于0和小于等于10000的整数 (二)选择结构 1518、求分段函数的值(程序文件名:func) 11 【问题描述】编程求解数学中的分段函数。 x+1 (当x>0) y=f(x)= 0 (当x=0) x-1 (当x<0) 【输入说明】输入一行,只有一个整数x(-30000<=x<=30000)。 【输出说明】输出只有一行,包括1个整数(即y)。 【样例输入】3 【样例输出】4 1520.判断一元二次方程有无实根 题目说明:在方程 Ax^2+Bx+C=0 中,任意输入系数A,B,C,(-1000 <= A,B,C <=1000)m判断有无实数根,如有实根则打印“YES”; 1527、发放奖金(程序文件名:bonus) 【问题描述】某车间按工人加工零件的数量发放奖金,奖金分为五个等级:每月加工零件数N < 100者奖金为10元;100 < = N < 110者奖金为30元;110 < = N <120 者奖金为50元;120 < = N <130 者奖金为70元;N > 130者奖金为80元。 请编程,由键盘输入加工零件数量,显示应发奖金数。 【输入说明】输入加工零件数量。 【输出说明】输出应发奖金数。 【样例输入】85 【样例输出】10 无实根则打印“NO SOLUTION”。(B*B-4*A*C的值>=0则表示有实根,<0表示无实根) 输入说明:输入只有一行,包括3个整数。 输出说明:输出只有一行。 样例输入:1 2 0 样例输出:YES 1521、行礼托运价格(程序文件名:price) 【问题描述】某车站行李托运收费标准是:10公斤或10公斤以下,收费2.5元,超过10公斤的行李,按每超过1公斤增加1.5元进行收费。 试编一程序,输入行李的重量,算出托运费。 【输入说明】输入只有一个数,表示行李的重量(<=10000)。 【输出说明】输出只有一行,包括1个数(保留两位小数)。 【样例输入】10 【样例输出】2.50 1522、判断成绩等级(程序文件名:score) 【问题描述】输入某学生成绩(0<=成绩<=100),如果成绩在86分及86分以上则输出?VERY GOOD? ,如果在60到85之间的则输出?GOOD?,小于60的则输出?BAD?。 【输入说明】输入1个数,表示成绩。 【输出说明】输出只有一行。 【样例输入】80 【样例输出】GOOD 1523、求三个数的最大数(程序文件名:max3) 【问题描述】已知有三个不等的数(均小于10000),将其中的最大数找出来。 【输入说明】输入3个整数,之间用一个空格分开。 【输出说明】输出只有一个整数。 【样例输入】1 5 8 【样例输出】8 1524、求三个数的大小顺序(程序文件名:sequence3) 【问题描述】输入三个数(都小于10000),按由大到小顺序打印出来。 【输入说明】输入3个整数。 【输出说明】输出3个整数,之间用空格隔开。 【样例输入】1 2 3 【样例输出】3 2 1 1525、判断某年某月的天数(程序文件名:days) 【问题描述】输入年,月,然后告诉该月有多少天。 【输入说明】输入2个整数,之间用一个空格分开。 【输出说明】输出1个整数。 【样例输入】2000 2 【样例输出】29 5、打折的电池(程序文件名:batt) 【问题描述】信和超市里卖电池,每个电池a角钱,若数量超过b个,则可打c折。根据输入的电池个数d输出应付的金额。 【输入说明】输入4个数,分别表示a,b,c,d 【输出说明】输出一个数据,表示应付的金额。(保留一位小数) 【样例输入】8 10 7.5 12 【样例输出】72.0 6、求最小值(程序文件名:min) 【问题描述】输入四个整数,输出其中的最小数。 【样例输入】2 5 1 9 【样例输出】1 8、判断回文数(程序文件名:palin) 【问题描述】我们将左右对称的自然数称为回文数,如4114,输入一个四位数,如果是回文数则输出yes,否则输出no 【样例输入】4114 【样例输出】yes 1529、模拟计算器(存储文件名:calc) 【问题描述】津津这几天非常高兴,因为放寒假了,也因为有机会接触编程魔法了。几天的时间津津就会编写很多程序了,现在津津正准备编写一个模拟计算器,你能帮助她吗?这个模拟计算机只需要实现对两个实数进行加(+)、减(-)、乘(*)、除(/)四种运算的功能。 【输入说明】输入包括二行数据,第一行数据为进行运算的两个实数,中间用空格隔开,第二行只有一个运算符。 【输出说明】输出运算结果(运算结果保留一位小数,前面不留空格),当除数为0时,运算结果为error。 【样例输入】9 8 + 【样例输出】17.0 12 循环结构 顺序结构程序自上而下只执行一遍,分支结构中有些语句可能一遍也执行不了,这两种结构都没有充分利用计算机速度快的特点。循环结构是让一些语句在一定条件下反复多次被执行。 循环结构是三大程序结构之一,是C++程序设计的重点内容。顺序结构、选择结构只解决简单问题,是程序设计的基础,而循环结构则是程序设计的实际应用。顾名思义,所谓循环,是指某些语句由于需要而被反复执行多次的现象。 三种循环语句(for、while、do-while)。 1、for循环 格式:for( 初始化; 条件; 调整) 循环体; 循环体可能是复合语句,要写为下面这种格式: for( 初始化; 条件; 调整) { 循环体; } C++中的for语句使用最为广泛和灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。 for语句的一般格式为 for(表达式1;表达式2;表达式3) 语句 它的执行过程如下: (1) 先求解表达式1。 (2) 求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。 (3) 求解表达式3。 (4) 转回上面第(2)步骤继续执行。 (5) 循环结束,执行for语句下面的一个语句。 例如,输出10个?*?,可用如下语句即可完成: cout << “**********”; 如果要输出1000个?*?,再用上面的写法就不现实了! 解决办法是: 输出一个?*?,即cout << ?*?;重复1000次。 int main(){ int i; for(i=1;i<=1000;i++)cout << “*\ } ○for 先判断条件而后执行循环体,即有可能循环体一 次也不被执行。如下语句中循环体?s=s+i?一次也不被执行: for(i=10;i<0;i++)s=s+i; ○c++对循环变量的数据类型没有什么特殊要求:整型int,实型double,字符型 char都可以 ○for 适宜循环次数明显的情况,又称计数循环。 ○for中三个表达式间只能用分号相隔,且即使三个表达式省略时,分号也不可省略。 ○当循环语句超过一条语句时,要用{ }将语句组合在一起,构成复合语句。 ○for中三个表达式,可以为多条语句。 如:for(i=1,j=2;i<=10;i++,j++)s=s+i+j; 2、while循环 格式: while ( 条件表达式) {语句组} 等同于 for(; 条件表达式; ) {语句组} 3、do while循环 1)格式: do { 语句组} while(条件表达式); for循环和while循环都是先判断表达式是否成立,然后再决定是否循环,do-while的差别在于先执行一次循环再看表达式是否成立。它是这样执行的:先执行一次指定的语句(即循环体),然后判别表达式,当表达式的值为非零(?真?) 时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。 例3.11 用do-while语句求1+2+3+…+100。 可编写出下面的程序: #include {int i=1,sum=0; do { sum=sum+i; //累加求和 i++; }while (i<=100); //条件成立就返回do后面大括号中的内容执行 cout<<″sum=″< 13 4、转向语句 1)break语句 break在循环体中,也可以从循环体内跳出循环体,提前结束循环。 for ( ; ; ) { cin>>x; if (x==123) break; } 注意:break只能退出一层循环 2)continue语句 continue:其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。 int main( ) { int i; for (i=1;i<=5;i++) { if (i%2)cout<<“*”; else continue; cout<<“#”; } cout<<“ $\\n”; } 结果为:*#*#*# $ 5、多重循环 循环嵌套:这是循环结构的重点和难点。三种循环语句可以互相嵌套(而不是交叉!),共有六种情况,构成循环嵌套结构的各种形式。 多重循环格式之一: for( ; ; ){ 语句组; for( ; ; ) { 语句组; } 语句组; } 例题: 如输出一个m×n的一个矩形的’*’号阵 样例输入:3 5 样例输出: ***** ***** ***** 一般用外循环控制行,内循环控制每行输出的内容. 如本例中用m控制行,n控制每行上有多少个*号,每行上的*号输出完毕后输出一个换行符。 输出m行n列*号 cin>>m>>n; for( i=0;i //外循环通常用作控制行,表示输出图形有m行 for(j=0;j cout< 外循环i=0时,内循环j从0一直变化到n-1,即内循环中的语句{ cout<<‘*’; }被执行了n次,语句 cout< 有时每列上的字符个数不同,如 n=3时,输出如下图形 * ** *** cin>>n; for( i=0;i #include for(i=1;i<=20;i++) {cout< if(i%2==0) cout< 14 f1=f1+f2; //左边的f1代表第3个数,是第1、2个数之和 f2=f2+f1;//左边的f2代表第4个数,是第2、3个数之和 } return 0; } 有时每行上的字符个数以等差数列递增,如 n=3时,输出如下图形 * *** ***** cin>>n; for( i=1;i<=n;i++ ){ for( j=1;j<=2*i-1;j++ )//每行上的字符数目以2递增,因此是2*i cout<*?; cout< 如果是这样的金字塔形式 n=3,输出 * *** ***** 可以看作是先输出了一个倒三角形的空格,然后再输出上例中的图形 cin>>n; for( i=1;i<=n;i++ ){ for(j=1;j<=n-i;j++) //每行上的空格数是n-1,n-2,...,1,0这样一个递减序列,而i每次递增1,要将一个递增序列改为递减序列,直接在前面加上-号 cout<<' '; for( j=1;j<=2*i-1;j++){//每行上的字符数目以2递增,因此是2*i cout<*?; } cout< 简单算法与常用技巧 1、输入数据的数量不确定的处理 可以用while(cin>>n) 来进行处理。一直到无输入流数据时才退出循环。 2、数字的分离 如输入一个不知道位数的整数,要将其倒序输出 cin>>a; b=0; while(a!=0){ //可接写为while(a) b=b*10+a;//将a的个位取出来累加到b中 a=a/10; //将a的个位去掉 } cout< 3、计数器 计数器在循环中的一般形式 cin>>n;j=0; //计数器初值一般为0 for(i=1;i<=n;i++){ cin>>a; if(a%2==0) j=j++; } cout< 4、累加器 累加器在循环中的一般形式 cin>>n;s=0;//n个数的累加 for(i=1;i<=n;i++){ cin>>a; s=s+a;} cout< 5、累乘器 累乘器在循环中的一般形式 cin>>n;s=1; for(i=1;i<=n;i++){ cin>>a; s=s*a;} cout< 6、标记法 输入整数n,请判断其是否为素数(质数)。 cin>>n; f=1; //用f做标记,为1则表示是素数 for( j=2;j if(n%j==0)f=0;//f为0表示n在2~n-1间有约数 if(f==1) cout<<”yes”; else cout<<”no”; 7、求最大值 先假设输入的第一个数即为最大数,然后用它去和后面的数一一进行比较,如果后面的数比它大,则将大的数 15