大学最新C++题库及答案.docx
Q5.(10分)写一个程序根据从键盘输入的里氏强度显示地震的后果。根据里氏强度地震的后果如下:里氏强度 后果小于4很小4.0到5.0窗户晃动5.0到6.0墙倒塌;不结实的建筑物被破坏6.0到7.0烟囱倒塌;普通建筑物被破坏7.0到8.0地下管线破裂;结实的建筑物也被破坏超过8.0地面波浪状起伏;大多数建筑物损毁*输入格式要求:实数, 提示信息:cout << "请输入地震的里氏强度: " << endl;*输出格式要求:"本次地震后果:很小!""本次地震后果:窗户晃动!""本次地震后果:墙倒塌;不结实的建筑物被破坏!""本次地震后果:烟囱倒塌;普通建筑物被破坏!""本次地震后果:地下管线破裂;结实的建筑物也被破坏!""本次地震后果:地面波浪状起伏;大多数建筑物损毁!"#include <iostream>using namespace std;int main() double magnitude; cout << "请输入地震的里氏强度: " << endl; cin >> magnitude; if (magnitude < 4.0) cout << "本次地震后果:很小!" << endl; else if (magnitude < 5.0) cout << "本次地震后果:窗户晃动!" << endl; else if (magnitude < 6.0) cout << "本次地震后果:墙倒塌;不结实的建筑物被破坏!" << endl; else if (magnitude < 7.0) cout << "本次地震后果:烟囱倒塌;普通建筑物被破坏!" << endl; else if (magnitude < 8.0) cout << "本次地震后果:地下管线破裂;结实的建筑物也被破坏!" << endl; else cout << "本次地震后果:地面波浪状起伏;大多数建筑物损毁!" << endl; return 0;Q6.(10分)写一个程序从键盘输入1到7中的某个数字,其中1代表星期天,2代表星期一,3代表星期二等。根据用户输入的数字显示相应的星期几。如果用户输入的数字超出了1到7的范围,显示输出一个错误提示信息。*输入格式要求:整数, 提示信息:cout << "Please input a single numeral(1-7): "*输出格式要求:"Monday" (星期几的英文单词首字母大写加换行) 提示信息:"Invalid - please input a single numeral(1-7)."(加换行)#include<iostream>using namespace std;int main() int a; cout << "Please input a single numeral(1-7): " cin >> a; if (a < 1 | a > 7) cout << "Invalid - please input a single numeral(1-7)." << endl; switch (a) case 1: cout << "Sunday" << endl; break; case 2: cout << "Monday" << endl; break; case 3: cout << "Tuesday" << endl; break; case 4: cout << "Wednesday" << endl; break; case 5: cout << "Thursday" << endl; break; case 6: cout << "Friday" << endl; break; case 7: cout << "Saturday" << endl; break; return 0;Q7.(10分)有一天,一位百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,陌生人对百万富翁说:“我每天给你10万元,而你第一天只需给我1分钱,第二天我仍给你10万元,你给我2分钱,第三天我仍给你10万元,你给我4分钱。你每天给我的钱是前一天的两倍,直到满一个月(30天)为止”,百万富翁很高兴,欣然接受了这个契约。请编程计算在这一个月中陌生人总计给百万富翁多少钱,百万富翁总计给陌生人多少钱。*输入提示信息和数据格式:无*输出提示信息和数据格式:cout << "百万富翁给陌生人:" << toStranger << "元" << endl; cout << "陌生人给百万富翁:" << toRichman << "元" << endl;#include <iostream>using namespace std;int main() int j; double toStranger = 0; /* 富翁给陌生人的钱,以'元'为单位 */ double toRichman = 0; /* 陌生人给富翁的钱,以'元'为单位 */ double term = 0.01; /* 富翁第一天给陌生人0.01元 */ for (j = 1; j <= 30; j+) toRichman += 100000; /* 陌生人每天给富翁10万元 */ toStranger += term; term = term * 2; /* 富翁每天给陌生人的钱是前一天的两倍 */ cout << "百万富翁给陌生人:" << toStranger << "元" << endl; cout << "陌生人给百万富翁:" << toRichman << "元" << endl; return 0;Q8.(10分)编程计算自然数的立方和,直到立方和大于等于1000000时为止。统计并输出实际累加的项数。输出格式要求:cout<<"sum="<<sum<<endl; cout << "count =" << i << endl;输出结果为: sum=1071225 count =45#include <iostream>using namespace std;int main() long i, sum = 0; for (i = 1; ; i+) sum = sum + i * i * i; if (sum >= 1000000) break; cout<<"sum="<<sum<<endl; cout << "count =" << i << endl; return 0;Q9.(10分)求多项式 1!+2!+3!+15!的值。输出格式要求:cout<<"s="<<s<<endl;#include<iostream>using namespace std;int main() int n = 1, s = 0; for (int i = 1; i <= 15; i+) n = n * i; s += n; cout << "s=" << s << endl; return 0; Q10.(10分)求1至200之间的所有质数,将质数和存入变量 sum 中并输出。质数(素数)的说明:“质数是只能被1和其本身整除的数”。输入提示要求:无输出结果格式要求:质数之间以一个空格隔开输出所有质数后换行输出:sum=4227#include<iostream>#include<cmath>using namespace std;int main() int N, m, sum = 0; for (m = 2; m <= 200; m+) int i, tmp = (int)sqrt(m); for (i = 2; i <= tmp; i+) if (m % i = 0) break; if (i > tmp) cout << m << " " sum += m; cout << endl; cout << "sum=" << sum << endl; return 0;Q11.(10分)在一个已知的一维数组中分类统计正数和负数的个数。正数的个数存入变量C1中,负数个数存入变量C2中.输出格式要求:cout << "c1=" << c1 << endl; cout << "c2=" << c2 << endl;#include <iostream>using namespace std;int main() int a10 = 1, -2, 0, 4, -5, 0, 7, 8, -9, 10; int c1 = 0, c2 = 0; int i; for (i = 0; i < 10; i+) if (ai > 0) c1+; else if (ai < 0) c2+; cout << "c1=" << c1 << endl; cout << "c2=" << c2 << endl; return 0;Q12.(10分)在包含10个数的一维整数数组a中查找最大元素max和最小元素min。输出格式要求:cout << "最大元素:" << max << endl; cout << "最小元素:" << min << endl;#include <iostream>using namespace std;int main() int a10 = 32, 43, 65, 23, 432, 543, 543, 54, 542, 87; int i; int max, min; max = a0, min = a0; for (i = 1; i < 10; i+) if (ai > max) max = ai; if (ai < min) min = ai; cout << "最大元素:" << max << endl; cout << "最小元素:" << min << endl; return 0;Q13.(10分)用while循环编程,求自然数1至100之间各奇数平方和sum。输出结果格式为:sum=166650#include<iostream>using namespace std;int main() int i = 1, sum = 0; while (i <= 100) sum += i * i; i += 2; cout << "sum=" << sum << endl; return 0;Q14.(10分)判断一个数23437是否是素数(要求程序中设置一个参数flag,flag为1代表是素数,为0代表不是)输出结果:0#include<iostream>#include<cmath>using namespace std;int main() int m, n, flag = 1; m = 23437; for (n = 2; n <= m / 2 && flag; n+) if (m % n = 0)flag = 0; cout << flag << endl; return 0;Q15.(10分)已知一个数m(=252),用循环求各位数字之和。输出结果格式:s=9#include<iostream>using namespace std;int main() int m = 252, a, b, c, s; a = m / 100; b = m / 10 % 10; c = m % 10; s = a + b + c; cout << "s=" << s << endl; return 0;Q16.(10分)已知一个数m(=252),用循环求各位数字之积。输出结果格式:f=20#include<iostream>using namespace std;int main() int m, f=1,n; m=252; while (m !=0) n=m%10; f*=n; m=m/10; cout<<"f="<<f<<endl; return 0;Q17.(10分)已知10个四位数输出所有对称数及个数n。例如1221,2332都是对称数。设:int m10 = 1221, 2243, 2332, 1435, 1236, 5623, 4321, 4356, 6754, 3234;输出结果:1221 2332#include <iostream>using namespace std;int main() int i, n = 0, m10 = 1221, 2243, 2332, 1435, 1236, 5623, 4321, 4356, 6754, 3234; for (i = 0; i < 10; i+) int a, b, c, d; a = mi / 1000; b = mi % 1000 / 100; c = mi % 100 / 10; d = mi % 10; if (a = d && c = b) cout << mi << endl; n+; return 0;Q18.(10分)将1-100之间奇数顺序累加存入n中,直到其和等于或大于200为止。输出结果格式:n=225#include<iostream>using namespace std;int main() int n = 0, i = 1; while (n < 200) n = n + i; i+; i+; cout << "n=" << n << endl; return 0;Q19.(10分)从键盘上输入三个整数,编写程序求出三个数中的最大值。输入格式要求:cout<<"请输入三个整数:"输出格式要求:cout<<"最大值是:"<<max<<endl;#include <iostream>using namespace std;int main( ) int a, b, c, t, max; cout << "请输入三个整数:" cin >> a >> b >> c; if (a < b) t = a; a = b; b = t; if (a < c) t = a; a = c; c = t; max = a; cout << "最大值是:" << max << endl; return 0;Q20.(10分)输入年份和月份,编写程序,判断这一年该月份的天数。输入格式要求: cout << "请输入年份和月份:"输出格式要求:cout << year << "年" << month << "月" << "是" << day << "天。" << endl;#include<iostream>using namespace std;int main() int year, month, day; cout << "请输入年份和月份:" cin >> year >> month; switch (month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: day = 31; break; case 4: case 6: case 9: case 11: day = 30; break; case 2: if (year % 400 = 0 | year % 4 = 0 && year % 100 != 0) day = 29; else day = 28; break; cout << year << "年" << month << "月" << "是" << day << "天。" << endl; return 0; Q21.(10分)编写程序,求解下面的分段函数:输入格式要求: cout << "请输入x:"输出格式要求: cout << "y="<< y << endl;#include<iostream>using namespace std;int main() double x,y; cout<<"请输入x:" cin>>x; if(x>-10&&x<0) y=x-8; if(x=0) y=x; if(x>0&&x<10) y=x*x; cout<<"y="<<y<<endl; return 0;Q22.(10分)用“辗转相除方法”计算两个数 x,y 的最大公约数。输入格式要求:无,直接输入输出格式要求:无,直接输出结果#include<iostream>using namespace std;int main() int x, y, n; cin >> x >> y; n = x % y; while (n != 0) x = y; y = n; n = x % y; cout << y << endl; return 0;Q23.(10分)利用选择法将下面10个数按降序排列。有如下定义:int n10 = 5, 6, 4, 2, 3, 7, 8, 5, 6, 7;输入格式要求:无输出格式要求:以逗号分隔降序数列#include<iostream>using namespace std;int main() int n10 = 5, 6, 4, 2, 3, 7, 8, 5, 6, 7, i, j, k, t; for (i = 0; i < 9; i+) k = i; for (j = i + 1; j < 10; j+) if (nk < nj) k = j; t = ni; ni = nk; nk = t; for (j = 0; j < 10; j+) cout << nj << "," return 0;Q24.(10分)定义数组,输入不多于20名若干学生成绩,统计高于平均分的人数k,用-1做结束标志。输入格式要求:无输出格式要求:cout << "高于平均分的人数:" << k << endl;#include <iostream>using namespace std;int main() double cj20, aver, sum = 0; int n = 0, k = 0, i; cin >> cj0; while (cjn >= 0) sum += cjn; n+; cin >> cjn; aver = sum /( n-1); for (i = 0; i < n-1; i+) if (cji > aver) k+; cout << "高于平均分的人数:" << k << endl; return 0;Q25.(10分)已知三个数a,b,c,按由小到大的顺序存入a,b,c中并输出.输入格式要求:cout << "输入三个整数:"输出格式要求:cout << "由小到大的顺序是:" << a << "," << b << ","<<c<<endl;#include <iostream>using namespace std;int main() int a, b, c, t; cout << "输入三个整数:" cin >> a >> b >> c; if (a > b) t = a; a = b; b = t; if (a > c) t = a; a = c; c = t; if (b > c) t = b; b = c; c = t; cout << "由小到大的顺序是:" << a << "," << b << ","<<c<<endl; return 0; Q26.(10分)编程计算 sum=1!+2!+.+9!。输入格式要求: 无输出格式要求: cout <<"sum= " << sum << endl;#include<iostream>using namespace std;int main() int sum=0; for (int i=1; i<=9; i+) int x=1; for (int j=1;j<=i;j+) x=x*j; sum=sum+x; cout <<"sum= " << sum << endl; return 0;Q27.(10分)编写函数,删除字符串中的指定字符,函数原型为:void deletechar(char *string, char ch);设char c100 = "abcdabcd aabbccdd"输出结果:bcdbcd bbccdd#include<cstring>#include<iostream>using namespace std;void deletechar(char *string, char ch) int i(0), k(0); while (stringi+ != '0') if (stringi != ch) stringk+ = stringi; stringk = '0'int main () char c100 = "abcdabcd aabbccdd" deletechar(c, 'a'); cout << c << endl; return 0;Q28.(10分)编写函数,将一个十进制无符号整数转换为二进制整数,函数原型为:void transform(char*p,long i,int base=2);#include <iostream>using namespace std;void transform(char*p, long i, int base = 2) int r(0), k(0); char t128; while (i > 0) r = i % base; if (r < 10) tk = r + 48; else tk = r + 55; i = i / base; k+; k-; r = 0; while (k >= 0) *(p + r) = tk; r+; k-; *(p + r) = '0'int main() char c256; transform(c, 45678, 2); cout << c << endl; return 0;Q29.(10分)输入10个学生的成绩,存放在一个一维数组中,求出总分和平均分。输入提示信息格式要求: cout << "请输入学生的分数:"输出结果格式要求:cout << "学生的总分是:" << sum << endl; cout << "学生的平均分是:" << aver << endl;#include<iostream>#include<iomanip>using namespace std;int main() int a10, sum, aver, i; sum = 0; cout << "请输入学生的分数:" for (i = 0; i <= 9; i+) cin >> ai; for (i = 0; i <= 9; i+) sum = sum + ai; aver = sum / 10; cout << "学生的总分是:" << sum << endl; cout << "学生的平均分是:" << aver << endl; return 0;Q30.(10分)输入10个学生的成绩,存放在一个一维数组中,找出其中的最高分和所对应的学生。输入提示信息格式要求:cout << "请输入学生的分数:"输出提示信息格式要求:cout << "第" << n + 1 << "名学生的分数最高,是:" << max << endl;#include<iostream>using namespace std;int main() int a10, max, i, n; cout << "请输入学生的分数:" for (i = 0; i <= 9; i+) cin >> ai; max = a0; for (i = 1; i <= 9; i+) if (max < ai) max = ai; n = i; cout << "第" << n + 1 << "名学生的分数最高,是:" << max << endl; return 0;Q31.(10分)求一个3×3矩阵的对角线元素之和。输入提示信息格式要求: cout << "请输入3行3列矩阵的元素:" << endl;输出提示信息格式要求: cout << "请输出这个3行3列的矩阵:" << endl; cout << "对角线元素之和为:" << sum << endl;#include<iostream>#include<iomanip>using namespace std;int main() double a33, sum = 0; int i, j; cout << "请输入3行3列矩阵的元素:" << endl; for (i = 0; i < 3; i+) for (j = 0; j < 3; j+) cin >> aij; cout << "请输出这个3行3列的矩阵:" << endl; for (i = 0; i < 3; i+) for (j = 0; j < 3; j+) cout << setw(5) << aij; cout << endl; for (i = 0; i < 3; i+) sum += aii; cout << "对角线元素之和为:" << sum << endl; return 0;Q32.(10分)用公式 =4-4/3+4/5-4/7+.)计算的近似值,直到最后一项绝对值小于1e-5输入格式要求:无输出结果格式要求: cout << "pi =" << pi << endl;#include<iostream>using namespace std;int main() double pi = 0; double n = 1; int f = 1; while (4.0 / n >= 1e-5) pi = pi + f * 4 / n; n = n + 2; f = -f; cout << "pi =" << pi << endl; return 0;Q33.(10分)求一个4×4矩阵的四周元素之和。输入提示信息格式要求:cout << "请输入4行4列矩阵的元素:" << endl;输出提示信息格式要求:cout << "请输出这个4行4列的矩阵:" << endl; cout << "四周元素之和为:" << sum << endl;#include <iostream>#include<iomanip>using namespace std;int main() double a44, sum = 0; int i, j; cout << "请输入4行4列矩阵的元素:" << endl; for (i = 0; i < 4; i+) for (j = 0; j < 4; j+) cin >> aij; cout << "请输出这个4行4列的矩阵:" << endl; for (i = 0; i < 4; i+) for (j = 0; j < 4; j+)