结构体和链表编程题目

合集下载

结构体、链表综合习题28页PPT

结构体、链表综合习题28页PPT
45、自己的饭量自知道。——苏联
41、学问是异常珍贵的东西,从任何源泉吸 收都不可耻。——阿卜·日·法拉兹
42、只有在人群中间,才能认识自 己。——德国
43、重复别人所说的话,只需要教育; 而要挑战别人所说的话,则需要头脑。—— 玛丽·佩蒂博恩·普尔
44、卓越的人一大优点是:在不利与艰 难的遭遇里百折不饶。——贝多芬
结构体、链表综合习题
21、没有人陪你走一辈子,所以你要 适应孤 独,没 有人会 帮你一 辈子, 所以你 要奋斗 一生。 22、当眼泪流尽的时候,留下的应该 是坚强 。 23、要改变命运,首先改变自己。
24、勇气很有理由被当作人类德性之 首,因 为这种 德性保 证了所 有其余 的德性 。--温 斯顿. 丘吉尔 。 25、梯子的梯阶从来不是用来搁脚的 ,它只 是让人 们的脚 放上一 段时间 ,以便 让别一 只脚能 够再往 上登。

(完整版)结构体与联合体习题与参考答案

(完整版)结构体与联合体习题与参考答案

(完整版)结构体与联合体习题与参考答案第八章结构体与联合体选择题1、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。

struct abc s1,s2;则会发生的情况是______。

A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错2、有以下程序段struct st{ int x; int *y;}*pt;int a[]={1,2};b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是A) *pt->y B) pt->x C) ++pt->x D) (pt++)->x3、有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是______。

A) (p++)->num B) p->num C) (*p).num D) stu[3].age4、设有如下枚举类型定义enum language{Basic=3,Assembly=6,Ada=100,COBOL,Fortran};枚举量Fortran的值为______。

A) 4 B) 7 C) 102 D) 1035、以下叙述中错误的是_________。

A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名6、有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法B) NODE是一个结构体类型C) OLD是一个结构体类型D) OLD是一个结构体变量7、以下选项中不能正确把cl定义成结构体变量的是______。

c语言链表操作题

c语言链表操作题

c语言链表操作题C语言链表操作题一、问题描述假设有一个链表,每一个节点都包含一个整数,节点的结构体定义如下:```struct ListNode {int val;struct ListNode *next;};```请你完成以下链表操作函数:1. `struct ListNode* createList(int *arr, int size)`:传入一个整数数组和数组的长度,返回一个链表的头节点,链表的节点顺序和数组顺序一致。

2. `void displayList(struct ListNode *head)`:传入链表的头节点,打印链表中所有的节点值,用空格隔开,最后换行。

3. `int lengthOfList(struct ListNode *head)`:传入链表头节点,返回链表的长度。

4. `void insertNode(struct ListNode *head, int index, int val)`:传入链表的头节点、插入的位置和插入的值,在指定位置插入一个新节点。

5. `void deleteNode(struct ListNode *head, int index)`:传入链表的头节点和删除的位置,删除指定位置的节点。

6. `void reverseList(struct ListNode *head)`:传入链表的头节点,翻转整个链表。

7. `int findValInList(struct ListNode *head, int val)`:传入链表的头节点和要查找的值,返回第一个匹配的节点的下标,如果没有匹配的,则返回-1。

二、解题思路1. 创建链表:根据数组中元素的数量,循环遍历数组,每结构体当做链表节点,并记录对应下一个节点,最后返回链表头节点。

2. 打印链表:循环遍历链表的每一个节点,打印节点的val,并在每个节点之间添加空格,最后在尾部添加换行符。

3. 计算链表长度:从链表头节点开始循环遍历每一个节点,直到当前节点的next指针指向NULL,每遍历到一个节点就计数器加1。

链表c语言经典例题

链表c语言经典例题

链表c语言经典例题
链表是计算机科学中的经典数据结构之一,常用于存储和操作动态数据。

以下是一些常见的链表例题,可以帮助理解链表的基本操作和应用。

1. 链表的创建:
- 创建一个空链表。

- 创建一个包含指定节点值的链表。

2. 链表的插入操作:
- 在链表的头部插入一个节点。

- 在链表的尾部插入一个节点。

- 在指定位置插入一个节点。

3. 链表的删除操作:
- 删除链表的头节点。

- 删除链表的尾节点。

- 删除指定数值的节点。

4. 链表的查找操作:
- 查找链表中指定数值的节点。

- 查找链表的中间节点。

5. 链表的逆序操作:
- 反转整个链表。

- 反转链表的前 N 个节点。

- 反转链表的一部分区间内的节点。

6. 链表的合并操作:
- 合并两个有序链表,使其有序。

- 合并 K 个有序链表,使其有序。

7. 链表的环检测:
- 判断链表中是否存在环,若存在,则返回环的起始节点。

8. 链表的拆分操作:
- 将一个链表按照奇偶位置拆分成两个链表。

以上是一些链表的经典例题,通过解答这些例题,可以加深对链表结构和基本操作的理解。

