C语言:用指针实现,分别输入s的学号、姓名(姓名不含空格)、年龄和性别等信息,各数据成员间用空格间隔。用指针方法实现,不准投机取巧。请在第一对填空之间完成结构体成员定义,第二对填空之间完成输入s的各个成员,第三对填空之间完成判断性别,输出相应的内容。#include <stdio.h> int main() { struct Student { /*1*/ /*1*/ }; struct Student s,*p=&s; /*2*/ /*2*/; /*3*/ /*3*/ return 0; }
时间: 2023-11-22 19:52:01 浏览: 63
```c
#include <stdio.h>
int main() {
struct Student {
char id[10];
char name[20];
int age;
char gender;
};
struct Student s, *p = &s;
scanf("%s %s %d %c", p->id, p->name, &p->age, &p->gender);
if (p->gender == 'M') {
printf("%s的学号是%s,姓名是%s,年龄是%d,是男生。\n", p->name, p->id, p->name, p->age);
} else if (p->gender == 'F') {
printf("%s的学号是%s,姓名是%s,年龄是%d,是女生。\n", p->name, p->id, p->name, p->age);
} else {
printf("%s的学号是%s,姓名是%s,年龄是%d,性别未知。\n", p->name, p->id, p->name, p->age);
}
return 0;
}
```
相关问题
C语言:用指针实现,分别输入s的学号、姓名(姓名不含空格)、年龄和性别等信息,各数据成员间用空格间隔。
下面是用指针实现的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
struct student {
char id[10];
char name[MAX_NAME_LEN + 1];
int age;
char gender;
};
int main() {
struct student s;
char *p;
// 输入学号
printf("请输入学号:");
scanf("%s", s.id);
// 输入姓名
printf("请输入姓名:");
p = s.name;
while ((*p = getchar()) != ' ') {
p++;
}
*p = '\0';
// 输入年龄
printf("请输入年龄:");
scanf("%d", &s.age);
// 输入性别
printf("请输入性别(M/F):");
scanf(" %c", &s.gender);
// 输出输入的信息
printf("学号:%s\n", s.id);
printf("姓名:%s\n", s.name);
printf("年龄:%d\n", s.age);
printf("性别:%c\n", s.gender);
return 0;
}
```
在这个程序中,我们首先定义了一个 `struct student` 结构体,包含了学生的学号、姓名、年龄和性别等信息。然后我们通过指针来输入这些信息,具体地:
1. 先输入学号,直接用 `scanf()` 函数读取一个字符串即可;
2. 输入姓名时,我们需要逐个读取字符,直到遇到空格,此时将空格替换为字符串结束符 `\0`,表示姓名输入结束;
3. 输入年龄和性别时,直接用 `scanf()` 函数读取一个整数和一个字符即可。
最后,我们输出输入的信息,验证程序的正确性。
使用C语言实现:建立一个链表,每个节点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的节点所包含的年龄等于此年龄,则将此节点删去。
好的,我来给你讲一下这道题该怎么做。
首先,我们需要定义链表节点的结构体,包括学号、姓名、性别、年龄和一个指向下一个节点的指针,如下所示:
```c
typedef struct node {
int id; // 学号
char name[20]; // 姓名
char gender; // 性别
int age; // 年龄
struct node* next; // 指向下一个节点的指针
} Node;
```
接下来,我们需要实现创建链表和删除节点的函数。
创建链表函数可以按照以下步骤进行:
1. 定义一个头节点,并将其指针赋值为 NULL。
2. 循环读入学生信息,每读入一个信息就创建一个节点,并将其插入到链表的末尾。
3. 返回头节点的指针。
具体实现如下:
```c
Node* createList() {
Node* head = NULL;
Node* tail = NULL;
Node* newNode;
int id, age;
char name[20], gender;
// 循环读入学生信息,直到输入 -1 为止
while (1) {
printf("请输入学号、姓名、性别、年龄(以空格分隔,输入 -1 结束):");
scanf("%d", &id);
if (id == -1) {
break;
}
scanf("%s %c %d", name, &gender, &age);
// 创建新节点
newNode = (Node*) malloc(sizeof(Node));
newNode->id = id;
strcpy(newNode->name, name);
newNode->gender = gender;
newNode->age = age;
newNode->next = NULL;
// 将新节点插入到链表末尾
if (head == NULL) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
```
接下来是删除节点的函数,具体实现如下:
```c
void deleteNode(Node* head, int age) {
Node* prev = head;
Node* curr = head->next;
while (curr != NULL) {
if (curr->age == age) {
prev->next = curr->next;
free(curr);
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
}
```
这个函数的作用是删除链表中所有年龄等于给定年龄的节点。首先定义两个指针 prev 和 curr,分别指向头节点和头节点的下一个节点。然后循环遍历链表,如果遇到一个年龄等于给定年龄的节点,则删除该节点;否则继续遍历下一个节点。需要注意的是,在删除节点时需要释放该节点的内存空间。
最后,我们来写一个主函数,调用上述两个函数即可:
```c
int main() {
Node* head = createList();
int age;
printf("请输入要删除的年龄:");
scanf("%d", &age);
deleteNode(head, age);
// 打印剩余节点的信息
printf("剩余节点的信息:\n");
Node* curr = head;
while (curr != NULL) {
printf("%d %s %c %d\n", curr->id, curr->name, curr->gender, curr->age);
curr = curr->next;
}
return 0;
}
```
这样,我们就完成了这道题的实现。