C语言博客作业--结构体
一、PTA实验作业
题目1:6-1 计算两个复数之积
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路(伪代码或流程图)
struct complex{
int real;
int imag;
};//该结构体表示复数的实部和虚部。
定义一个结构体变量 product表示相乘后的复数
product.real(表示新复数的实部)=一个实部乘上另一个数的实部 - 一个数的虚部*另一个数的虚部
product.imag(新复数的虚部)=(x.real*y.imag)+(x.imag*y.real);
返回 product;
3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)
4.本题调试过程碰到问题及PTA提交列表情况说明。
这道题的难点在于如何表示新的复数,刚开始的时候想了挺久的,不知道要怎样直接将整个
复数表示出来,后来换了一个思路,就是将实部和虚部分别计算。
题目2:7-1 计算职工工资
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路
struct staff{
char name[11];
float jbear;
float fdear;
float cost;
float income;
}该结构体分别表示职工的姓名,基本收入,浮动收入,发费,和总收入
定义一个 n 表示查询的员工数
输入 n
定义结构体变量 s[n]
for i=0 to i=n-1
输入 对应员工的姓名,基本收入,浮动收入,发费
总收入=基本收入+浮动收入-发费。
end for
for i=0 to i=n-1
输出 对应的姓名和总收入
end for
3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)
4.本题调试过程碰到问题及PTA提交列表情况说明。
本题呢,其实我是一遍就过得,哈哈哈,不懂要说什么,说注意点吧,就主要是对
结构体数组的使用,下表注重以下,就没有什么难点。
题目3: 通讯录的录入与显示
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路
struct infor{
int year,month,day;
char name[20];
char c;
char gd[20],yd[20];
}; 这个结构体是表示出生的时间月份,姓名,性别,固定电话,移动电话。
定义一个n,表示下面将要输入n个人的信息。
定义一个结构体数组 s[n]
for i=0 to i=n-1;
输入 姓名,性别,固定电话,移动电话
end for
再定义 y m y表示查询的次数, m表示查询的编号
for i=0 to i=y-1
输入m
如果 m<=n-1&&m>=0
{
输出 姓名,固定电话,移动电话,性别,和出生年月日。
}
否则 输出 Not Found
end for
3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)
4.本题调试过程碰到问题及PTA提交列表情况说明
本题 其实我还没有作对,我也不知道哪里出错了,感觉思路都很ok,需要林丽老师帮我解答
二、截图本周题目集的PTA最后排名。(
三、阅读代码(2分)
下面代码是要求输入老师和同学的信息,然后整理好,如果输入的是成绩表示输入的是学生,如果输入时学科则表示是老师
#include <stdio.h>
#include <stdlib.h>
#define TOTAL 4 //人员总数
struct{
char name[20];
int num;
char sex;
char profession;
union{
float score;
char course[20];
} sc;
} bodys[TOTAL];
int main(){
int i;
//输入人员信息
for(i=0; i<TOTAL; i++){
printf("Input info: ");
scanf("%s %d %c %c", bodys[i].name, &(bodys[i].num), &(bodys[i].sex), &(bodys[i].profession));
if(bodys[i].profession == 's'){ //如果是学生
scanf("%f", &bodys[i].sc.score);
}else{ //如果是老师
scanf("%s", bodys[i].sc.course);
}
fflush(stdin);
}
//输出人员信息
printf("\nName\t\tNum\tSex\tProfession\tScore / Course\n");
for(i=0; i<TOTAL; i++){
if(bodys[i].profession == 's'){ //如果是学生
printf("%s\t%d\t%c\t%c\t\t%f\n", bodys[i].name, bodys[i].num, bodys[i].sex, bodys[i].profession, bodys[i].sc.score);
}else{ //如果是老师
printf("%s\t%d\t%c\t%c\t\t%s\n", bodys[i].name, bodys[i].num, bodys[i].sex, bodys[i].profession, bodys[i].sc.course);
}
}
return 0;
}
本题的优点在于,在结构体中利用了一个共同体,这不仅可以节省内存,而且用法很巧妙,
四、本周学习总结(1分)
1.总结本周学习内容。
本周学习了,结构体
1:结构体的概念,定义。结构体是一种新的数据构造类型,他能把不同类型数据汇聚成一个整体,使它们相互关联;
2:还有就是结构体数组和结构体指针的使用,
3:还有一个印象深刻的就是递归,说实话递归有点难以理解,总是会给绕进去。好需要好好领会一下
2.罗列本周一些错题。
程序填空题:
输入n(3<n<=10)个职工的编号、姓名、基本工资、职务工资,输出其中“基本工资+职务工资”最少和最多的职工姓名。
输入输出示例:
n=5
1,林宏,1800,600
2,李涛,1700,550
3,王钢,2100,750
4,周航,1500,450
5,金明,2300,850
基本工资+职务工资最少的是:周航
基本工资+职务工资最多的是:金明
这题 我的答案的 struct worker s[n] &num,name,&jbpay,&zwpay;
max=i; min=i;标准答案是struct Worker s[10]
&s[i].num,s[i].name,&s[i].jbpay,&s[i]zwpay
max=i
min=i错误再与输入结构数组的时候不需要用取地址符