【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);

}

运行结果如图所示
图片说明

1个回答

你排序后放在p里,但是输出的还是stu数组

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);

// Q714179.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


#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();

    student * stu = (student *)malloc(sizeof(student) * 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;
    student **p = (student **)malloc(sizeof(student *) * sum_stu);//定义一个指针数组
    //使每个指针指向一个结构体数组元素 
    for(i=0;i<sum_stu;i++)
    {
        p[i]=&stu[i];
    }
    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",p[i]->id,p[i]->sub_1,p[i]->sub_2,p[i]->sub_3,p[i]->sub_4,p[i]->aver,i+1);

}


图片说明

如果问题得到解决,请点我回答左上角的采纳和向上的箭头,谢谢

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
在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语言中结构体数组用 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; } ```

动态构造存放学生的结构体数组函数版怎么写?

``` /*动态构造存放学生的结构体数组 动态构造一个数组,存放学生的信息 然后按分数排序 */ #include<stdio.h> #include<malloc.h> struct Student{ int age; char name[100]; float score; }; int main(){ struct Student*pArr; int len,i,j; struct Student t; printf("请输入学生的人数:"); scanf("%d",&len); printf("len=%d\n",len); pArr=(struct Student*)malloc(len*sizeof(struct Student)); //动态分配数组 for(i=0;i<len;i++){ printf("请输入第%d个学生的信息:\n",i+1); printf("age="); scanf("%d",&pArr[i].age); printf("name="); scanf("%s",pArr[i].name); printf("score="); scanf("%f",&pArr[i].score); } //排序 for(i=0;i<len-1;i++){ for(j=0;j<len-1-i;j++){ if(pArr[j].score>pArr[j+1].score){ t=pArr[j]; pArr[j]=pArr[j+1]; pArr[j+1]=t; } } } //输出 printf("\n\n学生的信息:\n"); for(i=0;i<len;i++){ printf("输出第%d个学生的信息:\n",i+1); printf("age=%d\n",pArr[i].age); printf("name=%s\n",pArr[i].name); printf("score=%f\n",pArr[i].score); } printf("\n"); } //代码如上,请问把代码里的输入,输出,冒泡排序的for循环写成函数调用的话怎么写呢?麻烦告诉我简单具体的写法,不太掌握这方面的,谢谢! ```

关于c语言结构体指针的问题

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

用结构体数组存储某班的30名学生的信息,每个学生的数据项有学号

用结构体数组存储某班的30名学生的信息,每个学生的数据项有学号、姓名、性别和四门课的成绩。编写程序计算四门课的平均成绩,要求用键盘输入学生数据,再按平均成绩排序,并输出含平均成绩的报表。

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; }

用结构体变量的指针做函数的参数

#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> struct Student { int num; char name[20]; float score[3]; float aver; }; void main() { struct Student *p; struct Student stu[10]; p = stu; void input(struct Student *p,int n); int n; scanf("%d",&n); input(p,n); system("pause"); } void input(struct Student *p,int n) { for(int i = 0;i < n;i++) { 接下来怎么写,我想从input 函数中 用指针输入数据 } }

C语言指针数组查找问题

#include<stdio.h> #include<string.h> void main() { void input(char *name[],int n); void sort(char *name[],int n); void print(char *name[],int n); void search(char *name[],int n); char *name[4]; int n=4; input(name,n); sort(name,n); print(name,n); search(name,n); } void input(char *name[],int n) { int i; printf("请输入4个字符串:\n"); for(i=0;i<n;i++) { name[i]=(char*)malloc(4*sizeof(char)); gets(name[i]); } } void sort(char *name[],int n) { char *temp; int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(strcmp(name[k],name[j])>0) k=j; if(k!=j) {temp=name[i];name[i]=name[k];name[k]=temp;} } } void print(char *name[],int n) { int i; printf("字符串排序结果:\n"); for(i=0;i<n;i++) printf("%s\n",name[i]); } void search(char *name[],int n) { char m; scanf("%s",&m); } 想补充一个search函数进行输入查找,但是不知道该怎么写,尝试写了几个但都查找失败,请各位大神指导下吧,拜托了,万分感谢!

c语言在子函数中malloc后想要将malloc的数组输出,该怎么做?

c语言在子函数中malloc后想要将malloc的数组输出,该怎么做? 因为malloc我在子函数中就要释放,但是只有通过子函数我才能计算出malloc数组的大小,该怎么做?

结构体函数怎么写,救救孩子?

