有3名学生,每个学生信息包含学号、姓名、数学成绩、英语成绩、C语言成绩和三门课程的总分。编写一个程序,对学生的各项数据进行输入、计算每个学生三门课的总分并输出。
#include <stdio.h>
#include <string.h>
#define N 3 //学生总人数
#define M 3 //每个学生的课程数
struct Student
{ int num;
char name[20];
float score[3];
float total;
} stu[N];
main()
{ int i,j;
for(i=0;i<N;i++) //控制学生人数
{ stu[i].total=0; //每个学生课程的总分初值为0
printf("input the data of student %d:\n",i);
printf("NO.:");
scanf("%d",&stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<M;j++) //控制课程门数
{
printf("score %d:",j);
scanf("%f",&stu[i].score[j]);
stu[i].total+=stu[i].score[j];
}
printf("第%d个学生的总分为%f\n",i,stu[i].total);
}
}
#include<stdio.h>
#include<math.h>
struct Point
{ float x;
float y;
} p[2];
main()
{ int i;
for(i=0;i<2;i++)
{ printf("请输入第%d个坐标的x和y的值:\n",i);
scanf("%f%f",&p[i].x,&p[i].y);
}
printf("两个点的中点坐标为:\n");
printf("%0.2f,%0.2f\n",(p[0].x+p[1].x)/2,(p[0].y+p[1].y)/2);
printf("两点间的距离为:%4.2f\n",sqrt(pow((p[1].x-p[0].x),2)+pow((p[1].y-p[0].y),2)));
}
某唱歌比赛决赛有5名选手入围,共有六位评委分别给每位选手打分;对每个选手,去掉一个最高分和一个最低分后,取剩余的四个得分的平均值作为该选手的最后得分;编程实现按选手最后得分的降序排列,依此输出选手的名次、参赛编号、姓名以及最后得分。
#include<stdio.h>
#include<string.h>
struct Player
{ int num;
char name[20];
float score[6];
float lastscore;
} a[5],t;
main()
{ int i,j,k;
float max,min;
for(i=0;i<5;i++) //输入选手的各项数据
{ printf("请输入第%d个选手的编号和姓名:\n",i+1);
scanf("%d%s",&a[i].num,a[i].name);
printf("请输入六个评委对第%d个选手%s的打分:\n",i+1,a[i].name);
max=-1;min=-1;
for(j=0;j<6;j++)
{ scanf("%f",&a[i].score[j]);
if(max<a[i].score[j]) max=a[i].score[j]; //找出每位选手的最高、最低分
if(min>a[i].score[j]) min=a[i].score[j];
a[i].lastscore+=a[i].score[j];
}
a[i].lastscore=(a[i].lastscore-max-min)/4; //计算第i位选手的最后得分
}
for(i=0;i<5;i++) //排名
{ k=i;
for(j=i+1;j<5;j++)
if(a[k].lastscore<a[j].lastscore)
k=j;
t=a[i];a[i]=a[k];a[k]=t;
}
printf("各位选手排名信息如下:\n");
for(i=0;i<5;i++)
printf("\n第%d名:编号:%2d,姓名:%s,最终得分:%3.2f",i+1,a[i].num,a[i].name,a[i].lastscore);
}
程序的功能是构造一个如下图所示的三个结点的单向静态链表,并顺序输出链表中结点的数据。阅读、输入、编译、连接,运行并观察结果。体会构造和使用静态链表的方法。
#include <stdio.h>
struct node
{ int data;
struct node *next; /* 指向本结点类型的指针是实现链表的基础 */
};
main()
{ struct node a,b,c,*h,*p; /* 定义三个结点 h是头指针*/
a.data=10; b.data=20; c.data=30; /* 结点的数据赋值 */
h=&a; /* 头指针指向a结点 */
a.next=&b; /* a结点的指针指向b结点 */
b.next=&c; /* b结点的指针指向c结点 */
c.next=NULL; /* c结点的指针值为空,表示最后一个结点 */
p=h; /* 遍历每一个结点,打印数据 */
while (p)
{ printf("%d\n ",p->data);
p=p->next; /* 指针移到下一个结点 */
}
}
程序的功能是构造一个如下图所示的三个结点的单向动态链表,并输出链表中相关结点的数据之和。阅读、输入、编译、连接,运行并观察结果。体会构造和使用动态链表的方法。
#include<stdio.h>
#include<stdlib.h>
struct node
{ int num;
struct node *next;
};
main()
{ struct node *p1,*p2,*p3;
p1=(struct node *) malloc(sizeof(struct node));
p2=(struct node *) malloc(sizeof(struct node));
p3=(struct node *) malloc(sizeof(struct node));
p1->num=1;p2->num=2;p3->num=3;
p1->next=p2;p2->next=p3;
printf("%d\n",p1->num+p1->next->num);
}
以下程序的功能是:构造一个如下图所示的三个结点的单向动态链表,并输出链表中各个结点的num成员的值。
#include <stdio.h>
#include<stdlib.h>
struct node
{ int num;
struct node *next;
}*p[4],*head;
main()
{ int i;
for(i=0;i<3;i++)
p[i]=(struct node*)malloc(sizeof(struct node));
p[i]=NULL;
head=p[0]->num;
for(i=0;i<3;i++)
{ p[i]->num=i; //为各个结点的num成员赋值
p[i]->next=p[i+1];
printf("p[%d]->num=%d\n",i,p[i]->num);
}
}