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

一、PTA实验作业

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

1. 本题PTA提交列表

2. 设计思路

定义两个结构体型变量imag用来储存虚部real用来储存实部
定义一个结构体变量product用来储存运算结果
    product.real = x.real * y.real - x.imag * y.imag;  
    product.imag = x.real * y.imag + x.imag * y.real;
返回计算所得值

3.代码截图

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

本题用的时间不是很长,只是在计算的时候由于没有注意运算符的优先级而导致一直输出不出正确结果,通过调试解决

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

1. 本题PTA提交列表

2. 设计思路

定义结构体worker包括姓名(name)、基本工资(jb)、浮动工资(fd)和支出(zc)实际工资(sj)
定义整形变量n用来储存职员数量i为循环变量
scanf("%d",&n);
定义结构体型数组 wo[n]
当i<n时
将信息输入结构体内
并计算
wo[i].sj=wo[i].jb+wo[i].fd-wo[i].zc;
printf("%s %.2f\n",wo[i].name,wo[i].sj)

3.代码截图

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


本题遇到的错误有两个,第一个是在输出时没有注意格式而导致的答案错误,第二个是由于数组长度定义错误而导致的段错误,通过问同学而解决

题目1:7-5 有理数比较

1. 本题PTA提交列表

2. 设计思路

定义一个结构体变量以及结构体型变量a和b分别用来储存分子与分母
定义两个结构体型变量x,y分别用来储存两次输入的分子与分母
定义整型变量result字符型变量ch
scanf("%d/%d %d/%d", &x.a, &x.b, &y.a, &y.b)
result=x.a*y.b-x.b*y.a
如果result为0
ch = '<'
如果result > 0
ch='>'
否则
ch='='
输出"%d/%d %c %d/%d\n", x.a,x.b,ch,y.a,y.b

3.代码截图

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

本题比较简单,代码写得很顺利,放在pta上也是一次性过得,只是我觉得方法还能再改进下,可以使它更简洁。

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

三、阅读代码

计算同学们的总成绩、平均成绩和以及 140 分以下的人数

本题跟这次PTA上的一题很相似,但它用了两个函数并且简单地运用了函数嵌套,很值得学习。
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

pta有一题类似的,不同于我的做法,这段代码直接用指针对地址进行操作,而我虽然用了指针,但是还是修改的是地址内的数据而地址没有修改,这种做法值得我学习。

四、本周学习总结

1.总结本周学习内容

本周学习了结构体相关的知识,具体为结构体的嵌套,结构体与指针的应用还有运用结构体解决简单的问题。

结构体声明

 struct book{
       char title[MAXTITL];
       char author[MAXAUTL];
       float value;
 };
struct-----表明后面是结构体
book -----可选标记,后续程序可以使用该标记引用该结构。
{}----花括号里是结构成员列表,每个成员都自己声明描述。
;-----结尾处的分号是必须的,表示结构布局定义结束。
定义结构变量

  struct book library;
library ---为结构体变量的变量名。
以上的定义可以写成下面这样:
struct book{
char title[MAXTITL];
char author[MAXAUTL];
float value;
}library;
也可以简化成下面这样:
struct {
char title[MAXTITL];
char author[MAXAUTL];
float value;
}library;

2.罗列本周一些错题

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
函数fun的功能是将形参a所指结构体变量s中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。
例如:a所指变量s中的学号、姓名、和三门课的成绩依次是:
10001、" ZhangSan "、95、80、88,
修改后输出t中的数据应为:10002、"LiSi "、96、81、89。
注意:按照顺序填代码,不要带编号1,2,3,4。空格或回车隔开。
#include  <stdio.h>
#include  <string.h>
struct student {
  long  sno;
  char  name[10];
  float  score[3];
};

 ______2__________ Modif(struct student  *p)
{
   int  i;

   p->sno = 10002;
   strcpy(p->name, "LiSi");
   for (i=0; i<3; i++)
       ______3_______++;

   return _____4________;
}

void main()
{
  struct student  s={10001,"ZhangSan", 95, 80, 88},  *t;
  int  i;

  printf("\n\nThe original data :\n");
  printf("\nNo: %ld  Name: %s\nScores:  ",s.sno, s.name);
  for (i=0; i<3; i++)
     printf("%6.2f ", ___1____);
  printf("\n");
  t = Modif(&s);
  printf("\nThe data after modified :\n");
  printf("\nNo: %ld  Name: %s\nScores:  ",t->sno, t->name);
  for (i=0; i<3; i++)
    printf("%6.2f ", t->score[i]);

  return 0;
}
参考答案
s.score[i]
struct student *
p->score[i]
p
我的作答
s.score[i]
struct
s.score[i]
s
程序改错题:
    输入一个正整数n(3<=n<=10),再输入n个雇员的信息(如下表所示),输出每人的姓名和实发工资(基本工资+浮动工资-支出)。
格式:
    改正代码//错误代码

#include<stdio.h>

int main()

{  
    struct emp
    {  
         char name[10];
         float jbg;
         float fdg;
         float zc;

     };
    int i,n;
    printf(“n=”);
    scanf(“%d”,&n);
    for(i=0;i<n;i++)
         scanf(“%s%d%d%d”,emp[i].name,emp[i].&jbg,emp[i].&fdg,emp[i],&zc);
    for(i=0;i<n;i++)
         printf(“%5s实发工资:%d\n”, emp[i].name,emp[i].zc);
    return 0;

}
参考答案

#include<stdio.h>
int main()
{  
    struct 
    {  
         char name[10];

         float jbg;

         float fdg;

         float zc;

     }emp[10];  //1
    int i,n;
    printf("n=");
    scanf("%d",&n);
    getchar();  //2
    for(i=0;i<n;i++)
        {
		  scanf("%s%f%f%f",emp[i].name,&emp[i].jbg,&emp[i].fdg,&emp[i].zc);   //3
		  getchar();} //4
    for(i=0;i<n;i++)
         printf("%5s实发工资:%7.2f\n", emp[i].name,emp[i]. jbg+emp[i]. fdg-emp[i].zc);//5
    return 0;

}
我的作答
#include<stdio.h>

int main()

{  
    struct emp
    {  
         char name[10];
         float jbg;
         float fdg;
         float zc;

     };
    int i,n;
    struct emp[i] ;//原错误代码 
	printf(“n=”);
    scanf(“%d”,&n);
    for(i=0;i<n;i++)
         scanf(“%s%d%d%d”,emp[i].name,&emp[i].jbg,&emp[i].fdg,&emp[i],zc);//原错误代码 
    for(i=0;i<n;i++)
         printf(“%5s实发工资:%.0f\n”, emp[i].name,emp[i].zc);//原错误代码 
    return 0;

}
posted @ 2017-12-24 23:07  爻象  阅读(523)  评论(4编辑  收藏  举报