最近快要期末考试了,也没什么特别多时间去学习新的知识,只能好好复习一些学过的知识并加以运用。
下面是一些实例(根据从易到难的顺序排列):
1.定义5个学生结构体类型(姓名、学号、三门课的成绩(高数、英语、C语言)、平均分);输入该生的上述信息并输出。
#include <stdio.h>
typedef struct student
{
char name[20];
int id;
int score[3];
float aver;
}STUDENT;
void Input(STUDENT *p)
{
scanf("%s%d%d%d%d",&p->name,&p->id,&p->score[0],&p->score[1],&p->score[2]);
p->aver=(p->score[0]+p->score[1]+p->score[2])/3.0;
}
int main()
{
STUDENT st;
printf("请输入姓名,学号,三门课成绩:\n");
Input(&st);
printf("该学生的信息为:\n");
printf("%s\t%d\t%d\t%d\t%d\t%5.2f\n",st.name,st.id,st.score[0],st.score[1],st.score[2],st.aver);
return 0;
}
2.用结构体数组存储学生信息,每个学生有姓名、学号、性别和成绩。输入5名学生信息,按成绩从高到低的顺序输出各学生的全部信息,并将学生信息存入磁盘文件student.txt。
#include <stdio.h>
#include <stdlib.h>
#define N 5
struct student
{
char name[20];
int id;
char sex[8];
int s;
};
void Input(struct student st[])
{
int i;
for(i=0;i<5;i++)
scanf("%s%d%s%d",st[i].name,&st[i].id,st[i].sex,&st[i].s);
}
void change(struct student st[])
{
int i,j,k;
struct student t;
for(i=0;i<5-1;i++)
{
k=i;
for(j=i+1;j<5;j++)
if(st[k].s<st[j].s)
k=j;
if(k!=i)
{
t=st[k];
st[k]=st[i];
st[i]=t;
k=1;
}
}
}
int main()
{
FILE *fp;
int i;
struct student st[N];
printf("请输入学生的姓名,学号,性别,成绩:\n");
fp=fopen("student.txt","wt");
Input(st);
change(st);
printf("五人的信息为:\n");
for(i=0;i<5;i++)
printf("%s\t%d\t%s\t%d\n",st[i].name,st[i].id,st[i].sex,st[i].s);
for(i=0;i<5;i++)
fprintf(fp,"%s\t%d\t%s\t%d\n",st[i].name,st[i].id,st[i].sex,st[i].s);
fclose(fp);
fp=fopen("student.txt","rt");
fclose(fp);
return 0;
}
注意:在交换数据时,我在第一次打代码时遇到了一个很常见的问题。就是在通过成绩比较时,只交换了成绩而其余信息并未被交换,导致数据错乱。所以在交换时应交换整个结构体数组,而不是只交换数组中的某一项。
3.建立班级通讯录,每个人的信息形式如下:
姓名 性别 手机 QQ 班级 宿舍
zhangsan 男 13300001111 23784987223 网络1803 1-101
lisi 男 17711110000 43223445344 计科1801 1-203
liqingzhao 女 18991902100 98234523121 计科1802 2-305
wangwu 男 13305782314 52390823349 网络1804 1-603
要求从键盘读入学生信息,并按姓名排序,再将学生信息存入磁盘文件student_list.txt。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 20
struct student
{
char name[20];
char sex[5];
char qq[15];
char number[15];
char clas[20];
char sushe[20];
};
int main()
{
FILE *fp;
struct student t;
struct student txl[N];
int i,n,j;
printf("请输入学生人数:\n");
scanf("%d",&n);
printf("请输入这几个学生的通讯信息并将这几个学生的通讯信息录入文件'student_list.txt'中\n");
printf("(请按照 姓名、性别、手机、qq、班级、宿舍号的顺序写~)\n");
for(i=0;i<n;i++)
{
scanf("%s%s%s%s%s%s",&txl[i].name,&txl[i].sex,&txl[i].number,&txl[i].qq,&txl[i].clas,&txl[i].sushe);
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if (strcmp(txl[j].name,txl[j+1].name)>0)
{
t=txl[j];
txl[j]=txl[j+1];
txl[j+1]=t;
}
}
}
fp=fopen("student_list.txt","w");
for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %s %s %s %s\n",txl[i].name,txl[i].sex,txl[i].number,txl[i].qq,txl[i].clas,txl[i].sushe);
}
fclose(fp);
printf("文件数据已经保存在相关文件夹中!请前往查看!\n");
return 0;
}
注意:在根据姓名排序时,不能直接用“<、>、=”进行比较,而应该运用strcmp()函数进行比较。
谢谢阅读 ~~如有不妥,请多指正!