实验内容及要求:编写程序完成单链表的建立、查询,掌握结构体的定义、数据输入方法。
- 编写一个建立一个单链表的函数。设链表的表元素信息包含学号、姓名、一门课的成绩;写一个按照学号查一个学生成绩的函数;最后写一个主函数先调用建立函数,再调用查询函数,显示查到学生的姓名和成绩。
- 编一程序,能把从终端输入的一个字符串中的小写字母全部转换成大写字母,要求输入字符的同时指定该字符在字符串中的序号(即字符在字符串中的顺序号,例如第1个字符的序号为1),字符和序号存入结构体中,字符串存入结构体数组中,然后显示结构体数组的结果。(用字符!表示输入字符串的结束)。
要求:请同学把预备知识、步骤、程序框图、调试好的程序及存在的问题写在下面(不够可以附页)。
1.c
#include <stdlib.h>
#include <stdio.h>
typedef struct student_node {
int id;
char name[128];
double score;
struct student_node* next;
} *Student;
Student student_new() {
Student s;
s = (Student)calloc(1, sizeof(struct student_node));
if (s != NULL) {
scanf("%d%s%le", &s->id, s->name, &s->score);
}
s->next = NULL;
return s;
}
Student student_list() {
Student s = NULL, head = NULL;
int length;
scanf("%d", &length);
while (length--) {
if (s) {
s = s->next = student_new();
} else {
s = head = student_new();
}
}
return head;
}
Student student_search(Student s, int id) {
Student p;
for (p = s; p; p = p->next) {
if (p->id == id) {
return p;
}
}
return NULL;
}
void student_display(Student s) {
if (s != NULL) {
printf("%d %s %g\n", s->id, s->name, s->score);
}
}
void student_free(Student s) {
while (s) {
Student p = s;
s = s->next;
free(p);
}
}
int main(void) {
Student s = NULL;
int id;
s = student_list();
scanf("%d", &id);
student_display(student_search(s, id));
student_free(s);
return EXIT_SUCCESS;
}
2.c
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#define MAX 128
typedef struct {
struct {
char value;
int index;
} data[MAX];
int length;
} CharSequence;
int main(void) {
CharSequence seq;
int i;
char c;
for (i = 0; (c = getchar()) != '!'; i++) {
if (islower(c)) {
c = toupper(c);
}
seq.data[i].value = c;
seq.data[i].index = i + 1;
}
seq.length = i;
for (i = 0; i < seq.length; i++) {
printf("%d: %c\n", seq.data[i].index, seq.data[i].value);
}
return EXIT_SUCCESS;
}