本人C语言现已学习到文件
本次所取习题来源于:教材(我支持版权的喔)
题目一
1,用结构体类型编写一个程序,输入n个学生的高等数学、英语和C语言三门课程的成绩,然后计算平均分数并输出。
我的答案如下:
#include <stdio.h>
typedef struct
{
float Math;
float English;
float C;
}test;
float fun1(test*q,int a);
main()
{
int n,i,j;
printf("please input how many people\nThen please input their three clase scores\n");
scanf("%d\n",&n);
test groups[n];
for(i=0;i<n;i++)
{
scanf("%f",&groups[i].Math);
scanf("%f",&groups[i].English);
scanf("%f",&groups[i].C);
putchar('\n');
}
fun1(groups,n);
}
float fun1(test*q,int a)
{
float b[a];
int i,j=0;
for(i=0;i<a;i++)
b[j++]=q[i].Math+q[i].English+q[i].C;
for(i=0;i<a;i++)
b[i]/=3;
for(i=0;i<a;i++)
printf("The NO.%d whose average scores is %.2f\n",i+1,b[i]);
}
这里用到了一个结构体和结构体指针,看起来还是挺简单的,先将数据输入进去,然后利用指针的指向,将每组的所有成绩都加起来,再算一下平均分最后扔进数组里面。一道程序就完成了。尽管我不知道算这个每个人的平均分有什么用呢?一开始,我算的是每个科目的平均分,算完后才被告知不是这样只滴。
题目二
2,用结构体类型编写一个程序,输入n个客户的姓名和电话号码,然后按姓名的字典顺序排列后顺序输出。
我的答案如下:
#include <stdio.h>
#include <string.h>
typedef struct people
{
char name[30];
char phone[30];
}human;
float fun1(human*q,int a);
main()
{
int n,i,j;
printf("please input how many people\nThen,please input their name and phone\n");
scanf("%d\n",&n);
human groups[n];
for(i=0;i<n;i++)
{
gets(groups[i].name);
gets(groups[i].phone);
putchar('\n');
}
fun1(groups,n);
}
float fun1(human*q,int a)
{
int i,j;
human swap;
for(i=0;i<a-1;i++)
for(j=i+1;j<a;j++)
if(strcmp(q[i].name,q[j].name)>0)
{
swap=q[i];
q[i]=q[j];
q[j]=swap;
}
printf("Have been swapped\n");
for(i=0;i<a;i++)
printf("The NO.%d whose name are %s and phone are %s\n",i+1,q[i].name,q[i].phone);
}
这里的strcmp我们之前已经用过啦,这里就不在重复了。一开始我还在想中文的姓氏怎么排列呢,想想还是自己想多了。毕竟软件都是英文的啊。
这个题目还是简单的这里就不在讲解了呀。
我这里用了一个选择排序,但在课堂上老师说我这个选择排序有点老式了,让我换个新式的,我就换了一下,像这样。
小片段:
for(i=0;i<a-1;i++)
{
h=i;
for(j=i+1;j<a;j++)
if(strcmp(q[i].name,q[j].name)>0)
h=j;
if(i!=h)
{
swap=q[i];
q[i]=q[h];
q[h]=swap;
}
}
这里是先找到最小的,然后再进行交换,相比于上面的一小一交换还是省了不少时间吧。