在编写对应的 C 语言代码时,需要注意链表节点的定义、指针的使用以及内存的动态分配和释放等问题。

数据结构c语言版试题及答案

数据结构c语言版试题及答案

数据结构c语言版试题及答案一、选择题(每题2分,共10分)1. 在C语言中,以下哪个关键字用于定义结构体?A. structB. unionC. enumD. typedef答案:A2. 若有一个结构体数组,下列哪个函数可以用来初始化数组中的每个元素?A. memsetB. memcpyC. strcpyD. bzero答案:A3. 在C语言中,以下哪个函数用于动态分配内存?A. mallocB. callocC. reallocD. all of the above答案:D4. 对于一个链表,以下哪个操作是正确的?A. 插入节点B. 删除节点C. 遍历链表D. all of the above答案:D5. 在C语言中,以下哪个函数用于释放动态分配的内存?A. freeB. mallocC. callocD. realloc答案:A二、填空题(每题3分,共15分)1. 结构体定义的关键字是______。

答案:struct2. 在C语言中,动态分配内存失败时,malloc函数返回______。

答案:NULL3. 单链表的头节点指针通常初始化为______。

答案:NULL4. 双向链表中,每个节点包含______个指针。

答案:两个5. 树的深度优先遍历包括______、中序遍历和后序遍历。

答案:前序遍历三、简答题(每题5分,共20分)1. 请简述C语言中结构体和联合体的区别。

答案:结构体(struct)可以包含不同类型的数据,并且可以有多个实例;联合体(union)可以包含不同类型的数据,但是只能有一个实例,即在任意时刻只能存储其中一个成员的值。

2. 动态内存分配的优点是什么?答案:动态内存分配允许程序在运行时根据需要分配内存,这样可以更有效地使用内存资源,并且可以创建大小不固定的数据结构。

3. 链表相比于数组有哪些优点?答案:链表的优点包括动态大小,可以灵活地插入和删除节点,不需要预先知道数据的大小。

数据结构程序填空题

数据结构程序填空题

数据结构程序填空题一、题目描述:编写一个程序,实现一个简单的链表数据结构,并完成以下操作:1. 初始化链表2. 在链表末尾插入节点3. 在链表指定位置插入节点4. 删除链表指定位置的节点5. 获取链表长度6. 打印链表中的所有节点二、解题思路:1. 定义链表节点结构体Node,包含一个数据域和一个指向下一个节点的指针域。

2. 定义链表结构体LinkedList,包含一个头节点指针和一个记录链表长度的变量。

3. 初始化链表时,将头节点指针置为空,链表长度置为0。

4. 在链表末尾插入节点时,先判断链表是否为空,若为空,则将新节点作为头节点;若不为空,则找到链表最后一个节点,将其指针指向新节点。

5. 在链表指定位置插入节点时,先判断插入位置的合法性,若位置超出链表长度范围,则插入失败;否则,找到插入位置的前一个节点,将新节点插入到其后面。

6. 删除链表指定位置的节点时,先判断删除位置的合法性,若位置超出链表长度范围,则删除失败;否则,找到删除位置的前一个节点,将其指针指向要删除节点的下一个节点,并释放要删除节点的内存空间。

7. 获取链表长度时,直接返回链表结构体中记录的长度变量。

8. 打印链表中的所有节点时,从头节点开始遍历链表,依次输出每个节点的数据域。

三、代码实现:```c#include <stdio.h>#include <stdlib.h>// 定义链表节点结构体typedef struct Node {int data; // 数据域struct Node* next; // 指针域} Node;// 定义链表结构体typedef struct LinkedList {Node* head; // 头节点指针int length; // 链表长度} LinkedList;// 初始化链表void initLinkedList(LinkedList* list) {list->head = NULL; // 头节点指针置为空list->length = 0; // 链表长度置为0}// 在链表末尾插入节点void insertAtEnd(LinkedList* list, int value) {Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点newNode->data = value; // 设置新节点的数据域newNode->next = NULL; // 设置新节点的指针域为NULL if (list->head == NULL) {list->head = newNode; // 若链表为空,将新节点作为头节点} else {Node* current = list->head;while (current->next != NULL) {current = current->next; // 找到链表最后一个节点}current->next = newNode; // 将最后一个节点的指针指向新节点}list->length++; // 链表长度加1}// 在链表指定位置插入节点void insertAtPosition(LinkedList* list, int value, int position) {if (position < 0 || position > list->length) {printf("插入位置不合法!\n");return;}Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点newNode->data = value; // 设置新节点的数据域if (position == 0) {newNode->next = list->head; // 若插入位置为0,将新节点作为头节点 list->head = newNode;} else {Node* current = list->head;for (int i = 0; i < position - 1; i++) {current = current->next; // 找到插入位置的前一个节点}newNode->next = current->next; // 将新节点的指针指向插入位置的节点 current->next = newNode; // 将插入位置的前一个节点的指针指向新节点}list->length++; // 链表长度加1}// 删除链表指定位置的节点void deleteAtPosition(LinkedList* list, int position) {if (position < 0 || position >= list->length) {printf("删除位置不合法!\n");return;}Node* temp;if (position == 0) {temp = list->head; // 记录要删除的节点list->head = list->head->next; // 将头节点指向下一个节点} else {Node* current = list->head;for (int i = 0; i < position - 1; i++) {current = current->next; // 找到删除位置的前一个节点}temp = current->next; // 记录要删除的节点current->next = current->next->next; // 将删除位置的前一个节点的指针指向删除位置的后一个节点}free(temp); // 释放要删除节点的内存空间list->length--; // 链表长度减1}// 获取链表长度int getLength(LinkedList* list) {return list->length;}// 打印链表中的所有节点void printLinkedList(LinkedList* list) { Node* current = list->head;while (current != NULL) {printf("%d ", current->data);current = current->next; // 遍历链表 }printf("\n");}int main() {LinkedList list;initLinkedList(&list);insertAtEnd(&list, 1);insertAtEnd(&list, 2);insertAtEnd(&list, 3);printf("链表中的节点:");printLinkedList(&list); // 链表中的节点:1 2 3insertAtPosition(&list, 4, 1);printf("链表中的节点:");printLinkedList(&list); // 链表中的节点:1 4 2 3deleteAtPosition(&list, 2);printf("链表中的节点:");printLinkedList(&list); // 链表中的节点:1 4 3int length = getLength(&list);printf("链表的长度:%d\n", length); // 链表的长度:3 return 0;}```四、测试结果:运行以上代码,输出结果为:```链表中的节点:1 2 3链表中的节点:1 4 2 3链表中的节点:1 4 3链表的长度:3```五、总结:通过以上程序的实现,我们成功地完成了一个简单的链表数据结构,并实现了初始化链表、在链表末尾插入节点、在链表指定位置插入节点、删除链表指定位置的节点、获取链表长度以及打印链表中的所有节点等操作。

