• 测试练习题
    • 0-1 Welcome to You!
    • 0-2 整数算术运算
    • 0-3 求整数均值
    • 0-4 两小时学完C语言
  • 实验1-2
    • 1-1 输出日期
    • 1-2 字母大小写转换
    • 1-3 计算圆的周长和面积
    • 1-4 数据的逆序输出
    • 1-5 闰年
  • 实验2-2
    • 2-1 欧几里得算法
    • 2-2 仓库结算
    • 2-3 计算第几天
    • 2-4 求和逼近
    • 2-5 邮票组合问题
    • 2-6 打点滴
  • 实验3-2
    • 3-1 结构数组使用
    • 3-2 字母统计
    • 3-3 破解简单密码
    • 3-4 判别水果颜色
    • 3-5 将十六进制数转换为二进制数
    • 3-6 校园歌手大赛新规则
    • 3-7 杨辉三角
    • 3-8 数组使用
    • 3-9 明明的随机数
  • 实验4-2
    • 4-1 数字分离
    • 4-2 排分统计
    • 4-3 分糖果
    • 4-4 亲和数
    • 4-5 老王/渊子赛马
    • 4-6 母牛生小牛
  • 实验5-2
    • 5-1 求最大值
    • 5-2 字符串变量的交换
    • 5-3 动态申请数组
    • 5-4 求平均值
    • 5-5 字符指针数组
    • 5-6 结构体和指针
    • 5-7 数组合并
    • 5-8 数据插入
  • 实验6-2
    • 6-1 矩形类
    • 6-2 三角类
    • 6-3 时间类
    • 6-4 员工薪金管理类
  • 上机考试题
    • 1.求最小值
    • 2.计算奇数之和
    • 3.统计素数
    • 4.患者信息统计

测试练习题


注意要选择C++

0-1 Welcome to You!

本题要求编写程序,输出一个短句“Welcome to You!”

#include<iostream>
using namespace std;
int main()
{cout<<"Welcome to You!"<<endl;return 0;
}

知识点:

1.头文件iostream(书P7)

设置C++I/O相关环境,并定义输入/输出流对象cin和cout等。

2.主函数(书P8)

int main()表示函数要返回一个整数,与此对应的语句是"return 0;",代表它返回值是0

0-2 整数算术运算

本题要求编写程序,计算并输出2个正整数的和、差、积、商与余数。题目保证输入和输出全部在整型范围内。

输入格式:
输入在一行中给出2个正整数A和B。

输出格式:
在5行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商与余数。

#include<iostream>
using namespace std;
int main()
{int A,B;cin>>A;cin>>B;cout<<A<<" + "<<B<<" = "<<A+B<<endl;cout<<A<<" - "<<B<<" = "<<A-B<<endl;cout<<A<<" * "<<B<<" = "<<A*B<<endl;cout<<A<<" / "<<B<<" = "<<A/B<<endl;cout<<A<<" % "<<B<<" = "<<A%B<<endl;return 0;
}

知识点:

1.基本数据类型(书P15)

int——整型

2.算术运算符(书P24)

%是取余数运算符,只能对整型数进行操作,余数的正负由被除数决定。

0-3 求整数均值

本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。

输入格式:
输入在一行中给出4个整数,其间以空格分隔。

输出格式:
在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。

#include<iostream>
#include <iomanip>
using namespace std;
int main()
{int x,A,B,C,D;float y;cin>>A>>B>>C>>D;x=A+B+C+D;y=x/4.0;//不能写4
//sum和average输出在一行cout<<"Sum = "<<x<<"; Average = "<<fixed<<setprecision(1)<<y<<endl;return 0;
}

知识点:

1.头文件iomanip(书P39)

包含一些操纵符,直接嵌入在输入/输出语句中,以实现输入/输出格式控制

本代码中使用了fixed<<setprecision(1)控制小数点后的位数

2.算术运算符(书P24)

/是除法运算符,整型数相除,结果还是整型数。只要有一个操作数是浮点数,除法结果就是浮点数。

参考书P30的隐式类型转换

0-4 两小时学完C语言

知乎上有个宝宝问:“两个小时内如何学完 C 语言?”当然,问的是“学完”并不是“学会”。

假设一本 C 语言教科书有 N 个字,这个宝宝每分钟能看 K 个字,看了 M 分钟。还剩多少字没有看?

输入格式:
输入在一行中给出 3 个正整数,分别是 N(不超过 400 000),教科书的总字数;K(不超过 3 000),是宝宝每分钟能看的字数;M(不超过 120),是宝宝看书的分钟数。

题目保证宝宝看完的字数不超过 N。

输出格式:
在一行中输出宝宝还没有看的字数。

#include<iostream>
using namespace std;
int main()
{int N,K,M;unsigned int x;//x是非负整数cin>>N>>K>>M;x=N-K*M;cout<<x<<endl;return 0;
}

实验1-2

1-1 输出日期

从键盘输入三个变量,分别是今天的年、月、日的数值,按格式输出今天的日期。
例如,输入2017 3 1,输出2017年3月1日
输入
2000 12 29
输出
2000年12月29日

#include<iostream>
using namespace std;
int main()
{int a,b,c;cin>>a;cin>>b;cin>>c;cout<<a<<"年"<<b<<"月"<<c<<"日"<<endl;return 0;
}

1-2 字母大小写转换

题目描述:
从键盘输入一个大写字母,将它转换成小写字母输出到屏幕。

输入格式:
A~Z

输出格式:
a~z

#include <iostream>
using namespace std;
int main()
{char a;cin>>a;a=a+32;cout<<a<<endl;return 0;}

知识点:

1.char类型

当字符存储在内存中时,它实际上存储的是数字代码(ASCII码)。当计算机被指示在屏幕上打印该值时,它将显示与数字代码对应的字符。

2.ASCII码表

表中对应大小写字母的ASCII刚好相差32

1-3 计算圆的周长和面积

题目描述:
设计一个程序,从键盘输入圆的半径(double类型),计算圆的周长和面积,并将周长和面积按顺序输出,中间以空格隔开,设PI=3.14。

#include<iostream>
using namespace std;
int main()
{double a;const float PI =3.14;cin>>a;cout<<2*PI*a<<" "<<PI*a*a<<endl;return 0;
}

1-4 数据的逆序输出

题目描述:
设计一个程序,完成数据的逆序输出。从键盘输入一个三位整数,请将其逆序输出。如输入123,输出321。

#include<iostream>
using namespace std;
int main()
{int a,b,c,d,e;cin>>a;b=a/100;//b是a的百位c=a%100;d=c/10;//d是a的十位e=c%10;//e是a的个位cout<<e<<d<<b;return 0;
}

提示:

整型数相除结果也是整型数,可以用除法分别得到a的每一位

若a=123,则b=1,c=23,d=2,e=3;最后按e,d,b的顺序输出就可得到结果

1-5 闰年

题目描述:
任意输入一个4位数整数年份,判断是否闰年。闰年规则:非整百年能被4整除为闰年,2004是,2100不是;整百年能被400整除为闰年,2000是,1900不是。

