C++期末复习题目汇总
本人汇总了本学期上机考的题目,并借鉴和自己编写了这些代码。
///题目如下
1.字母大小写转换
#include<iostream>
using namespace std;
void change(char x) {
x += 32;
cout << x << endl;
}
int main() {
char a;
cin >> a;
change(a);
return 0;
}
2.计算圆的周长和面积
#include<iostream>
using namespace std;
#define PI 3.14
class Circle
{
public:
Circle(double radius) {
this->C = 2 * PI * radius;
this->S = PI * radius * radius;
cout << this->C << " " << this->S << endl;
}
double S;
double C;
};
int main() {
double radius;
cin >> radius;
Circle a(radius);
return 0;
}
3.数据逆序输出
#include<iostream>
using namespace std;
int function(int n)
{
int temp = 0;
while (n > 0) {
n /= 10;
temp++;
}
return temp;
}
int main() {
int array[10];
int num, x;
cin >> num;
x = function(num);
for (int i = 0; i < x; i++) {
array[i] = num % 10;
num /= 10;
}
for (int i = 0; i < x; i++) {
cout << array[i];
}
return 0;
}
4.判断是否是闰年
#include<iostream>
using namespace std;
void function(int a )
{
if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0) {
cout << "是" << endl;
}
else {
cout << "不是" << endl;
}
}
int main() {
int year;
cin >> year;
function(year);
return 0;
}
5.打点滴实验
#include<iostream>
using namespace std;
void calculate(int V)
{
int num = 1, time = 2, sum = 0;
while (V-num > 0) {
V -= num;
num++;
sum += time;
time++;
}
if (V > 0) {
sum += V;
}
cout << sum << endl;
}
int main()
{
int V;
cin >> V;
calculate(V);
return 0;
}
6.母牛生小牛,四年生一头
#include<iostream>
using namespace std;
int func(int N)
{
if (N < 4)
{
return 1;
}
else
{
return func(N - 1) + func(N - 3);
}
}
int main()
{
int N;
cin >> N;
cout << func(N);
return 0;
}
7.输出1-100(每行十个),并输出序号为素数的元素(一行十个)
代码一:
#include<iostream>
using namespace std;
int main() {
int arr[100];
for (int i = 0; i < 100; i++)
{
arr[i] = i+1;
}
for (int i = 0; i <100; i+=10)
{
for (int j = 0; j < 9; j++)
{
cout << arr[i + j]<<" ";
}
cout << arr[i + 9] << endl;
}
//寻找100以内素数
int arr1[50];
int temp = 0, count = 0;
for (int i = 2; i <= 100; i++)
{
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
temp = 1;
break;
}
}
if (temp == 0)
{
count++;
arr1[count-1] = i;
}
temp = 0;
}
cout << arr[arr1[0]] << " ";
for (int i = 1; i<count; i++)
{
if (i % 10 != 9)
{
cout << arr[arr1[i]] << " ";
}
else
{
cout << arr[arr1[i]] << endl;
}
}
return 0;
}
代码二:
#include<iostream>
using namespace std;
int main()
{
int a[100];
int n = 1;
for (int i = 0; i < 100; i++)
{
a[i] = n;
n++;
}
for (int i = 0; i < 100; )
{
for (int j = 0; j < 9; j++)
{
cout << a[i] << " ";
i++;
}
cout << a[i++] << endl;
}
int m = 1;
cout << 3 << " ";
for (int i = 3; i < 100; i++)
{
int sum = 0;
for (int j = 2; j < i / 2 + 1; j++)
{
int x;
x = i % j;
if (x == 0)
sum++;
}
if (sum == 0)
{
m++;
if (m < 10)
cout << a[i] << " ";
else if (m >= 10)
{
m = 0;
cout << a[i] << endl;
}
}
}
return 0;
}
8.仓库结算
某仓库共有ABCDE五种货物,每天需要补货的数量不同,每种货物的单价不同,如下所示。由键盘输入五种货物需要补货的数量,请计算出当日仓库需支付多少货款。
货物名称 货物单价
A 10
B 5
C 3
D 20
E 13
#include<iostream>
using namespace std;
int main()
{
int m, sum = 0;
char P;
for (int i = 0; i < 5; i++)
{
cin >> P >> m;
switch (P)
{
case'A':
sum += 10 * m;
break;
case'B':
sum += 5 * m;
break;
case'C':
sum += 3 * m;
break;
case'D':
sum += 20 * m;
break;
case'E':
sum += 13 * m;
break;
}
}
cout << sum << endl;
return 0;
}
9.编写一个评分统计程序。从键盘获取8个评委打分的百分制成绩(double类型),统计平均分时,去掉一个最高分和一个最低分其余6个分数的平均值即为最后得分。请将这个分数输出到屏幕上,格式为:平均成绩是XXX。
#include<iostream>
using namespace std;
void func(double arr[])
{
int num = 7, num1;
double sum = 0;
while (num)
{
num1 = num;
num = 0;
for (int i = 0; i < num1; i++)
{
if (arr[i]<arr[i+1])
{
double temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
num = i;
}
}
}
for (int i = 1; i < 7; i++)
{
sum += arr[i];
}
cout <<"平均成绩是"<< sum / 6 << endl;
}
int main()
{
double score[8];
for (int i = 0; i < 8; i++)
{
cin >> score[i];
}
func(score);
return 0;
}
10.编写一个记录5个学生的姓名、性别、年龄和学号的程序,要求使用结构数组表示学生信息,用for循环获得键盘输入的学生记录的数据,所有数据输入完毕后,将5个学生的信息在屏幕上输出,格式要求:按表格行列格式输出,每行输出一个学生的信息,按照姓名、性别、年龄、学号的顺序,各列信息左对齐,各信息占10位。
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
struct Student
{
string name;
string sex;
int age;
string number;
};
Student P[5];
int main()
{
for (int i = 0; i < 5; i++)
{
cin >> P[i].name >> P[i].sex >> P[i].age >> P[i].number;
}
for (int i = 0; i < 5; i++)
{
cout << setiosflags(ios::left)
<< setw(10) << P[i].name
<< setw(10) << P[i].sex
<< setw(10) << P[i].age
<< setw(10) << P[i].number << endl;
}
return 0;
}
11.定义一个结构型变量(包括年、月、日),并从键盘上获取该变量的值,计算该日在本年中是第几天,输出到屏幕上,格式为:“X年X月X日是本年中的第X天。”(提示:注意闰年问题)。
代码一:
#include<iostream>
using namespace std;
class Date
{
friend void func(Date *p);
public:
Date(int y, int m, int d)
{
this->year = y;
this->month = m;
this->day = d;
}
int year;
int month;
int day;
};
int judgement(int y)
{
if (y % 400 == 0 || y % 4 == 0 && y % 100 != 0) {
return 1;
}
else {
return 0;
}
}
void func(Date &p)
{
int arr[12];
int sum = 0;
if (judgement(p.year))
{
arr[1] = 29;
}
else {
arr[1] = 28;
}
arr[0] = arr[2] = arr[4] = arr[6] = arr[7] = arr[9] = arr[11] = 31;
arr[3] = arr[5] = arr[8] = arr[10] = 30;
for (int i = 0; i < p.month - 1; i++)
{
sum += arr[i];
}
sum += p.day;
cout << p.year << "年" << p.month << "月" << p.day << "日是本年中的第" << sum << "天" << endl;
}
int main()
{
int y, m, d;
cin >> y >> m >> d;
Date a(y, m, d);
func(a);
return 0;
}
代码二:
#include<iostream>
using namespace std;
struct Date
{
int year;
int month;
int day;
};
bool judge(int y)
{
int sum = 0;
if (y % 100 == 0)
{
if (y % 400 == 0)return true;
else return false;
}
else {
if (y % 4 == 0)return true;
else return false;
}
}
int main()
{
Date d;
cin >> d.year >> d.month >> d.day;
int a[12];
if (judge(d.year))
{
a[1] = 29;
}
else
{
a[1] = 28;
}
a[0] = a[2] = a[4] = a[6] = a[7] = a[9] = a[11] = 31;
a[3] = a[5] = a[8] = a[10] = 30;
int sum = 0;
for (int i = 0; i < d.month - 1; i++)
{
sum += a[i];
}
sum += d.day;
cout << d.year << "年" << d.month << "月" << d.day << "日是本年中的第" << sum << "天" << endl;
return 0;
}
12.从键盘输入一行或几行字符串,行数由键盘输入,一行字符串用字符数组存储。请统计所输入的字符串中26个字母(不区分大小写)出现的次数,并将出现次数非零的字母统计结果输出到屏幕上,格式参见样例。如果没有字母,请输出字符串中无字母。
代码一:
#include<iostream>
using namespace std;
int main()
{
const int N = 80;
char buffer[N];
int k = 0;
const int NUM = 26;
int counts[NUM] = {
0 };
char letters[NUM];
int i = 0;
int count = 0;
int num;
cin >> num;
do {
cin.getline(buffer, N, '\n');
k = 0;
while (buffer[k] != '\0')
{
if (tolower(buffer[k]) >= 'a' && tolower(buffer[k]) <= 'z')
{
i = tolower(buffer[k]) - 'a';
counts[i]++;
}
k++;
}
num--;
} while (num >= 0);
for (i = 0; i < NUM; i++) {
letters[i] = char('a' + i);
if (counts[i] > 0)
{
count++;
cout << letters[i] << ":" << counts[i] << endl;
}
}
if (count == 0) {
cout << "字符串中无字母。" << endl;
}
}
代码二:
#include<iostream>
using namespace std;
int b[26] = {
0 };
void func(char a)
{
if (a >= 'a' && a <= 'z')
{
b[a - 'a']++;
}
else if (a >= 'A' && a <= 'Z')
{
b[a - 'A']++;
}
}
int main()
{
int n;
cin >> n;
char a[100] = {
0 };
for (int i = 0; i < n + 1; i++)
{
cin.getline(a, 100, '\n');
int j = 0;
while (a[j] != '\0')
{
func(a[j]);
j++;
}
}
int count = 0;//判断有无字母
for (int i = 0; i < 26; i++)
{
if (b[i] != 0)
{
cout << char(i + 'a') << ":" << b[i] << endl;
count++;
}
}
if (count == 0)
{
cout << "字符串中无字母。" << endl;
}
return 0;
}
13.温度转换
#include<iostream>
using namespace std;
int main()
{
double F, C;
cin >> F;
C = (F - 32) / 1.8;
cout << C << endl;
return 0;
}
14.斐波那契数列
递归版:
#include<iostream>
using namespace std;
int Fabo(int x)
{
int sum = 0;
if (x == 0)sum = 0;
else if (x == 1)sum = 1;
else sum = sum + Fabo(x - 1) + Fabo(x - 2);
return sum;
}
int main()
{
int x;
cin >> x;
cout << Fabo(x) << endl;
}
非递归版:
#include<iostream>
using namespace std;
void func(int n)
{
if (n == 0)
{
cout << 0 << endl;
}
else if (n == 1 || n == 2)
{
cout << 1 << endl;
}
else
{
int a = 1, b = 1, temp = 0;
for (int i = 3; i <= n; i++)
{
temp = a + b;
a = b;
b = temp;
}
cout << temp << endl;
}
}
int main()
{
int n;
cin >> n;
func(n);
return 0;
}
15.有10个小朋友围成一圈分糖果,老师顺次分给每人一定数量糖果(初始值为偶数)然后按照下列规则调整,所有小朋友同时把自己的糖果分一半给右边的人,糖果数变为奇数的人,向老师补要一块糖果,问经过多少次调整后,大家糖果数一样多,且每人多少块。建立两个函数,一个负责传递糖果,一个负责判断所有人的糖果是否相等。
#include<iostream>
using namespace std;
void func(int arr[],int *arr1) {
for (int i = 1; i < 10; i++)
{
arr1[i] = arr[i] / 2 + arr[i - 1] / 2;
}
arr1[0] = arr[0] / 2 + arr[9] / 2;
for (int i = 0; i < 10; i++)
{
if (arr1[i] % 2 != 0)
{
arr1[i]++;
}
}
for (int i = 0; i < 10; i++)
{
arr[i] = arr1[i];
}
}
int judgement(int arr[])
{
for (int i = 0; i < 10; i++)
{
if (arr[i] != arr[0])
{
return 1;
}
}
return 0;
}
int main()
{
int count = 0;
int arr[10] = {
0 };
int *arr1 =new int[10];
for (int i = 0; i < 10; i++)
{
cin >> arr[i];
}
while (judgement(arr))
{
func(arr,arr1);
count++;
}
cout << count <<" "<<arr[0]<< endl;
system("pause");
return 0;
}
16.歌手大奖赛共有10位评委,为每位选手打分(double型)。
预赛部分歌手的分数,为去掉1个最高分、1个最低分后其余8个分数的平均值;
决赛部分歌手的分数,为去掉2个最高分、2个最低分后其余6个分数的平均值。
通过键盘输入10位评委的打分,以及当前处于哪个阶段(预赛部分用1表示,决赛部分用2表示)。
主函数中,只负责输入数据、调用分数计算函数、输出结果,评分计算部分编写独立函数完成。
#include<iostream>
using namespace std;
void func(double* p)
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9 - i; j++)
{
double temp;
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
double js(double* p)
{
double sum = 0;
for (int i = 2; i < 8; i++)
{
sum += p[i];
}
return sum / 6.0;
}
double ys(double* p)
{
double sum = 0;
for (int i = 1; i < 9; i++)
{
sum += p[i];
}
return sum / 8.0;
}
int main()
{
double* p = new double[10];
for (int i = 0; i < 10; i++)
{
cin >> p[i];
}
int x;
cin >> x;
if (x == 1) {
cout << ys(p) << endl;
}
if (x == 2) {
cout << js(p) << endl;
}
delete[]p;
return 0;
}
17.编写一个函数get_average()获取整型数组元素的平均值。
要求这个函数既可以用来求一维数组元素的平均值,
也可以求二维数组元素的平均值。
在main()函数中通过具体的一维数组Array_1D和二维数组Array_2D测试这个函数。
假定一维数组为a[5],二维数组为b[2][3],一维数组和二维数组的变量值由键盘分别输入,
在屏幕上输出一维数组和二维数组的平均值,平均值间用一个空格分开。
#include<iostream>
using namespace std;
int main()
{
double sum1 = 0, sum2 = 0;
int a[5];
int b[2][3];
for (int i = 0; i < 5; i++)
{
cin >> a[i];
sum1 += a[i];
}
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cin >> b[i][j];
sum2 += b[i][j];
}
}
cout << sum1 / 5 << " " << sum2 / 6 << endl;
return 0;
}
18.编制程序,调用指针作为参数的函数,实现下面两字符串变量的交换。 char* ap=“hello”; char* bp=“how are you”;
交换的结果为:ap 指向"how are you",bp 指向"hello"。 (注意:输出语句中的;和.为英文符号)
#include<iostream>
using namespace std;
void swap(char* a, char* b)
{
char* t;
t = a;
a = b;
b = t;
}
int main()
{
const char* ap = "hello.";
const char* bp = "how are you;";
swap(ap, bp);
cout << "ap指向" << ap << endl;
cout << "bp指向" << bp << endl;
return 0;
}
19.用字符指针数组,将给定的5个字符串(可以是任意5个国家名字)进行排序并输出。
#include <iostream>
using namespace std;
int main() {
char* name[5];
char arr[5][100];
for (int i = 0; i < 5; i++)
{
cin >> arr[i];
}
for (int i = 0; i < 5; i++)
{
name[i] = arr[i];
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4 - i; j++)
{
if (*name[j]>*name[j+1])
{
char* t = name[j];
name[j] = name[j + 1];
name[j + 1] = t;
}
}
}
for (int i = 0; i < 5; i++)
{
cout << name[i] << endl;
}
return 0;
}
20.已知有3名学生及五门课程的成绩,要求根据学生的各科平均分排序(降序),并输出学生的所有信息和平均分(用指针数组完成)。
#include <iostream>
using namespace std;
struct student {
char name[10];
int score[5];
float aver;
};student a[3];
int main() {
for (int i = 0; i < 3; i++)
{
cin >> a[i].name;
float num = 0;
for (int j = 0; j < 5; j++)
{
cin >> a[i].score[j];
num += (float)a[i].score[j];
}
a[i].aver = num / 5;
}
student* p[3];
for (int i = 0; i < 3; i++)
{
p[i] = &a[i];
}
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2 - i; j++)
{
if (p[j]->aver < p[j + 1]->aver) {
student* temp;
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
for (int i = 0; i < 3; i++)
{
cout << p[i]->name << " ";
for (int j = 0; j < 5; j++)
{
cout << p[i]->score[j] << " ";
}
cout << p[i]->aver << endl;
}
return 0;
}
21.请编写函数实现将一个数值插入到数组中适当的位置,使新数组按降序排列,并将插入的位置输出到屏幕上。 说明:1)原数组大小和数值由键盘输入,动态创建数组; 2)插入的数值由键盘输入。
3)如果插入数据与原数组中某数据相同,则插在该数据之前。
#include<iostream>
using namespace std;
int main()
{
int num,num1;
cin >> num;
int* p = new int[100];
int* x = new int[100];
for (int i = 0; i < num; i++)
{
cin >> p[i];
}
for (int i = 0; i < num - 1; i++)
{
for (int j = 0; j < num - i - 1; j++)
{
if (p[j] < p[j + 1])
{
int temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
cin >> num1;
x[0] = num1;
for (int i = 0; i < num; i++)
{
x[i + 1] = p[i];
}
int count = 1;
for (int i = 0; i < num ; i++)
{
if (x[i] < x[i + 1])
{
int temp = x[i];
x[i] = x[i + 1];
x[i + 1] = temp;
count++;
}
}
cout << count << endl;
system("pause");
return 0;
}
22.老王的密码
#include<iostream>
using namespace std;
int main()
{
int num = 0;
char* p = new char[100];
cin >> p;
for (int i = 0; i < 100; i++)
{
if (p[i] == NULL) {
num = i;
break;
}
}
for (int i = 0; i < num; i++) {
if (p[i] >= 'a' && p[i] <= 'z')
{
if (p[i] >= 'a' && p[i] <= 'c')
{
p[i] = '2';
}
else if(p[i] >= 'd' && p[i] <= 'f')
{
p[i] = '3';
}
else if (p[i] >= 'g' && p[i] <= 'i')
{
p[i] = '4';
}
else if (p[i] >= 'j' && p[i] <= 'l')
{
p[i] = '5';
}
else if (p[i] >= 'm' && p[i] <= 'o')
{
p[i] = '6';
}
else if (p[i] >= 'p' && p[i] <= 's')
{
p[i] = '7';
}
else if (p[i] >= 't' && p[i] <= 'v')
{
p[i] = '8';
}
else
{
p[i] = '9';
}
}
else if (p[i] >= 'A' && p[i] <= 'Z') {
p[i] = p[i] + 33;
}
else
{
p[i] = p[i];
}
}
for (int i = 0; i < num; i++) {
cout << p[i];
}
system("pause");
return 0;
}
23.矩形类
#include<iostream>
using namespace std;
class Rec {
public:
Rec(double R_len,double R_wid) {
this->R_len = R_len;
this->R_wid = R_wid;
this->S = this->R_len * this->R_wid;
}
double R_len;
double R_wid;
double S;
Rec compare(Rec rec1, Rec rec2);
};
Rec Rec::compare(Rec rec1, Rec rec2) {
if (rec1.S > rec2.S) {
return rec1;
}
else {
return rec2;
}
}
int main() {
double l, w;
cin >> l >> w;
Rec rec1(5.2,4.3);
Rec rec2(100,20);
Rec rec3(l, w);
cout <<(rec1.compare(rec1.compare(rec1,rec2),rec3)).S << endl;
system("pause");
return 0;
}
24.三角类
#include<iostream>
using namespace std;
class Tri {
public:
Tri(int a, int b, int c) {
this->L1 = a;
this->L2 = b;
this->L3 = c;
}
int L1;
int L2;
int L3;
void judgement(int a1, int a2, int a3);
};
void Tri::judgement(int a1,int a2,int a3) {
if ((a1 + a2 > a3) && (a1 + a3 > a2) && (a2 + a3 > a1)) {
if (a1 == a2 && a2== a3) {
cout << "A equileteral triangle" << endl;
}
else if ((a1 == a2) | (a1 == a3) | (a2 == a3) ) {
cout << "A isosceles triangle" << endl;
}
else if ((a1 * a1 == a2 * a2 + a3 * a3) || (a2 * a2 == a1 * a1 + a3 * a3) || (a3 * a3 == a2 * a2 + a1 * a1)) {
cout << "A right triangle" << endl;
}
else {
cout << "A triangle" << endl;
}
}
else {
cout << "Not a triangle" << endl;
}
}
int main() {
int a, b, c;
cin >> a >> b >> c;
Tri S(a, b, c);
S.judgement(S.L1, S.L2, S.L3);
system("pause");
return 0;
}
25.时间类
#include<iostream>
using namespace std;
class Time {
public:
Time(int a, int b, int c);
void func(bool d);
int Year;
int Month;
int Day;
};
Time::Time(int a, int b, int c) {
this->Year = a;
this->Month = b;
this->Day = c;
}
void Time::func(bool d) {
if (d == true) {
cout << Year << "-" << Month << "-" << Day << endl;
}
else {
cout << Year << "年" << Month << "月" << Day << "日" << endl;
}
}
int main() {
char str[15];
int a, b, c, i;
bool e;
cin >> a >> b >> c>> str;
for (i = 0; str[i]; i++)
{
if (str[i] == '.')
break;
}
if (str[i])
e = false;
else
e = true;
Time T(a, b, c);
T.func(e);
system("pause");
return 0;
}
26.员工薪金管理类
#include<iostream>
#include<string>
using namespace std;
class employee
{
public:
int num;
string name;
int money;
int year;
int month;
int day;
employee(int a, std::string b, int c, int d, int e, int f)
{
this->num = a;
this->name = b;
this->money = c;
this->year = d;
this->month = e;
this->day = f;
}
int sum(int x, int y);
};
int employee::sum(int x, int y)
{
int time = (x - year) * 12 + y - month;
int sum = time * money;
return sum;
}
int main()
{
employee a(1, "wang", 5000, 2000, 10, 23);
employee b(2, "liu", 4500, 2008, 1, 20);
employee c(3, "huo", 3800, 2003, 7, 3);
employee d(4, "ma", 5300, 2015, 4, 10);
employee e(5, "meng", 6000, 2016, 3, 16);
int x, y, z;
cin >> x >> y >> z;
switch (x) {
case 1:
cout << a.name << " " << a.sum(y, z) << endl;
break;
case 2:
cout << b.name << " " << b.sum(y, z) << endl;
break;
case 3:
cout << c.name << " " << c.sum(y, z) << endl;
break;
case 4:
cout << d.name << " " << d.sum(y, z) << endl;
break;
case 5:
cout << e.name << " " << e.sum(y, z) << endl;
break;
}
return 0;
}
以上就是一些题目,不敢保证代码写的很完美,仅供参考。
转载:https://blog.csdn.net/qq_50469517/article/details/111329662