从分支到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米?