一、课内实验题(共10小题,100分)
题型得分 | 100 |
- 【描述】
晶晶的朋友贝贝约晶晶下周一起去看展览,但晶晶每周的1、3、5必须上课,请帮晶晶判断她能否接受贝贝的邀请,如果能输出YES;如果不能则输出NO。
【输入】
输入贝贝邀请晶晶去看展览的日期,用数字1到7表示从星期一到星期日。
【输出】
如果晶晶可以接受贝贝的邀请,输出YES,否则,输出NO。注意YES和NO都大写!
【输入示例】2
【输出示例】YES
(10分)我的答案:
#include<iostream> using namespace std; int main() { int a; cin >> a; switch (a) { case 1: case 3: case 5: cout << "NO"; break; default: cout << "YES"; } return 0; }
题目得分 10 参考答案:
#include <iostream> using namespace std; int main() { int day; cin >> day; if(day != 1 && day != 3 && day != 5) cout << "YES" << endl; else cout << "NO" << endl; return 0; }
- 【描述】
输入a、b和c,若它们能构成三角形,则输出三角形周长,否则输出“Invalid”。
【输入】
输入a、b和c。
【输出】
输出三角形周长或“Invalid”。
【输入示例1】1 2 3
【输出示例1】Invalid
【输入示例2】3 3 3
【输出示例2】9
(10分)我的答案:
#include<iostream> using namespace std; int main() { double a, b, c; cin >> a >> b >> c; if ((a + b > c) && (a + c > b) && (b + c > a)) { cout << (a + b + c); } else { cout << "Invalid"; } return 0; }
题目得分 10 参考答案:
#include <iostream> using namespace std; int main() { double a, b, c; cin >> a >> b >> c; if((a + b > c) && (a + c > b) && (b + c > a)) cout << (a + b + c) << endl; else cout << "Invalid" << endl; return 0; }
- 【描述】
输入一个整数,输出分段函数的值。分段函数的数学定义如下:
【输入】
输入一个整数。
【输出】
输出分段函数的值。
【输入示例】100
【输出示例】10005
【来源】
《程序设计基础——以C++为例》第2章实验7。
(10分)我的答案:
#include<iostream> #include<cmath> using namespace std; int main() { int x; cin >> x; if (x < 0) { cout << x + 1; } else if (x < 100) { cout << pow(x, 3); } else { cout << pow(x, 2) + 5; } }
题目得分 10 参考答案:
#include <iostream> using namespace std; int main() { int x, fx; cin >> x; if(x < 0) fx = x + 1; else if(x < 100) fx = x * x * x; else fx = x * x + 5; cout << fx << endl; return 0; }
- 【描述】
你买了一箱n个梨子,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个梨子,假设虫子在吃完一个梨子之前不会吃另一个,那么经过y小时你还有多少个完整的梨子?
【输入】
输入n,x和y(均为整数),以整数间隔。
【输出】
输出完整的梨子数(整数)。
【输入示例】10 4 9
【输出示例】7
(10分)我的答案:
#include<iostream> #include<cmath> using namespace std; int main() { int n, x, y; cin >> n >> x >> y; if (y % x == 0) { cout << (n - y / x); } else { cout << (n - y / x - 1); } }
题目得分 10 参考答案:
#include <iostream> using namespace std; int main() { int n, x, y, eaten; cin >> n >> x >> y; eaten = y / x; if(eaten >= n) eaten = n; else if(y % x != 0) ++eaten; cout << (n - eaten) << endl; return 0; }
-
【描述】
某电网执行“阶梯电价”,居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。结果保留2位小数。
【输入】
一行中输入用电量。
【输出】
一行中输出电费。
【输入示例】100
【输出示例】cost = 55.50
(10分)我的答案:
#include<iostream> #include<cmath> #include<iomanip> using namespace std; int main() { int w; cin >> w; if (w <= 50) { cout << "cost = " << fixed << setprecision(2) << w * 0.53; } else { cout << "cost = " << fixed << setprecision(2) << 50 * 0.53 + (w - 50) * 0.58; } }
题目得分 10 参考答案:
#include <iostream> #include <iomanip> using namespace std; int main() { int x; double cost; cin >> x; if(x > 50) { cost = 50 * 0.53 + (x - 50) * 0.58; } else { cost = 0.53 * x; } cout << "cost = " << fixed << setprecision(2) << cost << endl; return 0; }
- 【描述】
编写程序,将输入的任意3个整数从小到大输出,其间以"->"相连。
【输入】
一行中输入三个整数,其间以空格间隔。
【输出】
一行中将三个整数从小到大输出,其间以"->"相连。
【输入示例】4 2 8
【输出示例】2->4->8
(10分)我的答案:
#include<iostream> #include<cmath> #include<iomanip> #include<algorithm> using namespace std; int main() { int a[4]; cin >> a[0] >> a[1] >> a[2]; sort(a, a + 3); for (int i = 0;i < 3;i++) { cout << a[i]; if (i != 2) { cout << "->"; } } }
题目得分 10 参考答案:
#include <iostream> #include <algorithm> using namespace std; int main() { int a, b, c; cin >> a >> b >> c; if(a > b) swap(a, b); if(a > c) swap(a, c); if(b > c) swap(b, c); cout << a << "->" << b << "->" << c << endl; return 0; }
- 【描述】
编写程序,输入三角形三条边a、b和c(假设为实数),判断它们能否构成三角形。若不能构成三角形,则输出“Don't make a triangle”;若能构成三角形,进一步判断是何种三角形(等边三角形、等腰三角形、直角三角形、等腰直角三角形还是一般三角形等),并输出相应的信息(Equilateral triangle、Isosceles triangle、Right triangle、Isosceles Right triangle、General triangle)。
【输入】
三角形三条边a、b和c,以空格间隔。
【输出】
若不能构成三角形,输出“Don't make a triangle”。否则输出相应的三角形类型信息。
【输入示例1】1 2 3
【输出示例1】Don't make a triangle
【输入示例2】4 2 5
【输出示例2】General triangle
【提示】
可以利用勾股定理逆定理判断直角三角形。
应该避免直接对浮点数进行相等(==)比较,因为浮点数的误差可能造成两个本来应该相等的浮点数不相等。
【来源】
《程序设计基础——以C++为例》第2章实验8。
(10分)我的答案:
#include<iostream> #include<cmath> #include<iomanip> #include<algorithm> #define f 0.001 using namespace std; int main() { double a, b, c; cin >> a >> b >> c; if ((a + b > c) && (a + c > b) && (b + c > a)) { double max1, mid, min1; max1 = max(a, max(b, c)); min1 = min(a, min(b, c)); mid = a + b + c - min1 - max1; if (fabs(pow(max1, 2) - pow(min1, 2) - pow(mid, 2)) < f) { if (fabs(mid - min1) < f) { cout << "Lsosceles Right triangle"; } else { cout << "Right triangle"; } } else if ((fabs(a - b) < f) || (fabs(a - c) < f) || (fabs(c - b) < f)) { if (fabs(a - b) <f && fabs(a - c) <f && fabs(c - b) <f) { cout << "Equilateral triangle"; } else { cout << "Lsosceles triangle"; } } else { cout << "General triangle"; } } else { cout << "Don't make a triangle"; } return 0; }
题目得分 10 参考答案:
#include <iostream> #include <cmath> using namespace std; const double EPSILON = 0.00001; int main() { double a, b, c; bool flag = false; cin >> a >> b >> c; if(a + b > c && a + c > b && b + c > a) { if(fabs(a - b) <= EPSILON && fabs(b - c) <= EPSILON) { cout << "Equilateral "; flag = true; } else if(fabs(a - b) <= EPSILON || fabs(a - c) <= EPSILON || fabs(b - c) <= EPSILON) { cout << "Isosceles "; flag = true; } if(fabs(a * a + b * b - c * c) <= EPSILON || fabs(a * a + c * c - b * b) <= EPSILON || fabs(b * b + c * c - a * a) <= EPSILON) { cout << "Right "; flag = true; } if(flag) cout << "triangle\n"; else cout << "General triangle\n"; } else cout << "Don't make a triangle\n"; return 0; }
- 【描述】
求一元二次方程
的根,系数a、b、c为浮点数。
【输入】
输入a、b和c。
【输出】
若无穷解,则输出:Infinitely solution。
若无解,则输出:No solution。
若是一个实根,则输出格式为:x=…,数字、符号之间没有空格,结果保留2位小数。
若两个实根相等,则输出格式为:x1=x2=...,数字、符号之间没有空格,结果保留2位小数。
若是两个实根,则输出格式为:x1=...;x2=...,数字、符号之间没有空格,结果保留2位小数。
若是虚根,则输出:Imaginary root。
【输入示例】2.1 8.9 3.5
【输出示例】x1=-0.44;x2=-3.80
【提示】
可以使用数学库中的sqrt函数和fabs函数。方程的根以及其它中间变量用double类型变量表示。
【来源】
《程序设计基础——以C++为例》第2章实验8强化练习。
(10分)我的答案:
#include<iostream> #include<cmath> #include<iomanip> #include<algorithm> #define f 0.01 using namespace std; int main() { double a, b, c; cin >> a >> b >> c; //double disc = pow(b, 2) - 4 * a * c; if (fabs(a) < f) { if (fabs(b) > f) { cout << "x=" << fixed << setprecision(2) << -c / b; } else { if (fabs(c) > f) { cout << "No solution"; } else { cout << "Infinitely solution"; } } } else if (fabs(a) > f) { if (fabs(b) > f) { double x1, x2; double disc = pow(b, 2) - 4 * a * c; if (disc < 0) { cout << "Imaginary root"; } else { x1 = -b / (2 * a) + sqrt(disc) / (2 * a); x2 = -b / (2 * a) - sqrt(disc) / (2 * a); if (fabs(x1 - x2) < f) { cout << "x1=x2=" << fixed << setprecision(2) << x1; } else { cout << "x1=" << fixed << setprecision(2) << x1; cout << ";"; cout << "x2=" << fixed << setprecision(2) << x2; } } } else { double x1, x2; x1 = sqrt(c); x2 = -sqrt(c); if (fabs(x1 - x2) < f) { cout << "x1=x2=" << fixed << setprecision(2) << x1; } else { cout << "x1=" << fixed << setprecision(2) << x1; cout << ";"; cout << "x2=" << fixed << setprecision(2) << x2; } } } }
题目得分 10 参考答案:
#include <iostream> #include <iomanip> #include <cmath> using namespace std; const double EPSILON = 1e-6; int main() { double a, b, c; double delta, real_part, imaginary_part; cin >> a >> b >> c; if(fabs(a) <= EPSILON && fabs(b) <= EPSILON && fabs(c) <= EPSILON) cout << "Infinitely solution" << endl; else if(fabs(a) <= EPSILON && fabs(b) <= EPSILON) cout << "No solution" << endl; else if(fabs(a) <= EPSILON) cout << "x=" << fixed << setprecision(2) << (-c / b) << endl; else { real_part = -b / (2 * a); delta = b * b - 4 * a * c; imaginary_part = sqrt(fabs(delta)) / (2 * a); if(fabs(delta) <= EPSILON) cout << "x1=x2=" << fixed << setprecision(2) << real_part << endl; else if(delta > EPSILON) { cout << fixed << setprecision(2) << "x1=" << (real_part+imaginary_part) << ";x2=" << (real_part-imaginary_part); } else { cout << "Imaginary root" << endl; } } return 0; }
- 【描述】
输入学生的考试成绩(0~100),将学生的成绩划分等级并输出。学生的成绩可分为5个等级:90~100为A级,80~89为B级,70~79为C级,60~69为D级,0~59为E级。要求用switch语句。
【输入】
输入学生的考试成绩(0~100)。
【输出】
输出等级。
【输入示例】91
【输出示例】A
【提示】
假设学生的成绩为score,则score/10的一个值就代表了10种情况,例如score/10为7时,就代表成绩70~79的情况。
【来源】
《程序设计基础——以C++为例》第2章实验9。
(10分)我的答案:
#include<iostream> using namespace std; int main() { int score; cin >> score; switch (score / 10) { case 10: cout << "A"; break; case 9: cout << "A"; break; case 8: cout << "B"; break; case 7: cout << "C"; break; case 6: cout << "D"; break; default: cout << "E"; } return 0; }
题目得分 10 参考答案:
#include <iostream> using namespace std; int main() { int score; char grade; cin >> score; score = score / 10; switch (score) { case 0: case 1: case 2: case 3: case 4: case 5: grade = 'E'; break; case 6: grade = 'D'; break; case 7: grade = 'C'; break; case 8: grade = 'B'; break; case 9: case 10: grade = 'A'; break; } cout << grade << endl; return 0; }
- 【描述】
某校学生成绩的绩点计算方法如下(百分制折合为绩点):
(A)90~100分,折合4.0~5.0绩点。
(B)80~89分,折合3.0~3.9绩点。
(C)70~79分,折合2.0~2.9绩点。
(D)60~69分,折合1.0~1.9绩点。
(E)59分及其以下为不及格。
【输入】
输入一个整数表示学生的成绩(0~100)。
【输出】
如果输入的学生成绩不合法,则输出“Invalid”。
如果输入的学生成绩为不及格,则输出“Failed”。
否则,输出成绩对应的绩点,结果保留一位小数。
【输入示例】74
【输出示例】2.4
(10分)我的答案:
#include<iostream> #include<iomanip> using namespace std; int main() { int score; cin >> score; if (score < 0 || score>100) { cout << "Invalid"; } else if (score <= 59) { cout << "Failed"; } else { cout << fixed << setprecision(1) << 5 - (100 - score) * 0.1; } }
题目得分 10 参考答案:
#include <iostream> #include <iomanip> using namespace std; int main() { int score; cin >> score; if(score < 0 || score > 100) cout << "Invalid\n"; else if(score >= 0 && score < 60) cout << "Failed\n"; else cout << fixed << setprecision(1) << (1.0 + (score - 60) * 0.1) << endl; return 0; }