结构

来源:互联网 发布:怎样更改公用网络 编辑:程序博客网 时间:2024/04/30 06:59

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);
}

原创粉丝点击