c++基础入门-练习案例

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;

}

C++入门小Demo

3.文档参考

【黑马之C++基础入门讲义】

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值