计算机二级C语言第13章 结构体和链表

计算机二级C语言第13章  结构体和链表

以下有关结构体类型描述正确的是()。 A.结构体类型的大小为其最后一个成员中所占内存空间的大小 B.结构体类型变量占据的内存空间是固定的,与成员无关 C.结构体类型的大小为其成员中占内存空间最大者所占空间的大小 D.结构体类型的大小为其各成员所占内存的总和
正确答案:D 【解析】结构体类型的大小为其所有成员所占内存空间之和,选项A、B、C错误,本题答案为D。
目录页
CONTENTS PAGE
计算机二级C语言第13 章 结构体和链表
说明新类型名的语句一般形式为: typedef 类型名 标识符;
例如: typedef int INTEGER ; 则:INTEGER m, n; 等价于 int m,n; 又如: typedef char *CHARP; CHARP p; 等价于: char *p;
(1)紧跟在结构体类型说明之后进行定义。 (2)在说明一个无名结构体类型的同时,直接进行定义。 (3)先说明结构体类型,再单独进行变量定义。
struct student{ char name[10]; int age; char sex; float score;
};
(4)使用typedef说明一个结构体类型名,再用新类型名来定义变量。
若有定义 typedef int *T; T a[20];
则以下与上述定义中a类型完全相同的是 A.int *a[20]; B.int (*a)[20]; C.int a[20]; D.int **a[20];
正确答案:A 【解析】“typedef 类型名 新类型名”表示为一个已有定义的类 型标识符重新定义一个类型名,题中选项A代表的意思是数组指针, 即指向数组的指针,B选项是指针数组,即数组存放的元素是整型 指针,首先为整型指针类型命名为T,再通过T定义了一个整形指 针数组*a[20],等价于int *a[20],答案为A选项。

结构体与链表编程题及解答

结构体与链表编程题及解答

结构体与共用体【程序1】题目:编写input()和output()函数输入,输出5个学生的数据记录。

(用结构体设计,学生记录中包括学号、姓名、四门课程成绩)程序源代码:#include <stdio.h>#define N 5struct student{char num[6];char name[8];int score[4];} stu[N];void input(struct student stu[]);void print(struct student stu[]);void main(){input(stu);print(stu);}void input(struct student stu[]){int i,j;for(i=0;i<N;i++){printf("\nplease input %d of %d\n",i+1,N);printf("num: ");scanf("%s",stu[i].num);printf("name: ");scanf("%s",stu[i].name);for(j=0;j<3;j++){printf("score %d.",j+1);scanf("%d",&stu[i].score[j]);}printf("\n");}void print(struct student stu[]){int i,j;printf("\nNo. Name Score1 Score2 Score3\n");for(i=0;i<N;i++){printf("%-5s%-9s",stu[i].num,stu[i].name);for(j=0;j<3;j++)printf("%-8d",stu[i].score[j]);printf("\n");}}【程序2】建立100名学生的信息表,每个学生的数据包括学号、姓名、及一门课的成绩,要求从键盘输入这100名学生的信息,并按照每一行显示一名学生信息的格式将他们的信息显示出来。

结构体,共用体,链表相关试题

结构体,共用体,链表相关试题

十.结构体和共用体(1)下列程序中fun()函数的功能是:构成一个如图所示的带头结点的单向链表,在结点的数据域中放入了具有两个字符的字符串。

