文章目录
- 1月
- 9月
- 2月
- 10月
- 12月
- 1.输入一个0~100间整数作学生分数,编程自动输出学生成绩,成绩分为ABCDE五种,90及以上A,80 - 89为B,70 - 79为C,60 - 69为D,60以下为E
- 2.输入两个不等的三位数m和n(m < n),编程求出m~n之间(包含m、n)所有能被3整除且不能被5整除的数字的和
- 3.定义一个2行3列的二维数组a和对应指针p,并用指针p实现对数组遍历,实现输出每行第2个元素的值
- 4.若已知 f(0) = 2, f(1) = 3,整数n >= 2, 已知 f(n) = f(n - 1) + f(n - 2),
- 5.实现一个任意输入两个整数进行加减乘除运算的计算器,主程序中要求提示输入两个整数,
- 6.定义a[3][5] = { {11,3,56,12,30},{22,80,65,16,89},{39,10,33,9,81} };
- 11月
1月
2.定义一个整形数组arr
(1)把arr中的偶数去掉后保存到一个新数组中
(2)输出arr数组元素,输出新数组元素,并输出新旧数组长度之差
void test_week3_1(){
int arr1[9]={1,2,3,4,5,6,7,8,9};
int arr2[9];
int k = 0;
for(int i = 0;i<9;i++){
if(arr1[i]%2 != 0){
arr2[k] = arr1[i];
cout << arr2[k] << endl; //打印新数组
k++;
}
}
cout << 9-k<< endl;
}
2.定义整形栈s
(1)栈s中添加多个元素
(2)遍历并输出元素
#include <stack> //导栈
void test_week_3(){
stack<int> s; //定义int类型的栈(容器)
s.push(1);//放进去 底
s.push(2);//放进去
s.push(3);//放进去 顶
for(int i = 0;i<3;i++){
cout << s.top()<< endl; //3 2 1
s.pop();//弹走
}
}
3.输入一个字符串包括大小写和数字,将其中的大写英文字母改为小写,并且输出数字个数
(1)按要求提示并输入要转换的字符串
(2)循环判断每个字符并转换并判断数字的个数
(3)正确输出转换后的结果和数字的个数
int main(){
string str1 = "abc111AAA";
int num = 0;
for(int i = 0 ;i<str1.length();i++){ //i下标
if(isdigit(str1[i])){
num++;
} else if(isupper(str1[i])){
str1[i]=tolower(str1[i]);
}
}
cout << num<< endl;
cout << str1;
}
4.根据下面数据,编程实现要求功能:
姓名 年龄 性别
name age gender
A 22 女
B 21 女
C 20 男
D 23 男
E 19 男
(1)定义学生结构体或者类Stu,包括姓名(name),年龄(age),性别(gender)等变量
(2)定义结构体MyR,要求结构体中用上()运算符重载
(3)定义函数show,要求对传入的学生数据进行显示
(4)在主程序中,根据题目中数据创建学生数组
(5)调用show方法遍历学生数据并输出
(6)对学生数据根据年龄进行排序并输出排序后结果
(7)判断是否存在名字为E的学生并输出结果
(8)要求主程序中使用STL,用上sort方法
(9)要求主程序中排序时用上MyR与运算符重载()
struct student{
string name;
int age;
string sex;
};
//制定排序规则
struct MyR {
//重载()运算符
bool operator()(student s1, student s2){
return s1.age > s2.age; //用年龄 >降序
}
};
//用来打印结构体数据
void show(student stu){
cout << "name:" << stu.name <<"age:" << stu.age <<"sex:" <<stu.sex << endl;
}
//以前的写法
//bool compare(student stu1,student stu2){
// return stu1.age > stu2.age; //>年龄降序 <升序
//}
int main(){
student stu1={"谢天宇",20,"男"}; //结构体创建对象
student stu2={"张文京",19,"男"}; //结构体创建对象
student stu3={"班长",21,"男"}; //结构体创建对象
student arr[3] ={stu1,stu2,stu3};
sort(arr,arr+3, MyR()); //排序
//打印看看是否排序了
for(int i = 0;i<3;i++){
show(arr[i]); //在循环中调用打印函数,打印学生信息
}
}
9月
1.编写程序实现以下功能或问题
(1)定义一个成绩类Grade
(2)数据成员:gMath、gChn、gEng。分别储存数学、语文、英语的成绩
①说明:学生A三门成绩为77、80、75
②说明:学生B三门成绩为65、75、70
(3)函数成员:构造函数(有参数)、相应的计算、输出信息等函数。计算、输出的实际方式不限
(4)对2个学生(stuA、stuB)的各项成绩,运用合理方法,计算2名学生各自的总分并输出
(5)输出2个学生各项的成绩总和(即mathSum、chnSum、engSum),并相应输出
class Grade{
public:
int gMath;
int gChn; //语文
int gEng; //英文
//带参构造 用来给属性赋值
Grade(int math,int chinese,int english){
gMath = math;
this->gChn = chinese;
this->gEng = english;
}
void get_sum(){
cout << "成绩总和是:" << gMath+gChn+gEng <<endl;
}
//第5问
void operator+(Grade a){ //重载(重写)运算符+ (+ - * / % ++ --)
cout << "语文成绩和是:" << a.gChn+ gChn;
cout << "英语成绩和是:" << a.gEng+ gEng;
cout << "数学成绩和是:" << a.gMath+ gMath;
}
};
int main(){
Grade zsb(77,80,75); //创建对象
zsb.get_sum();
Grade zj(65,75,70);
zj.get_sum();
zsb+zj; //对象1+对象2
}
3.完成以下功能
问题描述:老师和学生有共同的属性m_name。各自的衡量标准是老师的论文数量m_paper和学生的考试分数m_score。由键盘输入对应的数值,输出复合条件的对应的姓名。老师要求m_paper > 3。学生要求m_score > 80。
提示:本题要#include
(1)定义基类Base
①公有域成员:构造函数(输入m_name行为放在构造函数内)、功能函数(输出数据)、纯虚函数isGood,用于判断是否满足条件、接口函数输出信息
②保护域成员:string型数据m_name、int型数据m_score、int型数据m_paper
(2)派生student和teacher两个类
①公有域成员:构造函数(学生类由键盘输入m_score、教师类由键盘输入m_paper)
②isGood()函数,学生类m_score>80返回1、教师类m_paper>3返回1。不符合条件返回0
(3)对于符合条件(即上条要求)的,接口函数,输出对应的m_name
using namespace std;
class Base{ //父类
protected:
string m_name;
int m_score;
int m_paper;
public:
Base(){
cout << "输入学生名字" << endl;
cin >> m_name;
}
void print(){
cout <<"名字:" << m_name << endl;
}
virtual int isGood()=0; //纯虚函数
};
class student: public Base{ //子类 : 父类 (继承)
public:
student():Base(){ //调用父类的构造函数,给名字赋值
cout << "输入学生成绩" << endl;
cin >> m_score;
}
int isGood(){ //重写(覆盖)父类的虚函数
//补齐
if(m_score > 80){
cout << "成绩合格" << endl;
return 1;
} else{
cout << "成绩不合格" << endl;
return 0;
}
}
};
class teacher:public Base{ //子类2
public:
teacher():Base(){ //子调用父的构造函数,为了给name赋值
cout << "输入论文数量" << endl;
cin >> m_paper;
}
int isGood(){
if(m_paper > 3){
cout << "论文数量合格" << endl;
return 1;
} else
{
cout << "论文数量不合格" << endl;
return 0;
}
}
};
int main(){
student stu1();
stu1.print();
stu1.isGood();
teacher tea();
tea.print();
tea.isGood();
}
4.对运算符“%”重载,实现数组各对应元素求模运算,如:a[3]={ 11,22,37 } ,b[3]={ 3,6,8 } ,则 a%b={ 2,4 ,5 } 。具体要求:
(1)类的公有函数成员:构造函数,接受参数为数组名
(2)利用运算符%的重载,完成相关运算
(3)在主函数中定义相关对象,并进行测试
class Test{
public:
int arr[3]; //属性
Test(int a[3]){ //{1,2,3}
for(int i = 0;i<3;i++){
arr[i]=a[i];
}
}
void operator%(Test b){ //b---arr{3,6,8}
for(int i = 0;i<3;i++){
cout << arr[i]%b.arr[i] << endl;
}
}
};
int main(){
int arr1[3] = {11,22,37};
Test a(arr1);
int arr2[3] = {3,6,8};
Test b(arr2);
a%b;
}
2月
1.定义二维整形数组arr
(1)定义指针p指向arr
(2)并通过指针p遍历数组并输出数组元素
(3)把arr中元素保存到一个一维的新数组中
(4)遍历一维数组并输出数组元素
void arr_test(){
int arr[2][3] = {1,3,2,5,7,9};
int *p = arr[0]; //[0][0]
int new_arr[6]; //定义一维数组
int k = 0; //一维数组的下标从0--5
for(int i = 0;i<2;i++){ //外行
for(int j = 0;j<3;j++){ //内列
cout << *p << endl; //地址对应的值
new_arr[k] = *p;
k++; //变一维数组的下标
p++; //移动指针 二维的下标
}
}
for (int i =0;i<6;i++){
cout << new_arr[i] << " ";
}
}
2.已知n<=1时,f(n)=1,否则f(n)=n*f(n-1)
(1)求f(n)的值
(2)使用递归方法
(3)输出f(10)的值
int f2(int n){
if(n<=1){
return 1;
} else{
return n*f2(n-1); //3*2*1
}
} //相当于求10的阶乘
3.定义一个长度为6的整形数组a
(1)输入6个整数并存入数组
(2)由小到大对数组进行排序
(3)输出数组中的第二小值和第二大值
void test3(){
int arr[6];
for(int i = 0;i<6;i++){
cin >> arr[i];
}
sort(arr,arr+6); //升
cout << "第二大的" << arr[4] <<endl;
cout << "第二小的" << arr[1] <<endl;
}
4.编程实现要求功能:
(1)定义一个Box类
(2)定义私有数据成员lengh(长),width(宽),height(高)
(3)在类内声明公有函数get_value()
(4)在类内声明公有函数volume(),求长方体体积
(5)get_value()在类外定义,get_value()作用是接收从键盘输入长、宽、高的值
(6)volume()函数在类外定义,volume()的作用是计算并显示长方体的体积
(7)在main()函数定义Box类的对象b1
(8)通过对象b1调用get_value()函数给长、宽、高赋值
(9)通过对象b1调用volume()函数输出长方体体积(长宽高)
class Box{
private:
int lengh;
int width;
int height;
public:
void get_value(); //没有函数体,只有函数定义
void volume();
};
void Box::get_value(){
cout << "输入长宽高" << endl;
cin >> lengh >> width >> height;
}
void Box::volume(){
cout << lengh*width*height << endl;
}
int main(){
Box box; //创建对象,因为没有带参构造所以不用加()
box.get_value(); //调用函数给属性赋值
box.volume(); //调用函数计算体积
}
10月
1.编程实现以下功能:
歌手参加比赛,7位裁判打分,去掉一个最高分和一个最低分后平均分是歌手的 最后得分
使用函数模板,实现求歌手的最后得分
主函数中输入7位裁判的得分,调用函数实现求的歌手的最后得分
使用double , int 2种不同类型的数据进行测试
template<typename T> //定义模板
T avgs(T arr[7])
{
T avg1 = 0; //求5个评分和
sort(arr, arr + 7);
for (int i = 1; i < 6; i++)
{
avg1 += arr[i];
}
return avg1/5; //返回平均值
};
int main()
{
double arr[7];
cout << "请输入选手的分数:";
for (size_t i = 0; i < 7; i++)
{
cin >> arr[i];
}
cout << "最终平均分是:" << avgs(arr);}
2.定义一个学生类Student
数据成员: 学号m_id,姓名m_name,年龄m_age
静态数据成员:学生数total,初始化为0
有参构造函数,给成员赋值
显示学生信息的成员函数display
定义一个课代表类Lesson_rep,继承自学生类
数据成员:课程编号m_lessonNum,课程评分m_score
有参构造函数,给成员赋值
显示课代表信息的成员函数display
主函数:
创建四个学生,三个普通学生和课代表
展示所有学生信息
参考运行效果:
class Student{
public:
int m_id;
string m_name;
int m_age;
static int total; //静态属性
//有参构造函数,给成员赋值
Student(int id,string name,int age){
this->m_id = id;
this->m_name = name;
this->m_age = age;
total++; //计数
}
//显示学生信息的成员函数display
void display(){
cout << m_id << m_name << m_age << endl;
}
};
int Student::total=0; //给student类中的total赋值
class Lesson_rep:public Student{ //子类有5个属性,(3父2子)
public:
int m_lessonNum;
int m_score;
//有参构造函数,给成员赋值
Lesson_rep(int id,string name,int age,int m_lessonNum,int m_score): Student(id,name,age){
this->m_lessonNum = m_lessonNum;
this->m_score = m_score;
}
//显示课代表信息的成员函数display
void display(){
Student::display();
cout << m_lessonNum << m_score << endl;
}
};
int main(){
cout << "普通学生信息:" << endl;
Student stu1(1,"史会辉",20); //1
stu1.display();
Student stu2(2,"高祉祺",19);
stu2.display();
Student stu3(3,"刘宏博",120);
stu3.display();
cout << "课代表信息:" << endl;
Lesson_rep zl(4,"赵亮",23,1,100);
zl.display();
cout << "总人数:"<< stu1.total << endl;
}
3.三角形的面积为 面积=sqrt(s*(s-a)(s-b)(s-c)),其中 s=1/2*(a+b+c)。a,b,c 为三角形的边。
要求:定义两个带参数的宏,一个用来求 s,另一个宏用来求 area。
写程序,在程序中用带实参的宏名来求面积 area.
输入描述
输入三角形的三条边,以逗号隔开
输出描述
输出面积
输入样例
3,4,5
7.3,8.2,9.9
输出样例
area=6
area=29.4
#define s1(a,b,c) (0.5*(a+b+c))
//面积=sqrt(s*(s-a)*(s-b)*(s-c))
#define mj(a,b,c) (sqrt(s1(a,b,c)*(s1(a,b,c)-a)*(s1(a,b,c)-b)*(s1(a,b,c)-c)))
int main(){
cout << "输入三条边,以,号隔开" << endl;
string str1;
cin >> str1;//3,4,5
string arr[3]; //用来保存三边的
int k = 0;//给arr用的
for(int i = 0;i<str1.length();i++){
if(str1[i] !=','){
arr[k]+=str1[i];
} else{
k++;
}
}
double a = stod(arr[0]); //把字符串转为小数 "4"--4.0
double b = stod(arr[1]); //把字符串转为小数
double c = stod(arr[2]); //把字符串转为小数
cout << a << b<< c;
cout << "面积:" << mj(a,b,c);
//3 4 5 答案:6
}
12月
1.输入一个0~100间整数作学生分数,编程自动输出学生成绩,成绩分为ABCDE五种,90及以上A,80 - 89为B,70 - 79为C,60 - 69为D,60以下为E
void test1() {
int score;
cin >> score;
if (score >= 90) {
cout << "A";
}
else if (80 <= score <= 89) {
cout << "B";
}
else if (70 <= score <= 79) {
cout << "C";
}
else if (60 <= score <= 69) {
cout << "D";
}
else
{
cout << "E";
}
}
2.输入两个不等的三位数m和n(m < n),编程求出m~n之间(包含m、n)所有能被3整除且不能被5整除的数字的和
void test2() {
int m, n;
cin >> m >> n;
int sum = 0;
if (m >= 100 && m <= 999 && n >= 100 && n <= 999 && m != n) {
for (int i = m; i <= n; i++) {
if (i % 3 == 0 && i % 5 != 0) {
sum += i;
}
}
cout << sum;
}
else
{
cout << "请重新输入";
}
}
3.定义一个2行3列的二维数组a和对应指针p,并用指针p实现对数组遍历,实现输出每行第2个元素的值
void test3() {
int a[2][3] = { {1,2,3},{4,5,6} };
int* p = a[0];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) {
cout << *p << endl;
}
p++;
}
}
}
4.若已知 f(0) = 2, f(1) = 3,整数n >= 2, 已知 f(n) = f(n - 1) + f(n - 2),
//用递归方法编程求f(10)的值,要求递归逻辑正确,计算f(10)的结果正确
int f11(int n) {
if (n == 0) {
return 2;
}
else if (n == 1) {
return 3;
}
else
{
return f11(n - 1) + f11(n - 2);
}
}
5.实现一个任意输入两个整数进行加减乘除运算的计算器,主程序中要求提示输入两个整数,
//提示输入运算符(可以输入 + 、 - 、 * 、 / 、 % 等)。要求定义加法add(), 减法sub(), 乘法mul(), 除法div(),
//运算方法要求有返回值。并输出计算结果,除法时要求有除数不能为0的判断(提示“除数不能为0,请重新输入”)
int add(int a,int b) {
return a + b;
}
int sub(int a,int b) {
return a - b;
}
int mul(int a, int b) {
return a * b;
}
double div(double a, double b) {
if (b == 0) {
cout << "除数不能为0,请重新输入" << endl;
}
else
{
return a / b;
}
}
6.定义a[3][5] = { {11,3,56,12,30},{22,80,65,16,89},{39,10,33,9,81} };
//计算所有奇数元素的和,计算所有偶数元素的和
void test6() {
int a[3][5]={ {11,3,56,12,30},{22,80,65,16,89},{39,10,33,9,81} };
int sum_j = 0;
int sum_o = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
if (a[i][j] % 2 != 0) {
sum_j += a[i][j];
}
else
{
sum_o += a[i][j];
}
}
}
cout << sum_j << endl;
cout << sum_o << endl;
}
11月
1.定义二维整形数组和指针,指针指向数组,并通过指针遍历数组。
void week3_11_1(){
int arr[2][3] = {1,2,3,4,5,6};
int *p = arr[0];
for(int i = 0;i<2;i++){
for(int j=0;j<3;j++){
cout << *p << endl;
p++;
}
}
}
3.定义向量,添加元素并遍历,定义映射,添加元素并遍历
int main(){
vector<int> v1; //定义向量
v1.push_back(1); //添加元素
v1.push_back(2);
for(int i = 0;i<2;i++){ //遍历和数组一样,用下标
cout << v1[i] << endl;
}
map<int ,string> m1; //定义映射。键、值对
m1.insert(pair<int ,string>(1,"张世博"));
m1.insert(pair<int,string>(2,"史会辉"));
for(auto i=m1.begin(); i!=m1.end();i++){
cout << i->first << ":" << i->second << endl;
}
}
4.定义学生类Stu,类中定义 string类型名字name,int 类型年龄age,
int 类型分数score等变量,定义结构体,要求用运算符重载方法,定义排序规则,定义显示函数,用模板库中sort方法,要求用排序规则,实现按年龄升序排序,按分数降序排序,并分别对排序结果进行输出和显示。
class Stu{ //学生
public:
string name;
int age;
Stu(string name,int age){
this->name = name;
this->age = age;
}
};
struct MyR{ //排序规则
bool operator()(Stu a,Stu b){ //重写()运算符
return a.age < b.age; //>降
}
};
int main(){
//3个学生类的对象
Stu stu1("张世博",20);
Stu stu2("张杰",21);
Stu stu3("郑伟",18);
Stu arr[]={stu1,stu2,stu3};
sort(arr,arr+3,MyR()); //排序
for(int i = 0;i<3;i++){
cout << arr[i].name << arr[i].age << endl;
}
}