一个程序通常围绕这两个方面进行:数据存储和数据操作;
为来安等地区用户提供了全套网页设计制作服务,及来安网站建设行业解决方案。主营业务为成都网站建设、网站建设、来安网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
结构体是一种数据类型,用来将不同类型的数据组合在一起,决定数据的存储问题(比如在内存占多大的空间来,系统怎么解释存储数据的位数据啦等等)同int, double 等编译器内置的数据类型基本相同,只不过结构体是用户自己定义的数据类型而已,例如:
struct student
{
char name[20];
int NO;
};
函数是对数据的一种操作;
我在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;
}
#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;
}
如果在结构体定义时,或定义后取了别名,可以用别名,否则不能省“struct”
如:typedef
struct
Teacher
TEACHER;
则可以用TEACHER
代替struct
Teacher
C语言的结构体没有存取控制权限,相当于C++存取控制权限中的public:
追问:
那struct
Teacher
*creat(struct
Teacher
*head);
和Teacher
*creat(struct
Teacher
*head);
一样吗?如果不一样的话有什么区别呢?
追答:
是一样的,struct
Teacher
和Teacher只是同一东西的两种不同写法。
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