回顾大一·C语言编程12.4(1)(2)(3)+13.1(1)(2)+13.2

来源:互联网 发布:学琴屋软件怎么样 编辑:程序博客网 时间:2024/06/17 07:30

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


定义一个描述平面上一个点的结构体Point(自行设计一个合适的结构体类型,包含必要的成员),编程实现下列功能:①为点输入坐标值。②求两个点中点坐标。③求两点间距离。


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



原创粉丝点击