关于C语言结构体多条件排序的问题

关于C语言结构体的。 struct _score { int name[11]; int a; int b; int c; int sum; } 对这个结构体 按照sum>a>b>c的优先级顺序进行排序,就是sum相同的话比a这样子,要如何实现呢? (ps:我是初学者基础很差,希望代码能简单点,有注释最好啦)

1个回答

 struct _score data[N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N - 1; j++)
{
if (data[j].sum < data[j + 1].sum) continue;
if (data[j].sum == data[j + 1].sum && data[j]. a < data[j + 1].a) continue;
if (data[j].sum == data[j + 1].sum && data[j].a == data[j + 1].a && data[j].b < data[j + 1].b) continue;
if (data[j].sum == data[j + 1].sum && data[j].a == data[j + 1].a && data[j].b == data[j + 1].b && data[j].c == data[j + 1].c)) continue;
struct _score t = data[j];
data[j] = data[j + 1];
data[j + 1] = t;
}
}
sssssssssakura
你猜我有多动心 这一段应该改为if (data[j].sum == data[j + 1].sum && data[j].a == data[j + 1].a && data[j].b == data[j + 1].b && data[j].c << data[j + 1].c)
3 年多之前 回复
sssssssssakura
你猜我有多动心 谢谢,但是if (data[j].sum == data[j + 1].sum && data[j].a == data[j + 1].a && data[j].b == data[j + 1].b && data[j].c == data[j + 1].c))
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于c语言结构体指针的问题

结构体指针只包含了结构体的首地址还是包含了所有成员的地址?还有结构体的首地址是什么,比如第一个成员是一个数组,那么首地址是不是就是这个数组的首地址?

C语言结构体基础 按照成绩顺序输出学生信息 求解(感谢)

