c语言结构体指针书写姓名电话
时间: 2023-12-21 21:30:48 浏览: 67
以下是一个C语言结构体指针书写姓名和电话的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person {
char name[20];
char phone[20];
};
int main() {
struct person *p;
p = (struct person*)malloc(sizeof(struct person));
strcpy(p->name, "Tom");
strcpy(p->phone, "123456789");
printf("Name: %s\nPhone: %s\n", p->name, p->phone);
free(p);
return 0;
}
```
输出结果为:
```
Name: Tom
Phone: 123456789
```
相关问题
使用c语言并且不能运用指针书写:定义30名学生信息包含成绩,姓名和学号,实际人数从键盘上输入: (1)采用交换法实现成绩从高到低排序,并输出每一个学生所有信息。
在 C 语言中,如果你不能使用指针,可以利用数组和结构体结合来实现这个需求。首先,我们需要创建一个结构体来存储学生的个人信息,然后定义一个动态大小的数组来存放多于30名学生的信息。这里假设我们有一个名为 `Student` 的结构体,它包含 `name`, `student_id`, 和 `score` 字段。接下来,我们会编写一个函数来输入学生信息并实现冒泡排序。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
struct Student {
char name[50];
int student_id;
float score;
};
// 动态数组,用于存放学生信息
typedef struct Student StudentArray[MAX_STUDENTS]; // MAX_STUDENTS是一个预设的最大学生数
// 比较函数,用于成绩排序
int compareScores(const void *a, const void *b) {
const struct Student *sa = (const struct Student *)a;
const struct Student *sb = (const struct Student *)b;
return (sa->score > sb->score) - (sa->score < sb->score);
}
// 交换两个学生的成绩
void swapScores(struct Student *s1, struct Student *s2) {
float temp = s1->score;
s1->score = s2->score;
s2->score = temp;
}
// 输入学生信息
void inputStudents(StudentArray students) {
int num_students;
printf("请输入学生人数: ");
scanf("%d", &num_students);
for (int i = 0; i < num_students; i++) {
fgets(students[i].name, sizeof(students[i].name), stdin);
scanf("%d%f", &students[i].student_id, &students[i].score); // 注意处理回车符
}
}
// 冒泡排序
void bubbleSort(StudentArray students, int num_students) {
if (num_students > 1) {
qsort(students, num_students, sizeof(struct Student), compareScores); // 排序
for (int i = 0; i < num_students - 1; i++) {
swapScores(&students[i], &students[i + 1]); // 交换相邻的未排序部分
}
}
}
// 输出学生信息
void printStudents(StudentArray students, int num_students) {
for (int i = 0; i < num_students; i++) {
printf("学生 %d: 姓名:%s, 学号:%d, 成绩:%f\n",
students[i].student_id, students[i].name, students[i].student_id, students[i].score);
}
}
int main() {
StudentArray students;
inputStudents(students);
int num_students = MAX_STUDENTS; // 初始设置为最大值
bubbleSort(students, num_students);
printStudents(students, num_students);
return 0;
}
```
在这个示例中,我们通过输入、排序和打印实现了学生信息的管理。请注意,为了适应任意数量的学生,我们使用了一个动态数组 `StudentArray`,并通过 `MAX_STUDENTS` 来限制数组大小。如果实际需要输入超过30名学生,只需调整 `MAX_STUDENTS` 即可。不过,由于 `scanf` 需要手动处理回车字符,对于大量数据输入可能会有些不便。在实际应用中,你可能需要考虑更高效的输入方法。
阅读全文