#include<iostream>
using namespace std;
int main()
{int a,b,c,d;cin>>a;b=a%100;c=a%400;d=a%4;if(b==0)//整百年的闰年判断 {if(c==0) cout<<"是"<<endl;else    cout<<"不是"<<endl;}else//非整百年的闰年判断
{if(d==0) cout<<"是"<<endl;else    cout<<"不是"<<endl;}return 0;
}

提示:

if的括号内必须是==

=是赋值运算符,用来把右值赋给左值;==是关系运算符,用来判断左右两侧是否相等

简单版本

#include<iostream>
using namespace std;
int main(){int a;cin>>a;if(a%400==0||(a%4==0&&a%100!=0))cout<<"是"<<endl;else cout<<"不是"<<endl;return 0;}

if括号内是 a能整除400 或 a能整除4并且a不能整除100

实验2-2

2-1 欧几里得算法

书P54

#include<iostream>
using namespace std;
int main(){int m,n;cin>>m>>n;int r=m%n;while(r!=0){m=n;n=r;r=m%n;}cout<<n;return 0;
}

2-2 仓库结算

题目描述:
某仓库共有ABCDE五种货物,每天需要补货的数量不同,每种货物的单价不同,如下所示。由键盘输入五种货物需要补货的数量,请计算出当日仓库需支付多少货款。由于补货时不一定按照ABCDE的顺序补货,建议使用switch语句与循环语句编写。

#include <iostream>
using namespace std;
int main()
{char k;int n, sum = 0;for(int i = 0; i < 5; i++){cin >> k >> n;switch(k){case 65:sum += n * 10;break;case 66:sum += n * 5;break;case 67:sum += n * 3;break;case 68:sum += n * 20;break;case 69:sum += n * 13;break;default:break;}}cout << sum << endl;return 0;
}

知识点:

1.char类型存储

存储的是ASCII码

2.switch选择语句(书P60)

注意每个case执行语句结束处要加上break;

2-3 计算第几天

题目描述:
定义一个结构型变量(包括年、月、日),并从键盘上获取该变量的值,计算该日在本年中是第几天,输出到屏幕上,格式为:“X年X月X日是本年中的第X天。”(提示:注意闰年问题)。

#include<iostream>
using namespace std;
struct A{int year;      int month;      int day;}date;
int main(){cin>>date.year>>date.month>>date.day;int sum=0;int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年每个月的天数int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年每个月的天数if (date.year%4==0&&date.year%100!=0||date.year%400==0)//判断闰年{for (int i = 0; i < date.month-1; i++){sum+=b[i];} }else{for (int i = 0; i < date.month-1; i++){sum+=a[i];} }sum+=date.day;cout<<date.year<<"年"<<date.month<<"月"<<date.day<<"日是本年中的第"<<sum<<"天。"<<endl;
}

知识点:

1.结构类型(书P95)

struct定义了一个结构类型A,大括号后的date表示定义了一个A类型的变量date

访问成员时用“.” 例如date.year

2.数组(书P85)

定义+初始化方式:类型标识符 数组名[常量表达式]={以逗号隔开的初始化值}

访问元素时用“数组名[下标表达式]” 例如a[i]

注意下标表达式从0开始算 所以a[i]表示数组中第i+1个元素

2-4 求和逼近

编写一个程序,求满足如下条件的最大的n,1!+2!+3!+……+n!<=X,其中X由键盘输入。

输入格式:
输入一个正整数。

输出格式:
输出满足条件的最大的n值

#include<iostream>
using namespace std;
int main(){int X,n=0,sum=0;cin>>X;unsigned long factorial(1);//0的阶乘是1for(;sum<=X;){   n++;factorial*=n;//表示n的阶乘sum+=factorial;}cout<<n-1<<endl;//因为多循环了一次,所以n要减1return 0;
}

知识点:

1.for循环(书P66)

3个表达式可以任意一个或几个不写,但是;必须有

2.计算阶乘(书P67)

factorial是表示阶乘的变量,初始化为1

2-5 邮票组合问题

某人有四张3分的邮票和三张5分的邮票,用这些邮票中的一张或若干张可以得到多少种不同的邮资?

#include<iostream>
using namespace std;
int main()
{ int a[50],b=0,k; int i,j,sum; for(i=0;i<=4;i++) for(j=0;j<=3;j++) { sum=3*i+5*j; for(k=0;k<b;k++) {if(sum==a[k]) break; }if(sum!=0&&k==b){a[b]=sum;b++; } } cout<<b<<endl;
}

提示:

重点是排除重复的邮资

假如某一次出现了重复的数字,即sum==a[k],那么跳出循环,k没有加1,k就一定小于b

则下面if语句的表达式为假,跳过if语句块,这次的sum值不会计入,并且b也不会加1。

注意循环里的k每次都要从0开始,才能保证不重复

2-6 打点滴

题目描述:
在医院打点滴时,假设点滴的规律是,滴一滴,停一下,再滴两滴,停一下,再滴三滴,停一下。每一滴1毫升,用1秒,停一下的时间也是1秒。请问一瓶V毫升的药液,多久输完?其中V是小于5000的正整数。

#include <iostream>
using namespace std;
int main()
{int V, t;cin >> V;for(int i = 1, sum = 0; sum < V; i++){sum += i;if(sum >= V)t = V + i - 1;}cout << t << endl;return 0;
}

提示:

第i次滴的时候,滴i滴,停一下。此时已经滴下了sum滴,停了i秒。然后进入下一次循环,若sum>=V说明这次能滴完,滴完也不用再停一下了。所以最后用时t是滴药液用时V秒和停一下用时i-1秒的和。

实验3-2

3-1 结构数组使用

题目描述:
编写一个记录5个学生的姓名、性别、年龄和学号的程序,要求使用结构数组表示学生信息,用for循环获得键盘输入的学生记录的数据,所有数据输入完毕后,将5个学生的信息在屏幕上输出,格式要求:按表格行列格式输出,每行输出一个学生的信息,按照姓名、性别、年龄、学号的顺序,各列信息左对齐,各信息占10位。

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
struct student
{string name;string sex;int age;string num; //我不知道为啥,但这里只有用string才是满分
};
int main()
{student a[5];for(int i = 0; i < 5; i++)cin >> a[i].name >> a[i].sex >> a[i].age >> a[i].num;for(int i = 0; i < 5; i++)cout << setiosflags(ios::left) << setw(10) << a[i].name<< setw(10) << a[i].sex<< setw(10) << a[i].age<< setw(10) << a[i].num << endl; return 0;
}

知识点:

1.结构数组(书P108)

结构类型+结构类型定义的数组

可以用a[i].name来访问第i+1个人的名字

注意结构数组也是从0开始的

2.string类型(书P43)

支持长度可变的字符串,使用时需要加上头文件

3.输出格式控制(书P39)

需要使用头文件

本题用setw(10)来设置域宽,用setiosflags(ios::left)设置左对齐

3-2 字母统计

题目描述:
从键盘输入一行或几行字符串,行数由键盘输入,一行字符串用字符数组存储。请统计所输入的字符串中26个字母(不区分大小写)出现的次数,并将出现次数非零的字母统计结果输出到屏幕上,格式参见样例。如果没有字母,请输出字符串中无字母。
提示:
注意:输入行数后,换行再输入字符串。

