C语言博客作业--结构体

时间:2023-01-25 21:57:54

一、PTA实验作业

题目1:6-1 计算两个复数之积

1. 本题PTA提交列表(要提交列表,不是结果)

C语言博客作业--结构体

2. 设计思路(伪代码或流程图)

struct complex{
    int real;
    int imag;
};//该结构体表示复数的实部和虚部。
    定义一个结构体变量 product表示相乘后的复数
    product.real(表示新复数的实部)=一个实部乘上另一个数的实部 - 一个数的虚部*另一个数的虚部
    product.imag(新复数的虚部)=(x.real*y.imag)+(x.imag*y.real);
    返回 product;

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

C语言博客作业--结构体

4.本题调试过程碰到问题及PTA提交列表情况说明。

这道题的难点在于如何表示新的复数,刚开始的时候想了挺久的,不知道要怎样直接将整个
复数表示出来,后来换了一个思路,就是将实部和虚部分别计算。

题目2:7-1 计算职工工资

1. 本题PTA提交列表(要提交列表,不是结果)

C语言博客作业--结构体

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.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

C语言博客作业--结构体

4.本题调试过程碰到问题及PTA提交列表情况说明。

本题呢,其实我是一遍就过得,哈哈哈,不懂要说什么,说注意点吧,就主要是对
结构体数组的使用,下表注重以下,就没有什么难点。

题目3: 通讯录的录入与显示

1. 本题PTA提交列表(要提交列表,不是结果)

C语言博客作业--结构体

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.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

C语言博客作业--结构体

4.本题调试过程碰到问题及PTA提交列表情况说明

本题 其实我还没有作对,我也不知道哪里出错了,感觉思路都很ok,需要林丽老师帮我解答

二、截图本周题目集的PTA最后排名。(

C语言博客作业--结构体

三、阅读代码(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错误再与输入结构数组的时候不需要用取地址符