c语言结构体及函数 c语言结构体函数定义

在c语言中 函数和结构体的区别

一个程序通常围绕这两个方面进行:数据存储和数据操作;

创新互联始终致力于在企业网站建设领域发展。秉承“创新、求实、诚信、拼搏”的企业精神,致力为企业提供全面的网络宣传与技术应用整体策划方案,为企业提供包括“网站建设、响应式网站设计、手机网站建设、微信网站建设、成都小程序开发、商城网站建设、平台网站建设秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

结构体是一种数据类型,用来将不同类型的数据组合在一起,决定数据的存储问题(比如在内存占多大的空间来,系统怎么解释存储数据的位数据啦等等)同int, double 等编译器内置的数据类型基本相同,只不过结构体是用户自己定义的数据类型而已,例如:

struct student

char name[20];

int NO;

};

函数是对数据的一种操作;

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语言结构体函数

STU  f (STU  a)

{  STU  b={"Zhao", 'm', 85, 90};

int  i;

strcpy( a.name, b.name );

a.sex = b.sex;

for ( i=0; i2; i++ )  a.score[i] = b.score[i];

以上是将b中的数据赋值给a,相当于a=b;这样的一个操作

return  a; 

}

main()

{  STU  c= { "Qian", 'f', 95, 92 }, d;

d = f(c);//这里传的c是个复制品(传递的不是结构体指针),所以c不会变,d接收f()函数的返回值,因为返回值的内容是f()中的b的值,所以,d与c不同

printf ("%s,%c,%d,%d, ", d.name, d.sex, d.score[0], d.score[1]);

printf ("%s,%c,%d,%d\n", c.name, c.sex, c.score[0], c.score[1]);

}

输出结果为:A)  Zhao,m,85,90, Qian,f,95,92

C语言结构体及函数问题

没分啊,我就不具体看了,给你个慢慢看吧

#includestdio.h

#includestring.h

#includestdlib.h

struct stu

{

int num;

int wuli;

int huaxue;

int math;

};

FILE *fp;

//添加学生信息,可以排除与已存的冲突;

void add()

{

int a,b,c,d,n=0;

struct stu student;

fp=fopen("score.txt","r+");

printf("请输入要添加学生的学号、物理成绩、化学成绩及数学成绩\n");

scanf("%d%d%d%d",student.num,student.wuli,student.huaxue,student.math);

while(!feof(fp))

{

fscanf(fp,"%d%d%d%d",a,b,c,d);

if(student.num==a)

{

printf("该学生信息已存在,不需要添加\n");

fclose(fp);

n=1;

break;

}

}

if(n==0)

{

printf("信息库中没有该学生信息,可以添加\n");

fseek(fp,0,2);//文件末尾添加;

fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);

fclose(fp);

}

}

//修改学生信息;

void modify()

{

int n=0,number,a,b,c,d,offset;

struct stu student;

fp=fopen("score.txt","r+");

if(fp==NULL)

{

printf("信息库为空\n");

exit(0);

}

printf("请输入要修改学生的学号\n");

scanf("%d",number);

while(!feof(fp))

{

offset=ftell(fp);

fscanf(fp,"%d%d%d%d",a,b,c,d);

if(number==a)

{

printf("该学生信息为:\n");

printf("%d\t%d\t%d\t%d\n",a,b,c,d);

printf("请输入要修改的信息\n");

scanf("%d%d%d%d",student.num,student.wuli,student.huaxue,student.math);

fseek(fp,offset,0);

fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);

n=1;

break;

}

}

if(n==0)

{

printf("该学生信息不存在\n");

}

fclose(fp);

}

//删除学生信息;

void del()

{

int n=0,number,a,b,c,d,m,offset;

fp=fopen("score.txt","r+");

if(fp==NULL)

{

printf("信息库为空\n");

exit(0);

}

printf("请输入删除学生的学号\n");

scanf("%d",number);

while(!feof(fp))

{

offset=ftell(fp);

fscanf(fp,"%d%d%d%d",a,b,c,d);

if(number==a)

{

printf("该学生信息为:\n");

printf("%d\t%d\t%d\t%d\n",a,b,c,d);

printf("是否要删除该学生信息,是:1 ;否:0\n");

scanf("%d",m);

if(m)

{

fseek(fp,offset,0);

fprintf(fp,"%s\t%s\t%s\t%s"," "," "," "," ");

printf("\n");

printf("该学生信息已删除\n");

}

else printf("您已放弃删除该学生信息\n");

n=1;

break;

}

}

if(n==0)

{

printf("该学生信息不存在\n");

}

fclose(fp);

}

//查找学生信息;

void search()

