【C++循环练习题(附答案)】

目录

1.给出一批百分制成绩,输出对应的成绩等级A、B、C、D、E

2.求S=1+(1+2)+(1+2+3)+......+(1+2+3+......+n)

3. 用循环输出形如下述的图形:

1.给出一批百分制成绩,输出对应的成绩等级A、B、C、D、E

/*  给出一批百分制成绩,要求输出对应的成绩等级A、B、C、D、E。
90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。
输入
第1行:这批成绩的数目 第2行:用空格分隔的一批百分制成绩(每个成绩为一个0至100之间的整数)
输出
用空格分隔的五分制成绩(A-E之间的大写字母)
输入样例:
4
100 70 65 43
输出样例:
A C D E   */
 

//法一   for循环、if 
#include<iostream>
void pr(int n);
using namespace std;
int main(){
	int n;
	cin>>n;
    for(int i=0;i<n;i++){
    	int num;
    	cin>>num;
    	pr(num);
    	if(i!=n-1) cout<<" ";  //最后一次循环时i=n-1 
    }
	return 0;
}
void pr(int n){
	if(n>=90) cout<<"A";
	if(n>=80&&n<=89) cout<<"B";  //if必须要将条件写完整 
	if(n>=70&&n<=79) cout<<"C";
	if(n>=60&&n<=69) cout<<"D";
	if(n<60) cout<<"E";
}

//法二   while循环、else if 
#include<iostream>
void pr(int n);
using namespace std;
int main(){
	int n,i=0;           //i的值要设为0 
	cin>>n;
	while(n--){          //while(n--)执行步骤:
	                     //1.先取n的值判断是否为0,是的话跳出循环 
	                     //2.不是的话执行n=n-1 
	                     //3.然后执行while循环 
		int num;
		cin>>num;
		pr(num);
		if(i!=n) cout<<" ";   //最后一次循环时n的值为0 
	}
	return 0;
}
void pr(int n){
	if(n>=90) cout<<"A";
	else if(n>=80) cout<<"B";   //else if条件句可以排除掉前面的情况 
	else if(n>=70) cout<<"C";
	else if(n>=60) cout<<"D";
	else cout<<"E";
}

2.求S=1+(1+2)+(1+2+3)+......+(1+2+3+......+n)

/*  求S=1+(1+2)+(1+2+3)+......+(1+2+3+......+n)
输入   一个正整数
输出   输出S的值
输入样例:   3
输出样例:   10
提示   不能用两重循环实现,否则会出现超时。  */

#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int num=0,sum=0;
	for(int i=1;i<=n;i++){
		num+=i;
		sum+=num;   //在一次循环中直接进行两次处理,将结果进行迭代 
	}
	cout<<sum<<endl;
	return 0;
}

3. 用循环输出形如下述的图形:

/*  用循环输出形如下述的图形:
    *
   ***
  *****
 *******
*********
输入   一个正整数1<=n<=10(对错误输入不进行检查和处理)。
输出   输出上述图形(n行)
输入样例 
2
输出样例
   *
  ***                      */

//法一
#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){     //总共有n行 
		for(int j=1;j<=n-i;j++){ //对第一行来说,每次的空格数都是n-1
		            //每增加一行,加在"*"前面的空格数-1,由外面for循环的i--控制
			cout<<" ";
		}
		for(int k=1;k<=2*i-1;k++){ //每行的"*"数都是2i-1 
			cout<<"*";
		}
		cout<<endl;   //行末进行换行 
	}
	return 0;
} 

//法二
#include<iostream>
using namespace std;
int main(){
	int n,cnt=1;
	cin>>n;
	for(;n>1;n--){           //除去最后一行(单独讨论) 
		for(int j=n-1;j>=1;j--){  //对第一行来说,每次的空格数都是n-1
		              //每增加一行,加在"*"前面的空格数-1,由外面for循环的n--控制 
			cout<<" ";
		}
		for (int k=cnt;k>=1;k--){   //cnt数就是"*"数 
			cout<<"*";
		}
		cout<<endl;  //每行最后进行换行 
		cnt+=2;      //行数+1,"*"数+2 
	}
	for(;cnt>0;cnt--){
		cout<<"*";   //单独输出最后一行,"*"前面没有空格,"*"的个数即为cnt 
	}
	return 0;
}

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值