当前位置: 首页 > news >正文

PTA:C课程设计(7)

山东大学(威海)2022级大一下C习题集(7)

  • 函数题
    • 7-6-1 递增的整数序列链表的插入
    • 7-6-2 查找学生链表
    • 7-6-3 统计专业人数
    • 7-6-4 建立学生信息链表
  • 编程题
    • 7-7-1 查找书籍
    • 7-7-2 找出总分最高的学生

函数题

7-6-1 递增的整数序列链表的插入

接口:

List Insert( List L, ElementType X );

要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性。
其中List结构定义如下:

typedef struct Node *PtrToNode;
struct Node {ElementType Data; /* 存储结点数据 */PtrToNode   Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */

L是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Insert要将X插入L,并保持该序列的有序性,返回插入后的链表头指针。

List Insert( List L, ElementType X )
{List cur = L;List tmp = (List)malloc(sizeof(struct Node));tmp->Data = X;while(cur->Next&& cur->Next->Data < X){cur = cur->Next;}tmp->Next = cur->Next;cur->Next = tmp;return L;
}

7-6-2 查找学生链表

学生信息链表结点定义如下:

typedef struct List{int sno;    char sname[10];List *next;
}; 

需要创建的函数包括:
创建学生信息链表函数:CreateList;
查找学生信息链表函数:Find。

接口:

List * CreateList();  //键盘输入若干学生学号和姓名,学号与姓名以空格符间隔,当输入的学号为-1时,输入结束,创建学生信息链表函数,返回学生链表的头指针。
List * Find(List *head, int no)  //在学生信息链表(头指针为head)中查询学号为no的学生,返回该学生结点的指针。

实现:

//键盘输入若干学生学号和姓名,学号与姓名以空格符间隔,当输入的学号为-1时,输入结束,
//创建学生信息链表函数,返回学生链表的头指针。
List* BuyList(int sno)
{List* newnode = (List*)malloc(sizeof(struct List));newnode->sno = sno;newnode->next = NULL;return newnode;
}List * CreateList()
{List *head, *tail;int id;char sname[10] = {0};tail = head = (List*)malloc(sizeof(List));head->next = NULL;scanf("%d", &id);while(id != -1){List* t = BuyList(id);scanf("%s",t->sname);scanf("%d",&id);tail->next = t;tail = t;}scanf("%s",sname);return head;
}//在学生信息链表(头指针为head)中查询学号为no的学生,返回该学生结点的指针。
List * Find(List *head, int no)
{List* cur = head->next;while(cur){if(cur->sno == no)return cur;cur = cur->next;}return cur;
}

7-6-3 统计专业人数

实现一个函数,统计学生学号链表中专业为计算机的学生人数。链表结点定义如下:

struct ListNode {char code[8];struct ListNode *next;
};

这里学生的学号共7位数字,其中第2、3位是专业编号。计算机专业的编号为02

接口:

int countcs( struct ListNode *head );

其中head是用户传入的学生学号链表的头指针;函数countcs统计并返回head链表中专业为计算机的学生人数。

实现:

int countcs( struct ListNode *head )
{if(head == NULL)return 0;struct ListNode *cur = head;int cnt = 0;while(cur){if(cur->code[1] == '0' && cur->code[2] == '2')cnt++;cur = cur->next;}return cnt;
}

7-6-4 建立学生信息链表

实现一个将输入的学生成绩组织成单向链表的简单函数。

接口:

void input();

该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表。链表节点结构定义如下:

struct stud_node {int              num;      /*学号*/char             name[20]; /*姓名*/int              score;    /*成绩*/struct stud_node *next;    /*指向下个结点的指针*/
};

单向链表的头尾指针保存在全局变量headtail中。
输入为若干个学生的信息(学号、姓名、成绩),当输入学号为0时结束。

实现:

struct stud_node* Buynode()
{struct stud_node*node = (struct stud_node*)malloc(sizeof(struct stud_node));node->next = NULL;return node;
}void input()
{struct stud_node* cur = Buynode();scanf("%d", &cur->num);while (cur->num != 0){if (head == NULL){scanf("%s", cur->name);scanf("%d", &cur->score);head = tail = cur;}else{scanf("%s", cur->name);scanf("%d", &cur->score);tail->next = cur;tail = tail->next;}cur = Buynode();scanf("%d", &cur->num);}
}

编程题

7-7-1 查找书籍

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>typedef struct book {double price;char name[40];struct book* next;
}book;book* Buynode()
{book* node = (book*)malloc(sizeof(book));node->next = NULL;return node;
}int main()
{//输入第一行给出正整数n(<10)int n = 0;scanf("%d", &n);getchar();book* head, * cur;head = cur = Buynode();gets(cur->name);scanf("%lf", &cur->price);while (--n)//n本书{getchar();book* node = Buynode();gets(node->name);scanf("%lf", &node->price);cur->next = node;cur = cur->next;}cur = head;double max,min;max = min = cur->price;
//选出价格最高、最低while (cur){if (cur->price > max)max = cur->price;if (cur->price < min)min = cur->price;cur = cur->next;}cur = head;while (cur->price != max){cur = cur->next;}printf("%.2lf, %s\n", cur->price, cur->name);cur = head;while (cur->price != min){cur = cur->next;}printf("%.2lf, %s\n", cur->price, cur->name);return 0;
}

7-7-2 找出总分最高的学生

在这里插入图片描述


#include <stdio.h>
#include <stdlib.h>typedef struct stu {char num[9];char name[15];int s1;int s2;int s3;struct stu* next;
}stu;stu* Buynode()
{stu* node = (stu*)malloc(sizeof(stu));node->next = NULL;return node;
}int main()
{int n = 0;scanf("%d", &n);getchar();stu* cur,* head;cur = head = Buynode();scanf("%s",head->num);scanf("%s",head->name);scanf("%d%d%d", &head->s1, &head->s2, &head->s3);while (--n){getchar();stu* node = Buynode();scanf("%s",node->num);scanf("%s",node->name);scanf("%d%d%d", &node->s1, &node->s2, &node->s3);cur->next = node;cur = cur->next;}cur = head;int max = cur->s1 + cur->s2 + cur->s3;while (cur){if ((cur->s1 + cur->s2 + cur->s3) > max)max = cur->s1 + cur->s2 + cur->s3;cur = cur->next;}cur = head;while ((cur->s1 + cur->s2 + cur->s3) != max){cur = cur->next;}printf("%s %s %d", cur->name, cur->num, cur->s1 + cur->s2 + cur->s3);return 0;
}
http://www.lryc.cn/news/59994.html