disp()函数的功能是显示输出该单链表中所有结点中的字符串。

请填空完成(06.4)disp()函数。

#includetypedef struct node /*链表结点结构*/{ char sub[3];struct node *next;}Node;Node fun(char s) /*建立链表*/{ …… }void disp(Node *h){ Node *p;p=h− >next;while( 【】){printf("%s\n",P− >sub);p= 【】; }}main( ){ Node *hd;hd=fun( ); disp(hd); printf("\n");}(2)设有以下语句:typedef struct TT{char c,int a[4];}CIN;则下面叙述中正确的是(06.9)。

A)可以用TT定义结构体变量B)TT是struct类型的变量C)可以用CIN定义结构体变量D)CIN是struct TT类型的变量(3)有以下结构体说明、变量定义和赋值语句: struct STD{char name[10];int age;char sex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句中错误引用结构体变量成员的是(06.9)。

A)scanf(%s",s[0].name); B)scanf(%d",&s[0].age); C)scanf(%c",&(ps->sex)); D)scanf(%d",ps->age);(4) 若有以下定义和语句printf("%d\n",sum);}(7)有下列程序:struct S{int n;int a[20];};void f (struct S *p){int i,j,t;for(i=0;i<p->n-1;i+ +)for(j=i+1;j<p->n;j+ +)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a [j];p->a[j]=t;}}main( ){ int i; struct S s={10,{2,3,l,6,8,7,5,4,10,9}};f(&s);for(i=0;i<s.n;i+ +) printf("%d,",s.a[i]);}程序运行后的输出结果是(07.4 )。

C++语言选择题40道:C++结构体与联合.Tex

C++语言选择题40道:C++结构体与联合.Tex

C++结构体与联合试题1.结构体成员的访问哪个符号是正确的?o A. &o B. ->o C. .o D. ::答案: C解析: 结构体成员通过.操作符访问。

2.在C++中,结构体和类的主要区别是?o A. 结构体不能有方法o B. 类不能继承结构体o C. 结构体默认的访问属性是publico D. 类默认的访问属性是public答案: C解析: 结构体在C++中的默认访问属性是public,而类的默认访问属性是private。

3.联合体(union)成员的访问方式与结构体相同吗?o A. 不相同o B. 相同,但只在初始化时有效o C. 相同o D. 联合体不能访问成员答案: C解析: 联合体成员与结构体成员的访问方式相同,都是通过.或->操作符访问。

4.在C++中,联合体的成员变量共享什么?o A. 内存空间o B. 类别信息o C. 名称空间o D. 函数指针答案: A解析: 联合体的所有成员共享同一段内存空间。

5.结构体和联合体的成员初始化,以下说法正确的是?o A. 结构体成员不能初始化o B. 联合体成员只能在定义时初始化o C. 结构体和联合体成员都可以在定义时初始化o D. 结构体和联合体成员都不能在定义时初始化答案: C解析: 结构体和联合体成员都可以在定义时初始化。

6.以下哪种说法是关于结构体的?o A. 所有成员的总和决定了结构体的大小o B. 结构体成员不共享内存空间o C. 结构体成员的初始化顺序无关紧要o D. 结构体的大小等于最大成员的大小答案: A解析: 结构体的大小是其所有成员总和的大小。

7.以下代码union Data { int i; float f; } d;中,变量d.i和d.f共享多少字节?o A. 4字节o B. 8字节o C. 12字节o D. 16字节答案: A解析: union Data中的int和float类型数据在32位系统下都占用4字节,二者共享同一段内存。

结构体链表--例题

结构体链表--例题

结构体链表 struct student {int num; char name[10]; int age;struct student * next; }; 应用举例:#include "stdio.h" main() {//声明结构体类型 struct stu struct stu {int num; char name[10]; int age;struct stu *next; };//定义结构体变量 a,b,c 和结构体指针 head,p struct stu a,b,c,*head,*p, s={88,"zhangsan",26}; int i;//通过指针将结构体 a,b,c 连接起来,head 为首指针 head=&a; a.next=&b; b.next=&c;a b c head=&ac.next=NULL;//通过指针P连续下移输入整个链表上的学生信息p=head; i=1;while(p!=NULL){printf("请输入第%d个学生的信息:\n",i);scanf("%d%s%d",&(*p).num,(*p).name,&(*p).age);//&p->num,p->name,&p->age p=(*p).next;//p=p->next;i++;}//通过指针P连续下移打印整个链表上的学生信息p=head; i=1;while(p!=NULL){printf("\n第%d个学生的信息为:\n",i);printf("num: %d\n",(*p).num); //p->numprintf("name: %s\n",(*p).name); //p->nameprintf("num: %d\n",(*p).age); //p->agep=(*p).next;//p=p->next;i++;}getch();}思考:如何在a-b-c的a-b之间插入s学生记录?静态链表:所有节点是在程序中事先定义的,不是根据需要临时开辟的,用完后不能立刻释放。

结构体与链表习题附答案

结构体与链表习题附答案

结构体与链表习题附答案一、选择题1、在说明一个结构体变量时系统分配给它的存储空间是().A)该结构体中第一个成员所需的存储空间B)该结构体中最后一个成员所需的存储空间C)该结构体中占用最大存储空间的成员所需的存储空间D)该结构体中所有成员所需存储空间的总和。