```#include<stdio.h> int main(void){ struct Student{ int id[8]; int math; int eng; int com; float all; }student[11]; float aver=0.0,aver1=0.0,aver2=0.0,aver3=0.0; float mathaver=0.0,engaver=0.0,comaver=0.0; float mathall=0.0,engall=0.0,comall=0.0; for(int i=0;i<10;i++){ printf("请输入第%d位学生的学号:",i+1); scanf("%s",student[i].id); printf("请输入第%d位学生的数学成绩:",i+1); scanf("%d",&student[i].math); printf("请输入第%d位学生的英语成绩:",i+1); scanf("%d",&student[i].eng); printf("请输入第%d位学生的计算机成绩:",i+1); scanf("%d",&student[i].com); } for(int i=0;i<10;i++){ mathall+=student[i].math; } for(int i=0;i<10;i++){ engall+=student[i].eng; } for(int i=0;i<10;i++){ comall+=student[i].com; } mathaver=mathall/10.0; engaver=engall/10.0; comaver=comall/10.0; printf("\n\n数学、英语、计算机成绩这三门课的平均成绩分别为:%.2f,%.2f,%.2f\n\n",mathaver,engaver,comaver); printf("以下为按照总成绩由高往低排序后10位同学的信息===========================\n\n"); for(int i=0;i<10;i++){ student[i].all=student[i].math+student[i].eng+student[i].com; } for(int i=0;i<9;i++){ for(int j=i+1;j<10;j++){ if(student[i].all>student[j].all){ student[11]=student[i]; student[i]=student[j]; student[j]=student[11]; } } } for(int i=0;i<10;i++){ printf("第%d位学生: 学号为:%s\t",i+1,student[i].id); printf("数学成绩:%d\t",student[i].math); printf("英语成绩:%d\t",student[i].eng); printf("计算机成绩:%d\t",student[i].com); aver=(student[i].math+student[i].eng+student[i].com)/3; printf("平均分:%.2f\n\n",i+1,aver); } ``` ![图片说明](https://img-ask.csdn.net/upload/201911/09/1573285509_51900.png)![图片说明](https://img-ask.csdn.net/upload/201911/09/1573285526_802734.png) 题目如上,输入了三次都是显示进程结束。 感谢解答。

【C语言】结构体数组作为函数参数的排序问题

题目: 设计一个程序,统计一个班(最多50人)的学生成绩,要求能实现如下3个功能: (1) 由键盘或文件输入每个学生的学号和四门课程的成绩; (2) 计算每个学生的平均成绩和总成绩; (3) 按总成绩从高到低排名,并按名次输出每个学生的情况,包括: 学号,各科成绩,平均成绩,总成绩,排名 我写的代码如下 问题在于,输入、计算部分都没有问题,但是,运行结果显示,**并没有进行排序操作,也就是说**,排序代码并未生效。 麻烦各位大佬帮忙看看哪里出了问题,感激不尽 ``` #include <stdio.h> #include <stdlib.h> struct student{ char id[10]; float sub_1; float sub_2; float sub_3; float sub_4; float sum; float aver; //int order; }; //函数原型 void order_stu(struct student stu[],int sum_stu); void aver_stu(struct student *pt_1); void main() { int sum_stu;//学生的人数 printf("Please input the sum of students in this class:"); scanf("%d",&sum_stu); getchar(); struct student stu[sum_stu]; //从键盘读取学生学号和四门课的成绩 int i; for(i=0;i<sum_stu;i++) { printf("请分别输入第%d名学生的学号、四门课的成绩,以空格隔开:",i); scanf("%s %f %f %f %f",&stu[i].id,&stu[i].sub_1,&stu[i].sub_2,&stu[i].sub_3,&stu[i].sub_4); getchar(); aver_stu(&stu[i]); } order_stu(stu,sum_stu); } //计算总分和平均值 //利用指针,目的在于在本函数内为结构体内的aver和sum赋值,即改变结构体的内容 void aver_stu(struct student *pt_1) { pt_1->sum=pt_1->sub_1+pt_1->sub_2+pt_1->sub_3+pt_1->sub_4; pt_1->aver=(pt_1->sum)/4; } //排名次 void order_stu(struct student stu[],int sum_stu) { float sum_score;//总分 float aver; int i,j; struct student *p[sum_stu];//定义一个指针数组 //使每个指针指向一个结构体数组元素 for(i=0;i<sum_stu;i++) { p[i]=&stu[i]; } struct student *temp; //用冒泡排序法排序(从大到小) for(i=0;i<sum_stu-1;i++) {//遍历sum_stu-1轮 for(j=0;j<sum_stu-i-1;j++) {//每过一轮,遍历的元素数目-1 if((p[j]->sum)<(p[j+1]->sum)) { temp=p[j+1];//交换两结构体在结构体数组中的位置 p[j+1]=p[j]; p[j]=temp; } } } //将结果通过列表的方式打印在屏幕上 printf("id sub_1 sub_2 sub_3 sub_4 average order\n"); for(i=0;i<sum_stu;i++) printf("%s %5f %5f %5f %5f %7f %5d\n",stu[i].id,stu[i].sub_1,stu[i].sub_2,stu[i].sub_3,stu[i].sub_4,stu[i].aver,i+1); } ``` 运行结果如图所示 ![图片说明](https://img-ask.csdn.net/upload/201811/21/1542812166_499136.jpg)

c语言结构体给歌手分数排序

题目如下第二个: ![图片说明](https://img-ask.csdn.net/upload/201901/05/1546702004_55302.jpg) ``` #include<stdio.h> #include <stdlib.h> typedef struct result { int num[10]; int score[10]; }result; void sorting(result *p) { int i,j,k,temp; for(i = 0;i <9;i++) { k = i; for(j = i+1;j<10;j++) { if(p->score[i] < p->score[j]) { k = j; } } if(k != i) { temp = p->score[j]; p->score[j] = p->score[i]; p->score[i] = temp; } } } int main() { int i; result people; printf("input:\n"); for(i = 0;i <10;i++) { scanf("%d %d",&people.num[i],&people.score[i]); } sorting(&people.score); for(i = 0;i < 10; i++) { printf(" %d %d\n",i,people.score[i]); } } ``` 请问哪里有问题?

C语言结构体输出问题,输出不了结果

为什么输出不了计算出的结果,只能输出两行文字 代码如下: #include<stdio.h> #include<string.h> #define N 3 typedef struct { int id;//学号 char name[20];//姓名 char subject[20];//考试科目 float perf;//平时成绩 float mid;//期中成绩 float final;//期末成绩 float total;//总评 char level[10];//等级 }STU; void input(STU [],int);//输入学生信息 void clac(STU[],int);//计算总评和等级 int fail(STU[],STU[],int);//计算不及格学生人数 void sort(STU[],int);//排序 void show(STU[],STU[],int,int);//输出学生信息 void input(STU s[],int n){//输入学生信息 for(int i=0;i<n;i++){ printf("请输入学生信息:\n"); scanf("%d%s%s%f%f%f",&s[i].id,&s[i].name,&s[i].subject,&s[i].perf,&s[i].mid,&s[i].final); } } void clac(STU s[],int n){//计算总评和成绩 for(int i=0;i<n;i++){ s[i].total=0.2*s[i].perf+0.2*s[i].mid+0.6*s[i].final; if(s[i].total>=90){ strcpy(s[i].level,"优秀"); } else if(s[i].total>=80&&s[i].total<90){ strcpy(s[i].level,"良好"); } else if(s[i].total>=70&&s[i].total<80){ strcpy(s[i].level,"中等"); } else if(s[i].total>=60&&s[i].total<70){ strcpy(s[i].level,"及格"); } else{ strcpy(s[i].level,"不及格"); } } } int fail(STU s[],STU t[],int n){//计算不及格人数 int i,k=0; for(i=0;i<n;i++){ if(s[i].total<60){ t[k++]=s[i]; } } return k; } void sort(STU s[],int n){//排序 int i,j; STU temp; for(i=0;i<n-1;i++){ for(j=0;j<n-1-i;j++){ if(s[j].total<s[j+1].total){ temp=s[j+1]; s[j+1]=s[j]; s[j]=temp; } } } } void show(STU s[],STU t[],int n,int m){ int i; printf("学生成绩排名情况\n"); printf("------------------\n"); printf("姓名 学号 考试科目 平时成绩 期中成绩 期末成绩 总评 成绩等级\n"); for(i=0;i<n;i++){ printf("%10s%5d%20s%5.1f%5.1f%5.1f%5.1f%5.1f%10s\n",s[i].name,s[i].id,s[i].subject,s[i].perf,s[i].mid,s[i].final,s[i].total,s[i].level); } printf("不及格学生情况\n"); printf("------------------\n"); printf("姓名 学号 考试科目 平时成绩 期中成绩 期末成绩 总评 成绩等级\n"); for(i=0;i<m;i++){ printf("%10s%5d%20s%5.1f%5.1f%5.1f%5.1f%5.1f%10s\n",t[i].name,t[i].id,t[i].subject,t[i].perf,t[i].mid,t[i].final,t[i].total,t[i].level); } } int main(){ STU ccc[N],cwy[N]; int k; input(ccc,N); clac(ccc,N); k=fail(ccc,cwy,N); sort(ccc,N); show(ccc,cwy,N,k); return 0; }

在c中怎样用qsort对结构体数组进行多级排序?

比如说 我有个结构体数组里面的每个元素是 struct a{ int cat; string train; double plane; float tree;}; 然后首先按cat从小到大排,然后train从大到小,接着plane大到小,最后tree 小到大.我已经写了个comparator了,但是输出结果跟预期不一样. 然后我的问题是我这样写多级排序的comparator对吗?不对的话该怎么写? 还有folat double这种类型的camparator怎么写?如果像我那样直接相减,是不是会发生溢出之类的情况?![图片说明](https://img-ask.csdn.net/upload/201508/25/1440466338_66467.png)

【C语言】结构体数据处理异常问题

每个城市信息由城市名(字符串)和位置坐标组成(x,y)。设计实现一程序,完成如下功能: (1)从键盘或文件输入各城市信息 (2)按城市名字非递减排序后输出 (3)输入某个位置信息,查询该位置的城市名称,要求能多次查询。 ``` #include <stdio.h> #include <stdlib.h> #define MAXSIZE 20 typedef char ElemType; struct info { ElemType name[MAXSIZE]; int x; int y; }; int main() { struct info city[MAXSIZE]; //从键盘输入信息 int i=0,count=0; printf("请输入城市名和位置坐标x,y,以空格键隔开(输入“q 0 0”以结束):"); while((scanf("%s %d %d",city[i].name,&city[i].x),&city[i].y)!=0) { if(i>=MAXSIZE) { printf("超出最大输入个数!"); break; } if(strcmp(city[i].name,"q")==0) break; i++; count++; printf("请输入城市名和位置坐标x,y,以空格键隔开:"); } //排序 int m,n; struct info temp; for(m=0;m<count-1;m++) { for(n=0;n<count-m-1;n++) { if(strcmp(city[n].name,city[n+1])>0) { temp=city[n]; city[n]=city[n+1]; city[n+1]=temp; } } } //按非递减顺序输出 for(i=0;i<count;i++) { printf("%s %d %d \n",city[i].name,city[i].x,city[i].y); } //查询 int x,y; printf("请输入您要查找的位置坐标x,y,之间以空格隔开,以“q q”结束操作:"); while(scanf("%d %d",&x,&y)!=0) { for(i=0;i<count;i++) { if(x==city[i].x&&y==city[i].y) { printf("\n您要查找的城市为 %s ",city[i].name); break; } else if(i==count-1) { printf("\n未找到匹配的城市!"); } } } printf("\n感谢您的使用,再见!"); return 0; } ``` 代码运行正常,排序、查找功能都正常,但输入数据后,输出(打印在屏幕上)的数据坐标y全部变为0,请问这是怎么回事,看了很久没有看出来

求教大佬,关于C语言结构体指针的问题

我定义了一个结构体数组,然后题目要求按选择法把结构体内的数据从小到大排序。选择排序我是定义了一个函数,函数的参数是两个结构体指针(struct Stu_Score *p,struct Stu_Score *q),函数体内定义了一个中间指针变量struct Stu_Score *temp,在交换的时候就是用中间指针变量对p和q交换,结果这样并没有出现语法错误,但是在运行的时候显示已停止工作。后来我把指针变量还为普通的结构体变量,就是把*temp改成了temp(相应的调用时的->改成了.),结果这样运行就没问题了,请教大佬这是为什么

c语言 超级菜的小白请问怎么通过结构体数组中元素将结构体排序?

学校编程题 问题描述 考研初试成绩公布后需要对m个学生的成绩进行排序,筛选出可以进入复试的前n名学生。排序规则为首先按照总分排序,总分相同则按英语单科成绩排序,总分和英语成绩也相同时考号小者排在前面。现给出这m个学生的考研初试成绩,请筛选出可以进入复试的n名学生并按照排名从高到低的顺序依次输出。 输入说明 输入为m+1行,第一行为两个整数m和n,分别表示总人数和可以进入复试人数,m和n之间用空格分隔,0<n<m<200。接下来为m行数据,每行包括三项信息,分别表示一个学生的考号(字符串)、总成绩(整数)和英语单科成绩(整数),这三项之间用空格分隔。 输出说明 按排名从高到低的顺序输出进入复试的这n名学生的信息。 输入样例 5 3 XD20160001 330 65 XD20160002 330 70 XD20160003 340 60 XD20160004 310 80 XD20160005 360 75 输出样例 XD20160005 360 75 XD20160003 340 60 XD20160002 330 70 本人写的 #include<stdio.h> #include<string.h> #define stu struct STU int main() { int m,n; scanf("%d %d",&m,&n); struct STU { char no[10]; int zong; int eng; }xue[m]; for(int i=0;i<m;i++) scanf("%s %d %d",xue[i].no,&xue[i].zong,&xue[i].eng); int i,j,t; for(i=0;i<m-1;i++) for(j=0;j<m-i-1;j++) if(xue[j].zong<xue[j+1].zong||(xue[j].zong==xue[j+1].zong&&xue[j].eng<xue[j+1].eng)||(xue[j].zong==xue[j+1].zong&&xue[j].eng==xue[j+1].eng&&strcmp(xue[j].no,xue[j+1].no)>0)) { t=xue[j].;xue[j]=xue[j+1];xue[j+1]=t; } for(i=0;i<n;i++) printf("%s %d %d",xue[i].no,xue[i].zong,xue[i].eng); return 0; } 想用冒泡法排序 结构体用不了 有点meng'bi

C++结构体中包含指针的结构体数组的排序怎么做?

C++结构体中包含指针的结构体数组的排序怎么做?关于这方面的主要问题是什么?怎么使得排序结果稳定?

C语言中结构体数组用 for循环和 scanf 输入 比应输入行数多一行

C语言中 结构体数组用 for循环和scanf输入 比应输入行数多一行,这是为什么? 3组学生信息的输入,成绩汇总,排序,打印 我只想输3组数据(aa,bb,cc),但必须输4行(多了dd,这行是随便输的)才行,,不懂,求解。 结果和代码如下: ![图片说明](https://img-ask.csdn.net/upload/201906/28/1561696531_475945.png) ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 3 typedef struct { char name[9]; float score[2]; float total; } stu; void shuru(stu*ss){ int i=0; for(;i<N;i++){ scanf("%s%f%f\n",(ss+i)->name,&((ss+i)->score[0]),&((ss+i)->score[1])); } } void shuchu(stu* ss){ int i=0; for(;i<N;i++) printf("%s %f %f %f\n",(ss+i)->name,(ss+i)->score[0],(ss+i)->score[1],(ss+i)->total); } void paixv(stu *ss){ int i,j=0; for(i=0;i<N-1;i++){ for(j=0;j<N-i-1;j++){ if(ss[j].total<=ss[j+1].total){ stu temp=ss[j]; ss[j]=ss[j+1]; ss[j+1]=temp; } } } } void huizong(stu* ss){ int i=0; for(;i<N;i++){ (ss+i)->total=(ss+i)->score[0]+(ss+i)->score[1]; ss[i].total=ss[i].score[0]+ss[i].score[1]; }} int main() { stu ss[N]; int i,j=0; shuru(ss); huizong(ss); paixv(ss); shuchu(ss); return 0; } ```

C语言结构体在VS2013输入时候遇到的问题

IDE:VS2013 OS:Windows7 源码附上: ``` #include<windows.h> #include<stdio.h> int main() { //定义一个People类型的结构体 struct People{ char name[10];//名字 char sex[5];//性别 int age;//年龄 int Class;//班级 }me; //将me声明为People类型的结构体变量 printf("Please Input Your Name\n"); scanf_s("%s", &me.name); printf("Please Input Your sex\n"); scanf_s("%s", &me.sex); printf("Please Input Your age\n"); scanf_s("%d", &me.age); printf("Please Input Your Class\n"); scanf_s("%d", &me.Class); printf("%s", me.name); printf("%s", me.sex); printf("%d", me.age); printf("%d", me.Class); system("pause"); return 0; } ``` 问题概述 输入名字后 程序直接没了 然后直接打印出后面的三句话了 按程序来说 应该是打印一句话 然后停下来让我输入的啊 怎么我输入一个 下面三句话都打印出来了 运行结果: ![图片说明](https://img-ask.csdn.net/upload/201512/19/1450459187_263278.png) 改了下程序 把scanf_s _s去掉后 在Devc++中就可以正常使用 在Devc++中的运行结果 ![图片说明](https://img-ask.csdn.net/upload/201512/19/1450459313_572972.jpg) 请问各位C前辈 是不是因为VS2013中 对键盘缓冲区进行了特殊的处理呢?

结构体排序,按照内部某成员变量排序

某结构体:{.... int num1 ,int num2....} ,按照num1大小排序 , 如果num1 相同,则再按照num2的大小排,请大家帮忙看下如何比较简单快捷(元素不多不超过10个)

对结构体中某一成员冒泡排序,结果没有变化。

typedef struct Student { long num; char name[10]; char sex[4]; int age; int score; }StudentType; //命名结构体名 #define Maxsize 100 //宏定义 typedef StudentType DataType; ``` void ListContrast(StudentType *L,int n) { int i,j; int temp; int a[] = {L -> score}; for(i = 0;i < n;i++) { for(j = 0;j < n-1-i;j++) { if(a[j-1] < a[j]) { temp = a[j]; a[j] = a[j-1]; a[j-1] = temp; } } } } ```

关于结构体指针问题。什么时候在指针前面加*号,什么时候不加

我在做一道对结构体数组,按姓名升序进行冒泡排序的题的时候有些不理解指针什么时候加“*”什么时候不加*。 下面上我的代码。 结构体定义 ``` typedef struct array{ int a; char b; }Array; ``` 为结构体赋值 ``` Stu student[5] = { {"uioyi",'m',95,58}, {"asdf",'m',88,28}, {"cvb",'m',93,37}, {"aa",'m',60,49}, {"tyu",'m',99,57} }; ``` 下面重点来了,函数 ``` void sortedByName(Stu *p,int count){ for (int i = 0; i < count - 1; i++) { for (int j = 0; j < count - 1 - i; j++) { if (**strcmp((p + j) -> name, (p + j + 1) -> name)** > 0 ) { Stu temp = *(p + j); *(p + j) = *(p + j + 1); *(p + j + 1) = temp; } } } } ``` 请大神为我回答一下,在函数if比较的冒泡排序中,为什么strcmp函数中俩个相比较的指针(p + j) -> name和(p + j + 1) -> name前面为什么不能加*。 但是为什么下面进行冒泡排序赋值的时候就必须要加*

C语言 struct结构体 发现的一个问题 百思不得其解,求大神为我解惑

# 代码如下 ``` #define _CRT_SECURE_NO_WARNINGS//vs报scanf警告 #include<stdio.h> #include<string.h> struct Student { char name[20]; char age; char sex; }; int main() { struct Student st[] = { {"aaa",25,1},{"bbb",40,0}, {"ccc",30,1},{"ddd",34,1},{"eee",79,0} };//声明且初始化 int num = sizeof(st) / sizeof(st[0]);//计算出成员数量 printf("%d\n", sizeof(st));//这里输出结构体数组st所占的内存大小,这里是110byte,5个成员,每个成员22byte for (int i = 0; i < num; i++)//冒泡排序,以年龄排序 { for (int j = 0; j < num - i; j++) { if (st[j].age > st[j + 1].age) { st[num] = st[j];//这里我突发奇想把大的放置在数组后面,程序运行起来没问题,不知道实际上能不能这样??? st[j] = st[j + 1]; st[j + 1] = st[num]; } } } scanf("%20s", st[5].name);//向数组添加新成员 scanf("%d", &st[5].age); scanf("%d", &st[5].sex); num = sizeof(st) / sizeof(st[0]);//问题来了!这里怎么还是5,不是6呢????那怎么输出新成员的信息呢??? printf("%d\n", sizeof(st)); for (int i = 0; i < num;i++) { printf("%s,%d,%d\n", st[i].name, st[i].age, st[i].sex); } return 0; } ```

日期先后排序问题。纯c语言

要求用户任意输入几个日期,再输入当天日期,筛选出小于当天日期的日期,再把这些日期以从先到后的顺序排列。 求助各路大神![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/21.gif)

利用结构体数组插入删除数据

请问插入和删除最后输出的那一段的代码怎么写?拜托啦,急求!!! #include<stdio.h> #include<string.h> struct Student { int num; char name[20]; int score; struct Student*next; }; int main() { struct Student stu[10]={{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}}; int i; printf(" 学号 姓名 成绩\n"); for(i=0;i<10;i++) printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score); printf(" ---要插入的数据---\n"); printf(" 学号 姓名 成绩\n"); printf(" ---要删除的数据---\n"); printf(" 学号 姓名 成绩\n"); return 0; } 又新写的,但是插入后原来位置的数据丢失,请问该怎么改?谢谢! #include<stdio.h> #include<string.h> struct Student { int num; char name[20]; int score; struct Student*next; }; int main() { struct Student stu[20]={{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}}; int i; printf(" 学号 姓名 成绩\n"); for(i=0;i<10;i++) printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score); printf(" ---要插入的数据下标---\n"); int a; scanf("%d",&a); stu[a].num=10113; strcpy(stu[a].name ,"Chu"); stu[a].score =98; if(i==a) { stu[i+1]=stu[i]; stu[i]=stu[a]; } printf(" 学号 姓名 成绩\n"); for(i=0;i<11;i++) printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score); printf(" ---要删除的数据下标---\n"); int x; scanf("%d",&x); for(i=x;i<10;i++) stu[i]=stu[i+1]; printf(" 学号 姓名 成绩\n"); for(i=0;i<9;i++) printf("%7d%8s%6d\n",stu[i].num,stu[i].name,stu[i].score); return 0; }

这个结构体查找和排序后为什么不能输出

#include<stdio.h> #include<string.h> int a; #define N 10 int menu(void) { int c; printf("-----------------------------------------\n"); printf("| 主菜单 |\n"); printf("| 1.增加或删除 |\n"); printf("| 2.排序 |\n"); printf("| 3.查找 |\n"); printf("-----------------------------------------\n"); printf("请输入所需功能:"); scanf("%d",&c); return c; } int fmenu(void) { int z; printf("-----------------------------------------\n"); printf("| 排序菜单 |\n"); printf("| 1.学号 |\n"); printf("| 2.出生年月 |\n"); printf("-----------------------------------------\n"); printf("请输入所需功能:"); scanf("%d",&z); return z; } struct student { char number[20];//学号 int s;//宿舍门牌号 char name[10];//姓名 char address[100];//地址 int gender;//性别 char pro[20];//专业 char date[20];//出生年月 char grade[10];//年级 int b;//班级 }stu [N]; void main() { char num[20]; int t,m=0,f=0,d,ch,x,e,ct,i,y; printf("\t\t\t\t\t\t\t欢迎登入学生管理系统\n"); printf("请先完成录入信息以便后续操作!\n"); printf("\t请输入需要录入本系统学生人数a="); scanf("%d",&a); for(t=0;t<a;t++) { printf("请输入第%d个学生信息\n",t+1); printf("\t姓名:"); scanf("%s%*c",&stu[t].name); printf("\t学号:"); scanf("%s%*c",&stu[t].number); printf("\t地址:"); scanf("%s%*c",&stu[t].address); printf("\t专业:"); scanf("%s%*c",&stu[t].pro); printf("\t宿舍门牌号:"); scanf("%d%*c",&stu[t].s); printf("\t性别(男1女2):"); scanf("%d%*c",&stu[t].gender); printf("\t出生年月:"); scanf("%s%*c",&stu[t].date); printf("\t年级:"); scanf("%s%*c",&stu[t].grade); printf("\t班级:"); scanf("%d%*c",&stu[t].b); } printf("您已完成信息录入!\n"); for(t=0;t<a;t++) { if(stu[t].gender==1) m++; else f++; } printf("男性%d,女性%d\n",m,f);//a,t均为人数 ch=menu(); switch(ch) { case 1: printf("您是否需要增加或删除记录?(增加输入1,删除输入2)\n"); scanf("%d",&y); if(y==1) { printf("几条记录?\n"); scanf("%d",&d); for(;a<t+d;a++) { printf("请输入第%d个学生信息\n",t+1); printf("\t姓名:"); scanf("%s%*c",&stu[t].name); printf("\t学号:"); scanf("%s%*c",&stu[t].number); printf("\t地址:"); scanf("%s%*c",&stu[t].address); printf("\t专业:"); scanf("%s%*c",&stu[t].pro); printf("\t宿舍门牌号:"); scanf("%d%*c",&stu[t].s); printf("\t性别(男1女2):"); scanf("%d%*c",&stu[t].gender); printf("\t出生年月:"); scanf("%s%*c",&stu[t].date); printf("\t年级:"); scanf("%s%*c",&stu[t].grade); printf("\t班级:"); scanf("%d%*c",&stu[t].b); } printf("增加成功\n");//a为人数 } if(y==2) while(1) { printf("请输入需要删除学生学号:\n"); scanf("%s",num); for(t=0;t<a;t++) if(strcmp(num,stu[t].number)==0) { for(;t<a;t++) stu[t-1]=stu[t]; a--; }//a为人数 printf("需要继续删除输入1,否则输入2\n"); scanf("%e",&e); printf("删除成功!\n"); if(e==2) break; } printf("您是否需要进行排序或者查找?(排序请按1,查找请按2,不需要输入3)\n"); scanf("%d",&x); if(x==3) break; case 2: if(x==2) { printf("请输入学号查找(学号唯一):"); scanf("%s",num); for(t=0;t<a;t++) if(strcmp(num,stu[t].number)==0) printf("该学生是%s,家住%s,宿舍是%s,%s专业%d班,出生于%s,目前%s,性别%d\n",stu[t].name,stu[t].address,stu[t].s,stu[t].pro,stu[t].b,stu[t].date,stu[t].grade,stu[t].gender); break; } printf("请选择排序方式:\n"); ct=fmenu(); switch(ct) { case 1: for(t=0;t<a;t++) for(i=t+1;i<a;i++) if(strcmp(stu[t].number,stu[i].number)>0) { stu[a+3]=stu[t]; stu[t]=stu[i]; stu[i]=stu[a+3]; } break; case 2: for(t=0;t<a;t++) for(i=t+1;i<a;i++) if(strcmp(stu[t].date,stu[i].date)>0) { stu[a+3]=stu[t]; stu[t]=stu[i]; stu[i]=stu[a+3]; } break; } for(t=0;t<a;t++) printf("该学生是%s,家住%s,宿舍是%s,%s专业%d班,出生于%s,目前%s,性别%d\n",stu[t].name,stu[t].address,stu[t].s,stu[t].pro,stu[t].b,stu[t].date,stu[t].grade,stu[t].gender); break; case 3: printf("请输入学号查找(学号唯一):"); scanf("%s",num); for(t=0;t<a;t++) if(strcmp(num,stu[t].number)==0) printf("该学生是%s,家住%s,宿舍是%s,%s专业%d班,出生于%s,目前%s,性别%d\n",stu[t].name,stu[t].address,stu[t].s,stu[t].pro,stu[t].b,stu[t].date,stu[t].grade,stu[t].gender); break; } printf("完成!"); }

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

人工智能-计算机视觉实战之路(必备算法+深度学习+项目实战)

系列课程主要分为3大阶段:(1)首先掌握计算机视觉必备算法原理,结合Opencv进行学习与练手,通过实际视项目进行案例应用展示。(2)进军当下最火的深度学习进行视觉任务实战,掌握深度学习中必备算法原理与网络模型架构。(3)结合经典深度学习框架与实战项目进行实战,基于真实数据集展开业务分析与建模实战。整体风格通俗易懂,项目驱动学习与就业面试。 建议同学们按照下列顺序来进行学习:1.Python入门视频课程 2.Opencv计算机视觉实战(Python版) 3.深度学习框架-PyTorch实战/人工智能框架实战精讲:Keras项目 4.Python-深度学习-物体检测实战 5.后续实战课程按照自己喜好选择就可以

linux2.6.1内核源码注释

包含LINUX内核同步、信号、内存、调度、文件系统、网络系统、时钟等部分的源码注释。前后历时三年,算是干货。

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

MySQL 8.0.19安装教程(windows 64位)

话不多说直接开干 目录 1-先去官网下载点击的MySQL的下载​ 2-配置初始化的my.ini文件的文件 3-初始化MySQL 4-安装MySQL服务 + 启动MySQL 服务 5-连接MySQL + 修改密码 先去官网下载点击的MySQL的下载 下载完成后解压 解压完是这个样子 配置初始化的my.ini文件的文件 ...

零基础学C#编程—C#从小白到大咖

本课程从初学者角度出发,提供了C#从入门到成为程序开发高手所需要掌握的各方面知识和技术。 【课程特点】 1 由浅入深,编排合理; 2 视频讲解,精彩详尽; 3 丰富实例,轻松易学; 4 每章总结配有难点解析文档。 15大章节,228课时,1756分钟与你一同进步!

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

java jdk 8 帮助文档 中文 文档 chm 谷歌翻译

JDK1.8 API 中文谷歌翻译版 java帮助文档 JDK API java 帮助文档 谷歌翻译 JDK1.8 API 中文 谷歌翻译版 java帮助文档 Java最新帮助文档 本帮助文档是使用谷

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

编程实现学生基本信息管理程序

编程实现学生基本信息管理程序。学生基本信息包括:学号、姓名、性别、年龄、班级、学院、专业等。具体实现的管理功能如下: (1) 输入并显示多个学生的基本信息; (2) 可根据需要实现学生信息的添加; (

机器学习实战系列套餐(必备基础+经典算法+案例实战)

机器学习实战系列套餐以实战为出发点,帮助同学们快速掌握机器学习领域必备经典算法原理并结合Python工具包进行实战应用。建议学习顺序:1.Python必备工具包:掌握实战工具 2.机器学习算法与实战应用:数学原理与应用方法都是必备技能 3.数据挖掘实战:通过真实数据集进行项目实战。按照下列课程顺序学习即可! 课程风格通俗易懂,用最接地气的方式带领大家轻松进军机器学习!提供所有课程代码,PPT与实战数据,有任何问题欢迎随时与我讨论。

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。 本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。 除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括: 《YOLOv3目标检测实战:交通标志识别》 《YOLOv3目标检测:原理与源码解析》 《YOLOv3目标检测:网络模型改进方法》 敬请关注并选择学习!

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉系统全面的介绍。

土豆浏览器

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

玩转Linux:常用命令实例指南

人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。 本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 --------------------------------------------------------------- 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+700元编程礼包。 &nbsp;

基于STM32的电子时钟设计

时钟功能 还有闹钟功能,温湿度功能,整点报时功能 你值得拥有

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

Git 实用技巧

这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。

计算机组成原理算法实现

计算机组成原理算法实现,能够实现定点小数的机器数表示、定点小数的变形补码加减运算、定点小数的原码一位乘法运算和浮点数的加减运算。

为linux系统设计一个简单的二级文件系统

实验目的: 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。 实验要求: 为linux系统设计一个简单的二级文件系统。要求做到以下几点: (1)可以实现下列几条命令(至少4条)

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

2019全国大学生数学建模竞赛C题原版优秀论文

2019全国大学生数学建模竞赛C题原版优秀论文,PDF原版论文,不是图片合成的,是可编辑的文字版。共三篇。 C044.pdf C137.pdf C308.pdf

土豆SDK(Java版)-非官方

由于土豆SDK一直建设中,最近几天抽空写了一套java的SDK。包含了现有的所有请求协议。本套SDK中仅提供了oAuth的方式(引用oAuth.net的java版示例),并没有在框架中实现,涉及到登录

Android小项目——新闻APP(源码)

Android小项目——新闻APP(源码),一个很简单的可以练手的Android Demo Ps:下载之前可以先看一下这篇文章——https://blog.csdn.net/qq_34149526/a

实用主义学Python(小白也容易上手的Python实用案例)

原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会&nbsp; 【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例

相关热词 c# 解析cad c#数字格式化万 c#int转byte c#格式化日期 c# wpf 表格 c# 实现ad域验证登录 c#心跳包机制 c#使用fmod.dll c#dll vb 调用 c# outlook
立即提问
相关内容推荐