HZNU C++程序设计——实验2:分支

一、课内实验题(共10小题,100分)

题型得分100
  1. 【描述】
    晶晶的朋友贝贝约晶晶下周一起去看展览,但晶晶每周的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;
    }
  2. 【描述】
    输入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;
    }
  3. 【描述】
    输入一个整数,输出分段函数的值。分段函数的数学定义如下:

    【输入】
    输入一个整数。
    【输出】
    输出分段函数的值。
    【输入示例】
    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;
    }
  4. 【描述】
    你买了一箱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;
    }
  5. 【描述】
    某电网执行“阶梯电价”,居民用户电价分为两个“阶梯”:月用电量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;
    } 
  6. 【描述】
    编写程序,将输入的任意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;
    }
  7. 【描述】
    编写程序,输入三角形三条边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;
    }
  8. 【描述】
    求一元二次方程

    的根,系数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;
    }
  9. 【描述】
    输入学生的考试成绩(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;
    }
  10. 【描述】
    某校学生成绩的绩点计算方法如下(百分制折合为绩点):
    (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;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值