c++期末上机oj题目汇总(2018北邮信通版)纯干货

学长学姐回忆版本1-5

#P.S.
以下内容纯自己复习时手打的,方法不一定为最简,题目个人理解的也不一定准确,只是单纯希望能够帮助到要上机考试的小伙伴,欢迎指出问题,大家共同进步~
(代码注释保留了当时的错误原因,经验想法与激动的心情,N个!这种忽略就好------
(感谢志协学长学姐提供的题目)

题组一

1.输出平方

2.输出十个正整数中的最小合数

3.从小到大输出一个五位数中各个数字

4.输入两个含五个元素的数组,并将他们和它们的合数组倒序输出。每个数字之间有一个空格,行末无空格。

5.雇员类

//一
//1.输出平方
void main() {
 int n;
 cin >> n;
 cout << n * n;
}
//2.输出十个正整数中的最小合数
#include<cmath>
int judge(int m) {
 bool ju = false;
 for (int n = 2; n <= sqrt(m) + 1; n++) {
  if ((m % n == 0)&& m!=2 && m!=1) {
    ju = true;
    break;
  }
 }
 return ju;
}
int main() {
 int a[10];
 for (int k = 0; k < 10; k++)
  cin >> a[k];
 for (int pass = 1; pass < 10; pass++)
 {
  for (int i = 0; i < 10 - pass; i++) {
   int tem;
   if (a[i] > a[i + 1])
   {
    tem = a[i];
    a[i] = a[i + 1];
    a[i + 1] = tem;
   }
  }
 }
 for (int k = 0; k < 10; k++) 
 {
  if (judge(a[k]))
  {
   cout << a[k];
   break;
  }
 }
}
//3.从小到大输出一个五位数中各个数字
int main() {
 char a[6];//注意就一个的话用char 就可,不要复杂化了。5-6!
 cin >> a;
 for (int pass = 1; pass< 5; pass++)//注意最后一位是'\0'
 {
  for (int i = 0; i < 5 - pass; i++) {
   int tem;
   if (a[i] > a[i + 1])
   {
    tem = a[i];
    a[i] = a[i + 1];
    a[i + 1] = tem;
   }
  }
 }
 cout << a;
  return 0;
}
//4.输入两个含五个元素的数组,并将他们和它们的合数组倒序输出。每个数字之间有一个空格,行末无空格。
#include<cmath>
int judge(int m) {
 bool ju = false;
 for (int n = 2; n <= sqrt(m) + 1; n++) {
  if ((m % n == 0)&&m!=1&&m!=2) 
  {
   ju = true;
   break;
  }
 }
 return ju;
}
int main() {
 int array[5] = { 0 };
 int newarray[5] = { 0 };
 for (int i = 0; i < 5; i++)
 {
  cin >> array[i];
  newarray[4-i] = array[i];//数组千万别溢出!
 }
 for (int k = 0; k < 5; k++) {
  if (judge(newarray[k])) {
   if (k != 4)
    cout << newarray[k] << " ";
   else
    cout << newarray[k];
  }
 }
}

题组二

1.计算400到500间非13倍数的数之和

2.求两个数的最大公约数

3.求十个数中的最大值,最小值,平均值

4.构建一个结构变量,求该日是该年的第几天

5.商店类,私有(三种家电),公有(一个构造函数,一个算当天营业额的函数),输入每种家电卖出数量,输出当天营业额

//二
//1.计算400到500间非13倍数的数之和
int main() {
 int m, num=0;
 for (m = 400;m <= 500; m++) 
 {
  if (m % 13 != 0)
   num += m;
 }
 cout << num;
}
//2.求两个数的最大公约数
int main() {
 int m, n;
 int t;
 cin >> m >> n;
 for (int h = n; h > 0; h--)
 {
  if (m % h == 0 && n % h == 0)
   t = h;
  break;
 }
 cout << t;
}
//3.求十个数中的最大值,最小值,平均值
int main()
{
 int a[10];
 for (int i = 0; i < 10; i++)
  cin >> a[i];
 int tem1 = a[0];
 for (int i = 0; i < 10; i++)
 {
  if (a[i] > tem1)
  {
   tem1 = a[i];
  }
  
 }
 int tem2 = a[0];
 for (int i = 0; i<10; i++)
 {
  if (a[i] <tem2)
  {
   tem2 = a[i];
  }
 }
 cout << "max=" << tem1<< "min=" <<tem2 << endl;
 int sum = 0;
 for (int i = 0; i < 10; i++)
  sum += a[i];
 cout << sum / 10;
}
//4.构建一个结构变量,求该日是该年的第几天
//    没整出来版本
// struct date
// {
//  int year;
//  int month;
//  int day;
// };
//   
// int main() {
//  int number=0;
//  date today;
//  cin >> today.year >> today.month >> today.day;
//  if (today.year % 400 == 0 || (today.year % 4 == 0 && today.year % 100 != 0))
//  {
//   if
//   number =
//  }
//   
//}
//不用结构的成功版本
int main()
{
 int y, m, d, sum = 0;
 int M[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//0月是0天,妙!
 cin >> y >> m >> d;
 for (int i = 1; i < m; i++)
  sum += M[i];
 sum += d;
 cout << y << "年" << m << "月" << d << "日是本年中的第";
 if (m < 3)//1,2月直接不考虑闰年,妙!
 {
  cout << sum;
 }
 else
 {
  if (0 == y % 400)
   cout << sum + 1;
  else if (0 == y % 100)
   cout << sum;
  else if (0 == y % 4)
   cout << sum + 1;
  else
   cout << sum;
 }
 cout << "天。" << endl;
 return 0;
}

题组三

1.输出平方

2.输出数组最大质数

3.定义正三角形类输出周长

4.数组排序插入再排序

5.将字符串的小写字母转化为大写

//输出数组最大质数
int judge(int number)
{
 bool tf = true;
 for (int a = 2; a <= sqrt(number)+1; a++)
 {
  if ((number % a == 0)||number==1)
  {
   if (number != 2)
   {
    tf = false;
    break;
   }
  }
 }
 return tf;
}
int main() {
 int array[10] = { 0 };
 for (int i = 0; i < 10; i++)
  cin >> array[i];
 int tem;
 for (int pass = 1; pass < 10; pass++)
 {
  for (int i = 0; i < 10 - pass; i++)
  {
   if (array[i] < array[i + 1])
   {
    tem = array[i];
    array[i] = array[i + 1];
    array[i + 1] = tem;
   }
  }
 }
 for (int i = 0; i < 10; i++)
 {
  if (judge(array[i]))
  {
   cout<<array[i];
    break;
  }
 }
}
//数组排序,倒序,插入再排序
int main() {
 int array[10];
 for (int i = 0; i < 10; i++)
 {
  cin >> array[i];
 }
 int tem;
for (int pass = 1; pass < 10; pass++)
 {
  for (int i = 0; i < 10 - pass; i++)
  {
   if (array[i] < array[i + 1])
   {
    tem = array[i];
    array[i] = array[i + 1];
    array[i + 1] = tem;
   }
  }
 }
 for (int i = 0; i < 10; i++)
  cout << array[i] << " ";
 cout << endl;
 int array2[10];
 for (int i = 0; i < 10; i++)
 {
  array2[i] = array[9 - i];//千万注意!!!!是9-i才不会溢出!
 }
 for (int i = 0; i < 10; i++)
  cout << array2[i] << " ";
 cout << endl;
 int array3[11] = { 0 };
 int m;
 cin >> m;
for (int i = 0; i < 10; i++)
 array3[i] = array2[i];
 for (int i = 0; i < 9; i++)
 {
  if (m <=array2[i])
  {
   array3[i] = m;
   for (int q = i; q < 10; q++)//注意!是这之后每个都加,所以要用循环!
   {
    array3[q + 1] = array2[q];
   }
   break;
  }
 }
 for (int i = 0; i < 11; i++)
  cout << array3[i] << " ";
}
//另一种不用新数组方法--定义多个内存但cin就cin需要数量
int main() {
 int a[12];//定义用于存储数字的数组 
 int n;//输入的新的数字 
 int i = 0, j = 0, k = 0;//排序用到的变量 
 cout << "please input ten integers:" << endl;
 for (i = 1; i <= 10; i++) {
  cin >> a[i];
 } //输入数据 
 for (i = 1; i < 10; i++) {
  k = i;
  for (j = i + 1; j <= 10; j++) {
   if (a[j] < a[k]) {
    k = j;
   }
  }
  a[0] = a[i];
  a[i] = a[k];
  a[k] = a[0];
 }
 cout << "sorting order:" << endl;
 for (i = 1; i <= 10; i++) {
  cout << a[i] << "   ";
 } //输出数据 
 cout << endl;
 cout << "please input a new one:";
 cin >> n;
 for (i = 1; i <= 10; i++) {
  if (a[i] > n) {
   k = n;
   for (j = 10; j >= i; j--) {
    a[j + 1] = a[j];
   }
   a[i] = n;
   break;
  }
 }
 cout << "new sorting order:" << endl;
 for (i = 1; i <= 11; i++) {
  cout << a[i] << "   ";
 } //输出数据 
 cout << endl;
 return 0;
}
//将字符串的小写字母转化为大写
int main() {
 char a[200] = { 0 };
 cin >> a;
 for (int i = 0; i < 200; i++)
 {
  if (a[i] >= 'a' && a[i] <= 'z')//这行超级重要!!!!!!!!!!!天啊,没这行乱码!
  {
   a[i] = a[i] - 32;//小写转大写
  }
 }
 cout << a;
}

题组四

1.小写字母转换成大写字母

2.一行随机文字中数字之和(注:a13b4为1+3+4)

3.100到N(500<N<1000)之间各个数字之和为15的数字个数

4.斐波那契数列

5.学生类

//一行随机文字中数字之和(注:a13b4为1+3+4)
int main() {
 char a[100] = { 0 };
 cin >> a;
 int sum = 0;
 for (int i = 0; i < 100; i++)
 {
  if (a[i] >= '0' && a[i] <= '9')
   sum +=(a[i]-48);//0的ASCALL为48,A 65,a 97
 }
 cout << sum;
}
//100到N(500<N<1000)之间各个数字之和为15的数字个数
int judge(int m) {
 bool jud = false;
 int x = 0, y = 0, z = 0;
 x = m / 100;
 y = (m / 10) %10;//注意这是取余!
 z = (m % 100) % 10;
 if(x+y+z==15)
  jud = true;
 return jud;
}
int main() {
 int b, sum = 0;
 cin >> b;
 for (int n = 100; n <= b; n++) {
  if (judge(n))
   sum++;
 }
  cout << sum;
}
/*
//测试数字分开功能
int main() {
 int x = 0, y = 0, z = 0, m;
 cin >> m;
 x = m / 100;
 y = (m / 10) %10;
 z = (m % 100) % 10;
 cout << x << " " << y << " " << z;
}*/
//斐波那契数列1 1 2 3 5 8 13 21 34 55 89
int main() {
 int a[11];
 a[0] = 1;
 a[1] = 1;
 for (int i = 2; i < 11; i++)
  a[i] = a[i - 1] + a[i - 2];
 cout << a[10];
}

题组五

1.立方和

2.距离最长的点,输出坐标

3.输入数组,并输出最小值及坐标,次小值及坐标

4.递归函数

5.学生类

//递归函数
//一共五个同学,已知第一位同学的年龄是10岁,第二位同学的年龄比第一位大2岁,第三位同学的年龄比第二位大2岁……
//第五位同学的年龄比第四位同学大2岁;利用键盘输出同学的编号,查询这位同学的年龄;
int main() {
 int a = 10, x;
 cin >> x;
 if (x == 1)
  cout << a;
 else
  a = a + 2 * (x - 1);
 cout << a;
}
//距离最长的点,输出坐标,距离
#include<cmath>
int main()
{
 int a, b, x, y, p, q;
 cin >> a >> b >> x >> y >> p >> q;
 if (((a - x) * (a - x) + (b - y) * (b - y)) > ((a - p) * (a - p) + (b - q) * (b - q)))
 {
  cout << "(" << x << "," << y << ")";
  cout << sqrt((a - x) * (a - x) + (b - y) * (b - y));
 }
 else
 {
  cout << "(" << p << "," << q << ")";
  cout << sqrt((a - p) * (a - p) + (b - q) * (b - q));
 }
 return 0;
}
//立方和
#include<cmath>
int main()
{
 int x, y;
 cin >> x >> y;
 cout << pow(x, 3) + pow(y, 3) << endl;
}

(一些重复的和没看懂题的就跳过了,跳过了所有类的题目,后面会有一个汇总,不过上机那天才知道类的题目是填空题)
上机前上机前的我
上机时
在这里插入图片描述
莫慌莫慌上机加油~

  • 23
    点赞
  • 155
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值