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

结构体和链表例题2

1、成绩系统之输入输出

题目描述

陈老师布置同学们完成一个小型的成绩管理系统,据说完成后至少可以有200行以上的代码,这可是课程学习到现在最大的编码量了。一下子写这么大的一个程序你可能会觉得无从着手,所以老师希望你先从输入输出开始。已知有n个学生,每个学生信息包含学号、姓名、性别、3门课程成绩,现在请你设计两个函数,完成学生信息的输入和输出,并在主程序中得到检测。

输入要求

先输入一个整数n表示有n个学生信息。(假设学生最多有50人)。接下来输入这n个学生的学号、姓名(不超过20个字符,可能带空格)、性别、3门课程成绩。每个学生输入中第一行输入学号、姓名,第二行包括性别、3门课成绩,具体见样例。

输出要求

输出n个学生的信息,按照输入的顺序

输入样例

2

15001 Peter Li

m 90 91 92

15002 Susan Wang

f 81 82 83

输出样例

---Student Information---

15001    Peter Li                  m 90 91 92

15002     Susan    Wang       f 81 82 83

代码示例:

#include<stdio.h>
typedef struct student
{
	int ID;
	char Name[20];
	char Gender;
	int score[3];
}STU;
STU s[50];

void add(STU *p,int n);
void disp(STU st);

int main()
{
	int n,i;
	scanf("%d",&n);
	add(s,n);
	printf("---Student Information---\n");
	for(i=0;i<n;i++)
	{
		disp(s[i]);
	}
	return 0;
}
void add(STU *p,int n)
{
	int j;
	for(p=s;p<s+n;p++)
	{
		scanf("%d",&(*p).ID);
		gets((*p).Name);
		scanf("%c",&(*p).Gender);
		for(j=0;j<3;j++)
		{
			scanf("%d",&(*p).score[j]);
		}
	}
}
void disp(STU st)
{
	int j;
	printf("%d ",st.ID);
	printf("%-20s ",st.Name);
	printf("%c ",st.Gender);
	for(j=0;j<3;j++)
	{
		printf("%d ",st.score[j]);
	}
	printf("\n");
}

2、成绩系统之平均成绩

题目描述

陈老师布置同学们完成一个小型的成绩管理系统,现在希望你设计其中的一个求平均值的模块。已知有n个学生,每个学生信息包含学号、姓名、性别、3门课程成绩,现在请你设计函数,完成对每个学生3门课程求平均,并输出相应信息。

输入要求

先输入一个整数n表示有n个学生信息。(假设学生最多有50人)。接着输入这n个学生的学号、姓名(不超过20个字符,可能带空格)、性别、3门课程成绩。

输出要求

输出每个学生的学号、姓名、3门课程成绩以及平均成绩(保留1位小数)

输入样例

2

15001 Peter Li m 90 91 92

15002 Susan Wang f 81 82 83

输出样例

---Student Information---

15001    Peter Li                  m 90 91 92

15002     Susan    Wang       f 81 82 83

代码示例:

#include<stdio.h>
typedef struct student
{	int ID;
	char Name[20];
	char Gender;
	int score[3];
	double ave;
}STU;


void add(STU *p,int size);     //函数,实现学生的信息输入
void average(STU *p,int size);  //函数,求学生平均成绩
void disp(STU *p,int size);    //函数,实现学生的信息输出

int main()
{
   STU s[50];
	int n;
	scanf("%d",&n);
	add(s,n);    
	average(s,n);
	disp(s,n);
	return 0;
}

void add(STU *p,int size)
 {
	int i,j;
	for(i=0;i<size;i++,p++)
	 {
		 scanf("%d",&p->ID);
		 gets(p->Name);
		 scanf("%c",&(*p).Gender);
		for(j=0;j<3;j++)
		{
			scanf("%d",&(*p).score[j]);
		}
	}
}  
void average(STU *p,int size)
{
   	int i,j;
	for(i=0;i<size;i++,p++)
	{
		double sum=0;
		for(j=0;j<3;j++)
		{
			sum+=(*p).score[j];
			(*p).ave=sum/3.0;
		}
	}
}      
void disp(STU *p,int size)
{
    int i,j;

	printf("---Student Information---\n");
	for(i=0;i<size;i++)
	{
	printf("%d ",p->ID);
	printf("%-20s ",p->Name);
	for(j=0;j<3;j++)
		printf("%d ",p->score[j]);
	printf("%.1lf ",p->ave);
	printf("\n");
	p++;
	}
}

