(C)下面程序的功能是利用指向结构体数组元素的指针,从键盘输入30名学生信息并进行访问,统计来自“山东“的学生人数,请填空。


# include " stdio . h "
# define N 30
# include " string . h "
 typedef struct student 
{ int number ;
 char name [8];
 char addr [20];
} STU ;
 void main ()
{ STU stu [ N ],* p ;
 int count =0;
 printf (" input students information :\ n ");
 for ( p = stu ; p < stu + N ; p ++)
{ scanf ("% d % s % s ",——————————————);
 if (————————————)
 count ++;
}
 printf ("% d come from 山东\ n ",——————————————);
}

答案:1.&p->number,p->name,p->addr

          2.strcmp(p->name,"山东")==0

          3.count

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,以下是用C语言的指向结构指针,从键盘输入3名学生信息,包含学号、姓名、三门课程成绩的代码示例: ``` #include <stdio.h> #include <stdlib.h> #define MAX_STUDENTS 3 struct student { int id; char name[20]; float score[3]; }; int main() { struct student *ptr; int i; ptr = (struct student*) malloc(MAX_STUDENTS * sizeof(struct student)); for (i = 0; i < MAX_STUDENTS; i++) { printf("输入第%d个学生信息:\n", i+1); printf("学号:"); scanf("%d", &(ptr+i)->id); printf("姓名:"); scanf("%s", (ptr+i)->name); printf("三门课程成绩:"); scanf("%f %f %f", &(ptr+i)->score[0], &(ptr+i)->score[1], &(ptr+i)->score[2]); } printf("\n学生信息如下:\n"); for (i = 0; i < MAX_STUDENTS; i++) { printf("学号:%d\n", (ptr+i)->id); printf("姓名:%s\n", (ptr+i)->name); printf("三门课程成绩:%.2f %.2f %.2f\n", (ptr+i)->score[0], (ptr+i)->score[1], (ptr+i)->score[2]); } free(ptr); return 0; } ``` 这段代码中,我们定义了一个结构 `student`,包含学号、姓名和三门课程成绩。然后我们使用指向结构指针 `ptr`,动态分配了一个大小为 `MAX_STUDENTS` 的结构数组。 接着,我们使用 `for` 循环,从键盘输入每个学生信息,包括学号、姓名和三门课程成绩。注意,我们使用了指向结构指针 `ptr` 来访问每个学生信息。 最后,我们使用 `for` 循环,输出每个学生信息,包括学号、姓名和三门课程成绩。 最后,我们使用 `free` 函数释放了动态分配的内存。 希望这个示例能够帮助你理解如何使用指向结构指针键盘输入学生信息。 ### 回答2: 首先,我们需要定义一个学生信息结构,包含学号、姓名以及三门课程的成绩: ```c struct student { int id; char name[20]; float score[3]; }; ``` 接下来,我们需要从键盘读入三个学生信息,并以指向结构指针的形式保存: ```c struct student stu[3]; struct student *p = stu; int i, j; for (i = 0; i < 3; i++) { printf("输入第%d个学生信息:\n", i + 1); printf("学号:"); scanf("%d", &(p + i)->id); printf("姓名:"); scanf("%s", (p + i)->name); printf("三门课程成绩:"); for (j = 0; j < 3; j++) { scanf("%f", &(p + i)->score[j]); } } ``` 这里我们使用了指针运算符来访问结构成员,其中`p`指向`stu`数组的首元素,因此`(p + i)->id`即为第`i+1`个学生的学号。 最后,我们可以输出每个学生信息: ```c for (i = 0; i < 3; i++) { printf("学生%d的信息:\n", i + 1); printf("学号:%d\n", (p + i)->id); printf("姓名:%s\n", (p + i)->name); printf("三门课程成绩:"); for (j = 0; j < 3; j++) { printf("%.2f ", (p + i)->score[j]); } printf("\n"); } ``` 上述代码的输出结果如下: ``` 输入第1个学生信息: 学号:1001 姓名:张三 三门课程成绩:90 88 92 输入第2个学生信息: 学号:1002 姓名:李四 三门课程成绩:80 90 85 输入第3个学生信息: 学号:1003 姓名:王五 三门课程成绩:78 85 90 学生1的信息: 学号:1001 姓名:张三 三门课程成绩:90.00 88.00 92.00 学生2的信息: 学号:1002 姓名:李四 三门课程成绩:80.00 90.00 85.00 学生3的信息: 学号:1003 姓名:王五 三门课程成绩:78.00 85.00 90.00 ``` ### 回答3: 指向结构指针在C语言中是非常常用的数据类型,它可以描述复杂的数据结构,并且方便地对其进行操作和管理。本题的要求是从键盘输入3名学生信息,包含学号、姓名、三门课程成绩,可以用指向结构指针的方式来实现。 首先,需要定义一个结构类型来描述学生信息,例如: ```c typedef struct student { int id; // 学号 char name[20]; // 姓名 float score[3]; // 三门课程成绩 } Student; ``` 然后,可以定义一个指向结构指针数组,用来存储三名学生信息,例如: ```c Student students[3]; Student *p = students; ``` 此时,p指向数组的第一个元素,也就是第一名学生信息结构。接下来,可以用循环逐个输入每个学生信息: ```c for (int i = 0; i < 3; i++) { printf("输入第%d个学生信息(学号、姓名、三门课程成绩):\n", i+1); scanf("%d %s %f %f %f", &(p+i)->id, (p+i)->name, &(p+i)->score[0], &(p+i)->score[1], &(p+i)->score[2]); } ``` 在每次循环中,先输出提示信息,接着使用scanf函数输入学生的学号、姓名和三门课程的成绩,注意用&p->id和&(p+i)->score[0]等形式来获取结构中各个成员的地址,这里的i相当于数组下标,用i来偏移数组指针来获得每个学生信息结构。最后,循环结束后,三名学生信息已经存储在了指针数组中。 如果需要打印输出这三名学生信息,也可以使用循环遍历整个指针数组,并且使用指向结构指针访问每个结构的成员,例如: ```c for (int i = 0; i < 3; i++) { printf("第%d个学生: 学号=%d, 姓名=%s, 课程1=%f, 课程2=%f, 课程3=%f\n", i+1, (p+i)->id, (p+i)->name, (p+i)->score[0], (p+i)->score[1], (p+i)->score[2]); } ``` 这样就能够输出每个学生信息。需要注意的是,在输入和输出时,对于指针变量的运算和成员访问,需要使用->运算符,而不是.运算符。另外,在开发过程中需要谨慎处理指针的内存分配、释放等问题,避免出现内存泄漏或野指针等问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值