元素为结构体的数组

本文介绍了一个使用C语言实现的学生信息管理系统,该系统能够创建、显示及搜索学生的学号、姓名和成绩等信息。通过简单的命令行交互,用户可以录入多条学生数据,并能根据学号快速查找指定学生的信息。
#include <stdio.h>
#include <string.h>
typedef struct student
{
	char no[10];
	char name[20];
	double score;
}STU;
void CreateStu(STU s[], int n)
{
	int i;
	for(i = 1; i <= n; i++)
	{
		printf("请输入第%d个同学的学号\n", i);
		scanf("%s",s[i].no );
		printf("请输入第%d个同学的姓名\n", i);
		scanf("%s", s[i].name);
		printf("请输入第%d个同学的成绩\n",i);
		scanf("%lf", &s[i].score); 
	}
 } 
void Pritness(STU s[], int n)
{
	int i;
	printf("学号   姓名   成绩\n");
	for(i = 1; i <= n; i++)
	{
		printf("%5s%7s%6.1lf\n", s[i].no, s[i].name, s[i].score);
	 } 
}
int SearchStu(STU s[], int n, char no[])
{
	int sign = 0;
	int i;
	for(i = 1; i <= n; i++)
	    {
	    	if(strcmp(s[i].no,no)==0)
	    	  {
	    	  	sign = 1;
	    	  	break;
			  }
		}
		if(sign == 1)return i; 
	    else	return -1;
}
int main()
{
	STU s[10];
	int n;
	scanf("%d",&n);
	CreateStu(s, n);
	Pritness(s, n);
	char no[20];
	char t;
	char c = 'Y';
    while(1) 
	{
		printf("请输入要查找同学的学号:");
	    scanf("%s", no); 
        t = SearchStu(s, n, no);
	    if(t != -1)
	  {
	   	printf("找到学号为%s的同学信息。同学信息如下:\n", no);
		printf("学号   姓名   成绩\n");
		printf("%5s%7s%6.1lf\n", s[t].no, s[t].name, s[t].score);
	   }
    	else
	  {
	    printf("没有找到学号为%s的同学信息。",no);
	  }
	  printf("继续查找吗?(Y/N)\n");
	  c= getchar();             //不运行,不知所措 
	  if(c == 'N') {break;}
	}
	 
	return 0;
}
### 结构体数组的定义与操作 在C和C++编程语言中,结构体数组是一种非常强大的工具,用于组织和管理复杂的数据集合。通过结构体数组,可以将多个具有相同结构的数据元素组合在一起,从而方便进行批量操作和管理。 #### 定义结构体数组 在C语言中,定义一个结构体数组的方式如下: ```c struct stu { int num; char name[20]; char sex; float score; }; struct stu edu[3]; // 定义了一个struct stu 类型的结构体数组edu ``` 在这个例子中,`edu` 是一个包含3个元素数组,每个元素都是 `struct stu` 类型。这意味着每个元素都可以存储一个学生的编号、姓名、性别和成绩[^1]。 在C++中,定义结构体数组的方式略有不同,但基本思路一致: ```cpp #include <iostream> #include <string> using namespace std; struct Student { string name; int age; int score; }; int main() { struct Student stuArray[3] = { {"张三", 18, 100}, {"李四", 28, 99}, {"王五", 38, 66} }; return 0; } ``` 这里,`stuArray` 是一个包含3个 `Student` 结构体对象的数组,并且在声明时就进行了初始化[^2]。 #### 操作结构体数组结构体数组的操作通常包括赋值、修改和遍历等。 ##### 赋值与修改 在C++中,可以直接对结构体数组中的元素进行赋值和修改: ```cpp stuArray[2].name = "赵六"; stuArray[2].age = 18; stuArray[2].score = 80; ``` 这段代码将 `stuArray` 数组中索引为2的元素的姓名、年龄和分数分别修改为“赵六”、18和80。 在C语言中,虽然不能直接对整个数组进行赋值(如 `arrayA = arrayB`),但可以通过结构体来间接实现这一功能: ```c struct s_tag { int a[100]; }; struct s_tag orange, lime, lemon; struct s_tag twofold(struct s_tag s) { for(int i = 0; i < 100; i++) { s.a[i] *= 2; } return s; } int main() { for(int i = 0; i < 100; i++) { lime.a[i] = 1; } lemon = twofold(lime); orange = lemon; for(int i = 0; i < 100; i++) { printf("%d\n", orange.a[i]); } return 0; } ``` 在这个例子中,`twofold` 函数接收一个 `s_tag` 类型的结构体,将其数组 `a` 中的每个元素乘以2,然后返回新的结构体。通过这种方式,可以实现对整个数组的赋值和修改[^3]。 ##### 遍历结构体数组 遍历结构体数组是检查或处理数组中每个元素的一种常见操作。在C++中,可以使用循环来遍历结构体数组: ```cpp for(int i = 0; i < 3; i++) { cout << " 姓名:" << stuArray[i].name << " 年龄:" << stuArray[i].age << " 分数:" << stuArray[i].score << endl; } ``` 这段代码会输出 `stuArray` 数组中每个学生的姓名、年龄和分数。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值