2.设有以下说明语句,则以下叙述不正确的是()tructtu{inta;floatb;}tutype;A.truct是结构体类型的关键字B.tructtu是用户定义的结构体类型C.tutype是用户定义的结构体类型名D.a和b都是结构体成员名3、以下对结构体变量tu1中成员age的合法引用是()#includetructtudent{intage;intnum;}tu1,某p;p=&tu1;A)tu1->ageB)tudent.ageC)p->ageD)p.age4、有如下定义:Structdate{intyear,month,day;};Structworklit{Charname[20];Chare某;Structdatebirthday;}peron;对结构体变量peron的出生年份进行赋值时,下面正确的赋值语句是()Aworklit.birthday.year=1978Bbirthday.year=1978Cperon.birthday .year=1958Dperon.year=19585、以下程序运行的结果是()#include”tdio.h”main(){tructdate{intyear,month,day;}today;printf(“%d\\n”,izeof(truct date));}A.6B.8C.10D.126、对于时间结构体tructdate{intyear,month,day;charweek[5];}则执行printf(“%d\\n”,izeof(tructdate))的输出结果为(A.12B.17C.18D.207、设有以下语句:tructt{intn;charname[10]};tructta[3]={5,“li”,7,“wang”,9,”zhao”},某p;p=a;则以下表达式的值为6的是()A.p++->nB.p->n++C.(某p).n++D.++p->n8、设有以下语句,则输出结果是()tructLit{intdata;tructLit某ne某t;};tructLita[3]={1,&a[1],2,&a[2],3,&a[0]},某p;p=&a[1];printf(\printf(\printf(\}A.131B.311C.132D.2139、若有以下语句,则下面表达式的值为1002的是()tructtudent{intage;intnum;};tructtudenttu[3]={{1001,20},{1002,19},{1003,21}};)tructtudent某p;p=tu;A.(p++)->numB.(p++)->ageC.(某p).numD.(某++p).age10、下若有以下语句,则下面表达式的值为()tructcmpl某{int某;inty;}cnumn[2]={1,3,2,7};cnum[0].y/cnum[0].某某cnum[1].某;A.0B.1C.3D.611、若对员工数组进行排序,下面函数声明最合理的为()。

c语言高级编程题目

c语言高级编程题目

C语言高级编程题目一、数据结构与算法题目:实现一个链表,并实现插入、删除和查找操作。

题目:实现一个二叉树,并实现前序、中序和后序遍历。

题目:设计一个算法,将一个数组中的元素按照奇偶性排序。

二、内存管理题目:编写一个程序,动态分配内存并释放内存,以避免内存泄漏。

题目:实现一个简单的内存管理器,包括分配和释放内存的功能。

题目:分析 C 语言中内存管理存在的问题,并提出解决方案。

三、多线程编程题目:编写一个多线程程序,实现并发执行多个任务。

题目:使用线程同步机制,实现多个线程之间的数据共享和同步。

题目:分析 C 语言中多线程编程的优缺点,并提出改进方案。

四、文件I/O操作题目:编写一个程序,实现文件的读写操作。

题目:实现一个简单的文件系统,包括目录管理、文件读写等功能。

题目:分析 C 语言中文件I/O 操作的性能问题,并提出优化方案。

五、网络编程题目:编写一个简单的TCP 服务器和客户端,实现数据传输。

题目:实现一个基于UDP 的实时聊天程序。

题目:分析 C 语言中网络编程的优缺点,并提出改进方案。

六、数据库交互题目:使用 C 语言连接MySQL 数据库,并执行查询操作。

题目:实现一个简单的数据库管理系统,包括增删改查等功能。

题目:分析 C 语言中数据库交互的优缺点,并提出改进方案。

七、图形界面开发题目:使用GTK+ 库编写一个简单的图形界面程序。

题目:实现一个基于WinAPI 的窗口程序,并添加菜单、按钮等控件。

题目:分析 C 语言中图形界面开发的优缺点,并提出改进方案。

编程题5-(结构体)

编程题5-(结构体)

结构体编程题类型:1、结构体:查找统计 (3/4)2、结构体:查找排序 (1/1)3、结构体:链表 (0/1)方法:1、结构体数组和链表试题的类型,常见的有查找指定条件的值、求最大〔小〕值、排序等。

方法与一般数组的相同。

注意事项:1、.结构体〔数组〕和链表变量不同于一般变量〔数组〕的地方就只在于“名字有点长”。

〔用成员运算符或->运算符〕。

一、结构体:查找统计.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回.例如:输入的分数范围是60和69,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据.主函数中将把60放在low中把69放在high中.#include<stdio.h>#define N 16typedef struct{char num[10];int s;}STREC;int fun(STREC *a,STREC *b,int l,int h){int i,j,n;for(i=0,j=0,n=0;i<N;i++){if(a[i].s>=l && a[i].s<=h){b[j]=a[i];j++;n++;}}return n;}main(){STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};STREC h[N];int i,n,low,high,t;printf("Enter 2 integer number low & high : ");scanf("%d%d",&low,&high);if(high<low){t=high;high=low;low=t;}n=fun (s,h,low,high);printf ("The student's data between %d--%d:\n",low,high);for (i=0;i<n;i++)printf ("%s %4d\n",h[i].num,h[i].s);printf ("\n");}1.2.已知学生的记录由学号和学习的成绩构成,N名学生的数据已存人a结构体数组中。

