【C++程序设计实验四】

本文提供了一系列C++编程实践题目的解决方案,包括数列求和、二进制转换、立方根计算等,通过实际例子展示了C++语言的应用技巧。

C++程序设计实践》实验4


  1. 【描述】
    计算数列1+1/3+1/5+…的前n项之和。
    【输入】
    输入一个正整数n。
    【输出】
    输出数列前n项的和。
    【输入示例】

    10
    【输出示例】
    2.13326
    (10分)

    我的答案:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    
    int main() {
        int n;
        double sum=0.0;
        cin>>n;
        for(int i=1;i<=2*n-1;i+=2){
            sum+=1.0/i;
        }
        cout<<sum<<endl;
    	return 0;
    }
  2. 【描述】
    计算如下式子:

    的值,计算到最后一项的值小于给定的阈值时为止。
    【输入】
    输入在一行中给出小于1的阈值。
    【输出】
    在一行中输出满足阈值条件的式子值,结果保留6位小数。
    【输入示例】

    0.000001
    【输出示例】
    2.718282
    (10分)

    我的答案:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    
    int main() {
    	double n;
    	double result = 0, lastone = 1, k = 1, i = 1;
    	cin >> n;
    	while (lastone >= n) {
    		result += 1.0 / k;
    		k *= i;
    		i++;
    		lastone = 1.0 / k;
    	}
    	cout << fixed << setprecision(6) << result << endl;
    	return 0;
    }
  3. 【描述】
    输入若干个整数,如果输入0,输入即终止。判定读入的整数中有多少个正整数、多少个负整数,并计算这些整数的总和和平均值(0不计算在内)。平均值结果保留2位小数。
    【输入】
    输入若干个整数,如果输入0,输入即终止。
    【输出】
    分行输出这些整数中的正整数个数、负整数个数、总和、平均值(0不计算在内)。
    若只输入0,则输出:No input。
    【输入示例】

    -1 -2 -3 -4 -5 6 7 8 9 0
    【输出示例】
    4
    5
    15
    1.67
    

    (10分)

    我的答案:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    
    int main() {
    	int n;
    	int cnt = 0, zzs = 0, fzs = 0, total = 0;
    	while (cin >> n) {
    		if (n == 0) {
    			break;
    		} else if (n > 0)
    			zzs += 1;
    		else if (n < 0)
    			fzs += 1;
    		total += n;
    		cnt += 1;
    	}
    	if (cnt == 0)
    		cout << "No input" << endl;
    	else {
    		cout << zzs << endl;
    		cout << fzs << endl;
    		cout << total << endl;
    		cout << fixed << setprecision(2) << total * 1.0 / cnt << endl;
    	}
    	return 0;
    }
  4. 【描述】
    某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。用45人正好搬45块砖,问有多少种搬法?
    【输入】
    没有输入。
    【输出】
    输出搬砖的男人、女人和小孩数。
    【输出示例】

    A,B,C
    A、B、C分别表示男人、女人、小孩数。
    【来源】

    《程序设计基础——以C++为例》第2章实验14。

    (10分)

    我的答案:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    
    int main() {
    	int i, j, k;
    	for ( i = 0; i <= 15; i++) {
    		for ( j = 0; j <= 22; j++) {
    			for ( k = 0; k <= 45; k += 2) {
    				if ((3 * i + 2 * j + k / 2 == 45) && (i + j + k == 45)) {
    					cout << i << "," << j << "," << k << endl;
    				}
    			}
    		}
    	}
    	return 0;
    }
  5. 【描述】
    计算数列1+(1+2)+(1+2+3)+(1+2+3+4)+…的前n项之和。
    【输入】
    输入一个正整数n。
    【输出】
    输出数列前n项的和。
    【输入示例】

    3
    【输出示例】
    10
    (10分)

    我的答案:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    int sum(int n){
        int total=0;
        for (int i=0;i<=n;i++){
            total+=i;
        }
        return total;
    }
    int main() {
        int n;
        int h=0;
        cin>>n;
        for(int j=0;j<=n;j++){
            h+=sum(j);
        }
        cout<<h<<endl;
    	return 0;
    }
  6. 【描述】
    给定一个十进制正整数,求其对应的二进制数中1的个数。
    【输入】
    第一个正整数表示有n(n > 0)个测试数据,其后n行是对应的测试数据,每行为一个正整数。
    【输出】
    分行输出n个正整数对应的二进制数中1的个数。
    【输入示例】

    4
    2
    100
    1000
    66
    【输出示例】
    
    

    1 3 6 2

    (10分)

    我的答案:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    
    int main() {
        int n;
        cin>>n;
        while(n--){
            int x,cnt=0;
            cin>>x;
            while(x){
                cnt+=x%2;
                x=x/2;
            }
            cout<<cnt<<endl;
        }
    	return 0;
    }
  7. 【描述】
    在校园里,没有自行车,上课办事会很不方便。但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并骑上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,骑车快还是走路快。
    【输入】
    第一个正整数表示有n(n > 0)个测试数据,其后n行是对应的测试数据,每行为一次办事要行走的距离,单位为米。
    【输出】
    对应每个办事要行走的距离,如果骑车快,输出一行“Bike”;如果走路快,输出一行“Walk”;如果一样快,输出一行“All”。
    【输入示例】

    4
    50
    90
    120
    180
    【输出示例】
    
    Walk Walk Bike Bike
    (10分)

    我的答案:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    
    int main() {
    	int n;
    	double x;
    	cin >> n;
    	for (int i = 1; i <= n; i++) {
    		cin >> x;
    		if (x == 100)
    			cout << "All" << endl;
    		else if (x > 100)
    			cout << "Bike" << endl;
    		else
    			cout << "Walk" << endl;
    	}
    
    	return 0;
    }
  8. 【描述】
    编写程序,用迭代法求立方根

    求立方根的迭代公式为:

    当满足如下条件时:

    迭代停止。
    【输入】
    输入一个数。
    【输出】
    输出该数的立方根。
    【输入示例】

    27
    【输出示例】
    3
    

    (10分)

    我的答案:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    
    int main() {
    	double num, x;
    	const double EPSILON = 0.000001;
    	cin >> num;
    	x = num;
    	while (fabs(num - (x * x * x)) > EPSILON) {
    		x = (2 * x + num / (x * x)) / 3.0;
    	}
    	cout << x << endl;
    
    
    	return 0;
    }
    
  9. 【描述】
    输入一个正整数,从小到大输出该数所有的质因子。
    质因数(质因数)是指能整除给定正整数的质数(素数)。
    【输入】
    输入一个正整数。
    【输出】
    分行从小到大输出该数所有的质因子。
    【输入示例】

    120
    【输出示例】
    2
    2
    2
    3
    5(10分)

    我的答案:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    
    int main() {
    	int x, i;
    	cin >> x;
    	int n = x;
    	for (i = 2; i <= n; i++) {
    		while (x % i == 0) {
    			cout << i << endl;
    			x /= i;
    		}
    	}
    	return 0;
    }
  10. 【描述】
    编写程序,根据输入的字符以及棱形的边长,输出以该字符为填充字符的棱形。
    【输入】
    输入在一行中给出字符和边长。
    【输出】
    输出以该字符为填充字符,相应边长的棱形。
    【输入示例】
    A 5
    【输出示例】
        A
       AAA
      AAAAA
     AAAAAAA
    AAAAAAAAA
     AAAAAAA
      AAAAA
       AAA
        A
    

    我的答案:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    
    int main() {
        char c;
        int n;
        cin>>c>>n;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n-i;j++)cout<<" ";
            for(int j=1;j<=2*i-1;j++)cout<<c;
            cout<<"\n";
        }
        for(int i=n-1;i>=1;i--){
            for(int j=1;j<=n-i;j++)cout<<" ";
            for(int j=1;j<=2*i-1;j++)cout<<c;
            cout<<"\n";
        }
    
    	return 0;
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值