void calculate_department( struct student* head) { int count; //count用来统计各学院人数 int m,n; //m用来避免重复打印 struct student* pa ,*pb,*pc; pa = pb= pc = head; n = 1; while (pa != NULL) { count = 0; pb = head; while (pb != NULL) { if (strcmp(pa->department, pb->department) == 0) { count++; } pb = pb->pNext; } printf("\n%s有%d名学生。\n", pa->department, count); do { pa = pa->pNext; n++; pc = head; m = 1; while (pc != pa && strcmp(pa->department, pc->department) != 0) { pc = pc->pNext; m++; } } while (pa != NULL && m != n); } return; }
时间: 2024-04-01 22:34:10 浏览: 78
这是一个统计学院人数的函数,它接收一个指向学生结构体链表头的指针作为参数。函数使用两个指针pb和pa遍历链表,分别统计不同学院的人数,最后输出结果。其中,pa指向当前正在统计人数的学院,pb遍历整个链表,如果pb所指向的学院与pa相同,则count加1。另外,函数使用一个辅助指针pc和计数器m来避免重复打印,具体实现是在每次pa指向新的学院时,将pc重新指向链表头,然后遍历链表,直到找到与pa相同的学院或者到达链表尾部为止,这样,如果在遍历到pa之前找到了与pa相同的学院,就说明之前已经统计过该学院的人数,不需要重复打印。
相关问题
void print_device(struct Device device); void print_devices(struct Device devices[], int count); float calculate_total_price(struct Device devices[], int count); void print_device(struct Device device)// { printf("%s %s %s %s %d %s %f\n", device.id, device.name, device.user, device.department, device.quantity, device.purchase_time, device.price); } void print_devices(struct Device devices[], int count) { for (int i = 0; i < count; i++) { print_device(devices[i]); } } float calculate_total_price(struct Device devices[], int count) { float total_price = 0.0; for (int i = 0; i < count; i++) { total_price += devices[i].price * devices[i].quantity; } return total_price;介绍、设、、、解释一下这三个函数的作用
这三个函数是针对一个名为“Device”的结构体的,下面对它们的作用进行介绍:
1. `print_device(struct Device device)`函数的作用是打印一个名为`device`的`Device`结构体中的所有属性值,包括设备编号、设备名称、使用人、所属部门、数量、购置时间和单价。这个函数通常用于测试和调试,以确保结构体中的所有属性都正确地设置和处理。
2. `print_devices(struct Device devices[], int count)`函数的作用是打印一个名为`devices`的`Device`结构体数组中的所有元素。通过循环遍历数组,该函数将依次调用`print_device`函数打印每个`Device`结构体的所有属性值。这个函数通常用于显示设备列表,以便用户或管理员可以查看所有设备及其属性。
3. `calculate_total_price(struct Device devices[], int count)`函数的作用是计算一个名为`devices`的`Device`结构体数组中所有设备的总价值。通过循环遍历数组,该函数将计算每个`Device`结构体的单价乘以数量的乘积,并将所有乘积相加以获得设备的总价值。这个函数通常用于计算设备清单的总价值,以便管理员或财务人员可以了解设备的总成本。
(4)基于结构体,编写一个班级成绩排序系统。 定义一个结构体 Student ,包含姓名( name ,字符串)、学号( id , int 型)、3门课程成绩( score , double 数组)、平均成绩( avg _ score , double 型)。输入每个学生的姓名、学号、3 门课程成绩。计算平均成绩,按平均成绩由高到低排序后输出。 填写下列程序。 # include < stdio . h > # define N 3/*学生人数*/ struct Student void input _ student info ( struct Student * p , int n ) int i ; for ( i -0:i< n ; i ++_ printf " printf (" student % dn ", i +1); printf (" name :"); gets ( printf (" id :"); scanf ("% d " printf (" scores :"); scanf ("%1f%1f%1f", printf ("- fflush ( stdin ); - An "); An "); void calculate _ avg _ score ( struct Student * p . int n ) inti ; for ( i -0; i < n ; itt , p -> avg _ score = void print student info ( struct Student * p , int n ) int i ; printf (" -\ n "); printf ("%15s%8s%8s%8s%8s%12sn"," name "," id "," scorel ","score2","score3"," avg score "); for ( i =0; i < n ; itt , ptt )
#include <stdio.h>
#include <string.h>
#define N 3
// 定义结构体
struct Student {
char name[20]; // 姓名
int id; // 学号
double score[3]; // 3门课程成绩
double avg_score; // 平均成绩
};
// 输入每个学生的信息
void input_student_info(struct Student *p, int n) {
int i;
for (i = 0; i < n; i++, p++) {
printf("student %d\n", i+1);
printf("name: ");
getchar(); // 清空输入缓存
gets(p->name);
printf("id: ");
scanf("%d", &p->id);
printf("scores: ");
scanf("%lf%lf%lf", &p->score[0], &p->score[1], &p->score[2]);
}
}
// 计算每个学生的平均成绩
void calculate_avg_score(struct Student *p, int n) {
int i;
for (i = 0; i < n; i++, p++) {
p->avg_score = (p->score[0] + p->score[1] + p->score[2]) / 3.0;
}
}
// 按平均成绩由高到低排序后输出
void print_student_info(struct Student *p, int n) {
int i, j;
struct Student temp;
// 冒泡排序
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-1-i; j++) {
if (p[j].avg_score < p[j+1].avg_score) {
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
// 输出排序结果
printf("\n%15s%8s%8s%8s%8s%12s\n", "name", "id", "score1", "score2", "score3", "avg score");
for (i = 0; i < n; i++, p++) {
printf("%15s%8d%8.1lf%8.1lf%8.1lf%12.1lf\n", p->name, p->id, p->score[0], p->score[1], p->score[2], p->avg_score);
}
}
int main() {
struct Student stu[N];
input_student_info(stu, N); // 输入每个学生的信息
calculate_avg_score(stu, N); // 计算每个学生的平均成绩
print_student_info(stu, N); // 按平均成绩由高到低排序后输出
return 0;
}
阅读全文