从分支到for循环
[日期:2020-11-04] | 作者:信息技术 次浏览 | [字体:大 中 小] |
【商场促销】分支语句嵌套练习评讲
某商场为迎接即将到来的“六一”儿童节,推出了一系列优惠活动。
(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米?