在结构数组插入一条新记录

18 篇文章 0 订阅
8 篇文章 0 订阅

题目描述

在含有4个元素的结构数组中,插入一条新记录。一个运行实例如下(红色字体为输入数据,黑色字体为输出数据):
请输入插入记录的位置:
3
请按如下提示输入相关信息.
输入学号:
2105030199
输入姓名:
wangxiaowang
输入3个成绩:
score[0]:
100
score[1]:
99
score[2]:
98
已经在位置3成功插入新记录!
********************************** STUDENT ****************************************
   位置号   学号          姓名      成绩1 成绩2 成绩3    总分   平均分  名次
-----------------------------------------------------------------------------------
    0    2105030155 zhaoxiaozhao 100.00 100.00 100.00    300.00  100.00    0
    1    2105030166 qianxiaoqian  99.00  99.00  99.00    297.00   99.00    0
    2    2105030177 sunxiaosun    98.00  98.00  98.00    294.00   98.00    0
    3    2105030199 wangxiaowang 100.00  99.00  98.00    297.00   99.00    0
    4    2105030188 lixiaoli      98.00  98.00  98.00    294.00   98.00    0
***********************************************************************************


下面是本题的不完整程序,请补充begin和end之间的代码,并将这部分代码提交即可。

#include<stdio.h>   //printf()、scanf()等函数
#include<string.h>  //strlen()、strcpy()等函数
#include<stdlib.h>  //atoi()函数

//定义常数
#define N 3

//定义结构体
typedef struct student
{
    char xueHao[11];
    char xingMing[15];
    double chengJi[N];
    double zongFen;
    double pingJunFen;
    int mingCi;
}STUDENT;

//函数声明
void print(STUDENT *stud,int n);	//显示记录
int insert(STUDENT *stud,int n);	//插入记录

/******主函数开始*******/
int main(void)
{
	STUDENT student[20]={{"2105030155","zhaoxiaozhao",100,100,100,300,100,0},
                            {"2105030166","qianxiaoqian",99,99,99,297,99,0},
                            {"2105030177","sunxiaosun",98,98,98,294,98,0},
                            {"2105030188","lixiaoli",98,98,98,294,98,0}};/*定义结构数组,并初始化0、1、2、3号位置的数组元素*/
        insert(student,4);      /*在有4个元素的数组中插入1条新记录*/
        print(student,5);   /*逐行显示插入操作后的所有数组元素,共5行*/
	return 0;
}

/*在指定位置插入记录*/
int insert(STUDENT *stud,int n)
{
	int i=0,j;
	float s;
	int position;
	printf("请输入插入记录的位置:\n");
	scanf("%d",&position);  /*输入插入记录的位置*/
	while(position<0 || position>n)
	{
		printf("输入位置有误,请重新输入插入记录的位置:\n");      /*显示提示信息*/
		scanf("%d",&position);  /*输入要删除记录的姓名*/
	}

	//将插入位置开始的所有记录向后移动
	/******************** begin ********************/

	/********************  end  ********************/

	//录入记录并插入
	i=position;
	printf("请按如下提示输入相关信息.\n");
	printf("输入学号:\n");
	scanf("%s",stud[i].xueHao);        /*输入学号*/
	printf("输入姓名:\n");
	scanf("%s",stud[i].xingMing);      /*输入姓名*/
	printf("输入%d个成绩:\n",N);   /*提示开始输入成绩*/
	s=0;                                      /*计算每个学生的总分,初值为*/
	for(j=0;j<N;j++)                          /*N门课程循环N次*/
	{
		do{
			printf("score[%d]:\n",j);                 /*提示输入第几门课程*/
			scanf("%lf",&stud[i].chengJi[j]);            /*输入成绩*/
			if(stud[i].chengJi[j]>100||stud[i].chengJi[j]<0)/*确保成绩在~100之间*/
				printf("\n非法数据,请重新输入!\n");      /*出错提示信息*/
		}while(stud[i].chengJi[j]>100||stud[i].chengJi[j]<0);
		s=s+stud[i].chengJi[j];                        /*累加各门课程成绩*/
	}
	stud[i].zongFen=s;              /*将总分保存*/
	stud[i].pingJunFen=s/N;        /*求出平均值*/
	stud[i].mingCi=0;            /*未排序前此值为*/

	printf("已经在位置%d成功插入新记录!\n",position);
	return n+1;
}

/*显示模块*/
void print(STUDENT *stud,int n)
{
	int i=0;               /* 统计记录条数*/
	if(n==0)
	{
		printf("\n很遗憾,空表中没有任何记录可供显示!\n");
	}
	else
	{
		printf("********************************** STUDENT ****************************************\n");
		printf("   位置号   学号          姓名      成绩1 成绩2 成绩3    总分   平均分  名次\n");
		printf("-----------------------------------------------------------------------------------\n");
		while(i<n)
		{
			printf("    %-4d %-11s%-12s%7.2f%7.2f%7.2f %9.2f  %6.2f  %3d \n", i, stud[i].xueHao,stud[i].xingMing,stud[i].chengJi[0],stud[i].chengJi[1],
					stud[i].chengJi[2],stud[i].zongFen,stud[i].pingJunFen,stud[i].mingCi);
			i++;
		}
		printf("***********************************************************************************\n");
	}
}

输入

指定插入位置position,合法的插入位置为0-4。

输出

逐行输出插入操作后的所有数组元素。

样例输入 Copy

3
2105030199
wangxiaowang
100
99
98

样例输出 Copy

请输入插入记录的位置:
请按如下提示输入相关信息.
输入学号:
输入姓名:
输入3个成绩:
score[0]:
score[1]:
score[2]:
已经在位置3成功插入新记录!
********************************** STUDENT ****************************************
   位置号   学号          姓名      成绩1 成绩2 成绩3    总分   平均分  名次
-----------------------------------------------------------------------------------
    0    2105030155 zhaoxiaozhao 100.00 100.00 100.00    300.00  100.00    0
    1    2105030166 qianxiaoqian  99.00  99.00  99.00    297.00   99.00    0
    2    2105030177 sunxiaosun    98.00  98.00  98.00    294.00   98.00    0
    3    2105030199 wangxiaowang 100.00  99.00  98.00    297.00   99.00    0
    4    2105030188 lixiaoli      98.00  98.00  98.00    294.00   98.00    0
***********************************************************************************

            for(j=n-1;j>=position;j--)
            {
                stud[j+1]=stud[j];
            }
            n++;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值