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

时间:2021-07-27 02:20:04

一、PTA实验作业

题目1:6-2 按等级统计学生成绩

1. 本题PTA提交列表

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

2.设计思路

struct student{
int num;
char name[20];
int score;
char grade;
}; //该结构体表示学生的学号、姓名、成绩和等级
int set_grade( struct student *p, int n ){
定义变量sum表示不及格人数,i为循环变量
for i=0 to i=n-1
对p->score进行判断,并赋给p->grade相应等级
若不及格 sum++
p++
end for
return sum
}

3.代码截图

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

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

  • 此题在编译器上有过错误,由于指针没有改变,所以只有第一个输出等级是正确的,不及格人数也不对
    C语言博客作业--结构体
  • 每次循环后p++,等级输出正确,但是不及格人数依旧错,后来发现,sum不是指针指向,需要返回值
    C语言博客作业--结构体
    C语言博客作业--结构体

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

    1. 本题PTA提交列表

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

    2. 设计思路

    struct Worker{
    char name[20];
    float jbgz,fdgz,zc;
    float sjgz;
    }; //结构体表示职员的姓名、基本工资,浮动工资、支出、实际工资
    定义结构数组s[n];
    循环输入n个职员的信息
    for i=0 to i=n-1
    计算s[i].sjgz
    end for
    输出n个职员姓名和实际工资

    3.代码截图

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

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

  • 一开始结构数组里的基本工资、浮动工资、支出定义为int型,在编译器上测试数据是正确的,但是提交PTA显示答案错误
    C语言博客作业--结构体
    C语言博客作业--结构体
  • 抱着侥幸心里将三个变量该为浮点型,结过答案正确
    C语言博客作业--结构体
    C语言博客作业--结构体

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

    1. 本题PTA提交列表

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

    2. 设计思路

    struct information{
    char name[11];
    char birthday[11];
    char sex[2]; //将性别定义为字符数组,否则输出空格过不了
    char gd[17];
    char tel[17];
    }; //结构数组表示姓名、出生日期、性别、固定电话、手机号码
    定义变量n,结构数组s[n];
    录入n条记录
    定义变量number,k,j;
    for j=0 to j=k-1
    输入number
    判断number是否在0到n-1的范围
    输出相应结果
    end for

    3.代码截图

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

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

  • 结构数组内将性别定义为字符型变量,提交PTA显示部分正确,但是编译器上看不出什么错
    C语言博客作业--结构体
    C语言博客作业--结构体
  • 改成字符型数组做,由于是%s输入,数组长度为2,提交答案正确
    C语言博客作业--结构体

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

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

    三、阅读代码

    1.过滤字符串只保留串中的字母字符

    #include <stdio.h>
    int fun(char *ptr);
    int main()
    {
    char str[80];
    int s;
    gets(str);
    s=fun(str);
    printf("The new string is :");puts(str);
    printf("There are %d char in the new string.",s);
    return 0;
    }
    #include<string.h>
    int fun(char *ptr)
    {
    int i,l,count;
    l=strlen(ptr);
    count=l;
    for(i=0;i<l;i++){
    if(ptr[i]>='a'&&ptr[i]<='z'||ptr[i]>='A'&&ptr[i]<='Z'){
    ptr[i]=ptr[i];
    }
    else {
    ptr[i]=NULL;
    count--;
    }
    }
    return count;
    }
  • 运用库函数strlen求出数组的长度,令count=l,遍历数组,是字母的话不变,否则令其为NULL,同时count--,count就表示字母的个数,最后返回count;

    2.

    四、本周学习总结

    1.总结本周学习内容

    (1)结构体

  • 结构体:结构类型是一种把一些数据分量聚合成一个整体的数据类型,像数组和指针一样,结构也是一种构造数据类型,它与数组的区别在于,数组中所有元素的数据类型必须是相同的,而结构中各成员的数据类型可以不同。

    (2)共用体与结构体的区别

  • 共用体使用union 关键字, 共用体内存长度是内部最长的数据类型的长度。 共用体的地址和内部各成员变量的地址都是同一个地址;结构体使用struct关键字,每个成员相对于结构体首地址的偏移量都得是当前成员所占内存大小的整数倍,如果不是会在成员前面加填充字节。结构体的大小是内部最宽的成员的整数倍。

    (3)枚举

    1. 枚举的定义枚举类型定义的一般形式为:enum 枚举名{ 枚举值表 }; 在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。例如: 该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。
    1. 枚举变量的说明 如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。
      设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式:
      enum weekday{ sun,mou,tue,wed,thu,fri,sat };

enum weekday a,b,c;

或者是: enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c;

或者是: enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;

枚举类型在使用中有以下规定:1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。2.枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,…,sat值为6。

(4)结构体的定义和嵌套定义

struct nest_student{
int num;
char name[10];
int computer,english,math;
double average;
};



struct address{
char city[10];
char street[20];
int code;
int zip;
};
struct nest_student{
int num;
char name[10];
int computer,english,math;
struct address addr;
double average;
};

(5)共用体的定义

union 共用体类型名
{
成员列表
};
例如:
union data{
int i;
char ch;
double d;
};
data a,b,c;

(6)递归函数的原理

  • 原理:递归通常用来解决结构自相似的问题。所谓结构自相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小。实际上,递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的问题,直至每个小问题都可以直接解决。
  • 递归的两个基本要素:1.终止条件(递归出口) 2.递归部分(递归体)
  • 递归执行过程:一个递归函数的调用过程类似于多个函数的嵌套的调用,只不过调用函数和被调用函数是同一个函数。为了保证递归函数的正确执行,系统需设立一个工作栈
    1.运动开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址;
    2.每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈;
    3.每次递归调用结束后,将栈顶元素出栈,使相应的值参和局部变量恢复为调用前的值,然后转向返回地址指定的位置继续执行。

    2.罗列本周一些错题

    (1)课堂派结构体复习作业第4

    C语言博客作业--结构体
    C语言博客作业--结构体
  • 输入语句忘了加&号

    (2)课堂派结构体复习作业第3

    C语言博客作业--结构体
    C语言博客作业--结构体
  • 没有看清原代码,将结构数组名看错

    (3)课堂派结构体预习作业第5

    C语言博客作业--结构体
  • (p++)->num表示p++指向的num成员。

    (4)课堂派结构体预习作业第9

    C语言博客作业--结构体
  • 根据运算符的优先级,此表达式是错误的