c语言结构体编程题

c语言结构体编程题

c语言结构体编程题
1.编写input()和output()函数输入,输出5个学生的数据记录。

参考答案
2.创建一个链表。

参考答案
3.反向输出一个链表。

参考答案
4.建立一个单向链表,链表中每个结点包含成绩和指针两个域。

之后,①输出该链表;②
对该链表排序并输出;③任意输入一个成绩,将其插入链表中的适当位置;④任意输入一个成绩,将链表中相同的结点删除。

参考答案
5.连接两个链表。

参考答案
6.利用结构体类型,编程计算一名同学5门课的平均分。

参考答案
7.用结构体型数组初始化建立一工资登记表。

然后键入其中一人的姓名,查询其工资情况。

参考答案
8.用子函数求出worker数组中每个工人的实发工资。

参考答案
9.例、显示时、分、秒的软件延时
参考答案。

结构体和链表编程题目

结构体和链表编程题目

结构体和链表编程题⽬第四阶段(结构体与链表)1.对候选⼈得票的统计程序。

设有三个候选⼈,每次输⼊⼀个得票的候选⼈的名字,要求最后输出各候选⼈得票结果。

本题应该先定义⼀个结构体,结构体中包含姓名和票数两个变量。

2.建⽴⼀个描述个⼈信息的结构体,包括ID号,姓名,性别,年龄等信息,定义该结构体数组并初始化,将按年龄分成三个部分(⼩于18岁,18-60岁,⼤于60岁),每⼀部分放在⼀起打印。

3.建⽴⼀个描述个⼈信息的结构体,包括ID号,姓名,性别,年龄等信息,定义该结构体数组并初始化,将按年龄分成三个部分(⼩于18岁,18-60岁,⼤于60岁),然后定义⼀个该结构体的⼆维数组,⼆维数组的每⼀⾏按年龄分别存放同⼀部分的个⼈信息。

4.定义⼀个关于学⽣成绩的结构体,结构体中包含学⽣学号,姓名,英语成绩,数学成绩,总分等信息,你可以定义该结构体的数组并初始化,总分可以通过程序获得,然后按总分为第⼀关键字,英语成绩为第⼆关键字将学⽣成绩信息从⾼到低排列并存到原数组中。

(尽量不要定义新的数组)。

5.在屏幕上模拟显⽰⼀个数字式时钟(不要求1秒钟为频率)。

结构体中应当定义三个int变量,hour,minute,second。

如何让second加1呢?这个可以使⽤延时程序,如:Delay(){Int I,j;For(i=0;i<1000;i++)For(j=0;j<1000;j++){}}这个延时程序不⼀定是1秒,只要模拟⼀下数字时钟就可以了。

同时,你可能要⽤到形式如printf(“%d\r”)的打印,”\r”表⽰打印时⼜重新回到本⾏开头处打印,因为你每更新⼀次数据时都需要打印,打印的位置没有变化才会像⼀个电⼦时钟。

6.设计⼀结构体,包括ID号(int型),名称(字符串),请定义该结构体的数组,并给这些数组赋初值,根据ID号将数组进⾏排序,把ID从⼩到⼤排序,不能再定义新的数组。

⽐如:数组的第⼀个元素的ID号放ID号最⼩的值,并将这个ID号对应的名称也放在第⼀个元素的名称中。

c语言结构体试题及答案

c语言结构体试题及答案

c语言结构体试题及答案1. 定义一个结构体,包含学生的姓名、学号和成绩。

```cstruct Student {char name[50];int id;float score;};```2. 编写一个函数,计算结构体数组中所有学生的平均成绩。

```cfloat calculateAverageScore(struct Student students[], int size) {float sum = 0.0;for (int i = 0; i < size; i++) {sum += students[i].score;}return sum / size;}```3. 给定一个结构体数组,编写一个函数,返回成绩最高的学生。

```cstruct Student* findHighestScoreStudent(struct Student students[], int size) {struct Student* highest = students;for (int i = 1; i < size; i++) {if (students[i].score > highest->score) {highest = &students[i];}}return highest;}```4. 编写一个函数,将结构体数组中的学生信息打印出来。

```cvoid printStudents(struct Student students[], int size) { for (int i = 0; i < size; i++) {printf("Name: %s, ID: %d, Score: %.2f\n", students[i].name, students[i].id, students[i].score);}}```5. 如何定义一个结构体,其中包含另一个结构体类型的成员?```cstruct Inner {int a;float b;};struct Outer {struct Inner inner;char c[100];};```6. 编写一个函数,交换两个结构体变量的值。

结构体及链表类问题分析

结构体及链表类问题分析