#include <stdio.h> #include <string.h> struct stuscore { int num; /*学号*/ char name[20]; /*姓名*/ float score; /*课程成绩*/ }; struct stuscore stu[10]; /*声明一个结构体数组变量*/ struct stuscore input(); /*单个学生信息录入函数,返回值为结构体变量*/ int main() { int i,count; char chh; count=5; printf("输入学生信息"); for(i=0;i<count;i++) {stu[i]=input(); /*调用信息录入函数*/} printf("排序前学生信息成绩如下"); display(stu,count); printf("排序后学生信息成绩如下"); sort(stu,count); display(stu,count); printf("\n插入新学生信息\n"); insert(stu,count); count++; printf("\n插入新学生信息后的学生成绩信息如下:"); display(stu,count); printf("\n删除某个学生信息\n"); del(stu,count); count--; printf("\n删除学生信息后的学生成绩信息如下:"); display(stu,count); } input();函数怎么写,各位大佬帮忙看看。。???

C语言编程题,插入求和函数,排序函数。么有错误,但结果不对!

定义一个包括学号、姓名及三门课的成绩和总分的结构体,利用该结构体说明一个包含五个人的结构体数组。从键盘输入五个人的基本信息、计算总分,并根据总分排序输出一个成绩单!

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

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

c语言:有三个学生信息,放在结构体中,要求输出全部学生信息。这段代码错哪啦?

有三个学生信息abc,放在结构体中,要求从分数小到大输出全部学生信息。这段代码错哪啦? ``` #include <stdio.h> #include <string.h> # define n 3 struct Student{ int num; char name[20]; } ; int main() { struct Student stu[3]={3,"a",2,"b",1,"c"}; struct Student *p; p=stu; int i,j,k; struct Student temp; for(i=0;i<n-1;i++) {k=i; for(j=1+i;j<n;j++) { if(stu[j].num<stu[k].num)k=j;} {temp=stu[k];stu[k]=stu[i];stu[i]=temp;} } while(p<stu+3) printf("%5s:%d\n",(p++)->name,(p++)->num); return 0; } ``` 结果是 c:1 a:3 然而把while改成 for(p=stu;p<stu+3;p++) printf("%5s:%d\n",p->name,p->num); 就正确了 为什么?两种写法不是等价的吗

C++中,如何将结构数组里面一个成员拿出来排序?

struct student { int num; char name[20]; char sex; int grade; }; void main() { int i; float ave, sum = 0; struct student stu[5]; for (i = 0; i < 5; i++) { cout << "请依次输入学生" << i+1 << "的学号、姓名、性别、成绩" << endl; cin >> stu[i].num >> stu[i].name >> stu[i].sex >> stu[i].grade; }} 如题:如何将其中5个成员grade拿出来进行排序? 已经弄了冒泡排序法的函数,但是不知道用不用的着,调用函数时候有错误 void bubble(int [], int); void bubble(int a[], int size) { int i, temp; for (int pass = 1; pass < size; pass++) { for(i=0;i<size-pass;i++) if (a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } for (i = 0; i < size; i++) cout << a[i] << ","; cout << endl; } }

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

我在做一道对结构体数组,按姓名升序进行冒泡排序的题的时候有些不理解指针什么时候加“*”什么时候不加*。 下面上我的代码。 结构体定义 ``` 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前面为什么不能加*。 但是为什么下面进行冒泡排序赋值的时候就必须要加*

把结构体当中学生成绩由高到低排序,为啥结果成绩显示不出了?

typedef struct Student { long num; char name[10]; char sex[4]; int age; int score; }StudentType; //命名结构体名 #define Maxsize 100 //宏定义 typedef StudentType DataType; //定义DataType为StudentType typedef struct { DataType List[Maxsize]; //存放数据的数组成员 int size; //记录数组当前个数的成员 }SeqList; //命名结构体名 void ListInitiate(SeqList *L) //初始化函数 { L -> size = 0; //定义初始数据元素个数 } int ListLength(SeqList L) { return L.size; //求数组当前元素个数 } int ListInsert(SeqList *L,int i,DataType x) //在位置参数i(0=<i<=size)前插入数据元素x函数 //插入成功时函数返回1,否则返回0 { int j; if(L -> size >= Maxsize) //程序健壮性 { printf("数组已满,无法插入!\n"); return 0; } else if(i < 0||i > L->size) { printf("位置参数i不合法!\n"); return 0; } else //插入数据元素 { for(j = L->size;j > i;j--) { L -> List[j] = L -> List[j-1]; //位置参数i后的元素向后移一位 } L -> List[i] = x; L -> size++; //当前元素个数加1 return 1; } } int ListGet(SeqList L,int i,DataType *x) //取数组第i位置的函数 //取到的数组的值传入x中,函数返回1时成功取出,返回0时取出失败 { if(i < 0||i > L.size-1) //程序健壮性 { printf("位置参数i不合法!\n"); return 0; } else { *x = L.List[i]; //取出的值放入x的地址中 return 1; } } void ListContrast(StudentType *L,int n) { int i,j,temp; int a[] = {L -> score}; for(i = 0;i < n;i++) { for(j = 0;j < n-1-i;j++) { /*if(L->score[j-1] < L->score[j]) { temp = L->score[j]; L->score[j] = L->score[j-1]; L->score[j-1] = temp; }*/ if(a[j-1] < a[j]) { temp = a[j]; a[j] =a[j-1]; a[j-1] = temp; } } } } ``` #include<stdio.h> #include"SeqList.h" void main(void) { SeqList myList; int i,k; StudentType str; StudentType x[3] = {{2000001,"张三","男",20,66}, {2000002,"李四","男",21,88}, {2000003,"王五","女",22,99}}; ListInitiate(&myList); //调用初始化函数 ListContrast(&str,3); for(i = 0;i < 3;i++) { if(ListInsert(&myList,i,x[i]) == 0) //调用插入函数 { printf("error!\n"); return; } } k = ListLength(myList); //调用求当前长度函数 for(i =0;i < k;i++) { if(ListGet(myList,i,&str) == 0) //调用取值函数 { printf("error!\n"); return; } else { printf("%d %s %s %d\n",str.num,str.name,str.sex,str.age);//输出数据 } } getchar(); getchar(); } ```

