十.结构化数据与结构

结构(1)-初识结构数据

1.两类结构化数据管理

我们需要存储一个信息,分别表示人的姓名、性别、身高、体重。

1.1使用循环分支储存信息

#include <stdio.h>
int main()
{
// 第一个人
char name1[20];
int gender1;
double height1;
double weight1;
// 第二个人
char name2[20];
int gender2;
double height2;
double weight2;
// 第三个人
char name3[20];
int gender3;
double height3;
double weight3;
// 输入人员信息
printf("input name gender height weight:\n");
scanf("%s %d %lf %lf", name1, &gender1, &height1, &weight1);
scanf("%s %d %lf %lf", name2, &gender2, &height2, &weight2);
scanf("%s %d %lf %lf", name3, &gender3, &height3, &weight3);
// 显示人员信息
printf("display personal information\n");
printf("name gender height weight:\n");
printf("%s %d %.2f %.2f\n", name1, gender1, height1, weight1);
printf("%s %d %.2f %.2f\n", name2, gender2, height2, weight2);
printf("%s %d %.2f %.2f\n", name3, gender3, height3, weight3);
return 0;
}

上面的代码灵活性非常差,而且耗费非常多的代码

1.2使用数组存储信息

#include <stdio.h>
int main()
{
// 使用数组存储人员信息
// 姓名数组,每个名字最多20个字节,最多10个名字。
char name[10][20];
int gender[10];
double height[10];
double weight[10];
// 人员数量
int numOfPerson = 0;
// 有多少人?
printf("How many people?\n");
scanf("%d", &numOfPerson);
// 输入人员信息
printf("input name gender height weight:\n");
for(int i = 0; i < numOfPerson; i++)
{
scanf("%s %d %lf %lf", name[i], &gender[i], &height[i], &weight[i]);
}
// 显示人员信息
printf("display personal information\n");
printf("name gender height weight:\n");
for(int i = 0; i < numOfPerson; i++)
{
printf("%s %d %.2f %.2f\n", name[i], gender[i], height[i], weight[i]);
}
return 0;
}

我们使用数组来存储数据,灵活性大大提高,但是这段代码只能一次性输入所有人的人员信息,如果以后人数变动了,无法继续增加人员信息,所以我们需求更加通用化。

2.交互式程序设计

我们首先设计三个选项:

  1. 输入用户信息
  2. 显示用户信息
  3. 退出程序

2.1system库函数介绍

system是头文件stdlib.h 中的一个函数,它的参数是一串字符串,这个字符串是命令行中的一串命令。

在这里介绍两个命令:

  1. “cls”命令:用于清空控制台屏幕
  2. “pause”命令:用于暂停程序执行,按任意键后继续执行

2.2程序设计

我们先打印用户页面,初始化系统设置

#include<stdio.h>
#include<stdlib.h>
void menu()
{
	printf("******************************\n");
	printf("********输入1录入信息*********\n");
	printf("********输入2查取信息*********\n");
	printf("********输入3退出程序*********\n");
	printf("******************************\n");
}

int main()
{
	int input = 0;
	do
	{
		system("cls");//每一次循环后都清空屏幕
		menu();
		
		scanf("%d", &input);
		switch (input)
		{
		case 1:
		case 2:
		case 3:
		default:
		}
	} while (input);
	return 0;
}

接着,我们将用户的信息录入查看代码加入

#include<stdio.h>
#include<stdlib.h>
void menu()
{
	printf("******************************\n");
	printf("********输入1录入信息*********\n");
	printf("********输入2查取信息*********\n");
	printf("********输入0退出程序*********\n");
	printf("******************************\n");
}

int main()
{
	// 使用数组存储人员信息
// 姓名数组,每个名字最多20个字节,最多10个名字。
	char name[10][20];
	int gender[10];
	double height[10];
	double weight[10];
	int input = 0;
	int i = 0;
	do
	{
		system("cls");
		menu();
		
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("请输入姓名 性别 身高 体重");
			scanf("%s %d %lf %lf", &name[i], &gender[i], &height[i], &weight[i]);
			i++;
			break;
		
		case 2:
			printf("name gender height weight:\n");
			for (int j = 0; j <i ; j++)
			{
				printf("%s %d %.2f %.2f\n", name[j], gender[j], height[j], weight[j]);
			}
			system("pause");

		case 0:
			printf("退出成功"); break;
		default:printf("非法输入");system("pause"); break;
		}
	} while (input);
	return 0;
}

3.聚合数据

C语言中能否将不同类型的数据聚合在一个实体当作呢?可以,不过我们需要引入一个新的关键词struct

char name1[20];
int gender1;
double height1;
double weight1;
struct {
char name[20];
int gender;
double height;
double weight;}

右边的代码利用struct将数据聚合在一起。

现在,我们有了一个新数据类型。这种由不同类型聚合而成的数据被称之为结构。关键词 struct 取

自 structure ,中文翻译为结构。

结构的定义和数组比较相似,我们自然可以从数组的一些角度去理解结构

struct {
char name[20];
int gender;
double height;
double weight;
}arr[10];

这就是结构的命名,我们将这四个数据整合的结构命名为arr[10],表明每个数据存储在一个arr的数组中,数组最大元素为10,观察到name[20]的数组,因此对于name形成了一个二维数组。

4.结构的访问

我们可以使用arr[0] 访问一大块元素。

我们也可以使用成员运算符 . 结合上 字段名 来访问聚合物种的每一项成员

arr[0].name;
arr[0].gender;
arr[0].height;
arr[0].weight;

演示一下:

struct {
	char name[20];
	int gender;
	double height;
	double weight;
}arr[1];
scanf("%s %d %lf %lf", arr[0].name, &arr[0].gender, &arr[0].height, &arr[0].weight);
printf("%s %d %.2f %.2f\n", arr[0].name, arr[0].gender, arr[0].height, arr[0].weight);

5.结构化的交互式程序

5.1改变数组的繁琐

/*char name[10][20];
int gender[10];
double height[10];
double weight[10];*/
struct{
	char name[20];
	int gender;
	double height;
	double weight;
}arr[10];

第二步,我们改变录入数据和打印数据的方式

//scanf("%s %d %lf %lf", &name[i], &gender[i], &height[i], &weight[i]);
scanf("%s %d %lf %lf", arr[i].name, &arr[i].gender, &arr[i].height, &arr[i].weight);
//printf("%s %d %.2f %.2f\n", name[j], gender[j], height[j], weight[j]);
printf("%s %d %.2f %.2f\n", arr[i].name, arr[i].gender, arr[i].height, arr[i].weight);

这样做除了结构更清晰,还有什么好处呢?

我们仅用了一个数组就表示了所有的信息,不仅利于信息的录入,更利于信息的查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值