结构体及链表类问题汇总一、结构体变量1、普通参数传递例:19-1程序通过定义学生结构体变量,存储学生的学号、姓名和3门课的成绩。

函数fun的功能是:将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。

例如,a所指变量中的学号、姓名和三门课的成绩依次是:10001、"ZhangSan"、95、80、88,则修改后输出b中的数据应为:10002、"LiSi"、95、80、88。

请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。

注意:部分源程序给出如下。

不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<string.h>struct student{ long sno;char name[10];float score[3];};void fun(struct student a){ struct student b; int i;/**********found**********/b = __a__;b.sno = 10002;/**********found**********/strcpy(____, "LiSi");printf("\nThe data after modified :\n");printf("\nNo: %ld Name: %s\nScores: ",b.sno, );/**********found**********/for (i=0; i<3; i++) printf("%6.2f ", b.__b.score[i]__);printf("\n");}main(){ struct student s={10001,"ZhangSan", 95, 80, 88};int i;printf("\n\nThe original data :\n");printf("\nNo: %ld Name: %s\nScores: ",s.sno, );for (i=0; i<3; i++)printf("%6.2f ", s.score[i]);printf("\n");fun(s);}2、地址传递例:24-1、27-1(1)例题:24-1程序通过定义学生结构体变量,存储学生的学号、姓名和3门课的成绩。

结构体、链表综合习题

结构体、链表综合习题