{

int n=0,number,a,b,c,d,m;

char s[10];

fp=fopen("score.txt","r+");

if(fp==NULL)

{

printf("信息库为空\n");

exit(0);

}

printf("请选择查找方式:1--按学号查找;0--按学科查找\n");

scanf("%d",m);

if(m)

{

printf("请输入要查找学生的学号\n");

scanf("%d",number);

while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)

{

if(number==a)

{

printf("已找到,该学生信息为:\n");

printf("%s %s %s %s\n","学号","物理成绩","化学成绩","数学成绩");

printf("%d\t %d\t %d\t %d\n",a,b,c,d);

n=1;

break;

}

}

if(n==0)

{

printf("该学生信息不存在\n");

}

fclose(fp);

}

else

{

printf("请输入要查找的学科\n");

scanf("%s",s);

if(strcmp(s,"wuli")==0)

{

printf("学号\t物理成绩\n");

while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)

printf("%d\t%d\n",a,b);

fclose(fp);

}

if(strcmp(s,"huaxue")==0)

{

printf("学号\t化学成绩\n");

while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)

printf("%d\t%d\n",a,c);

fclose(fp);

}

if(strcmp(s,"math")==0)

{

printf("学号\t数学成绩\n");

while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)

printf("%d\t%d\n",a,d);

fclose(fp);

}

if(strcmp(s,"wuli")strcmp(s,"huaxue")strcmp(s,"math") )

{

printf("错误,要查找的学科不存在\n");

fclose(fp);

}

}

}

//统计学生信息;

void tongji()

{

int n=0,a,b,c,d,m,k,x[100],i,j,l=1;

float sum=0,h[100],k1;

fp=fopen("score.txt","r+");

if(fp==NULL)

{

printf("信息库为空\n");

exit(0);

}

printf("0--统计单科平均成绩\n");

printf("1--统计单个学生的平均成绩和总成绩,对学生排名\n");

printf("请选择统计类型\n");

scanf("%d",m);

if(!m)

{

printf("1--统计物理的平均成绩\n");

printf("2--统计化学的平均成绩\n");

printf("3--统计数学的平均成绩\n");

printf("请选择要统计的学科\n");

scanf("%d",m);

if(m==1)

{

while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)

{

sum=sum+b;

n++;

}

printf("物理的平均成绩为 %2.2f\n",sum/n);

fclose(fp);

}

if(m==2)

{

while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)

{

sum=sum+c;

n++;

}

printf("化学的平均成绩为 %.2f\n",sum/n);

fclose(fp);

}

if(m==3)

{

while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)

{

sum=sum+d;

n++;

}

printf("数学的平均成绩为 %.2f\n",sum/n);

fclose(fp);

}

}

else

{

while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)

{

h[n]=(float)(b+c+d);

x[n]=a;

n++;

}

for(i=0;l==1in-1;i++)

{

l=0;

for(j=0;jn-1-i;j++)

{

if(h[j]h[j+1])

{

k1=h[j];

h[j]=h[j+1];

h[j+1]=k1;

k=x[j];

x[j]=x[j+1];

x[j+1]=k;

l=1;

}

}

}

printf("排序后\n");

printf("学号\t总成绩\t平均成绩\n");

for(i=0;in;i++)

printf("%d\t%3.0f\t%.2f\n",x[i],h[i],h[i]/3.0);

}

fclose(fp);

}

void main()

{

int m;

/*fp=fopen("score.txt","w");

fprintf(fp,"%s\t%s\t%s\t%s\n","学号","物理成绩","化学成绩","数学成绩");

fclose(fp);*/

while(1)

{

printf("\n\t\t*********欢迎使用学生信息管理系统*********\n\n");

printf("\n\t\t添加,请按1");

printf("\n\t\t修改,请按2");

printf("\n\t\t删除,请按3");

printf("\n\t\t查询,请按4");

printf("\n\t\t统计,请按5");

printf("\n\t\t退出,请按0\n");

printf("\n\t\t********************************************\n\n");

printf("Please select(0--5):");

scanf("%d",m);

if(m=0m=5)

{

switch(m)

{

case 1: add();

break;

case 2: modify();

break;

case 3: del();

break;

case 4: search();

break;

case 5: tongji();

break;

case 0: exit(0);

}

printf("\n\n操作完毕,请再次选择!");

}

else

printf("\n\n选择错误,请再次选择!");

}

}

C语言结构体类型函数

void f(A c) /* 注意:c结构变量名 但这个c也是个复制品,与原实参只是一样的内容,却不是同一个!! */ 所以结果还是a={1,2}; 答案为B


标题名称:c语言结构体及函数 c语言结构体函数定义
当前链接:http://ybzwz.com/article/doogcsh.html