#include <iostream>
using namespace std;
//定义函数judge
int b[26] = {0};
int judge(char x)
{if(x >= 'a' && x <= 'z')  b[x - 'a']++;else if(x >= 'A' && x <= 'Z')   b[x - 'A']++;
}int main()
{//接收字符串并统计int n;cin >> n;char a[100] = {0};for(int i = 0; i <= n; i++){cin.getline(a, 100, '\n');  int j = 0;while(a[j] != '\0'){judge(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 << "字符串中无字母。";return 0;
}

参考书P101代码

思路:

定义数组a来存储输入的字符串,用judge函数判断数组a中非0元素的字母,并用数组b统计

最后将数组b中非0元素输出,每输出一个元素count就加1,如果最后count为0说明没有字母,则输出字符串中无字母

知识点:

cin.getline()从输入流中提取字符串

本题中a是存储字符串的地址,100是最多输入字符的个数,'\n’表示约定行输入结束字符。

PS:

可以用tolower()转换大小写字母

3-3 破解简单密码

题目描述
假设老王原来一个BBS上的密码为zvbo941987,为了方便记忆,他通过一种算法把这个密码变换成YUANzi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。
他是这么变换的,大家都知道手机上的字母: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,就这么简单,老王把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,声明:密码中没有空格,而密码中出现的大写字母则边成小写之后往后移一位,如:X,先边成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。

输入格式
输入包括多个测试数据,输入是一个明文,密码长度不超过80个字符。

输出格式
输出老王真正的密文。

#include<iostream>
#include<string>
using namespace std;
int main(){string s;while(cin>>s){for(int i=0;i<s.length();i++){if(s[i]=='Z')s[i]='a';else if(s[i]>='A'&&s[i]<='Y')s[i]+=33;else if(s[i]>='a'&&s[i]<='c')  s[i]='2';else if(s[i]>='d'&&s[i]<='f')  s[i]='3';else if(s[i]>='g'&&s[i]<='i')  s[i]='4';else if(s[i]>='j'&&s[i]<='l')  s[i]='5';else if(s[i]>='m'&&s[i]<='o')  s[i]='6';else if(s[i]>='p'&&s[i]<='s')  s[i]='7';else if(s[i]>='t'&&s[i]<='v')  s[i]='8';else if(s[i]>='w'&&s[i]<='z')  s[i]='9';}cout<<s<<endl;}return 0;
}

知识点:

sizeof不能用于string类型

s.length()表示计算字符串s的长度

3-4 判别水果颜色

现在有一堆水果,苹果红色,香蕉黄色,西瓜绿色,其余紫色。

当输入一种水果名字,要输入其对应的颜色。

输入格式:
输入水果名字,如:苹果。

输出格式:
输出颜色,如:红色。

#include <iostream>
#include <string.h>
using namespace std;
int main()
{char a[3][10] = {"苹果", "香蕉", "西瓜"};char b[4][10] = {"红色", "黄色", "绿色", "紫色"};char s[10];bool flag = 0;cin >> s;for (int i = 0; i < 3; i++){if (strcmp(a[i], s)==0){cout << b[i];flag = 1;break;}}if (flag==0){cout << b[3];}
}

知识点:

strcmp()用于比较两个字符串是否相等,需要用到<string.h>头文件

提示:

重点是存储和提取中文。

存储:使用二维数组a[i][j],i表示词数,j表示词占的字节数

读取:a[i]表示数组中第i+1个词

3-5 将十六进制数转换为二进制数

将十六进制数转换为二进制数。

输入格式:
输入一个16进制数。

输出格式:
输出二进制数。

#include <iostream>
#include<cctype>using namespace std;int main() {string hexDigit, binaryDigit;cin >> hexDigit;for (int i = 0; i < hexDigit.length(); ++i) {char e = hexDigit[i];if (e >= 'A' && e <= 'F') {int a = static_cast<int>(e - 'A' + 10);switch (a) {case 10:binaryDigit += "1010";break;case 11:binaryDigit += "1011";break;case 12:binaryDigit += "1100";break;case 13:binaryDigit += "1101";break;case 14:binaryDigit += "1110";break;case 15:binaryDigit += "1111";break;}} else if (isdigit(e)) {int b = static_cast<int>(e - '0');switch (b) {case 0://不能丢binaryDigit +="0000";break;case 1:binaryDigit += "0001";break;case 2:binaryDigit += "0010";break;case 3:binaryDigit += "0011";break;case 4:binaryDigit += "0100";break;case 5:binaryDigit += "0101";break;case 6:binaryDigit += "0110";break;case 7:binaryDigit += "0111";break;case 8:binaryDigit += "1000";break;case 9:binaryDigit += "1001";break;}}}//删掉前导0bool flag = false;for (int j = 0; j < binaryDigit.length(); ++j) {if (binaryDigit[j] == '1'|| flag) {flag = true;cout << binaryDigit[j];}}//输入为0时特判if (binaryDigit == "0000") cout<<"0";return 0;
}

这道题扣分点太多了!!
输出时要把前导0删掉
如果输入的就是0,那么也要输出0
十六进制末尾有0,转到二进制末尾就是0000

3-6 校园歌手大赛新规则

8号选手参加校园歌手大赛,编程读入20个整数(0 - 100之间)并存入数组中做为评委打分。最后得分计算规则:先计算20个数的平均分,然后去掉所有与平均分相差10分以上的分数,最后把剩下的分数再取平均做为最后得分。如果没有剩下分数,此次打分无效。

输入格式:
输入20个整数。

输出格式:
输出三行,具体详见输出样例。

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{int a[20];double sum=0;//保证平均分是double型for(int i=0;i<20;i++){cin>>a[i];sum+=a[i];}double p,k;p=sum/20;cout<<"所有评委平均分:"<<fixed<<setprecision(3)<<p<<"分."<<endl;int c=0;cout<<"不合格得分:";for(int i=0;i<20;i++){k=fabs(a[i]-p);if(k>=10){if(c>0) cout<<" ";//保证"."前面没有空格cout<<a[i];sum-=a[i];c++;}}cout<<"."<<endl;if(c==20)cout<<"无合格打分."<<endl;else{double l=sum/(20-c);cout<<"最后得分:"<<fixed<<setprecision(3)<<l<<"分."<<endl;}return 0;
}

提示:

if(c>0) cout<<" ";表示从第二个不合格分数开始,在数前面加一个空格。否则输出会是"不合格得分:709999."或者是“不合格得分:70 99 99 .”

知识点:

1.输出格式控制

fixed<<setprecision(3)表示保留3位小数,需要用到头文件

2.计算绝对值

fabs(x)表示x的绝对值,需要用到头文件

3-7 杨辉三角

还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

输入格式:
输入数据包含多个测试实例,每个测试实例的输入只包含一个正整数n(1<=n<=30),表示将要输出的杨辉三角的层数。

输出格式:
对应于每一个输入,请输出相应层数的杨辉三角。

