c++基础入门-练习案例
文章目录1.三只小猪比重2.do...while循环 水仙花数字3.练习案例:敲桌子4.练习案例:乘法口诀表5.1练习案例:五只小猪称体重5.2 练习案例:数组元素逆置6.案例描述:封装-利用冒泡排序,实现对整型数组的升序排序7.结构体案例7.1 案例1-师生结构体7.2案例2-王者荣耀英雄1.三只小猪比重#include<iostream>using namespace std;//
·
文章目录
1.常用操作
快捷键:
1. 多行注释:CTRL+K+C/CTRL+K+U
2.案例
1.三只小猪比重
#include<iostream>
using namespace std;
//有三只小猪ABC,请分别输入三只小猪的体重,并且判断哪只小猪最重?
int main()
{
int pig1 = 0;
int pig2 = 0;
int pig3 = 0;
cout << "分别输入三只小猪的体重(单位Kg):";
cin >> pig1 >> pig2 >> pig3;
cout << "三小猪的体重分别是:" << pig1 << " " << pig2 << " " << pig3 << endl;
if (pig1 >= pig2)
{
if (pig1 > pig3)
{
cout << "pig1猪最重!" << endl;
}
else
{
cout << "pig3猪最重!" << endl;
}
}
else
{
if (pig2 > pig3)
{
cout << "pig2猪最重!" << endl;
}
else
{
cout << "pig3猪最重!" << endl;
}
}
system("pause");
return 0;
}
分别输入三只小猪的体重(单位Kg):25 40 55
三小猪的体重分别是:25 40 55
pig3猪最重!
2.do…while循环 水仙花数字
#include<iostream>
using namespace std;
//水仙花数字
int main()
{
int x = 100;
do
{
int a, b, c;
a = x % 10; //个位
b = x / 10 % 10;//十位
c = x / 100; //百位
if (a * a * a + b * b * b + c * c * c == x)
{
cout << x << endl;
}
x++;
} while (x < 1000); system("pause");
return 0;
}
153 370 371 407
3.练习案例:敲桌子
#include<iostream>
using namespace std;
//有三只小猪ABC,请分别输入三只小猪的体重,并且判断哪只小猪最重?
int main()
{
//案例:敲桌子-个位数含有7,或者十位数含有7,或者该数字式7的倍数
for (int i = 1; i <= 100; i++)
{
int a = 0;
int b = 0;
int c = 0;
a = i % 10;//个位
b = i / 10 % 10;//十位
c = i % 7;//是否7的倍数
if (a == 7 || b == 7 || c == 0)
{
cout << "敲桌子" << endl;
}
else
{
cout << i << endl;
}
}
system("pause");
return 0;
}
4.练习案例:乘法口诀表
#include<iostream>
using namespace std;
//有三只小猪ABC,请分别输入三只小猪的体重,并且判断哪只小猪最重?
int main()
{
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
cout << j << "X" << i << "=" << j * i << " ";
}
cout << endl;
}
system("pause");
return 0;
}
1X1=1
1X2=2 2X2=4
1X3=3 2X3=6 3X3=9
1X4=4 2X4=8 3X4=12 4X4=16
1X5=5 2X5=10 3X5=15 4X5=20 5X5=25
1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36
1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49
1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64
1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
5.1练习案例:五只小猪称体重
案例描述:
在一个数组中记录了五只小猪的体重,如:int arr[5] = {300,350,200,400,250};
找出并打印最重的小猪体重。
#include<iostream>
using namespace std;
int main()
{
int arr[5] = { 300,350,200,400,245 };
int max = 0;
for (int i = 0; i < 5; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
cout << "最重的那只为: " << max <<" kg" << endl;
system("pause");
return 0;
}
最重的那只为: 400 kg
5.2 练习案例:数组元素逆置
#include<iostream>
using namespace std;
int main()
{
int temp;
int a[] = { 1,3,2,5,4 };
int start = 0;
int end = sizeof(a) / sizeof(a[0]) - 1;
for (int i = 0; i < 5; i++)
{
if (start < end)
{
temp = a[start];
a[start] = a[end];
a[end] = temp;
}
start++;
end--;
}
for (int i = 0; i < 5; i++)
{
cout << a[i] << endl;
}
system("pause");
return 0;
}
4 5 2 3 1
6.案例描述:封装-利用冒泡排序,实现对整型数组的升序排序
例如数组:int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
#include<iostream>
using namespace std;
//定义一个冒泡排序升序函数;实现一维数组的升序排序;
//函数定义:
void maopao(int* p, int len)//也可写成int p[ ];引入数组的首地址p=arr;
{
cout << "冒泡升序前的数组为:" << endl;
for (int i = 0; i < len; i++)
{
cout << *(p + i) << " ";//用指针实现一维数组的元素输出,且此方法不会改变指针*p的初始地址位置;
}
cout << endl;
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (p[j] > p[j + 1])//用数组形式表示可以回到初始位置p[0];
{
int temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
cout << "冒泡排序后的数组为:" << endl;
for (int i = 0; i < len; i++)
{
cout << p[i] << " ";
}
cout << endl;
}
int main()
{
int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
int len = sizeof(arr) / sizeof(arr[0]);//定义数组元素个数;
maopao(arr, len);//函数调用:
system("pause");
return 0;
}
冒泡升序前的数组为:
4 3 6 9 1 2 10 8 7 5
冒泡排序后的数组为:
1 2 3 4 5 6 7 8 9 10
7.结构体案例
7.1 案例1-师生结构体
学校正在做毕设项目,每名老师带领5个学生,总共有3名老师,需求如下
设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员
学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值
最终打印出老师数据以及老师所带的学生数据。
#include <iostream>
#include<string>
#include<time.h>
using namespace std;
struct Student {
//学生名:
string sname;
//学生分数:
int score;
};
struct Teacher {
//老师名:
string tname;
//学生数组:
struct Student arraystudent[5];
};
//给老师和学生的信息赋值
void allocaspace(Teacher arrayteacher[3], int len)
{
//随机数种子
srand((unsigned int)time(NULL));
string nameseed = "ABCDE";
//给老师信息赋值
for (int i = 0; i < len; i++)
{
arrayteacher[i].tname = "teacher_";
arrayteacher[i].tname = nameseed[i];
//给老师带的五名学生赋值
for (int j = 0; j < 5; j++)
{
arrayteacher[i].arraystudent[j].sname = "student_";
arrayteacher[i].arraystudent[j].sname += nameseed[j];
int random = rand() % 61 + 40;
arrayteacher[i].arraystudent[j].score = random;
}
}
}
void printinfo(Teacher arrayteacher[], int len)
{
for (int i = 0; i < len; i++)
{
cout << "老师的姓名:" << arrayteacher[i].tname << endl;
for (int j = 0; j < 5; j++)
{
cout << "\t学生的姓名:" << arrayteacher[i].arraystudent[j].sname
<< " 考试的成绩:" << arrayteacher[i].arraystudent[j].score << endl;
}
}
}
int main()
{
//创建三名老师的数组
Teacher arrayteacher[3];
//通过函数给三名老师的信息赋值,并给老师所带的信息赋值;
int len = sizeof(arrayteacher) / sizeof(arrayteacher[0]);
allocaspace(arrayteacher, len);
//打印所有师生信息
printinfo(arrayteacher, len);
system("pause");
return 0;
}
老师的姓名:A
学生的姓名:student_A 考试的成绩:70
学生的姓名:student_B 考试的成绩:71
学生的姓名:student_C 考试的成绩:43
学生的姓名:student_D 考试的成绩:53
学生的姓名:student_E 考试的成绩:91
老师的姓名:B
学生的姓名:student_A 考试的成绩:43
学生的姓名:student_B 考试的成绩:76
学生的姓名:student_C 考试的成绩:81
学生的姓名:student_D 考试的成绩:88
学生的姓名:student_E 考试的成绩:54
老师的姓名:C
学生的姓名:student_A 考试的成绩:46
学生的姓名:student_B 考试的成绩:45
学生的姓名:student_C 考试的成绩:55
学生的姓名:student_D 考试的成绩:64
学生的姓名:student_E 考试的成绩:88
7.2案例2-王者荣耀英雄
设计一个英雄的结构体,包括成员姓名,年龄,性别;创建结构体数组,数组中存放5名英雄。
通过冒泡排序的算法,将数组中的英雄按照年龄进行升序排序,最终打印排序后的结果。
五名英雄信息如下:
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",19,"男"},
{"貂蝉",18,"女"},
#include<iostream>
#include<string>
using namespace std;
//1.设计英雄结构体
//英雄结构体
struct Hero
{
string name;
int age;
string sex;
};
//冒泡排序:实现年龄的升序排序
void bubbleSort(struct Hero heroArray[], int len)
{
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
//如果j下标的元素年龄大于j+1下标的元素的年龄,则交换两个元素
if (heroArray[j].age > heroArray[j + 1].age)
{
struct Hero temp = heroArray[j];
heroArray[j] = heroArray[j + 1];
heroArray[j + 1] = temp;
}
}
}
}
//打印排序后数组的信息
void printHero(struct Hero heroarray[],int len)
{
for (int i = 0; i < len; i++)
{
cout << "姓名: " << heroarray[i].name << " 年龄: " << heroarray[i].age
<<" 性别: " <<heroarray[i].sex << endl;
}
}
int main()
{
//创建5名数组存放英雄
struct Hero heroarray[5] = {
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",21,"男"},
{"赵云",20,"男"},
{"小乔",18,"女"}
};
int len = sizeof(heroarray) / sizeof(heroarray[0]);
cout << "1.排序前打印:" << endl;
for (int i = 0; i < len; i++)
{
cout << "姓名: " << heroarray[i].name << " 年龄: " << heroarray[i].age
<< " 性别: " << heroarray[i].sex << endl;
}
//3.对数组进行排序,按照年龄进行升序排序
bubbleSort(heroarray, len);
cout << "2.排序后打印:" << endl;
//4.将排序后的结果打印输出
printHero(heroarray, len);
return 0;
}
1. 排序前打印:
姓名: 刘备 年龄: 23 性别: 男
姓名: 关羽 年龄: 22 性别: 男
姓名: 张飞 年龄: 21 性别: 男
姓名: 赵云 年龄: 20 性别: 男
姓名: 小乔 年龄: 18 性别: 女
2. 排序后打印:
姓名: 小乔 年龄: 18 性别: 女
姓名: 赵云 年龄: 20 性别: 男
姓名: 张飞 年龄: 21 性别: 男
姓名: 关羽 年龄: 22 性别: 男
姓名: 刘备 年龄: 23 性别: 男
8.通讯录系统
#include<iostream>
using namespace std;
#include<string>
#define MAX 1000//通讯录最大容量
//设计联系人结构体
struct Person
{
//姓名
string m_Name;
//性别 1-男,2-女
int m_Sex;
//年龄
int m_Age;
//电话
string m_Phone;
//住址
string m_Addr;
};
//设计通讯录结构体
struct Addressbooks
{
//通讯录中保存的联系人数组
struct Person personArray[MAX];
//通讯录中记录当前联系人个数
int m_Size;
};
//菜单界面
void showMenu()
{
cout << "*************************"<< endl;
cout << "***** 1、添加联系人 *****" << endl;
cout << "***** 2、显示联系人 *****" << endl;
cout << "***** 3、删除联系人 *****" << endl;
cout << "***** 4、查找联系人 *****" << endl;
cout << "***** 5、修改联系人 *****" << endl;
cout << "***** 6、清空联系人 *****" << endl;
cout << "***** 0、退出通讯录 *****" << endl;
cout << "*************************"<< endl;
}
//1.添加联系人
void addPerson(Addressbooks* abs)
{
//判断通讯录是否已满,如果满了就不再添加
if (abs->m_Size == MAX)
{
cout << "通讯录已满,无法添加!" << endl;
return;
}
else
{
//添加具体联系人
//姓名
string name;
cout << "请输入姓名: " << endl;
cin >> name;
abs->personArray[abs->m_Size].m_Name = name;
//性别
cout << "请输入性别: " << endl;
cout << "1 --- 男" << endl;
cout << "2 --- 女" << endl;
int sex = 0;
while (true)
{
//如果输入1|2可以退出循环,因为输入的是正确值;
//如果输入有误,重新输入
cin >> sex;
if (sex == 1 || sex == 2)
{
abs->personArray[abs->m_Size].m_Sex = sex;
break;
}
cout << "输入有误,请重新输入!" << endl;
}
//年龄
cout << "请输入年龄: " << endl;
int age = 0;
cin >> age;
abs->personArray[abs->m_Size].m_Age = age;
//电话
cout << "请输入电话: " << endl;
string phone;
cin >> phone;
abs->personArray[abs->m_Size].m_Phone = phone;
//住址
cout << "请输入家庭住址: " << endl;
string address;
cin >> address;
abs->personArray[abs->m_Size].m_Addr = address;
//更新通讯录人数
abs->m_Size++;
cout << "添加成功!"<< endl;
system("pause");
system("cls");
}
}
//2.显示所有联系人
void showPerson(Addressbooks* abs)
{
//判断通讯录中人数是否为0,如果为0,提示记录为空;
//如果不为0;显示记录的联系人信息;
if (abs->m_Size == 0)
{
cout << "当前记录为空!" << endl;
}
else
{
for (int i = 0; i < abs->m_Size; i++)
{
cout << "姓名: " << abs->personArray[i].m_Name << "\t";
cout << "性别: " << (abs->personArray[i].m_Sex == 1 ? "男":"女") << "\t";
cout << "年龄: " << abs->personArray[i].m_Age << "\t";
cout << "电话: " << abs->personArray[i].m_Phone << "\t";
cout << "住址: " << abs->personArray[i].m_Addr << endl;
}
}
system("pause");
system("cls");
}
//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1;
//参数1-通讯录,参数2-对比姓名
int isExist(Addressbooks * abs, string name)
{
for (int i = 0; i < abs->m_Size; i++)
{
//找到用户输入的姓名的话:
if (abs->personArray[i].m_Name == name)
{
return i;//找到了,返回这个人在数组中的下标
}
}
return -1;//如果遍历没有找到,返回-1;
}
//3.删除指定联系人
void deletePerson(Addressbooks* abs)
{
cout << "请输入你要删除的联系人:" << endl;
string name;
cin >> name;
//reT == -1 未查到
//ret != -1 查到了
int ret = isExist(abs, name);
if (ret != -1)
{
//查到此人,进行删除操作
for (int i = ret; i < abs->m_Size; i++)
{
//数据前移
abs->personArray[i] = abs->personArray[i + 1];
}
abs->m_Size--;//更新删除后的人数
cout << "删除成功!" << endl;
}
else
{
cout << "查无此人!" << endl;
}
system("pause");
system("cls");
}
//4.查找指定联系人信息
void findPerson(Addressbooks * abs)
{
cout << "请输入您要查找的联系人:" << endl;
string name;
cin >> name;
//判断指定联系人是否存在通讯录中
int ret = isExist(abs, name);
if (ret != -1)//找到了联系人
{
cout << "姓名: " << abs->personArray[ret].m_Name << "\t";
cout << "性别: " << abs->personArray[ret].m_Sex << "\t";
cout << "年龄: " << abs->personArray[ret].m_Age << "\t";
cout << "电话: " << abs->personArray[ret].m_Phone << "\t";
cout << "住址: " << abs->personArray[ret].m_Addr << endl;
}
else
{
cout << "查无此人!" << endl;
}
system("pause");
system("cls");
}
//5.修改指定联系人
void modifyPerson(Addressbooks* abs)
{
cout << "请输入要修改的联系人名字:" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1)//找到了
{
//姓名
string name;
cout << "请输入新姓名:" << endl;
cin >> name;
abs->personArray[ret].m_Name = name;
//性别
cout << "请输入新性别:" << endl;
cout << "1 ---- 男" << endl;
cout << "2 ---- 女" << endl;
int sex = 0;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2)
{
abs->personArray[ret].m_Sex = sex;
break;
}
cout << "输入有误,请重新输入!" << endl;
}
//年龄
cout << "请输入新年龄:" << endl;
int age = 0;
cin >> age;
abs->personArray[ret].m_Age = age;
//电话
string phone;
cout << "请输入新联系电话:" << endl;
cin >> phone;
abs->personArray[ret].m_Phone = phone;
//地址
string address;
cout << "请输入新住址:" << endl;
cin >> address;
abs->personArray[ret].m_Addr = address;
cout << "修改成功!" << endl;
}
else//未找到
{
cout << "查无此人!" << endl;
}
system("pause");
system("cls");
}
//6.清空联系人
void clearPerson(Addressbooks* abs)
{
cout << "你真的要清空通讯录吗?请输入Y/N" << endl;
string flag;
while (true)
{
cin >> flag;
if (flag == "Y")
{
abs->m_Size = 0;//将当期记录联系人数量重置为0,做逻辑清空操作
cout << "通讯录已清空" << endl;
break;
}
if (flag == "N")
{
return;
}
cout << "输入有误,请重新输入!" << endl;
}
//按任意键后清屏
system("pause");
system("cls");
}
int main()
{
//创建通讯录结构体变量
Addressbooks abs;
//初始化通讯录当前的人员个数
abs.m_Size = 0;
int select = 0;//创建用户选择的输入变量
while (true)
{
//菜单调用
showMenu();
cin >> select;
switch (select)
{
case 1:// 1、添加联系人
addPerson(&abs);//利用地址传递,可以修饰实参
break;
case 2://2、显示联系人
showPerson(&abs);
break;
case 3://3、删除联系人
/*{
cout << "请输入要删除的姓名: " << endl;
string name;
cin >> name;
if (isExist(&abs, name) == -1)
{
cout << "查无此人!" << endl;
}
else
{
cout << "找到此人!" << endl;
}
}*/
deletePerson(&abs);
break;
case 4://4、查找联系人
findPerson(&abs);
break;
case 5://5、修改联系人
modifyPerson(&abs);
break;
case 6://6、清空联系人
clearPerson(&abs);
break;
case 0://0、退出通讯录
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
break;
}
}
system("pause");
return 0;
}
3.文档参考
点击阅读全文
更多推荐
所有评论(0)