#Linux中的GCC编程# 20170726 C培训作业

C培训作业

20170726

1、结构体,学生信息,按成绩排序。

/* 定义4个学生,完成按成绩升序排序 */
//头文件
#include"stdio.h"
#include"string.h"
//定义结构体类型
typedef struct student{
	int id;
	char name[10];
	float score;
}Stu;//取别名 Stu== struct student,可以用来定义别的变量
//函数原型声明
void input_stu(Stu*,int);
void sort_stu(Stu*,int);
void output_stu(Stu*,int);
/*
	@主函数
*/
int main(void)
{
                                   //定义出 结构体类型的数组
    Stu stus[4];//定义出 结构体数组
                                   //初始化结构体数组   
    memset(stus,0,sizeof(Stu)*4);  //void *memset(void *s,int c,size_t n)
                                   //总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
                                   //这里的stus 是数组的首地址,所以不用 取地址符&
                                   //这里的sizeof()不能放stus,因为这个是结构体的首地址,相当于指针(4)
    input_stu(stus,4);
    printf("***排序前***\n");
    output_stu(stus,4);
    printf("***排序后***\n");
    sort_stu(stus,4);
    output_stu(stus,4);
    return 0;
}
/*
	@子函数:输入学生信息
*/
void input_stu(Stu *p,int len)
{
	int i=0;
        printf("按以下格式输入(学号 姓名 成绩):\n");
	for(i=0;i<len;i++)
	{
		printf("请输入第%d个学生:",i+1);
                scanf("%d%s%f",&(p+i)->id,(p+i)->name,&(p+i)->score);
        }
}
/*
	@子函数: 升序排列
*/
void sort_stu(Stu *p,int len)
{
	int i=0,j=0; //用于循环计数
        for(i=0;i<len-1;i++)
	{
		for(j=0;j<len-1-i;j++)
		{
			if((p+j)->score > (p+j+1)->score)
			{
				Stu temp=*(p+j);
				*(p+j)  =*(p+j+1);
				*(p+j+1)=temp;
			}
		}
	}
}
/*
	@子函数:输出数据
*/
void output_stu(Stu *p,int len)
{
	int i=0;
	for(i=0;i<len;i++)
	{
		printf("No:%d  姓名:%s        成绩:%.2f\n",(p+i)->id,(p+i)->name,(p+i)->score);
	}

}

运行结果:

[root@localhost Kshine]# gcc test28.c -o test -Wall 
[root@localhost Kshine]# ./test
按以下格式输入(学号 姓名 成绩):
请输入第1个学生:201 jiny 99.9
请输入第2个学生:202 liuxf 98.8
请输入第3个学生:203 zhuyw 90.1
请输入第4个学生:223 Kshine 20.3
***排序前***
No:201  姓名:jiny        成绩:99.90
No:202  姓名:liuxf        成绩:98.80
No:203  姓名:zhuyw        成绩:90.10
No:223  姓名:Kshine        成绩:20.30
***排序后***
No:223  姓名:Kshine        成绩:20.30
No:203  姓名:zhuyw        成绩:90.10
No:202  姓名:liuxf        成绩:98.80
No:201  姓名:jiny        成绩:99.90

2、结构体,求4个学生中成绩最高者的学号、姓名和成绩

/* 求4个学生中成绩最高者的学号、姓名和成绩。*/
//头文件
#include"stdio.h"
#include"string.h"
//定义结构体类型
typedef struct student{
        int id;
        char name[10];
        float score;
}Stu;//取别名 Stu== struct student,可以用来定义别的变量
//函数原型声明
void input_stu(Stu*,int);
void find_max_score(Stu*,int);

/*
        @主函数
*/
int main(void)
{
                                   //定义出 结构体类型的数组
    Stu stus[4];//定义出 结构体数组
                                   //初始化结构体数组
    memset(stus,0,sizeof(Stu)*4);  //void *memset(void *s,int c,size_t n)
                                   //总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
                                   //这里的stus 是数组的首地址,所以不用 取地址符&
                                   //这里的sizeof()不能放stus,因为这个是结构体的首地址,相当于指针(4)
    input_stu(stus,4);
    find_max_score(stus,4);
    return 0;
}
/*
        @子函数:输入学生信息
*/
void input_stu(Stu *p,int len)
{
        int i=0;
        printf("按以下格式输入(学号 姓名 成绩):\n");
        for(i=0;i<len;i++)
        {
                printf("请输入第%d个学生:",i+1);
                scanf("%d%s%f",&(p+i)->id,(p+i)->name,&(p+i)->score);
        }
}
/*
        @子函数:在结构体数组中,查询成绩最大的数组成员,并输出该学生的信息
*/
void find_max_score(Stu *p,int len)
{
        int i=0; //用于循环计数
        Stu stu_max=*p;//先默认第一个人的成绩最高;
        for(i=1;i<len;i++)
        {
                if(stu_max.score<(p+i)->score)
                {
                        stu_max=*(p+i);//p[i]
                }

        }
        //输出最大的学生信息
        printf("成绩最优秀的学生是:\n");
        printf("学号:%d\n",stu_max.id);
        printf("姓名:%s\n",stu_max.name);
        printf("成绩:%.2f\n",stu_max.score);
}


运行结果:

[root@localhost Kshine]# gcc test28_1.c -o test -Wall
[root@localhost Kshine]# ./test
按以下格式输入(学号 姓名 成绩):
请输入第1个学生:203 zyw 93.1
请输入第2个学生:213 lx 83.2
请输入第3个学生:220 Kshine 79.3
请输入第4个学生:123 zyj 92.7
成绩最优秀的学生是:
学号:203
姓名:zyw
成绩:93.10

3、实现填充并打印结构体信息

/*实现填充并打印结构体信息*/
//头文件
#include"stdio.h"
#include"string.h"
//结构体定义
typedef struct student{
	int id;
	char name[20];
	char gender;
	int age;
}Stu;
//函数原型声明
void insert_stu(Stu*);
void output_stu(Stu*);
/*
	@主函数
*/

int main(void)
{
	Stu stu1;
	memset(&stu1,0,sizeof(Stu));//或者sizeof(stu1)
	insert_stu(&stu1);      	    //输入
	output_stu(&stu1);           //输出
	return 0;
}
/*
	@子函数:输入
*/
void insert_stu(Stu *p)
{
	printf("请输入学号:");
	scanf("%d",&p->id);
	printf("请输入姓名:");
	scanf("%s",p->name);

        getchar();
	printf("请输入性别:");
	scanf("%c",&p->gender);
	printf("请输入年龄:");
	scanf("%d",&p->age);
}
/*
	@子函数:输出
*/
void output_stu(Stu *p)
{
	printf("您输入的信息是:");
	printf("姓名:%s 学号:%d 性别:%c 年龄:%d\n",p->name,p->id,p->gender,p->age);
}


运行结果:

[root@localhost Kshine]# gcc test29.c -o test -Wall
[root@localhost Kshine]# ./test
请输入学号:533223
请输入姓名:Kshine
请输入性别:m
请输入年龄:18
您输入的信息是:姓名:Kshine 学号:533223 性别:m 年龄:18

猜你喜欢

转载自blog.csdn.net/Kshine2017/article/details/85048118