#include<iostream>
using namespace std;
int main()
{int i,n,j;int a[40][40];cin>>n;
//赋值a[1][1]=1;a[2][1]=1;a[2][2]=1;for(i=3;i<=n;i++){for(j=1;j<=i;j++){a[i][1]=1;a[i][j]=a[i-1][j-1]+a[i-1][j];a[i][i]=1;}}
//输出for(i=1;i<=n;i++){for(j=1;j<=i;j++){if(j>1) cout<<" ";cout<<a[i][j];} if(i<n) cout<<endl;}return 0;
}

提示:

输出部分里面的两个if都是为了保证输出格式正确

3-8 数组使用

题目描述:
将1~100的自然数存到一个有100个元素的整型数组中(数组的下标为0~99),请在屏幕上输出如下数据:1)在屏幕上输出存储的100个自然数,每行输出10个,各数值之间用空格隔开。2)将序号是素数的数据输出到屏幕上,格式要求:每行输出10个,各数值之间用一个空格隔开。(提醒:结尾无空格)

#include <iostream>
using namespace std;
//判断素数
bool prime(int n)
{for(int i = 2; i < n; i++){if(n % i == 0){return false;break;}}return true;
}int main()
{//赋值int a[100];for(int i = 0; i < 100; i++){a[i] = i + 1;}//输出1for(int x = 0; x < 10; x++){   int y=0;for(y; y < 9; y++){cout << a[x * 10 + y] << " ";}cout << a[x * 10 + y] << endl;}//输出2int n = 0;for(int j = 0; j < 97; j++){if(prime(j) && j != 0 && j != 1){n += 1;if(n == 10){cout << a[j] << endl;n = 0;}elsecout << a[j] << " ";}} cout << a[97];return 0;
}

知识点:

素数是指在大于1的整数中,除了 1 和它本身以外,不能被任何整数整除的数

3-9 明明的随机数

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用 计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然 后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入格式:
有2行,第1行为1个正整数,表示所生成的随机数的个数:N
第2行有N个用空格隔开的正整数,为所产生的随机数。

输出格式:
也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

