diff --git a/08/1/1.c b/08/1/1.c new file mode 100644 index 0000000..5d6427d --- /dev/null +++ b/08/1/1.c @@ -0,0 +1,26 @@ +#include + +typedef struct Time{ + int h; + int m; + int s; +}time; + +int main(){ + int s; + time data; + + scanf("%d:%d:%d",&data.h,&data.m,&data.s); + scanf("%d",&s); + data.s+=s; + if(data.s/60>=1){ + data.m += data.s / 60; + data.s = data.s % 60; + if(data.m/60>=1){ + data.h += data.m / 60; + data.m = data.m % 60; + } + } + printf("\n新时间是%d小时%d分%d秒",data.h,data.m,data.s); + return 0; +} diff --git a/08/1/README.md b/08/1/README.md new file mode 100644 index 0000000..7636fd8 --- /dev/null +++ b/08/1/README.md @@ -0,0 +1,48 @@ +【问题描述】 + +编程题:时间换算。用结构体表示时间(时:分:秒),输入一个时间数值,再输入一个秒数n(n<60),以时:分:秒的格式输出该时间再过n秒后的时间。 + +输入输出示例: + +``` +输入时间:11:59:40 + +输入秒:30 + + 新时间:12小时0分10秒 +``` + +【输入形式】 + +【输出形式】 + +【样例输入】 + +``` +1:20:30 + +40 +``` + +【样例输出】 + +``` +新时间是1小时21分10秒 +``` + +【样例说明】 + +【评分标准】 + +# 运行结果 + +成功通过编译, 且无编译警告 + +共有测试数据:2 +平均占用内存:1.945K +平均CPU时间:0.00636S +平均墙钟时间:0.00636S + +测试数据 评判结果 +测试数据1 完全正确 +测试数据2 完全正确 diff --git a/08/2/2.c b/08/2/2.c new file mode 100644 index 0000000..8c7bff7 --- /dev/null +++ b/08/2/2.c @@ -0,0 +1,35 @@ +#include + +typedef struct Stu{ + char name[20]; + int score; + int age; +}stu; + +int main(){ + stu data[5]; + // 输入 + for(int i=0;i<5;i++){ + scanf("%s%d%d",data[i].name,&data[i].age,&data[i].score); + } + + printf("成绩变化之前:\n"); + // 输出 + for(int i=0;i<5;i++){ + printf("%-8s%-6d%d\n",data[i].name,data[i].age,data[i].score); + } + // 改变 + for(int i=0;i<5;i++){ + if(data[i].age>18){ + data[i].score+=10; + } + } + + printf("成绩变化之后:\n"); + // 输出 + for(int i=0;i<5;i++){ + printf("%-8s%-6d%d\n",data[i].name,data[i].age,data[i].score); + } + + return 0; +} diff --git a/08/2/README.md b/08/2/README.md new file mode 100644 index 0000000..13ea13c --- /dev/null +++ b/08/2/README.md @@ -0,0 +1,65 @@ +【问题描述】 + +定义一个含姓名、年龄、英语成绩的结构体类型,通过键盘输入5个学生的信息,再对年龄大于18岁的学生的英语成绩加上10分,然后分别输出成绩变化之前和之后的所有学生的信息。 + +【输入形式】 + +``` +请输入5名学生信息: + +姓名 年龄 成绩 + +wang 19 89 + +li 23 90 + +wu 19 87 + +zhang 21 76 + +hu 20 78 +``` + +【输出形式】 + +``` +成绩变化之前: + +wang 19 89 + +li 23 90 + +wu 19 87 + +zhang 21 76 + +hu 20 78 + +成绩变化之后: + +wang 19 99 + +li 23 100 + +wu 19 97 + +zhang 21 86 + +hu 20 88 +``` + +【样例说明】 + +输出格式 `"%-8s%-6d%d\n"` + +# 运行结果 + +成功通过编译, 且无编译警告 + +共有测试数据:1 +平均占用内存:1.965K +平均CPU时间:0.00635S +平均墙钟时间:0.00636S + +测试数据 评判结果 +测试数据1 完全正确 diff --git a/08/3/3.c b/08/3/3.c new file mode 100644 index 0000000..c61a437 --- /dev/null +++ b/08/3/3.c @@ -0,0 +1,29 @@ +#include +#define N 3 + +typedef struct student{ + char num[6]; + char name[8]; + int score[3]; + float avr; +}stu; + +int main(){ + stu data[N]; + float temp; + // 输入 + for(int i=0;i 作业时间: 2021-12-20 08:06:00 至 2021-12-27 00:00:00 + +# 实验目的 + +1. 掌握结构体类型和结构体类型变量的定义方法。 +2. 掌握结构体类型变量成员赋值和引用方法。 +3. 学会使用结构体数组。 +4. 理解指针和结构的关系。 + +# 实验器材 + +计算机硬件环境:PIII 667以上计算机;软件环境:Turbo C, Visual C。 + +# 实验内容 + +1. 编程题:时间换算。用结构体表示时间(时:分:秒),输入一个时间数值,再输入一个秒数n(n<60),以时:分:秒的格式输出该时间再过n秒后的时间。 +输入输出示例: +输入时间:11:59:40 +输入秒:30 +新时间:12:0:10 +2. 定义一个含姓名、年龄、英语成绩的结构体类型,通过键盘输入5个学生的信息,再对年龄大于18岁的学生的英语成绩加上10分,然后分别输出成绩变化之前和之后的所有学生的信息。 +3. 有10个学生,每个学生的数据包括学号,姓名,3门课的成绩,从键盘输入10个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课成绩,平均分数)。 + +# 技能要点 + +1. 结构体类型的定义方法; +2. 结构体变量的定义方法; +3. 结构体变量的赋值,以及结构体成员的访问。 + +# 思考题 + +1. 结构体和数组都是构造类型,它们的区别是什么? + +# 根据实验过程填写下列内容 + +1. 写出能够完成实验1要求的程序,及测试数据。 diff --git a/09-1/1/1.c b/09-1/1/1.c new file mode 100644 index 0000000..899ecbd --- /dev/null +++ b/09-1/1/1.c @@ -0,0 +1,26 @@ +#include + +typedef struct stu{ + char name[20]; + int num; + float score; +}stu; + +int main(){ + stu data[2]; + + for(int i=0;i<2;i++){ + scanf("%d %s %f",&data[i].num,data[i].name,&data[i].score); + } + + printf("The higher score is:\n"); + + if(data[0].score>=data[1].score){ + printf("%d %s %.2f\n",data[0].num,data[0].name,data[0].score); + } + if(data[0].score<=data[1].score){ + printf("%d %s %.2f\n",data[1].num,data[1].name,data[1].score); + } + + return 0; +} diff --git a/09-1/1/README.md b/09-1/1/README.md new file mode 100644 index 0000000..e7e4d99 --- /dev/null +++ b/09-1/1/README.md @@ -0,0 +1,51 @@ +输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩 + +【问题描述】 + +【输入形式】 + +输入两行,每行一个学生信息。 + +【输出形式】 + +输出一行提示信息 + +The higher score is: + +再输出较高分学生的信息学号、姓名和成绩,成绩保留两位小数,三个数据用一个空格间隔,成绩后面无空格。 + +若两个成绩相同,则按输入顺序将两个学生信息都输出,各占一行。 + +【样例输入】 + +``` +101 wang 98 + +102 Li 90 +``` + +【样例输出】 + +``` +The higher score is: + +101 wang 90.00 +``` + +【样例说明】 + +【评分标准】 + +# 运行结果 + +成功通过编译, 且无编译警告 + +共有测试数据:3 +平均占用内存:2.002K +平均CPU时间:0.00634S +平均墙钟时间:0.00635S + +测试数据 评判结果 +测试数据1 完全正确 +测试数据2 完全正确 +测试数据3 完全正确 diff --git a/09-1/2/2.c b/09-1/2/2.c new file mode 100644 index 0000000..e359db4 --- /dev/null +++ b/09-1/2/2.c @@ -0,0 +1,31 @@ +#include +#include + +union Categ{ + int clas; + char position[10]; +}; +struct{ + int num; + char name[10]; + char sex; + char job; + union Categ category; +}person[2]; + +int main(){ + for(int i=0;i<2;i++){ + scanf("%d\n%s\n%c\n%c",&person[i].num,person[i].name,&person[i].sex,&person[i].job); + if(person[i].job=='s') + scanf("%d",&person[i].category.clas); + else + scanf("%s",person[i].category.position); + printf("%d %s %c %c",person[i].num,person[i].name,person[i].sex,person[i].job); + if(person[i].job=='s') + printf(" %d\n",person[i].category.clas); + else + printf(" %s\n",person[i].category.position); + } + + return 0; +} diff --git a/09-1/2/README.md b/09-1/2/README.md new file mode 100644 index 0000000..96b2da7 --- /dev/null +++ b/09-1/2/README.md @@ -0,0 +1,77 @@ +【问题描述】 + +有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码、性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。要求用同一个表格来处理。 + +``` +union Categ + + { int clas; + + char position[10]; + + }; + +struct + +{ int num; + + char name[10]; + + char sex; + + char job; + + union Categ category; + +}person[2]; +``` + +【样例输入】 + +``` +101 + +wang + +m + +s + +501 + + + +102 + +sun + +f + +t + +professor +``` + +【样例输出】 + +``` +101 wang m s 501 + +102 li s t professor +``` + +【样例说明】 + +【评分标准】 + +# 运行结果 + +成功通过编译, 且无编译警告 + +共有测试数据:1 +平均占用内存:1.953K +平均CPU时间:0.00671S +平均墙钟时间:0.00671S + +测试数据 评判结果 +测试数据1 完全正确 diff --git a/09-1/README.md b/09-1/README.md new file mode 100644 index 0000000..02b4330 --- /dev/null +++ b/09-1/README.md @@ -0,0 +1,3 @@ +# 第九章 作业(结构体与共用体) + +> 作业时间: 2021-12-20 08:08:00 至 2022-01-08 23:55:00 diff --git a/README.md b/README.md index 1a8e679..0bd09e7 100644 --- a/README.md +++ b/README.md @@ -75,8 +75,15 @@ A repo to record my study life. - [3. 求两组整数的交集a](https://github.com/xtaodada/C-study/tree/master/07-1/3) - [4. 超长正整数的加法](https://github.com/xtaodada/C-study/tree/master/07-1/4) - [5. 二维整型数组的“最小点”](https://github.com/xtaodada/C-study/tree/master/07-1/5) +- [实验八 结构体(2学时)](https://github.com/xtaodada/C-study/tree/master/08) + - [1. 时间换算](https://github.com/xtaodada/C-study/tree/master/08/1) + - [2. 定义一个含姓名、年龄、英语成绩的结构体类型](https://github.com/xtaodada/C-study/tree/master/08/2) + - [3. 有3个学生](https://github.com/xtaodada/C-study/tree/master/08/3) - [第八章 字符串作业](https://github.com/xtaodada/C-study/tree/master/08-1) - [1. 回文判断](https://github.com/xtaodada/C-study/tree/master/08-1/1) - [2. 颠倒字符串](https://github.com/xtaodada/C-study/tree/master/08-1/2) - [3. 统计输入中空格、制表符及回车符的个数](https://github.com/xtaodada/C-study/tree/master/08-1/3) - [4. 删除重复字符排序字符串](https://github.com/xtaodada/C-study/tree/master/08-1/4) +- [第九章 作业(结构体与共用体)](https://github.com/xtaodada/C-study/tree/master/09-1) + - [1. 输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩](https://github.com/xtaodada/C-study/tree/master/09-1/1) + - [2. 有若干个人员的数据](https://github.com/xtaodada/C-study/tree/master/09-1/2)