(27) creat(int n) { struct node *p, *p1, *p2, *h=NULL;int i=0; if(n<1)return NULL; while( (28) ) { p=(struct node * )malloc(sizeof(struct node)); scanf(“%d”,&p->x);p->next=NULL; if(h= =NULL) (29) ; else { p1=p2=h; while(p2&&p->x>=p2->x){p1=p2;p2=p2->next;} if( p2= =h){ (30);h=p;} struct node * else{p->next=p2;p1->next=p;} i<n } i++; } h=p return h; #43;+p)->a C. *(p++)->b D.*(++p)->b
结构体、链表综合习题
B struct{ int x,y;}c[3]={ {1,2},{2,3}};正确的语句是 。 A:C[2]={3,4}; B:C[2]=C[1]; C:C[2]=C[1]-C[0]; D:if(c[1]>c[0])c[2]=c[1];else c[2]=c[0];
struct node *loop(struct node *head,int dir) {struct node *p1,*p2; p1=head; if(p1= =NULL||p1->next= =NULL)return head; if(dir>=0) {while(p1->next) {p2=p1;p1=p1->next;} __(1)__=NULL; p1->next=_(2)__; head=p1; } else (1)p2->next {head=___(3)__; p2=head; (2)head while(p2->next)p2=p2->next; (3)p1->next _(4)_; p1->next=NULL; } return head;} (4)p2->next=p1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四阶段(结构体与链表)
1.对候选人得票的统计程序。

设有三个候选人,每次输入一个得票的候选人的
名字,要求最后输出各候选人得票结果。

本题应该先定义一个结构体,结构体中包含姓名和票数两个变量。

2.建立一个描述个人信息的结构体,包括ID号,姓名,性别,年龄等信息,定
义该结构体数组并初始化,将按年龄分成三个部分(小于18岁,18-60岁,大于60岁),每一部分放在一起打印。

3.建立一个描述个人信息的结构体,包括ID号,姓名,性别,年龄等信息,定
义该结构体数组并初始化,将按年龄分成三个部分(小于18岁,18-60岁,大于60岁),然后定义一个该结构体的二维数组,二维数组的每一行按年龄分别存放同一部分的个人信息。

4.定义一个关于学生成绩的结构体,结构体中包含学生学号,姓名,英语成绩,
数学成绩,总分等信息,你可以定义该结构体的数组并初始化,总分可以通过程序获得,然后按总分为第一关键字,英语成绩为第二关键字将学生成绩信息从高到低排列并存到原数组中。

(尽量不要定义新的数组)。

5.在屏幕上模拟显示一个数字式时钟(不要求1秒钟为频率)。

结构体中应当定
义三个int变量,hour,minute,second。

如何让second加1呢?这个可以使用延时程序,如:
Delay()
{
Int I,j;
For(i=0;i<1000;i++)
For(j=0;j<1000;j++)
{}
}
这个延时程序不一定是1秒,只要模拟一下数字时钟就可以了。

同时,你可能要用到形式如printf(“%d\r”)的打印,”\r”表示打印时又重新回到本行开头处打印,因为你每更新一次数据时都需要打印,打印的位置没有变化才会像一个电子时钟。

6.设计一结构体,包括ID号(int型),名称(字符串),请定义该结构体的数
组,并给这些数组赋初值,根据ID号将数组进行排序,把ID从小到大排序,不能再定义新的数组。

比如:数组的第一个元素的ID号放ID号最小的值,并将这个ID号对应的名称也放在第一个元素的名称中。

7.给定单链表头结点,删除链表中倒数第K个结点。

请实现函数struct node*
del(struct node *head,int k);返回新链表的头结点。

8.请建立一单链表,并将该单链表形成环形链表。

即将单链表的尾结点指向单
链表的头结点。

9.请动态建立一个双向链表。

10.假如双向链表的每个结点放一个整数,并且头结点到尾结点中的整数是从小
到大排列的,请向链表中按顺序插入一结点。

11.已知两个整数集合A和B,它们的元素值分别放在两个循环链表中。

请设计
一种算法求这两个集合的并集,请将并集放在链表中,并从函数中返回链表的头结点。

12.一单链表中存在环,请找出链表上环的起点,例如有如下链表:
则c,a,s是一个循环链表,你需要找出起点结点C。

13.有两个单链表,判断这两个链表是否相交,如果相交,则打印出来相交的首
结点,如没相交则进行相应的提醒。

(链表相交是指两个链表中有共同的结点)
H1
H1为:g,u,o,h,c,a,s
H2为:s,h,a,c,a,s
则它们相交的首结点是 c 结点,你应该找到这个结点,并将相交的结点全部打印(结点c及c后面的结点全是他们的相交结点)。

14.已知单链表中的数据含有三类字符(即:字母字符,数字字符和其他字符),
请写一函数,构造三个环形链表,使每个环形链表中只含同一类字符,且得用原来的结点空间作为这3个链表的结点空间,头结点可另辟空间
15.设单链表中存放n个字符(每个结点一个字符),请写一函数来判断该字符串
是否中心对称。

例如abccba即为中心对称。

16.定义一个关于学生成绩的结构体,结构体中包含学生学号,姓名,英语成绩,
数学成绩,平均分,总分等信息。

你可以定义该结构体的数组,先对数组进
行初始化,初始化的时候不要计算平均分和总分,你被要求写三个函数,一个函数计算平均分和总分,一个函数求出所有英语或数学成绩不合格的学生,最后一个函数根据总分进行排序,在主函数中,这三个函数按在顺序执行(先算平均分和总分,再求不成绩不合格的学生,最后排序),每个函数执行完之后,都需要打印函数执行后的结果。

17.定义一个关于学生成绩的结构体,结构体中包含学生学号,姓名,英语成绩,
数学成绩,平均分,总分等信息。

然后创建一个静态链表,这题中你被要求写四个函数,一个函数计算平均分和总分,一个函数计算所有学生英语或数学成绩的平均分,并打印所有低于平均分的学生信息,这个函数需要通过从主函数中传递形参来决定计算英语平均成绩还是数学平均成绩,例如:count(struct stu *s,int n),我们可以定义当n=0时,计算英语平均成绩,当n=1时,计算数学平均成绩。

一个函数查找所有英语成绩为某个值的学生,并打印学生信息(没有该值时,应该提醒没有该成绩的学生)。

最后一个函数根据总分进行排序。

同样,第个函数执行完之后,都需要打印函数执行后的结果。

18.设有N个人围坐一圈并顺时针方向从1到N编号,从第S个人开始进行1到
M报数,报数到第M个人时,此人出圈,再从他的下一个重新开始1到M的报数,如此进行下去直到所有人都出圈为止。

现要打印出圈次序。

请用环形链表实现。

19.假如一链表中的每个结点都放了一个只含小写字母的字符串,请写一个函数,函数功能是按字符串的大小从大到小排序(字母ASCII值越大,则字母越大)。

函数定义为:struct strnode *sort(struct strnode *head) 。

例如:各结点分别放了my,name,is,deng,shui,fa。

排序后应该为shui,name,my,is,fa,deng。

20.(图书管理系统)我们对于图书馆以后会买多少书是未知的,所以如果定义
数组就有可能在将来的某一天,数组的大小不够用,本题需要用动态链表做。

自己定义关于图书的结构体,该结构体包括:书号,书名,书类别(类别如通信,英语,计算机等),馆藏量,剩余量,本题需要的主要函数如下:初始化:程序运行之初,应该创建一个包含一定数量结点的链表。

添加:当有新书进来时,需要创建一个结点,将新书信息存到这个结点当中,并将这个结点放在链表末尾。

删除:删除指点信息的书目。

排序:根据指定的关键字进行排序。

查找:根据指定的要求进行查找。

借书:将所借书的剩余量减1。

还书:将所还的书的剩余量加1。

整个程序的菜单如下:
0.退出
0.返回上一级菜单(意思就是不想添加了,所以只有返回)
1.添加
1.添加图书
0.返回上一级菜单(意思同上)
2.删除 1.根据书号删除(输入书号,如果该书号的书就删除,否则提示没
有该书)
2.根据书名删除(输入书名,如果该书号的书就删除,否则提示没
有该书)
0.返回上一级菜单(意思同上)
1.根据书号排序
3.排序
2.根据藏书量排序
0.返回上一级菜单(意思同上)
4.查找 1.根据书名查找
2.根据书号查找
0.返回上一级菜单(意思同上)
5.借书
1.借书(输入书号,如果没有该书的书号则进行提示,该书剩余
量为0时,则应该提示已借完,否则然后将馆藏量减1)
0.返回上一级菜单(意思同上)
6.还书
1.还书(输入书号,如果没有该书的书号则进行提示,否则然
后将馆藏量加1)
10/18/2013 10:01:42 AM。

相关文档
最新文档