从分支到for循环
[日期:2021-10-25] | 作者:信息技术 次浏览 | [字体:大 中 小] |
【商场促销】分支语句嵌套练习评讲
某商场为迎接即将到来的“六一”儿童节,推出了一系列优惠活动。
(1)如果是该商场的VIP客户,那么:
如果购买的商品价值在500元以下(含500元),将享受8.5折优惠;
如果购买的商品价值在500元以上,1000元以下(含1000元),将享受8折优惠;
如果购买的商品在1000元以上,除了享受7.5折优惠,还将获得一个惊喜大礼包。
(2)如果不是VIP客户,那么:
如果购买的商品价值在500元以下(含500元),将享受9折优惠;
如果购买的商品价值在500元以上,除了享受9折优惠,同时还将获得一个惊喜大礼包。
本题的任务是根据顾客的身份和购买商品的价值,给出一个应付金额,以及在付款时,是否可以领取大礼包。
【输入格式】
第一行一个字符“V”或“C”,“V”表示该顾客是VIP客户,“C”表示是普通客户。
第二行一个正整数,int范围以内,表示该顾客购买的商品价值。
【输出格式】
第一行表示是否可以领取大礼包,如果可以输出“YES”,否则输出“NO”。
第二行一个小数,表示顾客应付金额。
【样例输入】
V
580
【样例输出】
NO
464.0
完整程序如下:
#include <iostream>
using namespace std;
int main()
{
char a; //定义字符型变量
cin>>a; //读入一个字符,这个字符可能是V或者C
int w;
cin>>w; //读入顾客购买的商品价值
if (a=='V') //假如是VIP客户
{
if (w<=500) cout<<"NO"<<endl<<w*0.85; //购买商品价值在500以内,包含500
if (w>500&&w<=1000) cout<<"NO"<<endl<<w*0.8; //购买商品价值在500~1000,包含1000
if (w>1000) cout<<"YES"<<endl<<w*0.75; //购买商品价值超过1000
}
else //不是VIP客户
{
if (w<=500) cout<<"NO"<<endl<<w*0.9; //购买商品价值500以内,包含500
if (w>500) cout<<"YES"<<endl<<w*0.9; //购买商品价值超过500
}
return 0;
}
【邮资】分支语句练习
根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克),基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克部分按500克计算;如果用户选择加急,多收5元。
输入一行:两个整数,第一个表示邮件的重量,第二个数为1或者0,1表示加急,0表示不加急。
输出一个整数,表示应收邮费。
#include <iostream>
using namespace std;
int main()
{
int w,a,ans;
cin>>w>>a;
if (w<=1000) ans=8;
if (w>1000&&(w-1000)%500==0) ans=8+((w-1000)/500)*4;
if (w>1000&&(w-1000)%500!=0) ans=8+(((w-1000)/500)+1)*4;
if (a==1) ans=ans+5;
cout<<ans;
return 0;
}
循环语句:for循环
#include<iostream>
using namespace std;
int main()
{
for(int i = 1; i <= 10; i++)
cout<<'@';
return 0;
}
如果题目改成输出n个@,每行输出10个,最后一行有多少输出多少,应怎样修改程序?
例2.利用for循环,计算输出1+2+…+100的和。
#include <iostream>
using namespace std;
int main ()
{
int sum=0;
for (int i=1; i<=100 ; i++)
sum+=i; //i初始值1,终值为100,每次增量为1
cout << sum;
return 0;
}
如果题目改成输出1+3+5+…+99的和,应怎样修改程序?
例3.从键盘输入n个数(每个数的绝对值在10000以内),输出其中最大的数。
#include <iostream>
using namespace std;
int main()
{
int ans=-10001,n,a; //想想为什么这里给ans赋值为-10001,还可以改成别的吗?
cin>>n; //先从键盘输入有多少个数
for (int i=1;i<=n;i++)
{
cin>>a; //在循环里依次输入每个数,因为一共循环n次,就读入了n个数
if (a>ans) ans=a; //每读入一个数,就跟ans比较一下,把大者放入ans
}
cout<<ans; //输出结果
return 0;
}
【练习】
1.输出1~100之间的所有偶数,每个数字之间用一个空格隔开。
输出形如:2 4 6 8 … 98 100。
法1:可以想到对于1~100之间的100个数字i,直接重复进行判断,如果i是偶数,则输出i的值。法2:在上述分析的基础上,再进一步分析,我们都知道,相邻偶数之间的差值为2,所以,我们还可以设置循环变量的初始值为2,增量为2的for循环,使得循环次数减少为50次。
2.从键盘输入n个数(每个数的绝对值不超过10000),输出这组数的最大跨度值(即最大数与最小数之间的差值)。
3. 一张纸的厚度是0.0001米,将纸对折,问对折多少次厚度超过珠穆朗玛峰的高度8848米?
【多重for循环】
例1.打印如下星号三角形,一共打印n(n<=20)行,n从键盘输入。
*
**
***
****
*****
******
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=i;j++)
cout<<'*'; //循环i次,输出i个*号
cout<<endl; //每行输完i个*号后换行
}
return 0;
}
例2.假设a、b、c均为整数,且满足a,b,c 大于等于1,并且小于等于100,找出所有符合条件:“a2+b2=c2”的整数组。
输入:无
输出:
按a从小到大的顺序输出所有满足条件的整数组(若a相同,则按b从小到大的顺序输出),每行一组,每一组数据的输出样式为:a*a+b*b=c*c
注意:3*3+4*4=5*5与4*4+3*3=5*5是相同的解,不要重复输出;
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
for(a=1;a<=100;a++)
for(b=a;b<=100;b++)
for(c=b;c<=100;c++)
if(c*c==a*a+b*b)
cout<<a<<'*'<<a<<'+'<<b<<'*'<<b<<'='<<c<<'*'<<c<<endl;
return 0;
}
【老生练习】循环的控制与多重循环
1. 有1元,2元,5元的钱,现在凑成200元,有多少种可能性?
2. 一个数如果恰好等于它的因子之和(不包括它自己),这个数就称为完数。例如6=1+2+3,所以6是完数。编程找出1000以内的所有完数。
课后思考:
【国王的奖励】
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。
请计算在前K天里,骑士一共获得了多少金币。
输入:输入只有1行,包含一个正整数K(1≤K≤10000),表示发放金币的天数。
输出:输出只有1行,包含一个正整数,即骑士收到的金币数。
样例输入:6
样例输出:14
提示:
骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到 1+2+2+3+3+3=14 枚金币。
【津津的储蓄计划】
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。
为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。
例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。
津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。
现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。
输入格式:
输入包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。
输出格式:
输出包括一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。
样例输入1: 样例输入2:
290 290
230 230
280 280
200 200
300 300
170 170
340 330
50 50
90 90
80 80
200 200
60 60
样例输出1:-7 样例输出2:1580