java设计模式编程题解答_C结构体编程题—参考解答(3题)

 01 9e26aa494c94ed951e31ded2a42a6ac2.png

【问题描述】    

从键盘输入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;                                              
}

dda61a61aa303a8587eae2973361abe3.png02 9e26aa494c94ed951e31ded2a42a6ac2.png

【问题描述】

定义一个点的结构数据类型,实现下列功能:

①为点输入坐标值;

②求两个点的中点坐标;

③求两点间距离。

【输入形式】

输入两行,每行两个浮点数,分别表示一个点的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;

}

dda61a61aa303a8587eae2973361abe3.png03 9e26aa494c94ed951e31ded2a42a6ac2.png

【问题描述】

建立两个单向链表,按交替的顺序轮流从这两个链表中取其成员归并成为一个新的链表,如其中一个链表的成员取完,另一个链表的多余成员依次接到新链表的尾部,并把指向新链表的指针作为函数值返回。例如,若两个链表成员分别是{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题)


f67e6be2906e6dd93b7f6e97ab3c0e1b.png

ca830d650706a07b0709048eb996f4b0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值