SYNU PTA C++ 第二章实验题

发布时间 2023-03-22 21:13:01作者: 粉色妖精小姐

本随笔仅提供参考,具体题目请见PTA

7-1 测试C++

 1 #include "iostream"
 2 #include "vector"
 3 using namespace std;
 4 int main(){
 5     int n;
 6     cin>>n;
 7     vector<int> nums(n);
 8     for(auto& num : nums)   cin>>num;
 9     for(auto it=nums.rbegin(); it!=nums.rend(); ++it)   cout<<*it;
10     return 0;
11 }

 

7-2 计算圆的面积

 1 #include "iostream"
 2 using namespace std;
 3 int main(){
 4     double PI=3.1415926;
 5     double r,s;
 6     cin>>r;
 7     s=PI*r*r;
 8     cout<<s<<endl;
 9     return 0;
10 }

 

7-3 计算三角形面积

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4 int main(){
 5     double a,b,c;
 6     cin>>a>>b>>c;
 7     if(a+b>c&&b+c>a&&c+a>b){
 8         double p=(a+b+c)/2;
 9         double area=sqrt(p*(p-a)*(p-b)*(p-c));
10         cout << area << endl;
11     }else
12         cout<<"No"<<endl;
13     return 0;
14 }

 

7-4 问候

1 #include "iostream"
2 using namespace std;
3 int main(){
4     char A[80];
5     cin>>A;
6     cout<<"Hello!What's your name?"<<endl;
7     cout<<A<<','<<"Welcome to learn OOP using C++!"<<endl;
8     return 0;
9 }

 

7-5 求奇数的平均数

 1 #include <iostream>
 2 #include <iomanip>
 3 #include <numeric>
 4 #include <vector>
 5 #include <algorithm>
 6 using namespace std;
 7 int main(){
 8     int n;
 9     cin>>n;
10     vector<int> a(n);
11     for(auto &i : a) cin>>i;
12     auto odd_count=count_if(a.begin(), a.end(), [](int x) { return x%2!=0; });
13     auto odd_sum=accumulate(a.begin(), a.end(), 0, [](int sum, int x) { return sum+(x%2!=0?x:0); });
14     double aver=static_cast<double>(odd_sum)/odd_count;
15     cout<<fixed<<setprecision(3)<<aver;
16     return 0;
17 }

 

7-6 计算阶乘

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 int main(){
 4     int n;
 5     cin>>n;
 6     long long ans=1;
 7     for(int i=2;i<=n;i++) ans*=i;
 8     cout<<ans<<endl;
 9     return 0;
10 }

 

7-7 求1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的和

 1 #include "iostream"
 2 int main(){
 3     int n;
 4     std::cin>>n;
 5     int sum=0;
 6     for(int i=1;i<=n;i++){
 7         for(int j=1;j<=i;j++){
 8             sum+=j;
 9         }
10     }
11     std::cout<<"sum = "<<sum<<std::endl;
12     return 0;
13 }

 

7-8 两整数求和

1 #include <iostream>
2 using namespace std;
3 int num1,num2;
4 int main() {
5     cin>>num1>>num2;
6     cout<<num1+num2<<endl;
7     return 0;
8 }

 

7-9 按顺序输出

 1 #include <iostream>
 2 using namespace std;
 3 int main(){
 4     int a,b,c;
 5     cin>>a>>b>>c;
 6     if(a>b) a^=b^=a^=b;
 7     if(a>c) a^=c^=a^=c;
 8     if(b>c) b^=c^=b^=c;
 9     cout<<a<<"<"<<b<<"<"<<c;
10     return 0;
11 }

 

7-10  使用结构体数组求10个学生三门课总平均成绩,及最高分学生信息

 1 #include "iostream"
 2 #include "algorithm"
 3 #include "iomanip"
 4 #include "numeric"
 5 using namespace std;
 6 struct student{
 7     char num[6],name[8];
 8     double score[3];
 9 } stu[10];
10 int main(){
11     double sum=0,max_sum= -1;
12     int max_index=0;
13     for(auto &s : stu){
14         cin>>s.num>>s.name>>s.score[0]>>s.score[1]>>s.score[2];
15         double cur_sum=accumulate(s.score, s.score + 3, 0.0);
16         sum+=cur_sum;
17         if(cur_sum>max_sum){
18             max_sum=cur_sum;
19             max_index=&s-stu;
20         }
21     }
22     cout<<fixed<<setprecision(2)<<sum/30.0<<endl;
23     cout<<stu[max_index].num<<' '<<stu[max_index].name<<' ';
24     cout<<fixed<<setprecision(2)<<stu[max_index].score[0]<<' ';
25     cout<<fixed<<setprecision(2)<<stu[max_index].score[1]<<' ';
26     cout<<fixed<<setprecision(2)<<stu[max_index].score[2]<<endl;
27     return 0;
28 }