c语言结构体与函数 c语言结构体构造函数

C语言——结构体/函数#include stdio.h
#include string.h
#define N (5)
struct STUDENT
{
char name[20];
int age;
float chinese,math;
};
void scan(struct STUDENT *a,int n);
void print(struct STUDENT *a,int n);
void sort(void *a,int n,int size,int (*cmp)(void *,void *));
int cmp_score(void *a,void *b);
int cmp_chinese(void *a,void *b);
int cmp_name(void *a,void *b);
int main()
{
struct STUDENT a[N];
int i;
scan(a,N);
sort(a,N,sizeof(*a),cmp_score);
print(a,N);
sort(a,N,sizeof(*a),cmp_chinese);
print(a,N);
sort(a,N,sizeof(*a),cmp_name);
print(a,N);
return 0;
}
void scan(struct STUDENT *a,int n)
{
int i;
for(i=0;in;i)
{
scanf("\n%s %d %f %f",a[i].name,a[i].age,a[i].chinese,a[i].math);
}
}
void print(struct STUDENT *a,int n)
{
int i;
for(i=0;in;i)
{
printf("%s %d %f %f\n",a[i].name,a[i].age,a[i].chinese,a[i].math);
}
}
void sort(void *a,int n,int size,int (*cmp)(void *,void *))
{
int i,j;
void *t=malloc(size);
for(i=0;in-1;i)
{
for(j=0;jn-i-1;j)
{
if(cmp(a size*j,a size*(j 1)))
{
memcpy(t,a size*j,size);
memcpy(a size*j,a size*(j 1),size);
memcpy(a size*(j 1),t,size);
}
}
}
free(t);
}
int cmp_score(void *a,void *b)
{
return ((struct STUDENT *)a)-chinese ((struct STUDENT *)a)-math((struct STUDENT *)b)-chinese ((struct STUDENT *)b)-math;
}
int cmp_chinese(void *a,void *b)
{
return ((struct STUDENT *)a)-chinese((struct STUDENT *)b)-chinese;
}
int cmp_name(void *a,void *b)
{
return strcmp(((struct STUDENT *)a)-name,((struct STUDENT *)b)-name)0;
}
在c语言中 函数和结构体的区别C语言中结构体和函数有着本质上的不同 。
结构体是用户自己定义的一中数据类型,比如说你想要把学生信息作为一个整体存放在一个数据类型中,可以定义结构体,其中某个成员存放学号 , 某个存放姓名等等 。
但是函数就完全不同了,函数是为了实现某种功能,比如你要在一堆学生中寻找某一个学生可以用函数来实现 。
C语言结构体类型函数void f(Ac)/*注意:c结构变量名但这个c也是个复制品,与原实参只是一样的内容,却不是同一个?。?*/所以结果还是a={1,2}; 答案为B
c语言中兄弟们 , 结构体类型可以用做函数类型什么意思?结构体类型作为函数类型 , 表示函数返回一个结构体对象 。
这里sum拼写错误,应该是大写Sum 。
C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称 , 来替代系统默认的基本类型名称、数组类型名称、指针类型名称与用户自定义的结构型名称、共用型名称、枚举型名称等 。一旦用户在程序中定义了自己的数据类型名称,就可以在该程序中用自己的数据类型名称来定义变量的类型、数组的类型、指针变量的类型与函数的类型等 。
c语言结构体与函数结合使用我在VC6里面运行了一下主要有一下的错误
1,首先,汉字“男”这个是一个字符串,所以必须占三个字节也就是 char sex[3];才可以记住,字符串以‘\0’结尾哦!你没有算\0
2,就是你丢了好几个(逗号),自己找下
4,,再次你的struct test后的k[5]只能说是声明了一个变量 , 但是变量的初始化必须在main 内进行,但是又牵扯到了字符赋值的问题!这个可能你没太深入去学!额错误有点多,我给你改了下,你自己在仔细找找哪里有错误吧!
#includestdio.h
struct test
{
int kaohao;
char name[10];
char sex[3];
int age;
float chengji;
};
void best(test k[5])
{
int i=0;
float max=0;
struct test maxs;
for(;i5;i)
if(k[i].chengjimax)
{
max=k[i].chengji;
maxs=k[i];
}
printf("最高成绩的人是:%s\n成绩为%f\n",maxs.name,maxs.chengji);
}
int main()
{
struct test k[5]={//要是.c文件的话就必须注明声明变量!你之前的声明也可以声明
//k[5]变量但是不能在拿来初始化!总的来说你写的还挺不错的!
//继续加油?。?
{1101,"张三","男",19,68.5},
{1102,"李四","男",20,75},
{1103,"王五","女",18,80.5},
{1104,"孙六","女",18,90},
{1105,"周七","男",19,59}};
best(k);
return 0;
}
c语言中 , 如何在结构体中实现函数的功能?c语言的结构体是一组数据的组合,并不是简单的单一类型 。所以在查找和输出的时候,均不能直接操作 , 而是要进行变通 。
1
查找 。
对于以某一项为关键字进行查找时,比如在结构体中有int型的成员a,要查找a为100的结构体变量 , 这时需要遍历每个结构体(数组、链表、或者其它任意形式),对每个元素的成员a值进行比较,符合的则表示查找成功 。
对于结构体中元素较多,同时要对整个结构体每个元素都匹配才算查找到的特殊情况 , 可以使用memcmp的方式,整体进行比较,以减少代码量 。不过这种情况较为少见,不过多描述 。
2
输出 。
对于结构体的输出,其实就是对其每一项 , 或者若干项成员变量的输出 。
所以可以使用基本的输出函数,对每一项单独输出,输出中为了方便阅读,可以加一些说明文字 。
如果对结构体输出有多处调用的需求,可以在将该功能封装为函数,供各个需要的函数调用 。这样的好处是,当结构体的成员出现变化,或者结构体输出要求更改时 , 修改一处代码即可完成所有的输出修改,实现易于维护的效果 。
【c语言结构体与函数 c语言结构体构造函数】关于c语言结构体与函数和c语言结构体构造函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读