C++ 6.0结构体数组排序的顺序问题,排序后的顺序规则

C++ 6.0利用函数指针高效排序同时保证结果正确有序的方法是什么?如果结构体中是浮点数字段,具体怎么排序才能正确?

c++

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++ 6.0结构体数组排序的顺序问题,排序后的顺序规则
C++ 6.0利用函数指针高效排序同时保证结果正确有序的方法是什么?如果结构体中是浮点数字段,具体怎么排序才能正确?
C++ 6.0库函数排序,效率不高的问题
C++ 6.0库函数排序,对结构体排序,如何克服排序顺序紊乱的问题,是否需要用二次排序,如何提高排序的效率呢?
VB6.0计算整数排序的相关问题
设计一个如图所示的程序。单击“随机产生10个整数”菜单时,随机产生10个整数并显示在列表框List1中;单击“排序”菜单时,将产生的10个随机数按从大到小的顺序显示在列表框List2中。
两个表各自排序后再按权重合并后排序问题?求高手指点,谢谢.在线等。。
原始需求:这是个仓库自动入库策略, 共6台堆垛机(字段1),同时入库工作,要求根据入库物料在各堆垛机的分布数量,平均分布入库,同时考虑堆垛机入库任务数和繁忙程度。(对物料分布(字段2)查询的结果(如表a查询结果排序)和堆垛机任务数(字段3)查询的结果(表b查询结果排序)分别作比重排序(例如物料分布排序1-6,任务数量排序1-6,两者相加最后综合排序1-6)找出需要入库的堆垛机。) 实现: 表a和表b是2个不同的表,通过字段1关联,分别统计的结果是字段2和字段3(字段2和字段3是不同的字段,比如一个是物料数一个是任务数),将统计的结果分别排序,然后再按照排序的结果分别赋予顺序权重值1-6,然后根据字段1将2者合并求出最后的权重顺序。请高手帮忙啊,如何通过存储过程或sql实现???(注意:要求的结果不能直接是两者合并排序,而是各自排序后求得顺序权重值后再合并排序) 表a 字段1 字段2 a 23 b 16 c 32 d 0 e 26 f 39 表a查询结果排序: 字段1 字段2 d 0 b 16 a 23 e 26 c 32 f 39 表b 字段1 字段3 a 10 b 13 c 23 d 11 e 0 f 28 表b查询结果排序: 字段1 字段3 e 0 a 10 d 11 b 13 c 23 f 28 要求结果: 根据排序后的结果将字段1按顺序赋予权重值(权重值是1-6),从小到大: a表字段1排序赋予权重后: 字段1 权重 d 1 b 2 a 3 e 4 c 5 f 6 B表字段1排序赋予权重后: 字段1 权重 e 1 a 2 d 3 b 4 c 5 f 6 然后将两个结果合并求和排序,按从小到大: 结果如下: d 4 a 5 e 5 b 6 c 10 f 12 主要是为了求这个排序结果. 求指导,谢谢。。
数据结构C语言顺序表的排序和删除问题
顺序表定义的长度为10000,此时程序可以正常运行;把顺序表长度改成500000,程序出错,不能运行。求问大神是哪里出了错误,还是要提高存储上限?如何改正?#include <stdio.h> #include <stdlib.h> #include <time.h> typedef int ElemType; #define MAX 10000 typedef struct{ ElemType *elem; int length; }SqList; void InitList(SqList &L){ L.elem = (ElemType *)malloc(MAX*sizeof(ElemType)); free(L.elem); L.elem = (ElemType *)malloc(MAX*sizeof(ElemType)); L.length = MAX; }//初始化顺序表 void Merge(ElemType SR[],ElemType TR[],int i,int m ,int n){ int j,k; for(j=m+1,k=i;i<=m&&j<=n;k++){ if(SR[i]<=SR[j]) TR[k]=SR[i++]; else TR[k] = SR[j++]; } while(i<=m) TR[k++] = SR[i++]; while(j<=n) TR[k++] = SR[j++]; }// 将有序的SR[i..m]和SR[m+1..n]归并为有序的TR[i..n] void Msort( ElemType SR[], ElemType TR1[], int s, int t ){ int k; ElemType TR2[MAX]; if(s==t) TR1[s] = SR[s]; else { k = (s+t)/2; Msort(SR,TR2,s,k); Msort(SR,TR2,k+1,t); Merge(TR2,TR1,s,k,t); } }// 对SR[s..t]进行归并排序,排序后的记录存入TR1[s..t] void SelectSort(SqList &L){ int i,j,k; ElemType temp; int n=L.length; for(i=1;i<n;i++){ k = i; for(j=i+1;j<=n;j++) if(L.elem[j]<L.elem[k]) k=j; if(i!=k){ temp = L.elem[i]; L.elem[i] = L.elem[k]; L.elem[k] = temp; } } }//简单选择排序的实现 int QKPass(ElemType s[],int left,int right){ ElemType x = s[left]; while(left<right){ while(left<right && s[right]>=x){ right--; } if(left<right){ s[left] = s[right]; left++; } while(left<right && s[left]<=x){ left++; } if(left<right){ s[right] = s[left]; right--; } } s[left] = x; return left; }//一趟快速排序算法 void HeapAdjust (SqList &H, int s, int m){ H.elem[0] = H.elem[s]; int j; H.elem[0] = H.elem[s]; for(j = 2*s ; j<=m; j*=2){ if(j<m && H.elem[j]<H.elem[j+1]) j++; if(H.elem[0]>=H.elem[j]) break; H.elem[s] = H.elem[j]; s = j; } H.elem[s] = H.elem[0]; }//保存大顶堆的根元素后,对大顶堆的调整 void HeapSort (SqList &H){ int i ; ElemType temp; for(i=H.length/2;i>1;i--) HeapAdjust(H,i,H.length); temp = H.elem[0]; H.elem[0] = H.elem[H.length]; H.elem[H.length] = temp; for(i = H.length-1;i>1;i--){ HeapAdjust(H,1,i); temp = H.elem[1]; H.elem[1] = H.elem[i]; H.elem[i] = temp; } }//建立大顶堆,实现堆排序 void BubbleSort(SqList &L){ int n = L.length,change = 1; int i,j; ElemType temp; for(i=1;i<n && change;i++){ change = 0; for(j=1;j<=n-i;j++) if(L.elem[i]>L.elem[j]){ temp = L.elem[i]; L.elem[i] = L.elem[j]; L.elem[j] = temp; change = 1; } } }//冒泡排序算法实现 void QKsort(ElemType s[],int low,int high){ int pos; if(low<high){ pos = QKPass(s,low,high); QKsort(s,low,pos-1); QKsort(s,pos+1,high); } }//递归实现快序排序 void DeleteItem(SqList &L,ElemType item){ int i; for(i=1;i<L.length;i++) if(L.elem[i]==item){ L.elem[i] = L.elem[--L.length]; free(&L.elem[L.length]); } }//删除与item相同元素 int main(){ double t1,t2; int i; SqList L1,L2; int k; printf("**************************************\n"); printf("0、退出\n"); printf("1、二路归并排序\n"); printf("2、堆排序\n"); printf("3、冒泡排序\n"); printf("4、快速排序\n"); printf("5、直接插入排序\n"); printf("6、删除与Item相同元素\n"); printf("**************************************\n"); do{ InitList(L1); InitList(L2); scanf("%d",&k); for(i=1;i<L1.length;i++) L1.elem[i] = rand()%MAX; for(i=1;i<L2.length;i++) L2.elem[i]=i; switch(k){ case 0:break; case 1: printf("\n********二路归并排序******\n"); t1=clock(); Msort(L1.elem,L1.elem,1,L1.length-1); t1 = clock() - t1; t2=clock(); Msort(L2.elem,L2.elem,1,L2.length-1); t2 = clock()- t2; break; case 2: printf("\n**********堆排序*********\n"); t1=clock(); HeapSort(L1); t1 = clock() - t1; t2=clock(); HeapSort(L2); t2=clock() - t2; break; case 3: printf("\n*********冒泡排序********\n"); t1=clock(); BubbleSort(L1); t1 = clock() - t1; t2=clock(); BubbleSort(L2); t2=clock() - t2; break; case 4: printf("\n*********快速排序********\n"); t1=clock(); QKsort(L1.elem,1,L1.length-1); t1 = clock() - t1; t2=clock(); QKsort(L2.elem,1,L2.length-1); t2=clock() - t2; break; case 5: printf("\n********直接插入排序******\n"); t1=clock(); SelectSort(L1); t1 = clock() - t1; t2=clock(); SelectSort(L2); t2=clock() - t2; break; case 6: t1=clock(); DeleteItem(L1,5); t1=clock()-t1; for(i=1;i<L1.length;i++) printf("%d ",L1.elem[i]); break; default : printf("\n输入错误!\n\n"); } if(0<k&&k<6){ printf("\n该排序无序表排序时间:%f毫秒\n",(double)t1); printf("\n该排序有序表排序时间:%f毫秒\n\n",(double)t2); } else if(k==6) printf("\n删除元素的时间为%f毫秒\n",(double)t1); }while(k!=0); return 0; }
内部排序的性能分析:函数调用的问题?在主函数中用一种方法排序后,排好序的顺序表被带回主函数,再用另一种方法排序等于没用了
原先用的void insertsort(Sqlist &L),改成void insertsort(Sqlist L)还是不行,形参不是传值调用主函数不会改变嚒? 已经测试排序的代码没有问题,单独使用一种方法没有问题,几种同时使用才会出问题, ![图片说明](https://img-ask.csdn.net/upload/201912/09/1575891779_129272.png) 第一行:随机生成的顺序表 第二行:Insert排序后的顺序表 第三行:比较次数,移动次数 第四行:Shell排序前的顺序表 第五行:Shell排序后的顺序表 可以看出shell根本不需要排序,移动次数为0...... 代码太长截取一部分有用的: ``` #define _CRT_SECURE_NO_DEPRECATE #include<stdio.h> #include<stdlib.h> #include<time.h> typedef int Position; typedef int ElemType; typedef int Status; int compare1=0,compare2=0,compare3=0,compare4=0,compare5=0,compare6=0;//比较次数 int move1 = 0, move2 = 0, move3 = 0, move4 = 0, move5 = 0, move6 = 0;//移动次数 ElemType*p, *q; #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define OK 1; #define TRUE 1; #define FALSE 0; #define ERROR 0; #define OVERFLOW -2; /*①SqList.h线性表的动态分配顺序存储结构*/ typedef struct { int key; }lkey; typedef struct { lkey *elem; int length; int listsize; }SqList; /*②顺序表基本操作接口定义*/ //操作结果:构造一个空的线性表 Status InitList_Sq(SqList &L); //操作结果:在L中第i个元素之前插入新的元素e,L的长度加1 Status ListInsert_Sq(SqList &L, int i, ElemType e); //操作结果:依次对L的每个数据元素调用(*visit)(),一旦(*visit)()失败,则操作失败 Status ListTraverse_Sq(SqList L, Status(*visit)(ElemType)); //将元素e的值打印出来 Status visit_sp(ElemType e); //直接插入排序 void InsertSort(SqList L); //希尔排序 void ShellSort(SqList L, int dlta[], int t); void Shell(SqList L, int dk);//一趟希尔插入排序 //起泡排序 void BubbleSort(SqList L); //快速排序 void QuickSort(SqList L); void Quick(SqList L, int low, int high); int QsortPartion(SqList L, int low, int high);//一趟快速排序 //简单选择排序 void SelectSort(SqList L); //堆排序 void HeapSort(SqList L); void HeapAdjust(SqList L, int s, int m);//建大顶堆函数 //随机生成数构造线性表 Status InitList_Sq(SqList &L) { int i; L.elem = (lkey*)malloc(LIST_INIT_SIZE * sizeof(lkey)); if (!L.elem)exit(-2); L.length = 0; L.listsize = LIST_INIT_SIZE; //srand((unsigned)time(NULL)); for (i = 1; i < 15; i++) { L.elem[i].key = rand() % 100 + 1; ListInsert_Sq(L, i, L.elem[i].key); } return OK; /*请参考课本上的算法2.3*/ } //在L中第i个元素之前插入新的元素e,L的长度加1 Status ListInsert_Sq(SqList &L, int i, ElemType e) { if (i<1 || i>L.length + 1) return ERROR; if (L.length >= L.listsize) { lkey*newbase = (lkey*)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(lkey)); if (!newbase)return ERROR; L.elem = newbase; L.listsize += LISTINCREMENT; } q = &(L.elem[i - 1].key); for (p = &(L.elem[L.length - 1].key); p >= q; --p) *(p + 1) = *p; *q = e; ++L.length; return OK; /*请参考课本上的算法2.4*/ } //操作结果:依次对L的每个数据元素调用(*visit)(),一旦(*visit)()失败,则操作失败 Status ListTraverse_Sq(SqList L, Status(*visit)(ElemType)) { int i; for (i = 1; i <= L.length; i++) (*visit)(L.elem[i - 1].key); printf("\n"); return OK; } //将元素e的值打印出来 Status visit_sp(ElemType e) { printf("%d ", e); return OK; } //直接插入排序 void InsertSort(SqList L) { int compare1 = 0, move1 = 0; int i=0, j=0; lkey rc; for (i = 1; i<L.length; ++i)//从第二个开始 { compare1++; if (L.elem[i].key < L.elem[i - 1].key) { move1 += 2; rc = L.elem[i]; L.elem[i] = L.elem[i - 1]; for (j = i - 2; j >= 0 && rc.key < L.elem[j].key; --j)//从i-2个开始 { compare1++; L.elem[j + 1] = L.elem[j]; move1++; } L.elem[j + 1] = rc; move1 += 3; } } ListTraverse_Sq(L,visit_sp); printf("%d %d\n", compare1, move1); } //希尔排序 void ShellSort(SqList L, int dlta[], int t) { ListTraverse_Sq(L, visit_sp); int k; for (k = 0; k < t; k++) Shell(L, dlta[k]); ListTraverse_Sq(L, visit_sp); printf("%d %d\n", compare2, move2); } void Shell(SqList L, int dk)//一趟希尔插入排序 { lkey rc; int j; for (int i = dk; i < L.length; i++) { compare2++; if (L.elem[i].key < L.elem[i - dk].key)//比较i和i-dk { rc = L.elem[i]; move2++; for (j = i - dk; j >= 0 && (rc.key < L.elem[j].key); j -= dk)//[6]和[3],[0]比较 { compare2++; L.elem[j + dk] = L.elem[j];//记录后移,查找插入位置 move2++; } L.elem[j + dk] = rc;//插入 move2++; } } } int main() { SqList L; int i; int dita[3] = { 5,3,1 }, t = 3; for (i = 0; i <= 5; i++) { printf("当前随机数为:\n"); InitList_Sq(L); ListTraverse_Sq(L, visit_sp); InsertSort(L); ShellSort(L, dita, t); //BubbleSort(L); //QuickSort(L); //SelectSort(L); //HeapSort(L); /*printf("------|-比较次数-||-移动次数-|\n"); printf("Insert| %d || %d |\n", compare1, move1); printf("Shell | %d || %d |\n", compare2, move2); printf("Bubble| %d || %d |\n", compare3, move3); printf("Quick | %d || %d |\n", compare4, move4); printf("Select| %d || %d |\n", compare5, move5); printf("Heap | %d || %d |\n", compare6, move6);*/ } system("pause"); return 0; } ```
自定义类的数组排序和查找问题(自定义Dates类)
``` public class DateSort{ public static void main(String[] args){ Dates days[] = new Dates[10]; days[0] = new Dates(2013,3,1); // 初始化日期数组,任意赋值 days[1] = new Dates(2014,3,1); days[2] = new Dates(2013,4,5); days[3] = new Dates(2014,5,28); days[4] = new Dates(2012,8,9); days[5] = new Dates(2001,12,11); days[6] = new Dates(2005,10,10); days[7] = new Dates(2008,8,8); days[8] = new Dates(2015,9,29); days[9] = new Dates(1992,1,1); Dates day = new Dates(2015,9,29); System.out.println("未排序"); for(int i = 0;i<10;i++){ //输出数组,未排序 days[i].display(); } for(int i = 0;i < days.length;i++){ for(int j = i+1;j < days.length;j++){ if(days[i].compare(days[j]) == -1){ Dates d = days[i]; days[i] = days[j]; days[j] = d; } } } System.out.println("\n排序以后"); for(int i = 0;i<10;i++){ //排好序,输出数组 days[i].display(); } //二分法查找特定Day int start = 0; int end = days.length-1; int m = (start+end)/2; while(start<=end){ if(days[m].compare(day) == 0){ System.out.println("找到了与day相同的日期,下标i为:" + m); break; } if(days[m].compare(day) == 1){ end = m-1; } if(days[m].compare(day) == -1){ start = m+1; } m = (start+end)/2; if(start == end && days[m].compare(day) != 0) System.out.println("No Found"); } } } class Dates{ int year,month,day; Dates(int y,int m,int d){ year = y; month = m; day = d; } public int compare(Dates date){ return year > date.year ? 1 :year < date.year ? -1 :month > date.month ? 1 :month < date.month ? -1 :day > date.day ? 1 :day < date.day ? -1 : 0; } public void display(){ System.out.println(year + "-" + month + "-" + day); } } ``` 先new 一个day对象。然后用折半查找法在自定义的Dates数组中查找是否存在相同时间,若存在返回下标,不存在,打印No Found。 问题是:new了一个确实存在与days数组里的day对象。但是运行结果是No Found。 后来尝试着将排序的语句删掉,将原来的Dates数组的值,按顺序赋值。这样运行的结果是没问题的,都能查找到。 所以就不知道问题出在哪儿了!求大神指点一二
求解:算法设计与分析题
求解各位大神,能详细解答下,不只是答案,谢谢了。 考虑下面的算法: 输入: n个元素的数组A 输出:按递增顺序排序的数组A 1. void bubblesort(int A[],int n) 2. { 3. int j,i,sorted; 4. i=sorted=0; 5. while(i<n-1 && !sorted) { 6. sorted=1; 7. for(j=n-1;j>i;j--) { 8. if(A[j]<A[j-1]) { 9. temp=A[j]; 10. A[j]=A[j-1]; 11. A[j-1]=temp; 12. sorted=0; 13. } 14. } 15. i=i+1; 16. } 17. } (1) 算法所执行的元素比较次数最少是多少次?什么时候达到最少? (2) 算法所执行的元素比较次数最多是多少次?什么时候达到最多? (3) 算法所执行的元素赋值次数最少是多少次?什么时候达到最少? (4) 算法所执行的元素赋值次数最多是多少次?什么时候达到最多? (5) 用О、和Ω记号表示算法的运行时间。 (6) 可以用Θ记号来表示算法的运行时间吗?请说明。
如何用qsort对一维数组的部分元素进行排序
任务:大规模二维动态数组的排序 1. 利用 main(int argc, char** argv)函数中的参数列表录入三个参数: rowNum,colNum,dim。rowNum 表示二维数组的行数, 要求 rowNum≥ 1000000;colNum 表示二维数组的列数, 要求 colNum≥16;dim 表示 用来对二维数组的行进行排序的列,要求满足 0≤dim<colNum。 2. 用一个(int )指针指向动态生成的整型数组A0,A0由rowNum*colNum 个整数组成。我们将 A0 看作是 rowNum 行、colNum 列的二维数组: A0[0],A0[1],…,A0[colNum-1]是第 1 行,接下来 colNum 个单元为第 2 行,如此等等。利用 srand 函数为 A0 的每个单元(形如 A0[i][j]) 生成一个整数。 3. 用一个(int *)指针指向动态生成的整型数组A1, A1由rowNum*colNum 个整数组成,看作是 rowNum 行、colNum 列的二维数组。利用 memcpy 函数将 A0 复制到 A1:要求每次仅仅复制一行,并且保证 A0 与 A1 所 有单元对应相等。 4. 用一个(int *)指针指向动态生成的指针数组 A2,A2 由 rowNum 个 (int*)指针组成。将 A2 每个单元中的指针指向 A0 中的对应行,形如 A2[i]指向 A0[i]。注意 A0 中每一行由 colNum 个整数组成。 5. 利用快速排序函数 qsort,将 A1 中的行依照每行的 dim 单元所含整数 进行排序:按从小到大的顺序。记录排序时间为 T1。 6. 利用快速排序函数 qsort,将 A2 中的单元依照每个单元所指对应 A0 行的 dim 单元所含整数进行排序:按从小到大的顺序。记录排序时间 为 T2。 7. 比较第 5 步与第 6 步中的排序结果是否一致,输出比较结果:YES or NO。计算加速比:T1/T2 (即 T1 除以 T2),并且打印输出 第五步想了很久也没想清楚,求大神救救
python:DNA排序--求逆序数。
【问题描述】 对于给定的序列{ a[1], a[2],... , a[n]},元素a[i] 的逆序数定义为inv(a[i])=|{a[k]|a[i]>a[k],i<k<=n}|。序列A 的逆序数定义为inv(A)=inv(a[1])+inv(a[2])+.....+inv(a[n])。 事实上,序列A 的逆序数刻画出序列A中元素已排序的程度。逆序数越小,序列A 已排序的程度就越高。当序列A 已排好序时,其逆序数为0。 生物信息学家在进行分子计算研究DNA序列时需要将若干长度相同的DNA串按其逆序数从小到大排序。 编写程序,对于给定长度相同的DNA串,按其逆序数从小到大的顺序排序。 DNA中的字符按照字符顺序比较大小,数据从"input.txt"的文件读入,并将结果输出到"output.txt"中。 【输入形式】 第一行有两个整数,分别为DNA长度L和DNA数量n 之后n行分别为n个DNA串 最后以两个0结束 【输出形式】 按逆序数从小到大每行输出一个DNA串。 【样例输入】 从input.txt输入: 10 6 AACATGAAGG TTTTGGCCAA TTTGGCCAAA GATCAGATTT CCCGGGGGGA ATCGATGCAT 00 【样例输出】 向output.txt输出: CCCGGGGGGA AACATGAAGG GATCAGATTT ATCGATGCAT TTTTGGCCAA TTTGGCCAAA
C语言程序 学生成绩排序系统
1. 学生成绩排序系统简介 学生成绩排序系统可实现学生信息输入、学生信息输出、学生信息查询、学生成绩排序等功能。程序要求提供简单友好易于操作的界面。程序以C语言开发。 2.学生成绩管理系统基本要求: 假设有5名学生的成绩放在1个数组中。系统要求从键盘上输入的方法生成学生的成绩几有关数据。系统能按照要求根据不同条件对学生成绩进行管理。 3. 系统模块及操作要求: (1) 编写一个成绩生成函数。使用从键盘上输入的方法生成学生的各门课程的成绩(每门课程的成绩都是0-100之间的整数)并存入文件中,通过调用该函数生成全部学生的成绩再从文件中读出数据。 (2)先采用冒泡排序法,将学生成绩从高到低进行排序,再输入一个学生的成绩,将此成绩按照排 序规律插入已排好序的学生成绩数组。 (3)在函数中进行 全班学生成绩从高到低的顺序进行排名, 排名方式根据上方一排好的顺序。 (4)对学生的成绩进行优化。 若遇到成绩相同的同学,按照学号的大小进行重新排序。 (5)定义一个结构体数组,存放学生的学号,姓名,三 门课的成绩,输出单门课成绩最高的学生的学号、姓名,输出三门课程的平均分数以及最高的学生的学号、姓名及其平均分,再将学生按照平均分数从高到低进行排序并输出最后的结果。 (6)学生成绩文件管理。将学生的相关数据,存入文件中,再从文件中读出 按照平均分数从高到低进行排序,将结果输出到屏幕上,再从文件中读取学生的数据进行显示。 设计一个菜单,至少具有上述操作要求的基本功能,菜单设计请见图1。![图片说明](https://img-ask.csdn.net/upload/201605/31/1464710124_909761.png)
JavaScript二维数组排序的问题
有一个数组 var a = new Array(); 还有多个数组 var b= new Array(); b[0]="sss" b[1]="sss" b[2]="test2" b[3]="test3" b[4]="test4" b[5]="test5" b[6]="test6" 数组a.concat(b[0]),a.concat(b[3]),a.concat(b[1]),a.concat(b[0]),a.concat(b[2]), 数组a,内部的顺序按照 b的下标来排序,
帮忙看一下c语言这个关于数组的错误~
输入 10 个整数用选择排序法将它们按照升序排列好 原理说明:把一个数组从小到大排列,不停的扫描整个数组,第一次扫描把最小的数找出来并放在第一位,第二次扫描,把其余的数中最小的数找到放在第二位,以此类推,这样经过N-1次扫描之后就可以把N个数的顺序排列好了 ``` #define A 10 #include <stdio.h> int main() { int a[A],i,j,k,t; for(i=0;i<A;i++) scanf("%d",&a[i]); for(j=0;j<A-1;j++) {for(k=0;k<A-j;k++) if(a[k]>a[k+1]) {t=a[k];a[k]=a[k+1];a[k+1]=t;}} for(i=0;i<A;i++) printf("%d ",a[i]); printf("\n"); return 0; } ``` 这段代码我在VC++6.0运行没问题,但是提交到学校网站编译结果是: main.c:10:Bounds error: array reference (10) outside bounds of the array. main.c:10: Pointer value: 0xbf946218 main.c:10: Object `a': main.c:10: Address in memory: 0xbf9461f0 .. 0xbf946217 main.c:10: Size: 40 bytes main.c:10: Element size: 4 bytes main.c:10: Number of elements: 10 main.c:10: Created at: main.c, line 5 main.c:10: Storage class: stack
救救孩子吧!如何解决读取txt文件出现索引超出了数组的范围的问题
#include<stdio.h> #include<stdlib.h> void main() { typedef struct LNode { char name[6]; int no; int yw; int sx; int yy; struct LNode* next; }LinkList; struct NameNo { int no; int yw; int sx; int total; char name[6]; }st[10]; FILE* fp, * fp1; char ch, sname[6]; int x, i, j; NameNo tmp; LinkList* p, * s; printf("\n"); printf("-------------------------------"); printf("学生成绩管理系统"); printf("--------------------------------"); printf("\n\n"); printf("在您的C盘根目录下是否有cj1.txt和cj2.txt文件?如果有请输入1,"); printf("否则输入0;如果没有,那么程序将终止!1 or 0?"); scanf("%d", &i); if (i == 0) return; printf("\n\n"); printf("对cj1.txt和cj2.txt进行合成请按''"); scanf("%d", &i); if (i != 1) return; printf("正在把cj1.txt和cj2.txt中的数据进行合并\n"); printf("......\n.....\n....\n...\n..\n.\n"); if ((fp = fopen("c:\\cj1.txt", "rt")) == NULL) //从文本文件cj1.txt中读取数据传向cj3.txt { printf("无cj1.txt文本文件,程序结束。\n"); return; } fp1 = fopen("c:\\cj3.txt", "wt"); ch = fgetc(fp); while (ch != EOF) { fputc(ch, fp1); ch = fgetc(fp); } fclose(fp1); fclose(fp); if ((fp = fopen("c:\\cj2.txt", "rt")) == NULL) //从文本文件cj2.txt中读取数据接到cj3.txt的后面 { printf("无cj12.txt文本文件,程序结束。\n"); return; } fp1 = fopen("c:\\cj3.txt", "a"); for (i = 0; i < 37; i++) fgetc(fp); ch = fgetc(fp); while (ch != EOF) { fputc(ch, fp1); ch = fgetc(fp); } fclose(fp1); fclose(fp); printf("合并成功!现在你可以在C盘根目录下看到一个cj3.txt文件\n"); printf("\n\n"); p = (LinkList*)malloc(sizeof(LinkList)); p->next = NULL; fp = fopen("c:\\cj3.txt", "rt");//从合成后的cj3.txt读取数据,生成链表 for (i = 0; i < 36; i++) fgetc(fp); ch = fgetc(fp); while (ch != EOF) { s = (LinkList*)malloc(sizeof(LinkList)); fgets(s->name, 6, fp); for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->no = x; for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->yw = x; for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->sx = x; for (i = 0; i < 5; i++) fgetc(fp); x = fgetc(fp) - 48; x = x * 10 + fgetc(fp) - 48; s->yy = x; s->next = p->next; p->next = s; ch = fgetc(fp); } fclose(fp); printf("对cj3.txt中有不及格的学生信息生成cj4.txt请按''"); scanf("%d", &i); if (i != 1) return; printf("正在生成cj4.txt\n"); printf("......\n.....\n....\n...\n..\n.\n"); if (i == 1) fp = fopen("c:\\cj4.txt", "wt");//把三科成绩中有补考的学生信息放入cj4.txt fputs("姓 名 学号 语文 数学 英语", fp); fclose(fp); fp = fopen("c:\\cj4.txt", "a"); s = p->next; while (s != NULL) { if (s->yw < 60 || s->sx < 60 || s->yy < 60) { ch = '\n'; fputc(ch, fp); fputs(s->name, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->no / 10 + 48; fputc(ch, fp); ch = s->no - (s->no / 10) * 10 + 48; fputc(ch, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->yw / 10 + 48; fputc(ch, fp); ch = s->yw - (s->yw / 10) * 10 + 48; fputc(ch, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->sx / 10 + 48; fputc(ch, fp); ch = s->sx - (s->sx / 10) * 10 + 48; fputc(ch, fp); for (i = 0; i < 5; i++) { ch = ' '; fputc(ch, fp); } ch = s->yy / 10 + 48; fputc(ch, fp); ch = s->yy - (s->yy / 10) * 10 + 48; fputc(ch, fp); s = s->next; } else s = s->next; } fclose(fp); printf("生成成功!现在你可以在C盘根目录下看到一个cj4.txt文件"); printf("\n\n"); s = p->next;//将学生信息从链表复制到数组中 for (i = 0; i < 10; i++) { st[i].no = s->no; st[i].yw = s->yw; st[i].sx = s->sx; st[i].total = s->yw + s->sx + s->yy; for (j = 0; j < 7; j++) st[i].name[j] = s->name[j]; s = s->next; } printf("用直接插入法排序请按'':"); scanf("%d", &i); printf("\n\n"); if (i == 1) { for (i = 1; i < 10; i++)//直接插入法排序 { tmp = st[i]; j = i - 1; while (j >= 0 && tmp.total > st[j].total) { st[j + 1] = st[j]; j--; } st[j + 1] = tmp; } printf(" 直接插入法排序后总分从大到小排序为\n"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); for (i = 0; i < 10; i++) { if (st[i].no < 10) { printf("%s ", st[i].name); printf("%d", 0); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } else { printf("%s ", st[i].name); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } } } printf("将排好序的数组打乱\n"); printf("\n"); s = p->next;//将排好序的数组打乱,从新用冒泡法排序 for (i = 0; i < 10; i++) { st[i].no = s->no; st[i].yw = s->yw; st[i].sx = s->sx; st[i].total = s->yw + s->sx + s->yy; for (j = 0; j < 7; j++) st[i].name[j] = s->name[j]; s = s->next; } printf("用冒泡法排序请按'':"); scanf("%d", &i); printf("\n\n"); if (i == 1) { for (i = 0; i < 9; i++)//冒泡法排序 { for (j = 9; j > i; j--) if (st[j].total > st[j - 1].total) { tmp = st[j]; st[j] = st[j - 1]; st[j - 1] = tmp; } } printf(" 冒泡法排序后总分从大到小排序为\n"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); for (i = 0; i < 10; i++) { if (st[i].no < 10) { printf("%s ", st[i].name); printf("%d", 0); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } else { printf("%s ", st[i].name); printf("%d ", st[i].no); printf("%d ", st[i].yw); printf("%d ", st[i].sx); printf("%d ", st[i].total - st[i].yw - st[i].sx); printf("%d\n", st[i].total); printf("\n"); } } } printf("\n"); printf("请输入你要查找的学生姓名:(注意:如果名字为两个字,则中间用两个空格!)\n"); do { x = 1; if (i == 1) printf("输入姓名:"); getchar(); for (i = 0; i < 7; i++) sname[i] = getchar(); for (i = 0; i < 10; i++)//在数组中顺序查找 { for (j = 0; st[i].name[j] == sname[j]; j++) {} if (j == 6) { printf(" 数组中查找结果"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); printf("%s", st[i].name); printf(" %d", st[i].no); printf(" %d", st[i].yw); printf(" %d", st[i].sx); printf(" %d", st[i].total - st[i].yw - st[i].sx); printf(" %d\n\n", st[i].total); x = 0; } } if (x != 0) printf(" 查无此人!\n"); s = p->next; while (s != NULL)//在链表中顺序查找 { for (i = 0; s->name[i] == sname[i]; i++) {} if (i == 6) { printf(" 链表中查找结果"); printf("\n\n"); printf("姓 名 学号 语文 数学 英语 总分\n"); printf("%s", s->name); printf(" %d", s->no); printf(" %d", s->yw); printf(" %d", s->sx); printf(" %d", s->yy); printf(" %d\n\n", s->yw + s->sx + s->yy); x = 0; } s = s->next; } if (x != 0) printf(" 查无此人!\n"); i = 0; printf("继续查找请按''"); scanf("%d", &i); } while (i == 1); printf("\n\n"); printf("-----------------------------谢谢使用!--------------------------------\n\n"); } 请问如何解决索引超出了数组的范围这一问题 现有学生成绩信息文件1(1.txt),内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47 学生成绩信息文件2(2.txt),内容如下: 姓名 学号 语文 数学 英语 陈果 31 57 68 82 李华明 32 88 90 68 张明东 33 48 42 56 李明国 34 50 45 87 陈道亮 35 47 58 77 …. .. .. .. … ![图片说明](https://img-ask.csdn.net/upload/201912/22/1577019414_694126.png)
如何建立自己的NLP训练模型
基于PYTHON开发一个NLP自然语言处理模型。最终结果希望能输入标题自动匹配相应的文本内容。 已经实现了语言素材的采集,采用GENSIM进行摘要和文本内容的匹配。现在的匹配算法有问题,匹配程度太低,给出的标题不能匹配到合适的文本,需要改进。 目前想法是自己建立人工智能训练模型,可以设置每个标题中不同关键词的优先级和先后顺序以及权重,然后不断人工进行标记和素材录入进行模型训练,来提升模型的精确性。需要帮助请大神支招! 具体流程是如何,采用什么模型?具体步骤是什么样的? ``` def CompareArticle1(ArticleSection,Articlesummary): # 文本集和搜索词 #texts = ['要深化大数据、人工智能等研发应用。当下,云计算、物联网、人工智能等技术飞速发展,并且在政务的“智能化”上发挥着日益重要的作用,要建设服务型政府,政务的“智能化”是必然方向。“互联网+政务服务”解决了信息采集、传输、监控等问题,能够促进各部门间数据共享,让群众和企业少跑腿、好办事、不添堵', #print(type(texts)) texts=ArticleSection # 1、将【文本集】生成【分词列表】 texts = [lcut(text) for text in texts] # 2、基于文本集建立【词典】,并获得词典特征数 dictionary = Dictionary(texts) num_features = len(dictionary.token2id) # 3.1、基于词典,将【分词列表集】转换成【稀疏向量集】,称作【语料库】 corpus = [dictionary.doc2bow(text) for text in texts] # 3.2、同理,用【词典】把【搜索词】也转换为【稀疏向量】 kw_vector = dictionary.doc2bow(lcut(keyword)) # 4、创建【TF-IDF模型】,传入【语料库】来训练 tfidf = TfidfModel(corpus) # 5、用训练好的【TF-IDF模型】处理【被检索文本】和【搜索词】 tf_texts = tfidf[corpus] # 此处将【语料库】用作【被检索文本】 tf_kw = tfidf[kw_vector] # 6、相似度计算 sparse_matrix = SparseMatrixSimilarity(tf_texts, num_features) similarities = sparse_matrix.get_similarities(tf_kw) #similarities = sparse_matrix.get_similarities(tf_texts) #print("类型") #print(similarities) #升序排列用于输出,不能重新排序会打乱原来的文本的位置。 #similarities2= sorted(similarities,reverse=True) #print(similarities2) #print(similarities) #print(sparse_matrix) #for e, s in enumerate(similarities, 2): # print('kw 与 text%s说 相似度为:%.2f' % (e, s)) return similarities ``` ``` def find_sub_max(arr, n): NumIndex=0 arr_=[] for i in range(n-1): arr_ = arr arr_[np.argmax(arr_)] = np.min(arr) arr = arr_ NumIndex=np.argmax(arr_) print("# arr中第{}大的数为{},位于第{}位".format(n,np.max(arr_), NumIndex)) return NumIndex ```
我的java数组排序后为什么和排序前是一样的顺序呢?
/* 需求:给一个数组进行排序:{5,6,9,2,1,4,8,7,3} */ public class ArrayDemo1 { public static void main(String[] args) { int[] arr ={5,6,9,2,1,4,8,7,3}; printArray(arr); //selectSort(arr); bubbleSort(arr); printArray(arr); } public static void selectSort(int[] a) { for(int x = 0;x<a.length-1;x++) { for(int y =x+1;y<a.length;y++) { if(a[x]>a[y]) swap(a[x],a[y]); } } } private static void swap(int a,int b) { int temp = a; a = b; b = temp; } public static void bubbleSort(int[] a) { for(int x = 0;x<a.length-1;x++) { for(int y=0;y<a.length-x-1;y++) { if(a[y]>a[y+1]) swap(y,y+1); } } } public static void printArray(int[] a) { System.out.print("["); for(int x=0;x<a.length;x++) { if(x!=a.length-1) { System.out.print(a[x]+","); } else System.out.println(a[x]+"]"); } } } —————————————————————— 打印结果是: [5,6,9,2,1,4,8,7,3] [5,6,9,2,1,4,8,7,3]
数据结构内部排序实验报告
一、实验目的 1、掌握排序的有关概念和特点。 2、熟练掌握直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序等算法的基本思想。。 3、关键字序列有序与无序,对于不同的排序方法有不同的影响,通过该实验进一步加深理解。 二、实验内容 设有关键字序列k={ 12 , 45 , 21 , 12 , 30 , 2 , 68 , 33 },试用各种排序算法进行排序。 三、实验环境 TC或VC++ 四、实验步骤 1、从键盘输入上述8个整数,存放在数组quick[8]中,并输出值。 2、输出各种排序算法每一趟排序的结果,观察关键字次序的变化。 (1)直接插入排序算法如下: void InsertionSort ( SqList &L ) { // 对顺序表 L 作直接插入排序。 for ( i=2; i<=L.length; ++i ) if (L.r[i].key < L.r[i-1].key) { L.r[0] = L.r[i]; // 复制为监视哨 for ( j=i-1; L.r[0].key < L.r[j].key; -- j ) L.r[j+1] = L.r[j]; // 记录后移 L.r[j+1] = L.r[0]; // 插入到正确位置 } } // InsertSort (2)希尔排序算法如下: void ShellInsert ( SqList &L, int dk ) { for ( i=dk+1; i<=n; ++i ) if ( L.r[i].key< L.r[i-dk].key) { L.r[0] = L.r[i]; // 暂存在R[0] for (j=i-dk; j>0&&(L.r[0].key<L.r[j].key); j-=dk) L.r[j+dk] = L.r[j]; // 记录后移,查找插入位置 L.r[j+dk] = L.r[0]; // 插入 } // if } // ShellInsert void ShellSort (SqList &L, int dlta[], int t) { // 增量为dlta[]的希尔排序 for (k=0; k<t; ++t) ShellInsert(L, dlta[k]); //一趟增量为dlta[k]的插入排序 } // ShellSort (3)冒泡排序算法如下: void BubbleSort(Elem R[ ], int n) { i = n; while (i >1) { lastExchangeIndex = 1; for (j = 1; j < i; j++) if (R[j+1].key < R[j].key) { Swap(R[j], R[j+1]); lastExchangeIndex = j; //记下进行交换的记录位置 } //if i = lastExchangeIndex; } // while } // BubbleSort (4)快速排序算法如下: int Partition (RedType R[], int low, int high) { R[0] = R[low]; pivotkey = R[low].key; // 枢轴 while (low<high) { while(low<high&& R[high].key>=pivotkey) -- high; // 从右向左搜索 R[low] = R[high]; while (low<high && R[low].key<=pivotkey) ++ low; // 从左向右搜索 R[high] = R[low]; } R[low] = R[0]; return low; }// Partition void QSort (RedType & R[], int s, int t ) { // 对记录序列R[s..t]进行快速排序 if (s < t) { // 长度大于1 pivotloc = Partition(R, s, t); // 对 R[s..t] 进行一次划分 QSort(R, s, pivotloc-1); QSort(R, pivotloc+1, t); } } // QSort (5)简单选择排序的算法描述如下: void SelectSort (Elem R[], int n ) { // 对记录序列R[1..n]作简单选择排序。 for (i=1; i<n; ++i) { // 选择第 i 小的记录,并交换到位 j = SelectMinKey(R, i); // 在 R[i..n] 中选择关键字最小的记录 if (i!=j) R[i]←→R[j]; // 与第 i 个记录交换 } } // SelectSort (6)堆排序算法描述如下: void HeapSort ( HeapType &H ) { // 对顺序表 H 进行堆排序 for ( i=H.length/2; i>0; --i ) HeapAdjust ( H.r, i, H.length ); // 建大顶堆 for ( i=H.length; i>1; --i ) { H.r[1]←→H.r[i]; HeapAdjust(H.r, 1, i-1); // 对 H.r[1] 进行筛选 } } // HeapSort void HeapAdjust (RcdType &R[], int s, int m) { rc = R[s]; // 暂存 R[s] for ( j=2*s; j<=m; j*=2 ) { // j 初值指向左孩子 if ( j<m && R[j].key<R[j+1].key ) ++j; if ( rc.key >= R[j].key ) break; R[s] = R[j]; s = j; } R[s] = rc; } // HeapAdjust (7)归并排序算法描述如下: void Msort ( RcdType SR[], RcdType &TR1[], int s, int t ) { // 将SR[s..t] 归并排序为 TR1[s..t] if (s= =t) TR1[s]=SR[s]; else { m = (s+t)/2; Msort (SR, TR2, s, m); // 递归地将SR[s..m]归并为有序的TR2[s..m] Msort (SR, TR2, m+1, t); Merge (TR2, TR1, s, m, t); } } // Msort 3、如果上述8个整数按照升序输入,即k1={ 2 , 12 , 12 , 21 , 30 , 33 , 45 , 68 },输出各种排序算法每一趟排序的结果,观察关键字次序的变化。 4、如果上述8个整数按照降序输入,即k2={ 68 , 45 , 33 , 30 , 21 , 12 , 12 , 2},输出各种排序算法每一趟排序的结果,观察关键字次序的变化。 5、随机产生3万个数,对其进行排序,观察其结果,并测试各排序算法的执行时间,比较执行效率。 五、问题讨论 1、直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序中哪些是稳定的排序方法,哪些是不稳定的? 2、直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序中哪些排序方法比较次数与初始序列有关,那些无关? 3、在初始序列基本有序的前提条件下,哪种排序方法效率最高? 六、实验报告内容 1、实验目的 2、实验内容和具体要求 3、完成情况和实验记录,实验记录为实验过程中遇到的问题及解决方法 4、程序清单 5、所输入的数据及相应的运行结果 6、问题回答 7、实验心得
小组合作做了一个简陋的学生信息管理系统,修改学生信息的部分一直有问题,麻烦大神帮我看一下到底有什么问题,我真找不出来。
#include<stdio.h> #include<conio.h> #include<string.h> #include<ctype.h> #include<stdlib.h> #define N 10000 typedef struct student { char ID[20]; // 学号 char name[20]; // 姓名 char sex; // 性别 double score[3]; // 三科成绩 double total; // 总分 double avg; // 平均分 }STUDENT; void memu(void); void load(STUDENT stu[],int *nptr); // 将学生信息加载到数组stu中 void save(STUDENT stu[],int n); // 将学生信息保存在磁盘中 void add(STUDENT stu[],int *nptr); // 添加学生信息 void output(STUDENT stu[],int n); // 输出所有学生信息 void InputRecord(STUDENT stu[],int i);// 添加第n+1个学生的信息 void PrintRecord(STUDENT *sptr); // 输出指针sptr所指记录的内容 void edit(STUDENT stu[],int n); // 修改学生信息 void statis(STUDENT stu[], int n); void del(STUDENT stu[],int *nPtr); // 删除学生信息 int main() { int select; int n; STUDENT stu[N]; load(stu,&n); while(1) { memu(); scanf("%d",&select); switch(select) { case 1: // 录入学生成绩 add(stu,&n); break; case 2: // 显示学生信息 output(stu, n); break; case 3: // 修改学生信息 edit(stu,n); break; case 4: // 删除学生信息 del(stu,&n); break; case 5: // 查找学生信息 break; case 6: statis(stu, n); // 统计个科目最高分 break; case 7: // 按总分顺序排序 break; case 0: // 退出系统 break; default: printf("你输入的有误,请重新输入"); break; } } } void memu(void) { system("cls"); printf(" 欢迎使用高校学生管理系统 "); printf("\t\t 菜单 \n"); printf("\t\t1.录入学生的成绩\n"); printf("\t\t2.显示学生信息\n"); printf("\t\t3.修改学生信息\n"); printf("\t\t4.删除学生信息\n"); printf("\t\t5.查找学生信息\n"); printf("\t\t6.统计各科目最高分、平均分和不及格人数\n"); printf("\t\t7.按总分排序\n"); printf("\t\t0.退出系统\n"); } //将学生信息加载到数组stu中 void load(STUDENT stu[],int *nptr) { FILE *fp; //定义文件指针 int i; if((fp=fopen("D:\\student.txt","r"))==NULL) { *nptr=0; return ; } for(i=0; fread(&stu[i],sizeof(STUDENT),1,fp)!=0; i++) { *nptr=i; //*nptr记录文件中当前学生数量 } fclose(fp); //关闭文件 } //将学生信息保存在磁盘中 void save(STUDENT stu[],int n) { FILE *fp; //定义文件指针 if((fp=fopen("D:\\student.txt","w"))==NULL) // { printf("打开文件失败\n"); exit(0); } fwrite(stu,n*sizeof(stu[0]),1,fp); fclose(fp); //关闭文件 } //添加学生信息 void add(STUDENT stu[],int *nptr) { int i=0; char sel = 'Y'; while(sel=='Y') { InputRecord(stu,(*nptr)++); //添加第n+1个学生的信息 printf("if you want stop ? yes(Y) or no(N)\n"); scanf(" %c",&sel); } save(stu,*nptr); } //输入一个学生信息,存到score[i]中 void InputRecord(STUDENT stu[],int i) { int j; //输入学号,并验证合法性 printf("输入第%d个学生的信息\n",i+1); printf("输入学生学号(学号小于9位数字组成)\n"); scanf("%s",&stu[i].ID); printf("请输入学生姓名\n"); scanf("%s",stu[i].name); printf("请输入学生性别(f或m f代表女性 m代表男性)\n"); scanf(" %c",&stu[i].sex); //输入五门课成绩并累加 printf("输入三门课成绩(0~100)\n"); stu[i].total=0; for(j=0;j<3;j++) { scanf("%lf",&stu[i].score[j]); stu[i].total+=stu[i].score[j]; } //计算总成绩 stu[i].avg=stu[i].total/3; } //输出所有学生信息 void output(STUDENT stu[],int n) { int i; //打印表头 printf("%8s%8s%4s%8s%8s%8s%8s%8s%8s%8s\n","ID","NAME","SEX", "SCORE1","SCORE2","SCORE3","SCORE4","SCORE5","total","avg"); //打印所有记录 for(i=0;i<n;i++) { PrintRecord(&stu[i]); } system("pause"); } //输出指针sptr所指记录的内容 void PrintRecord(STUDENT *sptr) { int i; printf("%8s%8s%4c",sptr->ID,sptr->name,sptr->sex); for(i=0;i<3;i++) { printf("%8.2f",sptr->score[i]); } printf("%8.2f%8.2f",sptr->total,sptr->avg); printf("\n"); } void edit(STUDENT stu[],int n) { int i,index; char sel; char str[20]; printf("输入学号"); scanf("%s",str); index=FindByNum(stu,n,str); if(index<0) { printf("该学生信息不存在\n"); //信息不存在的情况 return; } printf("请输入需更改的项目\n1.姓名\n2.性别\n3.科目成绩\n4.总成绩\n5.平均成绩/n(输入序号即可)\n"); int a; //菜单栏 scanf("%d",&a); switch(a) { case 1: printf("修改前的姓名如下:\n"); //修改姓名 PrintRecord(&stu[index]); printf("请输入修改后的姓名:\n"); scanf("%s",stu[index].name); case 2: printf("修改前的性别如下:\n"); //修改性别 PrintRecord(&stu[index]); printf("请输入修改后的性别:\n"); scanf("%s",stu[index].sex); case 3: printf("修改前的科目成绩如下:\n"); //修改科目成绩 PrintRecord(&stu[index]); printf("请输入修改后的科目成绩:\n"); scanf("%s",stu[index].score); case 4: printf("修改前的总成绩如下:\n"); //修改总成绩 PrintRecord(&stu[index]); printf("请输入修改后的总成绩:\n"); scanf("%s",stu[index].total); case 5: printf("修改前的平均成绩如下:\n"); //修改平均成绩 PrintRecord(&stu[index]); printf("请输入修改后的平均成绩:\n"); scanf("%s",stu[index].avg); } save(stu,n); } int FindByNum(STUDENT stu[],int n,char *str) { int i; for(i=0;i<n;i++) if(strcmp( stu[i].ID,str)==0) return i; return -1; } void statis(STUDENT stu[], int n) { int i, fail;//“stu[]”为学生 “score[]”为成绩 “n”为人数 max为最高分数 fail 为不及格人数 sum为50人总分 double score[3], max, sum, avg;//“avg”为平均分 avg = 0; max = 0; fail = 0; sum = 0; for(i = 0; i < n; i++) { sum += stu[i].score[0]; avg = sum/n; if(max < stu[i].score[0]) max = stu[i].score[0]; if(stu[i].score[0] < 60) fail++; } printf("C语言最高分=%.2f\n",max); printf("C语言不及格人数=%d\n",fail); printf("C语言平均分=%.2f\n",avg); fail = 0; sum = 0; max = 0; for(i = 0; i < n; i++) { sum += stu[i].score[1]; avg = sum/n; if(max < stu[i].score[1]) max = stu[i].score[1]; if(stu[i].score[1] < 60) fail++; } printf("英语最高分=%.2f\n",max); printf("英语不及格人数=%d\n",fail); printf("英语平均分=%.2f\n",avg); fail = 0; sum = 0; max = 0; for(i = 0; i < n; i++) { sum += stu[i].score[2]; avg = sum/n; if(max < stu[i].score[2]) max = stu[i].score[2]; if(stu[i].score[2] < 60) fail++; } printf("数学最高分=%.2f\n",max); printf("数学不及格人数=%d\n",fail); printf("数学平均分=%.2f\n",avg); system("pause"); fail = 0; sum = 0; max = 0; } // 删除学生信息 void del(STUDENT stu[],int *nPtr) { int i,index; char str[20]; printf("请你输入学号"); scanf("%s",str); index = FindByNum(stu,*nPtr,str); if(index<0) { printf("\n 亲,不好意思,你所选的学生信息不存在\n"); system("pause"); return ; } for (i = index; i < *nPtr-1;i++) stu[i] = stu[i+1]; (*nPtr)--; printf("\n 恭喜恭喜 删除成功 \n"); system("pause"); save(stu,*nPtr); // 保存到文件中 }
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
我在支付宝花了1分钟,查到了女朋友的开房记录!
在大数据时代下,不管你做什么都会留下蛛丝马迹,只要学会把各种软件运用到极致,捉奸简直轻而易举。今天就来给大家分享一下,什么叫大数据抓出轨。据史料证明,马爸爸年轻时曾被...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
使用 Python 和百度语音识别生成视频字幕
文章目录从视频中提取音频根据静音对音频分段使用百度语音识别获取 Access Token使用 Raw 数据进行合成生成字幕总结 从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFileClip(video_file) video.audio.write_...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
Python全栈 Linux基础之3.Linux常用命令
Linux对文件(包括目录)有很多常用命令,可以加快开发效率:ls是列出当前目录下的文件列表,选项有-a、-l、-h,还可以使用通配符;c功能是跳转目录,可以使用相对路径和绝对路径;mkdir命令创建一个新的目录,有-p选项,rm删除文件或目录,有-f、-r选项;cp用于复制文件,有-i、-r选项,tree命令可以将目录结构显示出来(树状显示),有-d选项,mv用来移动文件/目录,有-i选项;cat查看文件内容,more分屏显示文件内容,grep搜索内容;>、>>将执行结果重定向到一个文件;|用于管道输出。
​两年前不知如何编写代码的我,现在是一名人工智能工程师
全文共3526字,预计学习时长11分钟 图源:Unsplash 经常有小伙伴私信给小芯,我没有编程基础,不会写代码,如何进入AI行业呢?还能赶上AI浪潮吗? 任何时候努力都不算晚。 下面,小芯就给大家讲一个朋友的真实故事,希望能给那些处于迷茫与徘徊中的小伙伴们一丝启发。(下文以第一人称叙述) 图源:Unsplash 正如Elsa所说,职业转换是...
立即提问