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

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



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值