【问题描述】
从键盘输入5名学生的信息,包含学号、姓名、数学成绩、英语成绩、C语言成绩,求每个学生3门课程的总分,输出总分最高和最低的学生学号、姓名和总分。
【输入形式】
输入五行,每行分别输入学号、姓名、数学成绩、英语成绩、C语言成绩。【输出形式】
第一行输出max:,换行输出总分最高的同学学号、姓名和总分(输出所有最高分的同学)。换行输出min:,接下来换行输出总分最低的同学学号、姓名和总分(输出所有最低分的同学)。(总分保留一位小数)
【样例输入】
001 Tom 80 85 90
002 Mary 95 85 75
003 Jack 70 75 80
004 Jim 78 91 82
005 Kitty 60 100 74
【样例输出】
max:
001 Tom 255.0
002 Mary 255.0
min:
003 Jack 225.0
【参考源代码】
#include
#define N 5
int main(void)
{
struct student
{ char no[10];
char name[16];
float math,eng,c;
float sum;
};
struct student st[N];
int i,max,min;
for (i=0;i {
scanf("%s %s",st[i].no,st[i].name);
scanf("%f%f%f",&st[i].math,&st[i].eng,&st[i].c);
st[i].sum=st[i].math+st[i].eng+st[i].c;
}
max=min=st[0].sum;
for(i=1; i if(max max=st[i].sum;
else if(min>st[i].sum)
min=st[i].sum;
printf("max:\n");
for(i=0; i if(max==st[i].sum)
printf("%s %s %.1f\n",st[i].no,st[i].name,st[i].sum);
printf("min:\n");
for(i=0; i if(min==st[i].sum)
printf("%s %s %.1f\n",st[i].no,st[i].name,st[i].sum);
return 0;
}
【问题描述】
定义一个点的结构数据类型,实现下列功能:
①为点输入坐标值;
②求两个点的中点坐标;
③求两点间距离。
【输入形式】
输入两行,每行两个浮点数,分别表示一个点的x和y坐标。
【输出形式】
输出两行,第一行为两点的中点坐标,两个值中间用“,”隔开,第二行为两点间距离(结果保留3位小数)。
【样例输入】
1 1
2 2
【样例输出】
1.500,1.500
1.414
【参考源代码】
#include
#include
struct point
{
float x;float y;};
int main(void)
{
struct point a, b;scanf("%f%f", &a.x, &a.y);scanf("%f%f", &b.x, &b.y);printf("%.3f,%.3f\n",(a.x+b.x)/2, (a.y+b.y)/2);printf("%.3f",sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));return 0;}
03【问题描述】
建立两个单向链表,按交替的顺序轮流从这两个链表中取其成员归并成为一个新的链表,如其中一个链表的成员取完,另一个链表的多余成员依次接到新链表的尾部,并把指向新链表的指针作为函数值返回。例如,若两个链表成员分别是{1,4,6,8,30,45}和{5,10,15},则链接成的新链表是{1,5,4,10,6,15,8,30,45}。
【输入形式】
输入两行,每行第一个整数n,随后有n个整数分别为链表中的成员。【输出形式】
输出一行,为链接好的新链表,若链表为空,则输出“NULL”。
【样例输入】
6 1 4 6 8 30 45
3 5 10 15
【样例输出】
1 5 4 10 6 15 8 30 45
【参考源代码】
#include
#include
struct Node
{
int data;
struct Node *next;
}Node;
struct Node *Create( )
{
int n,x;
struct Node *head=NULL,*end=NULL,*p=NULL;
scanf("%d",&n);
while(n--)
{
scanf("%d",&x);
p=(struct Node *)malloc(sizeof(struct Node));
p->data=x;
p->next=NULL;
if(head)
{
end->next=p;
end=p;
}
else
{
head=p;
end=p;
}
}
return head;
}
void ShowAll(struct Node *List)
{
struct Node *p;
p=List;
if(p==NULL)
{
printf("NULL\n");
return;
}
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main(void)
{
struct Node *ListA,*ListB,*ListC,*a,*b,*c;
int sign=1;
ListA=Create();
ListB=Create();
a=ListA;
b=ListB;
if(ListA && ListB)
{
ListC=a;
c=a;
a=a->next;
while(a&&b)
{
if(sign==1)
{
c->next=b;
c=b;
b=b->next;
sign=0;
}
else
{
c->next=a;
c=a;
a=a->next;
sign=1;
}
}
if(a)
c->next=a;
if(b)
c->next=b;
}
else if(ListA==NULL && ListB)
{
ListC=ListB;
}
else if(ListA && ListB==NULL)
{
ListC=ListA;
}
else
ListC=NULL;
ShowAll(ListC);
return 0;
}
相关阅读
题目来源:《C程序设计教程与实验(第2版)》实验编程题
C指针编程题—参考解答(3题)
C文件编程题—参考解答(3题)