3、考试之后

题目描述

又是一次期中考。考完之后肯定少不了成绩的排名。可是面对这么多的成绩,老师也觉得累。于是向熟悉编程的你求助。计入排名的考试只有语文数学跟英语三门。按照平均分从高到低输出。

输入要求

先输入一个整数n,表示有n个学生。(0 < n < 300)

 接下来n行,每行有4个数据,分别代表学号,语文成绩,数学成绩,英语成绩。

输出要求

按照平均分从大到小输出这n个学生的语文成绩、数学成绩、英语成绩。平均分相同时,按照学号的升序来。

输入样例

4

1023 88 75 65

1033 99 59 70

1187 77 82 83

1054 64 86 92

输出样例

1054 64 86 92

1187 77 82 83

1023 88 75 65

1033 99 59 70

代码示例:

#include<stdio.h>
typedef struct student
{
    int num;
    int yuwen;
    int shuxue;
    int yingyu;
    double ave;
}STU;
int main()
{
    int n,i,j;
    scanf("%d",&n);
    STU s[n],temp;
    for(i=0;i<n;i++)
    {
        scanf("%d%d%d%d",&s[i].num,&s[i].yuwen,&s[i].shuxue,&s[i].yingyu);
        s[i].ave=(s[i].yuwen+s[i].shuxue+s[i].yingyu)/3.0;
    }
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(s[j].ave==s[j+1].ave)
            {
                if(s[j].num>s[j+1].num)
                {
                    temp=s[j];
                    s[j]=s[j+1];
                    s[j+1]=temp;
                }
            }
            else if(s[j].ave<s[j+1].ave)
            {
                temp=s[j];
                s[j]=s[j+1];
                s[j+1]=temp;
            }
        }
    } 
    for(i=0;i<n;i++)
    {
        printf("%d %d %d %d\n",s[i].num,s[i].yuwen,s[i].shuxue,s[i].yingyu);
    }
    return 0;
}

4、动态链表的建立和查询

题目描述

建立一个有若干个学生信息的单向链表,并对链表进行查询和输出,学生信息包括学号、姓名、一门课程成绩

输入要求

从键盘输入若干学生信息,以学号输入0作为结束标记。其中,假设有效分数都在0~100之间。

输出要求

输出所有学生的信息。每个学生的信息占据一行。如果链表为空,则输出“LinkList is Null”,输出不包含双引号。

输入样例

1011

anney

89

1012

frank

91

1013

susan

94

0

输出样例

1011 anney 89

1012 frank 91

1013 susan 94

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define N 21
typedef struct student
{
    long ID;
    char name[N];
    int score;
    struct student *next;
}STU;
 
STU *CreateList()
{
    STU *head = NULL, *p, *q, *r;
    p = (STU *)malloc(sizeof(STU));
    head = p;
    if(head == NULL)
    {
        printf("LinkList is Null\n");
        exit(0);
    }
    q = p;
    r = head;
    scanf("%ld", &q->ID);
    while(q->ID != 0)
    {
        getchar();
        scanf("%s", q->name);
        scanf("%d", &q->score);
        p = (STU *)malloc(sizeof(STU));
        q->next = p;
        r = q;
        q = p;
        scanf("%ld", &q->ID);
    }
    r->next = NULL;
    return head;
}
 
void PrintList(STU *head)
{
    STU *p;
    p = head;
    if(p->ID == 0)
    {
        printf("LinkList is Null\n");
        exit(0);
    }
    while(p != NULL)
    {
        printf("%ld ", p->ID);
        printf("%s", p->name);
        printf(" %d\n", p->score);
        p = p->next;
    }
    return;
}
 
void FreeList(STU *head)
{
    STU *p = head, *q;
    while(p != NULL)
    {
        q = p -> next;
        free(p);
        p = q;
    }
    return;
}
 