#include<iostream>
using namespace std;
int main(){int N,i,n,count=0,j;int a[1000]={0};cin>>N;for(i=0;i<N;i++){cin>>n;if(a[n]==0){a[n]=n;count++;}}cout<<count<<endl;for(i=0;i<1000;i++){//将第一个非0数单独输出,为了保证格式正确if(a[i]!=0){cout<<a[i];break;}}for(j=i+1;j<1000;j++){if(a[j]!=0) cout<<" "<<a[j];}   return 0;}

提示:

给数组赋值时按序号赋值(让a[n]=n),后续就不用逐个比较数字大小

注意最后结尾处没有空格

实验4-2

4-1 数字分离

题目描述
编写三个函数,分别完成如下任务:
函数一,计算整数a除以整数b的商的整数部分;
函数二,计算整数a除以整数b的余数;
函数三,用函数一和函数二完成分离整数各位的功能,对于输入的1~32767之间的整数,打印出一列数字,每个数字间空一个格。例如,输入:4562 输出:4 5 6 2

#include<iostream>
using namespace std;
int f1(int a,int b){return a/b;
}
int f2(int a,int b){return a%b;
}
int f3(int x)
{int n, m = 1;for(n = x; n > 9; n /= 10)  //m 用来计算位数m *= 10;for(; m > 0; m /= 10){if(m != 1)cout << f2(f1(x, m), 10) << " ";elsecout << f2(f1(x, m), 10);}
}int main(){int N;cin>>N;f3(N);return 0;
}

4-2 排分统计

题目描述
歌手大奖赛共有10位评委,为每位选手打分(double型)。预赛部分歌手的分数,为去掉1个最高分、1个最低分后其余8个分数的平均值;决赛部分歌手的分数,为去掉2个最高分、2个最低分后其余6个分数的平均值。通过键盘输入10位评委的打分,以及当前处于哪个阶段(预赛部分用1表示,决赛部分用2表示)。主函数中,只负责输入数据、调用分数计算函数、输出结果,评分计算部分编写独立函数完成。

#include<iostream>
using namespace std;
//冒泡排序
void sort(double * a){int bound,pos=9;while(pos){bound=pos;pos=0;for(int i=0;i<bound;i++){if(a[i]>a[i+1]){double hold=a[i];a[i]=a[i+1];a[i+1]=hold;pos=i;}}}
}
//初赛
double f1(double * a){double sum;for(int i=1;i<9;i++)sum+=a[i];return sum/8.0;
}
//决赛
double f2(double *a){double sum;for(int i=2;i<8;i++)sum+=a[i];return sum/6.0;
}int main(){double a[10];for (int i=0;i<10;i++){cin>>a[i];}sort(a);int N;cin>>N;if(N==1)cout<<f1(a);elsecout<<f2(a);return 0;
}

提示:
sort函数是书P107的冒泡排序的代码
形参是double *a,好像表示指向double类型的数据

4-3 分糖果

题目描述
有10个小朋友围成一圈分糖果,老师顺次分给每人一定数量糖果(初始值为偶数)然后按照下列规则调整,所有小朋友同时把自己的糖果分一半给右边的人,糖果数变为奇数的人,向老师补要一块糖果,问经过多少次调整后,大家糖果数一样多,且每人多少块。建立两个函数,一个负责传递糖果,一个负责判断所有人的糖果是否相等。

#include<iostream>
using namespace std;
void f1(int*a){int b[10];for(int i=0;i<9;i++)b[i]=a[i]/2+a[i+1]/2;b[9]=a[0]/2+a[9]/2;for(int i=0;i<10;i++){if(b[i]%2){b[i]++;}a[i]=b[i];}
}int f2(int*a){int flag=0;for(int i=0;i<10;i++){if(a[i]!=a[0])flag=1;}return flag;
}int main(){int count=0;int a[10]={0};for(int i=0;i<10;i++)cin>>a[i];while(f2(a)){f1(a);count++;}cout<<count<<" "<<a[0];return 0;
}

提示:
f1(传递糖果的函数)需要两个数组,不能写a[i]=a[i]/2+a[i+1]/2,这样会改动原始数据,并且导致运行超时;要建立一个新的数组进行计算。

4-4 亲和数

古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:
1+2+4+5+10+11+20+22+44+55+110=284。

而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。
你的任务就编写一个程序,判断给定的两个数是否是亲和数

输入格式:
输入数据第一行包含一个数M,接下有M行,每行一个实例,包含两个整数A,B; 其中 0 <=A,B <=600000 ;

输出格式:
对于每个测试实例,如果A和B是亲和数的话输出YES,否则输出NO。
1.我自己写的,但是有时候答案是两个NO

#include<iostream>
using namespace std;
int f(int n){int sum=0;for(int i=1;i<n;i++)if(n%i==0)sum+=i;return sum;
}
int main(){int M,a,b;cin>>M;for(int i=1;i<M;i++){cin>>a>>b;if(f(a)==b&&f(b)==a)cout<<"YES"<<endl;else cout<<"NO"<<endl;}cin>>a>>b;if(f(a)==b&&f(b)==a)cout<<"YES";else cout<<"NO";return 0;
}

2.别人写的,肯定对

#include<iostream>
using namespace std;
string flag(int a,int b)
{int sum1=0,sum2=0;for(int t=1;t<b;t++){if(b%t==0)sum1+=t;}for(int t=1;t<a;t++){if(a%t==0)sum2+=t;}return sum1==a&&sum2==b?"YES":"NO";
}
int main()
{int n,a,b;cin>>n;int m=n-1;while(m--){cin>>a>>b;cout<<flag(a,b)<<endl;}//保证最后一行没有回车cin>>a>>b;cout<<flag(a,b);return 0;
}

提示:
注意输出最后一行时没有回车

4-5 老王/渊子赛马

就是这么简单,现在老王也来赛一赛马。假设每匹马都有恒定的速度,所以速度大的马一定比速度小的马先到终点(没有意外!!)。不允许出现平局。最后谁赢的场数多于一半(不包括一半),谁就是赢家(可能没有赢家)。老王有N(1≤N≤1000)匹马参加比赛。对手的马的数量与渊子马的数量一样,并且知道所有的马的速度。聪明的你来预测一下这场世纪之战的结果,看看老王能否赢得比赛。

输入格式:
输入有多组测试数据。
每组测试数据包括3行:
第一行输入N(1≤N≤1000)。表示马的数量。
第二行有N个整型数字,即渊子的N匹马的速度。
第三行有N个整型数字,即对手的N匹马的速度。
当N为0时退出。

输出格式:
若通过聪明的你精心安排,如果渊子能赢得比赛,那么输出“YES”。
否则输出“NO”。

#include<iostream>
using namespace std;
int main(){int N;int a[1000],b[1000];while(cin>>N&&N!=0){//不知道为啥if(N!=0) break;写里面不行int count=0,t=0;//每次循环都要初始化一遍for(int i=0;i<N;i++) cin>>a[i];for(int i=0;i<N;i++) cin>>b[i];//给a、b数组排序for(int i=0;i<N-1;i++)for(int j=i+1;j<N;j++){if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}}for(int i=0;i<N-1;i++)for(int j=i+1;j<N;j++){if(b[i]>b[j]){t=b[i];b[i]=b[j];b[j]=t;}}//计算赢的次数for(int i=N-1;i>=0;i--)for(int j=N-1;j>=0;j--){if(a[i]>b[j]){count++;b[j]=a[i];//保证不会让一匹马比两次break;}}if(count>N/2) cout<<"YES"<<endl;else  cout<<"NO"<<endl;}return 0;}

提示:
本题PTA没有过高的格式要求,最后多换行了也算全对。

4-6 母牛生小牛

题目描述
设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?

输入格式
输入一个整数N。(1≤N≤50)

输出格式
第N年时母牛的数量

#include<iostream>
using namespace std;
int main(){int N;int a[50]={1,1,1};//a[0] a[1] a[2]都为1cin>>N;for(int i=3;i<=N-1;i++)a[i]=a[i-1]+a[i-3];//看大佬的文章cout<<a[N-1];return 0;
}

提示:

http://t.csdn.cn/4FNGM
注意每头小母牛在第四个年头都可以生一头小母牛

实验5-2

5-1 求最大值

题目描述
编写相应的程序用指针实现:从键盘输入3个整型数va、vb、vc,通过一个指向整型的指针iptr,输出3个数中的最大值。

#include<iostream>
using namespace std;
int main() {int va,vb,vc,x;cin >> va >> vb >> vc;x = va > (vb > vc ? vb : vc) ? va : (vb > vc ? vb : vc);int* iptr = &x;cout << *iptr;return 0;
}

5-2 字符串变量的交换

题目描述
编制程序,调用指针作为参数的函数,实现下面两字符串变量的交换。 char* ap=“hello”; char* bp=“how are you”; 交换的结果为:ap 指向"how are you",bp 指向"hello"。 (注意:输出语句中的;和.为英文符号)

#include<iostream>using namespace std;
void swap(char* ap, char* bp)
{char* cp;cp = ap;ap = bp;bp = cp;
}
int main()
{const char* ap = "hello", * bp = "how are you";swap(ap, bp);cout << "ap指向" << ap<<";"<< endl;cout << "bp指向" << bp<<".";return 0;
}

const必须写,保证指针所指向的内容不可以通过指针的间接引用来改变

5-3 动态申请数组

题目描述
动态申请一个一维整型数组,要求用户从键盘输入元素个数,采用new运算符分配空间,从键盘输入数组变量的值.写一个函数void Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序(升序)。将排序后的数组变量的值输出到屏幕上,各数值间用一个空格隔开。

输入样例
10 1 2 3 4 5 0 7 8 0 10
输出样例
1 2 3 4 5 7 8 10 0 0

#include<iostream>
using namespace std;
void Func(int*A,int nSize){int t=0;for(int i=0;i<nSize;i++){for(int j=0;j<nSize-1-i;j++){if(A[j+1]!=0&&(A[j]==0||A[j]>A[j+1])){//注意是==,不是=t=A[j];A[j]=A[j+1];A[j+1]=t;}}}cout<<A[0];for(int i=1;i<nSize;i++)cout<<" "<<A[i];
}int main(){int n;cin>>n;int*A=new int[n];for(int i=0;i<n;i++)  cin>>A[i];Func(A,n);delete[]A;return 0;
}

5-4 求平均值

题目描述
编写一个函数get_average()获取整型数组元素的平均值。要求这个函数既可以用来求一维数组元素的平均值,也可以求二维数组元素的平均值。在main()函数中通过具体的一维数组Array_1D和二维数组Array_2D测试这个函数。假定一维数组为a[5],二维数组为b[2][3],一维数组和二维数组的变量值由键盘分别输入,在屏幕上输出一维数组和二维数组的平均值,平均值间用一个空格分开。

输入样例
1 2 3 4 5
1 2 3 4 5 6
输出样例
3 3.5


#include<iostream>
using namespace std;
float get_average(int* p, int size)
{float sum=0;for (int i = 0; i < size; i++)sum += *(p + i);return (sum / size);
}
int main()
{int a[5], b[2][3], (*p)[3];p = b;for (int i = 0; i < 5; i++)cin >> a[i];for (int i = 0; i < 2; i++)for (int j = 0; j < 3; j++)cin >> b[i][j];int x, y;x = sizeof(a) / sizeof(*a);y = sizeof(b) / sizeof(**b);cout << get_average(a, x) << " ";cout << get_average(*p, y);return 0;
}

对于一维数组a[5]
数组名a就是数组的地址,也是第一个元素a[0]的地址
*(a+i)表示数组元素a[i]
对于二维数组b[2][3]
可以看作2个一维数组,每个一维数组中有3个元素
定义对应的指向一维数组的指针*p
数组名b/指针名p是第1个一维数组b[0]的地址
*pb[0][0]地址
*(*(p+i)+j) 表示数组元素b[i][j]

5-5 字符指针数组

题目描述
用字符指针数组,将给定的5个字符串(可以是任意5个国家名字)进行排序并输出。

输入样例
China American France Spain Greece
输出样例
American
China
France
Greece
Spain

http://t.csdn.cn/4qa1u

#include <iostream>
#include <cstring>
using namespace std;
int main() {//1.首先定义一个一维指针数组和二维数组char* name[5];char a[5][100];//2.键盘输入赋值for (int i = 0; i < 5; i++) {cin >> a[i];name[i] = a[i];}//3.strcmp比较,以此为条件依据进行冒泡排序(条件语句+冒泡排序)//冒泡算法for(int i=0;i<5;i++)for (int j = 0; j < 4 - i; j++) {if (strcmp(name[j], name[j + 1]) > 0) {//以字符指针作为中间存储存字符串char* t = name[j];name[j] = name[j + 1];name[j + 1] = t;}}//4.输出for (int i = 0; i < 5; i++)cout << name[i] << endl;return 0;
}

5-6 结构体和指针

题目描述
已知有3名学生及五门课程的成绩,要求根据学生的各科平均分排序(降序),并输出学生的所有信息和平均分(用指针数组完成)。

输入样例
Jane 90 80 75 60 85
Mark 85 78 98 85 86
Lily 56 65 75 68 80
输出样例
Mark 85 78 98 85 86 86.4
Jane 90 80 75 60 85 78
Lily 56 65 75 68 80 68.8

http://t.csdn.cn/4qa1u

#include <iostream>
using namespace std;
int main() {//1.自定义一个结构数据类型,用该类型定义一个结构数组struct student {char name[10];int score[5];float aver;};student stu[3];//2.从键盘往数组中输入数据for (int i = 0; i < 3; i++) {cin >> stu[i].name;float sum = 0;for (int j = 0; j < 5; j++) {cin >> stu[i].score[j];sum += stu[i].score[j];}stu[i].aver = sum / 5;}//3.定义一个结构指针,将结构数组的值赋给它student* p[3];for (int i = 0; i < 3; i++) p[i] = &stu[i];//4.根据aver的大小进行排序for (int i = 0; i < 2; i++)if (p[i]->aver < p[i+ 1]->aver) {student* temp;temp = p[i];p[i] = p[i + 1];p[i + 1] = temp;}//5.输出//程序化:每个循环结构里可以做很多事情(比如这里就不止有一条输出语句)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;
}

5-7 数组合并

题目描述
将两个数组a和b合并,合并后的数组按升序输出。 说明:1)数组a和b的大小和元素的值从键盘输入;先输入数组大小,再输入数组的值; 2)合并后的数组输出时,各数值间以空格分开。

输入样例
2 1 2
4 1 2 3 4
输出样例
1 1 2 2 3 4

http://t.csdn.cn/4qa1u

#include<iostream>
using namespace std;
int main() {int a, b;//注意题目要求的输入顺序cin >> a;//数组[]中只能是常量表达式,因此只能用指针//先申请整型动态内存int* p= new int[110];//再将申请的内存分配给指针p1,p2int* p1 = p;int* p2 = p;//再往指针里写入从键盘输入的数据,将两个数组都写入p1//因为p1得值在输入数时会改变,因此这里再用一个指针p2指向同一动态内存,以便后面冒泡排序和输出//这里要求对指针相关概念要理解到位for (int i = 0; i < a; i++){int c; cin >> c;//*p1指指针所指向的第一个元素(*间接运算指通过指针间接访问其所指向的内容)//p1指内容的首地址,*p1指内容(非字符指针)//若为字符指针,cout<<p1是输出指向的字符串(唯一特殊)//p1指指针首地址,p1++是指针的运算,含义是当前地址的下一地址*p1 = c; p1++;}cin >> b;for (int i = 0; i < b; i++) {int d; cin >> d;*p1 = d; p1++;}//知识点·冒泡排序程序化:双层循环结构,第一层是遍数(即控制第二层执行次数的),第二层是每一遍排序//程序化:第二层中循环条件为j<a+b-i-1的原因是升序排列中每次排序后的最后一个一定是最大的,j<a+b也行但没必要for (int i = 0; i < a + b; i++) {for (int j=0; j < a + b - i - 1; j++) {if (*(p2 + j) > * (p2 + j + 1)) {int hold = *(p2 + j);*(p2 + j) = *(p2 + j + 1);*(p2 + j + 1) = hold;}}}//程序化(最后一个数无空格):这里最后输出因为最后一个数没有空格,所以单独用一条语句输出(易错)for (int i = 0; i < a + b - 1; i++)cout << *(p2 + i) << " ";cout << *(p2 + a + b - 1) << endl;//最后别忘了释放动态内存(记住申请和释放始终成对出现)delete[]p;return 0;
}

5-8 数据插入

题目描述
请编写函数实现将一个数值插入到数组中适当的位置,使新数组按降序排列,并将插入的位置输出到屏幕上。 说明:1)原数组大小和数值由键盘输入,动态创建数组; 2)插入的数值由键盘输入。3)如果插入数据与原数组中某数据相同,则插在该数据之前。

输入样例
10 1 4 5 2 3 6 7 8 10 9
11
输出样例
1

#include <iostream>
using namespace std;
int flag = 0;
int main() {int n, ins;cin >> n;int *p = new int[1000];int *p1 = p;int *p2 = p;for (int i = 0; i < n; i++) {int k; cin >> k;*p1 = k; p1++;} cin >> ins;for (int i = 0; i < n; i++)for (int j = 0; j < n - i - 1; j++) {if (*(p2 +j) < *(p2 + j + 1)) {int t = *(p2 + j);*(p2 + j) = *(p2 + j + 1);*(p2 + j + 1) = t;}}int pos = 0;for (int i = 0; i < n; i++) if (*(p + i) <= ins) {pos = i;flag = 1;break;}if (!flag) pos = n;for (int i = n; i > pos; i--)*(p + i) = *(p + i - 1);*(p + pos) = ins;// for (int i = 0; i <= n; i++)//  cout << *(p + i) << endl;cout << pos + 1 << endl;delete [] p;return 0;
}

下面这个是自己写的不知道对不对

#include <iostream>
using namespace std;
int flag = 0;
int main() {int n, ins;cin >> n;int *p = new int[1000];int *p1 = p;int *p2 = p;for (int i = 0; i < n; i++) {int k; cin >> k;*p1 = k; p1++; } cin >> ins;int pass=0;for (int i = 0; i < n; i++){if(*(p2+i)>ins) pass++;}cout<<pass+1;delete[]p;return 0;
}

实验6-2

6-1 矩形类

题目描述
定义一个矩形类,长和宽是它的属性,可以求出矩形的面积。定义一个比较函数,比较两个矩形的面积,把面积大的矩形对象作为引用来返回。主函数中定义两个矩形,它们的长、宽已知,分别为矩形1:长5.2、宽4.3,矩形2:长100、宽20。再由键盘输入一个矩形的长、宽。调用比较函数进行比较,找出面积大的矩形,输出其面积。

输入样例
10 8
输出样例
2000

#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
class rect
{public:rect(double X, double Y) {//构造函数x = X, y = Y;sq = X * Y;};double getS() {return sq;}
private:double x, y;double sq;
};
int main() {rect c1(5.2, 4.3);rect c2(100, 20);double a, b;cin >> a >> b;rect c3(a, b);double ans = max(c1.getS(), max(c2.getS(), c3.getS()));//algorithm库函数定义了maxcout << ans << endl;return 0;
}

6-2 三角类

题目描述
定义一个Triangle三角形类,包括数据成员三边边长(int类型)、判断三角形形状的成员函数。键盘输入三角形三边边长,判断此三角形形状(其中,等腰直角三角形归为等腰三角形类)。
构成等边三角形,输出“A equileteral triangle”;
构成等腰三角形,输出“A isosceles triangle”;
构成直角三角形,输出“A right triangle”;
构成三角形,但不是以上三种,则输出“A triangle”;
不构成,输出“Not a triangle”。

输入样例
3 4 5
输出样例
A right triangle

#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
string s[5] = {"Not a triangle", "A triangle", "A right triangle", "A isosceles triangle", "A equileteral triangle"};
class Triangle
{public:Triangle(int a, int b, int c){z = max(a, max(b, c)); x = min(a, min(b, c)); y = a + b + c - x - z;};int check();void print(){ cout << s[check()] << endl; };
private:int x, y, z;
};
int Triangle::check() {int flag(0);if (x + y > z && abs(x - y) < z) flag = 1;//构成三角形//flag = flag ? 2 : 0表示如果flag不为0(表达式为真),就把2赋值给flagif (pow(x, 2) + pow(y, 2) == pow(z, 2)) flag = flag ? 2 : 0;//判断直角if (x == y || y == z) flag = flag ? 3 : 0;//判断等腰if (x == y && y == z) flag = flag ? 4 : 0;//判断等边return flag;
}
int main() {int i, j, k;cin >> i >> j >> k;Triangle ans(i, j, k);//ans是具体的对象ans.print();return 0;
}

6-3 时间类

题目描述
定义一个时间类,数据成员包括年、月、日,它的函数成员分别可以设置时间、显示时间,其中显示时间的函数,使用重载函数定义,遇到整型数值,则返回2017-5-30的格式,遇到浮点型数值,则输出2017年5月30日的格式。

输入样例
2017 5 30 1.1
输出样例
2017年5月30日

#include <cstdio>
#include <iostream>
using namespace std;
class Clock
{public:Clock(int y, int m, int d) {year = y, month = m, day = d;};void show(int flag) {printf ("%d-%d-%d\n", year, month, day);}void show(double flag){printf ("%d年%d月%d日\n", year, month, day);}
private:int year, month, day;bool flag = 0;
};
int main() {int a, b, c;string s;int k = 1;cin >> a >> b >> c >> s;//判断浮点数int len = s.length();for (int i = 0; i < len; i++) if (s[i] == '.') k = 0;Clock ans(a, b, c);if (k) ans.show(1);else ans.show(1.00);return 0;
}

6-4 员工薪金管理类

题目描述
设计雇员Employee类,包含雇员的情况,工号、姓名、工资等级(每月工资数,整型数值)、受雇时间(年、月、日)。编写程序测试Employee类。要求输入任意员工工号,及当前日期(年、月,此日期应晚于受雇时间),输出该员工姓名接应得到的工资总额,中间用空格隔开。
已知当前所有员工信息如下:
1,“wang”,5000,2000,10,23
2,“liu”,4500,2008,1,20
3,“huo”,3800,2003,7,3
4,“ma”,5300,2015,4,10
5,“meng”,6000,2016,3,16

输入样例
5 2016 5
输出样例
meng 12000

#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
class staff
{public:staff(int id, string s, int money, int y, int m, int d);void payoff(int y, int r) {num = (y - eyear) * 12 + (r - emonth);num *= salary;}void print() {cout << name << " ";cout << num << endl;}
private:string name;int ID;int salary;int eyear, emonth, eday;int num;
};
staff::staff(int id, string s, int money, int y, int m, int d) {ID = id; name = s; salary = money;eyear = y, emonth = m, eday = d;
}int main() {staff a[5] = {staff(1,"wang",5000,2000,10,23), staff(2,"liu",4500,2008,1,20),staff(3,"huo",3800,2003,7,3),staff(4,"ma",5300,2015,4,10),staff(5,"meng",6000,2016,3,16)};int i, y, m;cin >> i >> y >> m;a[i - 1].payoff(y, m);a[i - 1].print();return 0;
}

上机考试题

1.求最小值

输入3个double类型数,求最小值。

输入格式:
12.5 10.5 13.5

输出格式:
10.5

#include<iostream>
using namespace std;
int main(){double a,b,c,x;cin>>a>>b>>c;x=(a<b?a:b)<c?(a<b?a:b):c;cout<<x;return 0;
}

2.计算奇数之和

输入5个正整数,求奇数之和。

输入格式:
1 2 3 4 5

输出格式:
9

#include<iostream>
using namespace std;
int main(){int a[5],sum=0;for(int i=0;i<5;i++){cin>>a[i];if(a[i]%2==1)sum+=a[i];}cout<<sum;return 0;
}

3.统计素数

题目描述
编程实现:输入N,找出N-100之间的素数,并输出。(输出格式,每个素数之间用一个空格隔开,结尾无空格)

样例输入
10
样例输出
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

用了一个非常愚蠢的办法得分了

#include<iostream>
using namespace std;
int main(){int N,a[25]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};cin>>N;for(int i=0;i<24;i++)if(N<a[i]) cout<<a[i]<<" ";cout<<a[24];return 0;
}

4.患者信息统计

某医院呼吸科需要统计肺病患者信息,请你建立患者类,包括患者的姓名、烟龄、酒龄3个私有数据成员,成员函数需要分别实现设置值功能、排序并显示功能。要求从键盘输入4个患者的“姓名 烟龄 酒龄”, 按照烟龄加酒龄的和,从高到低排序后依次输出患者所有信息。

划重点:这是道填空题

//按注释,填写完成下面程序,实现题目要求。
#include<iostream>
#include<cstring>
using namespace std;
/* 请在这里填写代码 */
__________________//声明一个类
{private:char m_name[10];int m_LengthofSmoking; //烟龄int m_AgeofWine; //酒龄public:void setPatient(){/* 请在这里填写代码 */
__________________//读入患者的姓名
__________________//读入患者的烟龄
__________________//读入患者的酒龄}void copyPatient(Patient pts){strcpy(m_name,pts.m_name);
m_LengthofSmoking=pts.m_LengthofSmoking;
m_AgeofWine=pts.m_AgeofWine;}char* getName(){/* 请在这里填写代码 */
__________________//获得患者的姓名}int getLengthofSmoking(){/* 请在这里填写代码 */
__________________//获得患者的烟龄
}int getAgeofWine(){/* 请在这里填写代码 */
__________________//获得患者的酒龄}int getTotal(){/* 请在这里填写代码 */
__________________//返回患者的烟龄和酒龄的和}void sortTotal(Patient* pts,int n){Patient temp;for(int i=1;i<n;i++){for(int j=n-1;j>=i;j--){if((pts+j)->getTotal() > (pts+j-1)->getTotal()){temp.copyPatient(*(pts+j-1));(pts+j-1)->copyPatient(*(pts+j));(pts+j)->copyPatient(temp); }}}for(int i=0;i<n;i++){/* 请在这里填写代码 */
__________________//输出患者的信息,包括姓名,烟龄和酒龄}}
};int main()
{Patient pts[4];for(int i=0;i<4;i++){pts[i].setPatient();}pts[0].sortTotal(pts,4);return 0;
}

输入格式:
输入4个患者的信息。

输出格式:
按照烟龄加酒龄的和,从高到低排序后依次输出患者所有信息。

输入样例:
在这里给出一组输入。例如:

wang
28
29
liu
37
47
zhao
30
42
fu
19
29

输出样例:
在这里给出相应的输出。例如:

liu 37 47
zhao 30 42
wang 28 29
fu 19 29

#include<iostream>
#include<cstring>
using namespace std;
class Patient
{private:char m_name[10];int m_LengthofSmoking; //烟龄int m_AgeofWine; //酒龄public:void setPatient(){cin>> m_name;cin>> m_LengthofSmoking;cin>> m_AgeofWine;      }void copyPatient(Patient pts){strcpy(m_name,pts.m_name);m_LengthofSmoking=pts.m_LengthofSmoking;m_AgeofWine=pts.m_AgeofWine;}char* getName(){return m_name;}int getLengthofSmoking(){return m_LengthofSmoking;}int getAgeofWine(){return m_AgeofWine;}int getTotal(){return m_LengthofSmoking+m_AgeofWine;}void sortTotal(Patient* pts,int n){Patient temp;for(int i=1;i<n;i++){for(int j=n-1;j>=i;j--){if((pts+j)->getTotal() > (pts+j-1)->getTotal()){temp.copyPatient(*(pts+j-1));(pts+j-1)->copyPatient(*(pts+j));(pts+j)->copyPatient(temp); }}}for(int i=0;i<n;i++){cout<< (pts+i)->getName()<<" "<<(pts+i)->getLengthofSmoking()<<" "<<(pts+i)->getAgeofWine()<<endl;}}
};int main()
{Patient pts[4];for(int i=0;i<4;i++){pts[i].setPatient();}pts[0].sortTotal(pts,4);return 0;
}

北邮信通2022C++大一上学期PTA汇总(含代码)(已完结)相关推荐

  1. 北邮信通2023大一下数据结构题目(含代码)

    这里写自定义目录标题 连续子序列最大和问题 题目 代码 1.复杂度O(n^3) 2.复杂度O(n^2) 3.复杂度O(n) 约瑟夫环问题 题目 代码 1.数组解法 4.分治原理 2.循环链表解法 连续 ...

  2. Jamie求职记--北邮信通小硕--技术类

    前言:      前些日子看了Steve兄的求职分享帖,写的很好,相信对于将来想从事非技术类的师弟师妹们,一定有很大的积极作用.      相信我们09级的同学们很多人还记得07级信通院求职交流会中大 ...

  3. 北邮微型计算机原理及应用阶段二,北邮信通院微机原理第二章.ppt

    北邮信通院微机原理第二章 异常模式:系统模式外的其他5种特权模式,常用于处理中断或其它异常. 处理器模式可以通过软件来改变,也可以通过外部中断或处理器异常改变. 特权模式:除用户模式外的其它6种模式 ...

  4. 信通可以保研计算机吗,保研经历(一)北邮信通院

    到了现在这个时间,夏令营已经基本上落下了帷幕,算是保研已经走过一半的路程.这段期间我看到了很多学长学姐留下的经验,所以也想把自己的经历记录下来,希望能对后来的小伙伴有所参考. 我自身的专业是通信工程, ...

  5. 北邮计算机学院竞赛加分,北邮信通院学科竞赛加分办法-20100720.doc

    北邮信通院学科竞赛加分办法-20100720 信息与通信工程学院学科竞赛及科技竞赛加分办法 根据2007年2月1日<北京邮电大学本科学生参加学科竞赛.科技竞赛的若干规定>的文件精神,现制订 ...

  6. 当生命里有程序来串门——一个北邮信通大一学生的漫谈

            数着数着大学生涯的第235天,来到CSDN的第228天,写下第一篇文章到现在的第128天--         听着听着五月天的歌,不知不觉就到了五月天.         总结,一场亲历 ...

  7. 跨专业北邮计算机考研,普通二本跨专业到北邮信通经验分享

    本人来自一所普通的本科学校,有幸今年考到了北邮的信通院,当接到复试通知的那一刻,真的很激动,觉得应该来这里写点什么帮助一下未来的学弟学妹,废话少说直接上干货,我今年的初试成绩英语48政治48数学133 ...

  8. 一位北邮信通硕士的求职历程,看看 或许有帮助

    序:写在前面的话 这篇文章的适用对象为:非技术类方向的同学,如果你是技术大牛,你可以跳过这篇文章了.如果你觉得自己不喜欢技术或者技术不适合你,此文或许会给你些有用的东西. 简单介绍一下,本人信通小硕, ...

  9. 北邮信通复试题c语言,『转贴』北邮信通院跑调剂的经历

    发信人: yn295636 (yn), 信区: AimGraduate 标  题: 昨天信通院跑调剂的经历 发信站: 北邮人论坛 (Thu Mar 26 12:01:33 2009), 站内 昨天在教 ...

最新文章

  1. 为什么我害怕数据结构学得好的程序员?
  2. Trie的C++实现及HDU1251,hdu1671
  3. 医疗器械软件安全性级别判定
  4. boost::tokenizer模块相关的测试程序
  5. 聊聊CTR预估算法DeepFM
  6. 6.1 图的深度优先和广度优先搜索
  7. 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之一 —— 开篇
  8. mysql 触发器不能同时 insert or update or delete_MySQL6:触发器
  9. jquery ajax调用服务器端指定的函数的三种方式
  10. linux内核数据结构实现--链表、队列和哈希
  11. 爬虫之HTTP基础知识
  12. 我对软件发展的思考,一个不变却一直在变的话题
  13. 五分钟搭建一个MarkDown文档解析器
  14. C++中char[]转string
  15. WiFi音箱在国内普及需解决的三点
  16. 基于SSM的境外电商后台管理系统(含word论文文档)
  17. COGS 734. [网络流24题] 方格取数问题
  18. 子曰:中庸之为德也,其至矣乎!民鲜久矣。
  19. android 微信跨境支付,微信跨境支付已在超过49个境外国家和地区合规接入
  20. JOI-2016/17 春季合宿 切题记

热门文章

  1. 使用长角牛演示:防止ARP协议被攻击原理和配置
  2. IOS逆向之汇编基础
  3. 云服务器的使用(一)
  4. 深圳超美海边烧烤场 深圳户外烧烤攻略
  5. windows核心编程--2、windows的画笔画刷以及一些简单的应用
  6. 在hive3.1.2中插入数据,报could not find or load main class org.apache.hadoop.mapred.YarnChild
  7. HC-02蓝牙串口模块的配置和使用
  8. 一些好用的APP推荐给你
  9. MyBatis--对象的联合查询
  10. 在微信小游戏中开发一个贪食蛇