#include <stdio.h> struct STU { char name[10]; int num; }; void f(char *name,int num) { struct STU s[2]={ {"SunDan",20044},{"Penghua",20045}}; 1 num=s[0].num; strcpy(name,s[0].name); } int main(void) { struct STU s[2]={{"YangSan",2004},{"LiSiGuo",20042}},*p; p=&s[1];f(p->name,p->num); printf("%s %d\n",p->name,p->num); return 0; }这个程序我在一标记了个1,请问标记出STU结构是什么样的,它变了吗,
时间: 2024-01-05 18:02:45 浏览: 62
标记1后面的语句是 `num=s[0].num;`,这句话将 `s[0]` 中的 `num` 值赋给了 `num` 变量。因此,`f()` 函数中的 `num` 参数只是一个局部变量,不会对 `STU` 结构体产生任何影响。
`STU` 结构体的定义为:
```c
struct STU {
char name[10];
int num;
};
```
它在整个程序中没有发生任何变化。
相关问题
#include <stdio.h> struct student { int num; char name[20]; }*p; void main() { struct stu s1[2]={{1001,"Liping"},{1002,"Zhangsan"}}; p=s1+1; printf("%d %s\n",p->num,(*p).name); }这串c语言代码有什么错误
这段代码有几个问题:
1. `struct student`被定义为了`struct student {}`,但是实际使用的是`struct stu`,应该将其改为`struct student`。
2. `void main()`应该改为`int main()`,因为`main()`函数需要返回一个整型值。
3. `struct stu s1[2]={{1001,"Liping"},{1002,"Zhangsan"}};`中定义了一个名为`s1`的结构体数组,但是数组类型应该为`struct student s1[2]`。
4. `p=s1+1;`中将指针`p`指向了`s1`数组的第二个元素,但是`s1`是一个局部数组,当函数返回时,其内存会被释放,指针`p`指向的内存也会被释放,因此在后续使用指针`p`时会出现问题。
5. `printf("%d %s\n",p->num,(*p).name);`中使用了指针`p`,但是`p`指向的内存已经被释放,因此程序会产生未定义的行为。
以下是修改后的代码:
```
#include <stdio.h>
struct student {
int num;
char name[20];
};
int main() {
struct student s1[2] = {{1001, "Liping"}, {1002, "Zhangsan"}};
struct student *p = s1 + 1;
printf("%d %s\n", p->num, p->name);
return 0;
}
```
修改后的代码中,将结构体类型定义为了`struct student`,将`void main()`改为了`int main()`,将`s1`数组类型修改为了`struct student s1[2]`,并且使用指针`p`指向`s1`数组的第二个元素。同时,将`printf()`函数中的指针`p`改为了新指针`p`,避免了指针已经被释放的问题。
#include <stdio.h> #include <stdlib.h> /*其它说明*/ #include <string.h> /*字符串函数*/ #include <time.h> #define LEN sizeof(STUDENT) typedef struct stu /*定义结构体数组用于缓存数据*/ { char num[6]; //学号 char name[5]; //姓名 int score[3]; //三科成绩 int sum; //总成绩 float average; //平均成绩 int order; //排序 int order1; //排名 struct stu *next; } STUDENT; STUDENT *Init();/*初始化函数*/ int Menu_Select();/*菜单选择函数*/ STUDENT *Create(); /*输入函数*/ void Print(STUDENT *head); /* 显示全部记录函数*/ void Search(STUDENT *head);/*查找记录函数*/ STUDENT *Modify(STUDENT *head);/*修改记录函数*/ STUDENT *Delete(STUDENT *head);/*删除记录函数*/ STUDENT *Sort(STUDENT *head);/*排序函数*/ STUDENT *Insert(STUDENT *head, STUDENT *New); /*插入记录函数*//*TODO: 排序排名 功能描述: 按照降序给链表排序,排序存在order,排名存在order1 参数说明:head-STUDENT型指针 返回值说明:STUDENT型指针 */ STUDENT *Sort(STUDENT *head) { return (head); }补全函数
这个函数似乎没有实现排序排名的功能,我来帮你补充一下:
```
STUDENT *Sort(STUDENT *head)
{
STUDENT *p, *q, *tail;
int len = 0, i, j;
// 获取链表长度
for (p = head; p != NULL; p = p->next) {
len++;
}
// 外层循环控制比较轮数
for (i = 0; i < len - 1; i++) {
tail = head;
p = head->next;
q = p;
// 内层循环进行两两比较
for (j = 0; j < len - i - 1; j++) {
if (p->sum > q->sum) {
// 交换节点数据
if (p == head->next) {
head->next = q;
p->next = q->next;
q->next = p;
tail = q;
q = p->next;
} else {
tail->next = q;
p->next = q->next;
q->next = p;
tail = q;
q = p->next;
}
} else {
tail = p;
p = q;
q = p->next;
}
}
}
// 排名
p = head;
for (i = 1; i <= len; i++) {
p->order = i;
p = p->next;
}
// 排序完成,返回头节点
return head;
}
```
这个函数的实现思路是使用冒泡排序对链表进行排序,同时进行排名。排序的依据是每个节点的 `sum` 字段,也就是总成绩。排完序之后,遍历链表,给每个节点的 `order1` 字段赋上相应的排名即可。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)