一、课内实验题(共10小题,100分)
题型得分 | 100 |
-
【描述】
计算数列1+1/3+1/5+…的前n项之和。
【输入】
输入一个正整数n。
【输出】
输出数列前n项的和。
【输入示例】10
【输出示例】2.13326
【来源】
《程序设计基础——以C++为例》第2章实验10。 (10分)我的答案:
#include<iostream> using namespace std; int main(){ int t; double sum = 0; cin >> t; int count = 0; for (int i = 1;count<t;i+=2) { sum = sum + 1.0 / i; count++; } cout << sum; }
题目得分 10 参考答案:
#include <iostream> using namespace std; int main() { int n; cin >> n; double sum = 0.0; for(int i = 1; i <= n; ++i) sum += 1.0 / (2 * i - 1); cout << sum << endl; return 0; }
-
【描述】
计算如下式子:
的值,计算到最后一项的值小于给定的阈值时为止。
【输入】
输入在一行中给出小于1的阈值。
【输出】
在一行中输出满足阈值条件的式子值,结果保留6位小数。
【输入示例】0.000001
【输出示例】2.718282
【来源】
《程序设计基础——以C++为例》第2章实验11强化练习。 (10分)我的答案:
#include<iostream> #include<iomanip> #include<cmath> using namespace std; int main() { long double a; cin >> a; long double d, e = 0; d = 1; int count = 1; long long int c; while (d > a) { c = 1; e = e + d; for (int i = 1;i <= count;i++) { c = c * i; } d = 1.0 / c; count++; } cout << fixed << setprecision(6) << e << endl; return 0; }
题目得分 10 参考答案:
#include <iostream> #include <iomanip> using namespace std; int main() { double epsilon; cin >> epsilon; int i = 1; double fact = 1, item = 1, e = 0; while(item >= epsilon) { e += item; fact *= i; item = 1 / fact; ++i; } cout << fixed << setprecision(6) << e << endl; return 0; }
-
【描述】
输入若干个整数,如果输入0,输入即终止。判定读入的整数中有多少个正整数、多少个负整数,并计算这些整数的总和和平均值(0不计算在内)。平均值结果保留2位小数。
【输入】
输入若干个整数,如果输入0,输入即终止。
【输出】
分行输出这些整数中的正整数个数、负整数个数、总和、平均值(0不计算在内)。
若只输入0,则输出:No input。
【输入示例】-1 -2 -3 -4 -5 6 7 8 9 0
【输出示例】4 5 15 1.67
【来源】
《程序设计基础——以C++为例》第2章实验12。 (10分)我的答案:
#include<iostream> #include<iomanip> #define f 0.000001 using namespace std; int main() { int a, sum = 0, pos = 0, neg = 0, i = 0; double average = 0; while (cin >> a, a != 0) { if (a < 0) { neg++; } else if (a > 0) { pos++; } i++; sum += a; } if (i == 0) { cout << "No input"; } else { average = (double)sum / (double)i; cout << pos << endl; cout << neg << endl; cout << sum << endl; cout << fixed << setprecision(2) << average << endl; } }
题目得分 10 参考答案:
#include <iostream> #include <iomanip> using namespace std; int main() { int countPositive = 0;// 正整数个数 int countNegative = 0;// 负整数个数 int count = 0;// 总的个数 int sum = 0;// 累加变量 int number; do { cin >> number; if (number > 0) ++countPositive; else if (number < 0) ++countNegative; sum += number; ++count; } while (number != 0); --count; if (count == 0) cout << "No input\n"; else { cout << countPositive << endl; cout << countNegative << endl; cout << sum << endl; cout << fixed << setprecision(2) << (sum * 1.0 / count) << endl; } return 0; }
-
【描述】
计算数列1+(1+2)+(1+2+3)+(1+2+3+4)+…的前n项之和。
【输入】
输入一个正整数n。
【输出】
输出数列前n项的和。
【输入示例】3
【输出示例】10
【C++代码】
《程序设计基础——以C++》第2章实验13。 (10分)我的答案:
#include<iostream> #include<iomanip> #define ll long long int using namespace std; int main() { int t; ll sum=0; cin >> t; for (int i = 0;i <= t;i++) { sum +=(1+i)*i/2; } cout << sum; }
题目得分 10 参考答案:
#include <iostream> using namespace std; int main() { int n; cin >> n; int sum = 0; int subItem; for(int i = 1; i <= n; ++i) { subItem = 0; for(int j = 1; j <= i; ++j) subItem += j; sum += subItem; } cout << sum << endl; return 0; }
-
【描述】
某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。用45人正好搬45块砖,问有多少种搬法?
【输入】
没有输入。
【输出】
输出搬砖的男人、女人和小孩数。
【输出示例】A,B,C A、B、C分别表示男人、女人、小孩数。
【来源】
《程序设计基础——以C++为例》第2章实验14。 (10分)我的答案:
#include<iostream> #include<iomanip> #define ll long long int using namespace std; int main() { for (int i = 0;i <= 45 / 3;i++) { for (int j = 0;j <= 45 / 2;j++) { for (int z = 0;z <= 45;z+=2) { if ((i * 3 + j * 2 + z / 2 == 45)&&(i+j+z==45)) { cout << i << "," << j << "," << z << endl;; } } } } }
题目得分 10 参考答案:
#include <iostream> using namespace std; int main() { int men, women, child; for(men = 0; men <= 15; ++men) { for(women = 0; women <= 22; ++women) { child = 45 - men - women; if(men * 3 + women * 2 + child * 0.5 == 45) cout << men << "," << women << "," << child << endl; } } return 0; }
-
【描述】
给定一个十进制正整数,求其对应的二进制数中1的个数。
【输入】
第一个正整数表示有n(n > 0)个测试数据,其后n行是对应的测试数据,每行为一个正整数。
【输出】
分行输出n个正整数对应的二进制数中1的个数。
【输入示例】4 2 100 1000 66
【输出示例】1 3 6 2
(10分)我的答案:
#include<iostream> #include<iomanip> #define ll long long int using namespace std; void solve() { int n,ans_1=0; cin >> n; while (n > 0) { int d; d = n % 2; if (d == 1)ans_1++; n /= 2; } cout << ans_1 << endl;; return; } int main() { int t; cin >> t; while (t--) { solve(); } return 0; }
题目得分 10 参考答案:
#include <iostream> using namespace std; int main() { int n; cin >> n; for(int i = 0; i < n; ++i) { int value; cin >> value; int count_1 = 0; int remainder; while(value) { remainder = value % 2; // 余数 if(remainder == 1) ++count_1; value = value / 2; // 商 } cout << count_1 << endl; } return 0; }
-
【描述】
在杭师大校园里,没有自行车,上课办事会很不方便。但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并骑上自行车的时间为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<iomanip> #define ll long long int using namespace std; void solve() { double walk_time,bike_time; int rowl; cin >> rowl; walk_time = rowl / 1.2; bike_time = rowl / 3.0 + 27 + 23; if (walk_time<bike_time) { cout << "Walk" << endl; } else if (walk_time>bike_time) { cout << "Bike" << endl; }else{ cout<<"All"<<endl; } return; } int main() { int t; cin >> t; while (t--) { solve(); } return 0; }
题目得分 10 参考答案:
#include <iostream> #include <cmath> using namespace std; const double EPSILON = 1e-6; int main() { int n; cin >> n; for(int i = 0; i < n; ++i) { double distance; cin >> distance; double walk = distance / 1.2; double bike = 27 + distance / 3 + 23; if(fabs(walk - bike) < EPSILON) cout << "All" << endl; else if(walk < bike) cout << "Walk" << endl; else cout << "Bike" << endl; } return 0; }
-
【描述】
输入一个正整数,从小到大输出该数所有的质因子。
质因数(质因数)是指能整除给定正整数的质数(素数)。
【输入】
输入一个正整数。
【输出】
分行从小到大输出该数所有的质因子。
【输入示例】120
【输出示例】2 2 2 3 5
【来源】
《程序设计基础——以C++为例》第2章实验17。 (10分)我的答案:
#include<iostream> #include<string> using namespace std; string f(int x) { int i = 2; string ans = ""; for (; x >= 2;) { if (x % i == 0) { ans += to_string(i) + "\n"; x /= i; } else { i++; } } return ans; } int main() { int x; cin >> x; cout << f(x); return 0; }
题目得分 10 参考答案:
#include <iostream> using namespace std; int main() { int number, factor = 2; cin >> number; while(factor <= number) { if (number % factor == 0) { cout << factor << endl; number = number / factor; } else ++factor; } return 0; }
-
【描述】
编写程序,用迭代法求立方根
求立方根的迭代公式为:
当满足如下条件时:
迭代停止。
【输入】
输入一个数。
【输出】
输出该数的立方根。
【输入示例】27
【输出示例】3
【来源】
《程序设计基础——以C++为例》第2章实验18。 (10分)我的答案:
#include<iostream> #include<iomanip> #include<cmath> #define f 0.000001 using namespace std; int main() { double a; cin >> a; double x = 1.0; if (a == 0) { cout << 0 << endl; } else { for (x;fabs(x * x * x - a) > f;x = (2 * x + a / x / x) / 3) { continue; } cout << x; } }
题目得分 10 参考答案:
#include <iostream> #include <cmath> using namespace std; const double EPSILON = 1e-6; int main() { double a, x, g; cin >> a; if(a == 0) cout << a << endl; else { x = a; g = (2.0 * x + a / (x * x)) / 3.0; while(fabs(x - g) >= EPSILON) { x = g; g = (2.0 * x + a / (x * x)) / 3.0; } cout << g << endl; } return 0; }
- 【描述】
编写程序,根据输入的字符以及棱形的边长,输出以该字符为填充字符的棱形。
【输入】
输入在一行中给出字符和边长。
【输出】
输出以该字符为填充字符,相应边长的棱形。
【输入示例】A 5
【输出示例】A AAA AAAAA AAAAAAA AAAAAAAAA AAAAAAA AAAAA AAA A
【来源】
《程序设计基础——以C++为例》第2章实验19。(10分)我的答案:
#include<iostream> #include<iomanip> #include<cmath> using namespace std; void f(char ch, int n) { for (int i = 1;i < n;i++) { for (int j = 1;j <= n - i;j++) { cout << " "; } for (int k = 1;k <= 2 * i - 1;k++) { cout << ch; } cout << endl; } for (int i = n;i >= 1;i--) { for (int j = 1;j <= n - i;j++) { cout << " "; } for (int k = 1;k <= 2 * i - 1;k++) { cout << ch; } cout << endl; } } int main() { char ch; int n; cin >> ch; cin >> n; f(ch, n); }
题目得分 10 参考答案:
#include <iostream> using namespace std; int main() { char ch; int n; cin >> ch >> 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 << ch; cout << endl; } for(int i = 1; i <= n - 1; ++i) { /* 下半三角形 */ for(int j = 1; j <= i; ++j) cout << " "; for(int j = 1; j <= 2 * n - 1 - 2 * i; ++j) cout << ch; cout << endl; } return 0; }