相关文章:

  • POSTGRESQL LINUX 与 PG有关的内存参释义
  • Docker的常见命令
  • 详细介绍性能测试的方法(含文档)
  • 深入剖析 Qt QHash :原理、应用与技巧
  • 技术分享 | MySQL级联复制下进行大表的字段扩容
  • 工业互联网业务知识
  • jsp+java自行车租赁租借和买卖系统
  • Python3 字符串
  • Day943.持续集成流水线 -系统重构实战
  • How to use CCS to debug a running M4F core that was started by Linux?
  • 216、组合总数III
  • 简单的重装系统教程
  • 机器学习---集成学习报告
  • 教你如何将PDF文件转换成PPT演示文稿
  • 涨点技巧: 谷歌强势推出优化器Lion,引入到Yolov5/Yolov7,内存更小、效率更高,秒杀Adam(W)
  • Windows GPU版本的深度学习环境安装
  • C语言实践——通讯录(3)(文件版)
  • GPT撑腰,微软再战谷歌 | 大厂集体抢滩ChatGPT:谁真的有实力,谁在试点商业化?
  • 【消息队列】细说Kafka消费者的分区分配和重平衡
  • 【Python从入门到人工智能】14个必会的Python内置函数(7)——打印输出(详细语法参考 + 参数说明 + 具体示例)| 附:Python输出表情包
  • 为什么要创建FAQ?这篇文章告诉你
  • 基于html+css的盒子展示1
  • Python 无监督学习实用指南:1~5
  • 2023 腾讯暑期实习申请经验分享
  • Protocol Buffers 介绍
  • 【模电实验】基尔霍夫定律、叠加定理和戴维南定理验证实验
  • java某百货店POS积分管理系统_积分点更新生成以及通票回收处理
  • Flutter 常用指令
  • 定义全局变量property与getprop
  • 双目三维测距(python)