当前位置:首页 > c语言教材全部答案
{ int num; char name[20]; int score; struct stu_node * next; };
int n; //n表示链表结点个数 struct stu_node * create() { struct stu_node *head, *p1, *p2, *p; head = NULL; //建立空表 n = 0;
printf(\请输入学号、姓名、成绩(学号为0时停止输入):\\n\ do { p = (struct stu_node *)malloc(SIZE); scanf(\&p->num, p->name, &p->score); //建立新结点,
并初始化
if(p->num == 0) break; //学号为0时,
终止循环
else{ p2 = head; if(head == NULL) { head = p; head->next = NULL; } //原表为空
时插入为头结点
else{ while((p->num > p2->num)&&(p2->next != NULL)) { p1 = p2; p2 = p2->next; } //p1,p2各后移一个结点 if(p->num <= p2->num){ //在p1与p2之间插入新结
点
if(head == p2) head = p; else p1->next = p; p->next = p2; }
else {p2->next = p; p->next = NULL; } //新结点插入为尾结点 } }
n++; //表长加1 }while(1); free(p); return head; //返回链表头
指针
}
4. 在第3题的基础上,编写一个函数,查找特定学生的信息,并输出查找结果。
函数如下:
void search_stu(struct stu_node *head, int num) //查找学号为num的记录信息 { struct stu_node *p; p = head; if(head == NULL) { printf(\空表,无记录!\\n\ return; } do { if(num == p->num){ printf(\学号 姓名 成绩\\n\
printf(\ %s %d\\n\ break;
} else p = p->next; }while(p != NULL); if(p == NULL) printf(\该表中无此记录!\\n\
}
5. 有一个单向链表old(结点信息为姓名、基本工资),编写一个函数将old复制到一个新链表new上。
函数如下:
struct empl_node { char name[20]; float jbgz; struct empl_node * next; };
int new_n=0; //new表的表长
void copy_emp(struct empl_node *old, struct empl_node *new) { struct empl_node *last, *p, *s; p = old; new = last = NULL; //last是new表的表尾指针 if(old == NULL) { printf(\空表,无记录!\\n\ return; } else{
while(p != NULL){
}
s = (struct empl_node *)malloc(SIZE); strcpy(s->name, p->name); s->jbgz = p->jbgz; s->next = NULL;
if(new == NULL) new = s; else last->next = s; last = s; new_n++; p = p->next;
}
6. 有两个单向链表list1和list2(结点信息均为姓名、基本工资),编写一个函数将链表list2拼接到链表list1的后面,函数返回拼接后的新链表。
函数如下:
struct empl_node { char name[20]; float jbgz; struct empl_node * next; };
struct empl_node link_emp(struct empl_node *list1, struct empl_node *list2) { struct empl_node *p, *s; p = list1; s = list2; while(p->next != NULL) p = p->next; while(s != NULL){ list2 = s->next; p->next = s; p = s; p->next = NULL; s = list2; }
return list1; }
习题10
1. 什么是共用体数据类型?试比较共用体与结构体。
答:共用体数据类型是C语言的一种用户自定义构造类型,它可以有多个不同数据类型的成员,但每次只使用它的一个成员,这种类型定义的变量占用的空间取其成员中最长的一个,这种数据对象在程序执行的不同时间能存储不同类型的值。共用体与结构体类型的比较:①共用体类型定义的形式跟结构体类型的定义形式相同,只是其类型关键字不同,前者是union,后者是struct;②共用体类型和结构体相似,也可以有多个不同数据类型的成员,但共用体每次只使用它的一个成员,而结构体无此限制;③共用体类型定义的变量占用的空间取其成员中最长的一个,而结构体类型定义的变量占用的空间是其所有成员长度之和。
2. 什么是枚举数据类型?请举例说明。
答:枚举数据类型是C语言的一种用户自定义基本类型,为提高程序描述问题的直
观性,在枚举类型的定义中列举出所有可能的取值,被说明为该枚举类型的变量取值不能超过定义的范围。例如:enum day{sun, mon, tue, wed, thu, fri, sat};
3. 什么是类型定义?请举例说明。
答:类型定义是对现有数据类型的标识符的重新定义,即定义一个现有类型标识符
的“别名”,这种方法可改善程序的可读性。例如:typedef int ARRAY[10]; ARRAY a, b;
4. 分析下列程序的运行结果。 (1)
#include
程序运行结果:21,43 (2)
#include
int i;
for (i=15; i>=0; i--) printf(\}
main() {
共分享92篇相关文档