用结构体统计成绩(大一初学者水平)

问题描述】有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程10个学生的平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩,平均分数) ,请使用结构体设计学生的数据。 【输入形式】 学号 姓名 成绩1 成绩2 成绩3 学号 姓名 成绩1 成绩2 成绩3 ... 学号 姓名 成绩1 成绩2 成绩3 学号 1 ~ 10, 姓名少于10个汉字,每个字之间不能留空格, 成绩保留小数点后1位数。 【输出形式】 1 平均成绩1 学号 姓名 成绩1 成绩2 成绩3 平均分 2 平均成绩2 学号 姓名 成绩1 成绩2 成绩3 平均分 3 平均成绩3 学号 姓名 成绩1 成绩2 成绩3 平均分 其中 每一门课程由两行信息构成, 第一行是课程信息,包括课程号和该课程的平均成绩,第二行是该门课成绩最高的那位学生的信息,平均分为该学生三门课的成绩平均。 输出的成绩和平均分保留小数点后1位数。输出格式:printf("%d %5.1f\n%5d %s %5.1f %5.1f %5.1f %5.1f\n", 【样例输入】 1 达吾然·木扎帕尔 90 85 89 2 邓艳丽 85 90 87 3 冯文豪 78 89 96 4 付豪 83 83 90 5 高帅 69 82 70 6 谷祥洪 92 83 70 7 郭廷昊 80 79 90 8 黄玉瑶 70 80 93 9 金昌璞 90 60 60 10 罗蒙健 98 69 85 【样例输出】 0 83.5 10 罗蒙健 98.0 69.0 85.0 84.0 1 80.0 2 邓艳丽 85.0 90.0 87.0 87.3 2 83.0 3 冯文豪 78.0 89.0 96.0 87.7 各位大佬请用简单点的知识写,只学到了函数,指针,结构体,后面的的没学过

用c语言编写以下程序:输入十个职员的姓名和工号,并按工号大小进行排序,姓名顺序也随之排序

![图片说明](https://img-ask.csdn.net/upload/201912/15/1576379213_109059.png) `````` //输入10个员工的工号和姓名,并将其以工号大小排序,姓名随之排序 #include<stdio.h> #include<string.h> #define N 3 //为了方便起见输入三个信息来测试代码 struct WORKERS //存放职员的信息 { int num; //工号 char name[20]; //姓名 }worker[N]; void input_(); //输入员工信息 void sort(); //排序 int main() { input_(); sort(); return 0; } void input_() { int i; printf("工号 姓名"); for(i=0;i<N;i++) { scanf("%d %s",&worker[i].num,&worker[i].name); } } void sort() { int i,j; int *ntemp; //储存工号的中间变量 char *stemp; //储存姓名的中间变量 for(i=0;i<N;i++) //冒泡法排序 { for(j=0;j<N-i;j++) { if(worker[j].num>worker[j+1].num) { ntemp=worker[j+1].num; worker[j+1].num=worker[j].num; worker[j].num=ntemp; strcpy(stemp,worker[j+1].name); strcpy(worker[j+1].name,worker[j].name); strcpy(worker[j].name,stemp); } } } for(i=0;i<N;i++) { printf("%d %s\n",worker[i].num,worker[i].name); } } ```这个程序中需要使用结构体,指针等内容,并使用两个函数实现,我的代码中出现了[Error] invalid conversion from 'int' to 'int*' [-fpermissive]这个错误 在测试时出现第三项无法正确输出的错误,如图片所示 已经解决了,以下是正确代码 //输入10个员工的工号和姓名,并将其以工号大小排序,姓名随之排序 #include<stdio.h> #include<string.h> #define N 3 //为了方便起见输入三个信息来测试代码 struct WORKERS //存放职员的信息 { int num; //工号 char name[20]; //姓名 } worker[N]; void input_(); //输入员工信息 void sort(); //排序 int main() { input_(); sort(); return 0; } void input_() { int i; printf("工号 姓名\n"); for (i = 0; i < N; i++) { scanf("%d %s", &worker[i].num, &worker[i].name); } } void sort() { int i, j; int ntemp; //储存工号的中间变量 char *stemp=&worker; //储存姓名的中间变量 printf("排序后员工信息列表\n"); for (i = 0; i < N - 1; i++) //冒泡法排序 { for (j = 0; j < N - i - 1; j++) { if (worker[j].num > worker[j + 1].num) { ntemp = worker[j + 1].num; worker[j + 1].num = worker[j].num; worker[j].num = ntemp; strcpy(stemp, worker[j + 1].name); strcpy(worker[j + 1].name, worker[j].name); strcpy(worker[j].name, stemp); } } } for (i = 0; i < N; i++) { printf("%d %s\n", worker[i].num, worker[i].name); } } ``` ```

设计一个函数,能够对输入的两个学生结构体信息中的成绩按照大小顺序输出。要求使用指针类型的变量进行结构体变量的定义?

设计一个函数,能够对输入的两个学生结构体信息中的成绩按照大小顺序输出。要求使用指针类型的变量进行结构体变量的定义。 解题思路:采用 malloc 函数进行结构体指针变量的定义,并使用 --> 访问成员变量的方式进行结构体变量赋值;比较两个结构体信息中学生的成绩成员变量的大小,按照大小顺序输出。 参考代码: #include "stdio.h" #include "malloc.h" #include "string.h" #define NUM 1 struct STUDENT { char STU_ID[8]; char STU_NAME[10]; int STU_AGE; int STU_SCORE; }; int main(int argc, char* argv[]) { struct STUDENT *stu1 = (struct STUDENT *)malloc(sizeof(struct STUDENT)); stu1->STU_AGE=12; strcpy(stu1->STU_ID,"04120084"); strcpy(stu1->STU_NAME," 张三 "); struct STUDENT *stu2=(struct STUDENT *)malloc(sizeof(struct STUDENT)); stu2->STU_AGE=12; strcpy(stu2->STU_ID,"04120085"); strcpy(stu2->STU_NAME," 李四 "); printf(" 输入学生成绩 \n"); scanf("%d,%d",&(stu1->STU_SCORE),&(stu2->STU_SCORE)); // 学生补充代码 { }//end of 补充代码 printf("%s,%d\n",stu1->STU_NAME,stu1->STU_SCORE); printf("%s,%d\n",stu2->STU_NAME,stu2->STU_SCORE); return 1; }

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

广工操作系统课程设计(文档+代码+可执行文件)

实现作业调度(先来先服务)、进程调度功能(时间片轮转) 实现内存管理功能(连续分配)。 实现文件系统功能(选作) 这些功能要有机地连接起来

Only老K说-爬取妹子图片(简单入门)

安装第三方请求库 requests 被网站禁止了访问 原因是我们是Python过来的 重新给一段 可能还是存在用不了,使用网页的 编写代码 上面注意看匹配内容 User-Agent:请求对象 AppleWebKit:请求内核 Chrome浏览器 //请求网页 import requests import re //正则表达式 就是去不规则的网页里面提取有规律的信息 headers = { 'User-Agent':'存放浏览器里面的' } response = requests.get

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据清洗实战入门

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

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

apache-jmeter-5.1.1(Requires Java 8+).zip

。Apache JMeter 5.1.1 (Requires Java 8+),需要jdk8以上的版本。

数通HCNP中文理论全套教材.rar

内涵HCNP-IENP中文理论书-内文,

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

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

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

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

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

微信公众平台开发入门

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

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

专为程序员设计的数学课

<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

DDR5_Draft_Spec_Rev05c.pdf

DDR5 spec

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

前言: 说在前面, 面试题是根据一些朋友去面试提供的,再就是从网上整理了一些。 先更新50道,下一波吧后面的也更出来。 求赞求关注!! 废话也不多说,现在就来看看有哪些面试题 1、面向对象的特点有哪些? 抽象、继承、封装、多态。 2、接口和抽象类有什么联系和区别? 3、重载和重写有什么区别? 4、java有哪些基本数据类型? 5、数组有没有length()方法?String有没有length()方法? 数组没有length()方法,它有length属性。 String有length()方法。 集合求长度用

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

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

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

相关热词 c#中如何设置提交按钮 c#帮助怎么用 c# 读取合并单元格的值 c#带阻程序 c# 替换span内容 c# rpc c#控制台点阵字输出 c#do while循环 c#调用dll多线程 c#找出两个集合不同的
立即提问