int main()
{
    STU *head;
    head = CreateList();
    PrintList(head);
    FreeList(head);
    return 0;
}

5、链表插入

题目描述

给定一串数字,用链表结构进行存储。然后给定针对该链表的若干插入操作,要求将执行插入操作后的结果输出。

输入要求

第一行:输入一个整数n,表示这串数字有n个(n大于等于1)。

第二行:输入这n个整数。

第三行:输入一个整数m,表示需要执行m个插入操作。

后面m行:每行输入两个整数a和b,表示在这串数字的当前第a个数字之后插入数字b。(假设链表第一个节点编号为1)

输出要求

输出操作后的n+m个数字。每个数字用空格空开(最后一个数字后面没有空格,直接换行)。

输入样例

3

2 1 3

2

1 5

1 6

输出样例

2 6 5 1 3

代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct date
{
    int date;
    struct date *next;
}DATE;
DATE *CreateList(int n)
{
    DATE *head, *p, *q;
    int i;
    p = (DATE *)malloc(sizeof(DATE));
    head = p;
    scanf("%d", &p->date);
    q = p;
    for(i = 1; i < n; i++)
    {
        p = (DATE *)malloc(sizeof(DATE));
        scanf("%d", &p->date);
        q->next = p;
        q = p;
    }
    q->next = NULL;
    return head;
}
void InsertList(DATE *head, int a, int b)
{
    DATE *p, *q, *r;
    int i;
    p = head;
    r = (DATE *)malloc(sizeof(DATE));
    r->date = b;
    for(i = 1; i < a; i++)
    {
        p = p->next;
    }
    q = p->next;
    p->next = r;
    r->next = q;
    return;
}

void PrintList(DATE *head)
{
    DATE *p;
    int flag = 1;
    p = head;
    while(p != NULL)
    {
        if(flag)
        {
            printf("%d", p->date);
            flag = 0;
        }
        else
            printf(" %d", p->date);
        p = p->next;
    }
    printf("\n");
    return;
}

void FreeList(DATE *head)
{
    DATE *p, *q;
    p = head;
    while(p != NULL)
    {
        q = p->next;
        free(p);
        p = q;
    }
    return;
}

int main()
{
    int n, m, a, b;
    DATE *head;
    scanf("%d", &n);
    head = CreateList(n);
    scanf("%d", &m);
    while(m--)
    {
        scanf("%d%d", &a, &b);
        InsertList(head, a, b);
    }
    PrintList(head);
    FreeList(head);
    return 0;
}


http://www.kler.cn/a/160896.html

相关文章:

  • scala的练习题
  • 【C++】 list 与 string 基础与实现字符串操作
  • goframe开发一个企业网站 redis队例13
  • 首次超越扩散模型和非自回归Transformer模型!字节开源RAR:自回归生成最新SOTA!
  • Flutter运行App时出现“Running Gradle task ‘assembleDebug“问题解决
  • [Docker#3] LXC | 详解安装docker | docker的架构与生态
  • 浏览器开发者工具使用(F12)
  • Redis中持久化策略RDB与AOF优缺点对比
  • 解锁全球潜力:IT外包解决跨国企业海外分支的IT需求
  • 软件测试外包干了2个月,技术进步2年。。。
  • 云主机存储类型、AZ讲解
  • MySQL学习day04(一)
  • Recyclerview属性配置记录
  • 软件工程 课后题 选择 查缺补漏
  • [足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-4线性时不变系统中的冲激响应与卷积
  • 【前端设计模式】之代理模式
  • 20、XSS——XSS跨站脚本
  • 什么台灯好用不伤眼睛?适合考研使用的台灯推荐
  • Python 读取电子发票PDF 转成Excel
  • 集成学习算法随机森林发生过拟合时,如何调整超参数?
  • 2 文本分类入门:TextCNN
  • 各大期刊网址
  • 自定义 element DatePicker组件指令 使选择器呈现为只读状态,用户无法直接编辑,但可以查看和选择日期
  • ajax+node.js+webpack+git前端过渡必学
  • 如何本地搭建Linux DataEase数据可视化分析工具并实现公网访问
  • Java 并发编程面试题——Java 线程间通信方式