利用下面的一段程序,做一个c语言的小归纳吧,基本把数组,循环,指针,指针数组,结构体,结构体指针变量都结合起来了。程序的功能点是通过键盘录入学生的个人信息:年龄,成绩和姓名,然后将其个人信息按照成绩的升序打印学生的个人信息。
第一种:
#include <stdio.h>
#include <malloc.h>
struct student
{
int age;
float score;
char name[100];
};
int main(void)
{
int len; //定义结数组长度
struct student *pArr; //定义结构体指针变量
int i;
struct student t; //交换结构体变量的t也需要定义成结构体变量
printf("请输入数组长度:\nlen=");
scanf("%d",&len);
pArr=(struct student *)malloc(sizeof(struct student )*len); //定义动态数组
for(i=0;i<len;i++)
{
printf("请输入第%d个学生的个人信息:\n",i+1); //数组从0开始,而我们的学生信息从1开始
printf("age=");
scanf("%d",&pArr[i].age);
printf("score=");
scanf("%f",&(*(pArr+i)).score);
printf("name=");
scanf("%s",(pArr+i)->name); //不需要加“&”,因为pArr[i].name为int*类型
//
}
for(i=0;i<len-1;i++) //最外层for:冒泡排序,需要比较len-1次
{
for(i=0;i<len-i-1;i++)
{
if(pArr[i].score>pArr[i+1].score) //注意,这里不能写成pArr[i]>pArr[i+1],结构体变量之间不能进行大小比较
{
t=pArr[i]; //注意,这里不能写成pArr[i].score>pArr[i+1].score,是交换结构体之间的位置,而不是交换它们的成绩
pArr[i]=pArr[i+1];
pArr[i=1]=t;
}
}
}
printf("\n=============================\n");
printf("个人信息表(按成绩升序排名):\n\n");
for(i=0;i<len;i++)
{
printf("第%d个学生的信息:\nage=%d,score=%f,name=%s\n",i+1,pArr[i].age,pArr[i].score,pArr[i].name);
}
printf("\n=============================\n");
return 0;
}
第二种(添加了函数)
#include <stdio.h>
#include <malloc.h>
struct student
{
int age;
float score;
char name[100];
};
void inputpArr(struct student *pArr,int len) //这里不能定义成int *pArr,因为传入函数的是结构体变量第一个字节的地址,所以需要定义成struct student *类型
{
for(int i=0;i<len;i++)
{
printf("请输入第%d个学生的个人信息:\n",i+1);
printf("age=");
scanf("%d",&pArr[i].age);
printf("score=");
scanf("%f",&(*(pArr+i)).score);
printf("name=");
scanf("%s",(pArr+i)->name); //不需要加“&”,因为pArr[i].name为int*类型
//
}
}
void outpurtpArr(struct student *pArr,int len)
{
printf("\n=============================\n");
printf("个人信息表(按成绩升序排名):\n\n");
for(int i=0;i<len;i++)
{
printf("第%d个学生的信息:\nage=%d,score=%f,name=%s\n",i+1,pArr[i].age,pArr[i].score,pArr[i].name);
}
printf("\n=============================\n");
}
int main(void)
{
int len;
struct student *pArr;
int i;
struct student t;
printf("请输入数组长度:\nlen=");
scanf("%d",&len);
pArr=(struct student *)malloc(sizeof(struct student )*len);
inputpArr(pArr,len);
for(i=0;i<len-1;i++)
{
for(i=0;i<len-i-1;i++)
{
if(pArr[i].score>pArr[i+1].score)
{
t=pArr[i];
pArr[i]=pArr[i+1];
pArr[i=1]=t;
}
}
}
outpurtpArr(pArr,len);
return 0;
}
总体来说,对上面两段代码还是理解了,希望自己能够牢记知识点。