1.编写一个函数print,打印一个学生的成绩数组,该数组中5个学生的记录,每个记录包括num、name、score[3],用主函数输入这些记录,用print函数输出这些记录。
#include<stdio.h>
#define NAME_LEN 20
#define N 5
struct record
{
int num;
char name[NAME_LEN+1];
char score[3];
}student[N];
void print(void);
int main(void)
{
int i;
for(i=0;i<N;i++)
{
printf("Enter student num:");//输入学生学号
scanf("%d",&student[i].num);
printf("Enter student name:");
scanf("%s",&student[i].name);
printf("Enter student score:");
scanf("%d",&student[i].score);
printf("/n");
}
print();
}
void print(void)
{
int i;
printf("Student num/tStudent name/tStudent score/n");
for(i=0;i<N;i++)
{
printf("/t%d/t/t%s/t/t%d/n",student[i].num,student[i].name,student[i].score);
}
}
2.在上题的基础上,编写一个函数input,用来输入5个学生的数据记录。
#include<stdio.h>
#define NAME_LEN 20
#define N 5
struct record
{
int num;
char name[NAME_LEN+1];
char score[3];
}student[N];
void input(void);
void print(void);
int main(void)
{
input();
print();
}
void input(void)
{
int i;
for(i=0;i<N;i++)
{
printf("Enter student num:");//输入学生学号
scanf("%d",&student[i].num);
printf("Enter student name:");
scanf("%s",&student[i].name);
printf("Enter student score:");
scanf("%d",&student[i].score);
printf("/n");
}
}
void print(void)
{
int i;
printf("Student num/tStudent name/tStudent score/n");
for(i=0;i<N;i++)
{
printf("/t%d/t/t%s/t/t%d/n",student[i].num,student[i].name,student[i].score);
}
}
3.有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)。
#include<stdio.h>
#define NAME_LEN 20
#define N 3
struct record
{
int num;
char name[NAME_LEN+1];
int score[3];
int ave;//平均成绩
}student[N];
void input(void);
void print(void);
int main(void)
{
int i;
int max=0;
input();//输入数据
for(i=0;i<N;i++)//求每个学生的平均值
student[i].ave=(student[i].score[0]+student[i].score[1]+student[i].score[2])/3;
for(i=1;i<N;i++)
if(max<student[i].ave)
max=i;
print();
printf("The highest score is:/nThe student's num is:%d/nname is:%s/nscore are:%d %d %d/naverage score is:%d/n"
,student[max].num,student[max].name,student[max].score[0],student[max].score[1],student[max].score[2],student[max].ave);
}
void input(void)
{
int i;
for(i=0;i<N;i++)
{
printf("Enter student num:");//输入学生学号
scanf("%d",&student[i].num);
printf("Enter student name:");
scanf("%s",&student[i].name);
printf("Enter student score:");
scanf("%d%d%d",&student[i].score[0],&student[i].score[1],&student[i].score[2]);
printf("/n");
}
}
void print(void)
{
int i;
printf("Student num/tStudent name/tStudent score/tStudent average/n");
for(i=0;i<N;i++)
{
printf("/t%d/t/t%s/t%d %d %d/t%d/n",student[i].num,student[i].name,student[i].score[0],student[i].score[1],
student[i].score[1],student[i].ave);
}
printf("The highest score is:");
}
4.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。
算法思想:用辗转相除法求最大公约数,最小公倍数=uv/最大公约数。
#include<stdio.h>
int hcf(int u,int v);
int icd(int u,int v);
int main(void)
{
int u,v;
printf("Enter two number:");
scanf("%d%d",&u,&v);
printf("The hcf of %d and %d is:%d/n",u,v,hcf(u,v));
printf("The icd of %d and %d is:%d/n",u,v,icd(u,v));
return 0;
}
int hcf(int u,int v)
{
int r=u%v,temp;
if(u<v)//使得u>v
{
temp=u;
u=v;
v=temp;
}
if(u%v==0)
return v;
else
return hcf(v,u%v);//使用递归的方法实现求最大公约数
}
int icd(int u,int v)
{
return u*v/hcf(u,v);
}