69,369
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
struct Student
{
int num;
char name[20];
int score;
};
#define MAX_STU_NUM 20
int get_cur_stu_num(struct Student *pstu);
void print_stu_info(struct Student *pstu, int nums);
int main()
{
struct Student stu[MAX_STU_NUM] = {
{10101, "Zhao", 89},
{10102, "Qian", 90},
{10103,"Sun",93},
{10104,"Li",94},
{10105,"Zhou",95},
{10106,"Wu",96},
{10107,"Zheng",97},
{10108,"Wang",98},
{10109,"Feng",99},
{10110,"Cheng",100}
};
struct Student tmp;
int i, j, a, x, cur_nums;
cur_nums = get_cur_stu_num(stu);
print_stu_info(stu, cur_nums);
printf(" ---要插入的数据下标---\n");
scanf("%d",&a);
if (a > MAX_STU_NUM - 1) { /*check array's index*/
printf("Overflow!\n");
return 0;
}
tmp.num = 10113;
strcpy(tmp.name ,"Chu");
tmp.score = 98;
if (a > cur_nums) {
stu[cur_nums] = tmp;
}
else {
for (j = cur_nums + 1; j > a; j--)
stu[j] = stu[j-1];
stu[a] = tmp;
}
cur_nums++;
print_stu_info(stu, cur_nums);
printf(" ---要删除的数据下标---\n");
scanf("%d",&x);
if (x < cur_nums) {
for (i = x; i < cur_nums; i++)
stu[i] = stu[i+1];
}
cur_nums--;
print_stu_info(stu, cur_nums);
return 0;
}
int get_cur_stu_num(struct Student *pstu)
{
int i;
for (i = 0; i < MAX_STU_NUM; i++)
if (pstu[i].num <= 0)
break;
return i;
}
void print_stu_info(struct Student *pstu, int nums)
{
int i;
printf(" 学号 姓名 成绩\n");
for(i=0;i<nums;i++)
printf("%7d%8s%6d\n", pstu[i].num, pstu[i].name, pstu[i].score);
}
上面的代码是根据我的想法改的。可以参考一下;
如果直接将插入的数据放到数组里,肯定会将原来的数据覆盖,所以先要放到一个临时的变量里,然后在插入数组里。