C语言博客作业--结构体
一、PTA实验作业
题目1:6-4 结构体数组按总分排序
1. 本题PTA提交列表
2. 设计思路
定义cala函数,定义i
for i=0 to n 遍历数组
计算每一个学生的三门课成绩的和,存放在sum中
定义sort函数,定义结构体变量temp,定义i,j
for i=0 to n 外循环
for j=i to n 内循环
如果p[i].sum<p[j].sum,交换位置
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
第一次编译错误是我只把cala函数贴在了里面,提示编译错误
题目2:7-1 计算职工工资
1. 本题PTA提交列表
2. 设计思路
struct stuff
{
char name[11];
float jbpay;
float fdpay;
float pay;
float sfpay;
};
定义结构体stuff包含姓名,基本工资,浮动工资,支出,实发工资;定义N;定义结构体数组s[N];定义i;
输入N
for i=0 to N
输入职工的数据,即姓名, 基本工资,浮动工资,支出
计算实发工资,实发工资=基本工资+浮动工资-支出
for i=0 to N
输出职工的姓名和实发工资
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
第一次答案错误,我把实发工资定义成结构体外的一个双精度浮点型数据,答案错误
题目3:7-6 通讯录的录入与显示
1. 本题PTA提交列表
2. 设计思路
struct maillist
{
char name[11];
char birthday[11];
char sex;
char tel[17];
char mobile[17];
};
定义结构体maillist包含姓名,出生日期,性别,固定电话号码,移动电话号码;定义N;定义结构体数组mail[N];定义i,k,n[10];
输入N
for i=0 to N
输入通讯录中的数据,即姓名,出生日期,性别,固定电话号码,移动电话号码
输入查询编号的次数k
for i=0 to k
输入的编号存放在数组n中
如果n[i]>=0&&n[i]<N即输入的编号在0到N范围内,即找到了,输出姓名 固话 手机 性别 生日
否则 没找到,输出Not Found
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
误明显问题
二、截图本周题目集的PTA最后排名。
三、阅读代码
四、本周学习总结
1.自己总结本周学习内容。
- 1.结构是C语言中一种新的构造数据类型,它能够将不同数据的类型汇聚成一个整体;同时,结构又是一个变量的聚合,可以按照对基本数据类型的操作方法单独使用其成员变量,c语言中,结构体的定义是一条语句,所以要用分号结尾
- 2.定义嵌套循环的结构类型时,必须先定义其成员的结构类型,再定义主结构类型
- 3.结构体指针可传递多个数据的地址,参数传递的形式简单,但效率低
- 4.结构变量的定义和初始化
(1)单独定义、混合定义、无类型名定义
(2)结构变量的初始化采用初始化表的方法,大括号内各数据间用逗号隔开,将大括号内的数据按顺序赋给结构变量内每个成员,数据类型要求一致 - 5.结构变量成员的引用。
结构变量名.结构体中数据名
结构指针->结构体中数据名
结构体、共用体、枚举这种构造数据类型特点。
- 结构体和数组一样都是构造型数据类型,和数组不同的是,结构体可以处理不同类型的数据。结构体里还可以有结构体类型、共用体的类型的数据。结构体每一位成员都用来表示一种具体事务的属性。结构体总空间大小,等于各成员总长度
- 共用体是一种多变量共享存储空间的构造类型,它允许几种不同的变量共用同一存储空间。共用体成员可以表示多种属性(同一存储空间可以存储不同类型的数据)。共用体空间等于最大成员占据的空间。共用体不能赋初值。共用体定义union 共用体名称{ 数据1,数据2......}结构体名称;struct 结构体名称{ 数据1,数据2......};
- 当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。枚举类型是指变量的值可以全部列出,定义一个枚举变量后,变量的值确定在定义之中。枚举元素是常量,只能在定义阶段赋值。枚举定义enum 枚举名称 {数据1,数据2,...};枚举变量定义1.先定义枚举类型,再定义枚举变量2.定义枚举类型的同时定义枚举变量3.省略枚举名称,直接定义枚举变量
递归函数原理
- 递归就是用函数直接调用自己或通过一系列调用语句间接调用自己来描述问题和解决问题的方法。
- 递归通常用来解决=构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决的问题。整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小。
- 递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的问题,直至每个小问题都可以直接解决。
- 递归有两个基本要素(1)边界条件:确定递归到何时终止。(2)递归模式:大问题是如何分解为小问题的,也称为递归体。递归函数只有具备了这两个要素,才能在有限次计算后得出结果
- 在递归函数中,调用函数和被调用函数是同一个函数,要注意递归函数的调用层次,如果把调用递归函数的主函数称为第0层,进入函数后,首次递归调用自身称为第1层调用;从第i层递归调用自身称为第i+1层。反之,退出第i+1层调用应该返回第i层。
- 递归函数的内部执行过程。一个递归函数的调用过程类似于多个函数的嵌套的调用,只不过调用函数和被调用函数是同一个函数。
2.罗列本周一些错题。
线性表用顺序实现。请填空写一个求线性表L 中所有奇数之和的算法。
例如:
L=(1,2,3,4,5) 其和为 9
#include<stdio.h>
#define N 10
typedef struct sqlist
{
int data[N];
int last;
}LIST;
int Total(List list)
{
return sum;
}
void Show(LIST list)
{
int i;
for(i=0;i<=list.last;i++)
printf("%3d", list.data[i]);
printf("\n");
}
int main()
{
LIST list;
int i,sum;
for(i=0;i<=5;i++)
list.data[i]=i;
list.last=5;
Show(list);
sum=Total(list);
printf("sum=%3d\n",sum);
return 0;
}
答案
int sum=0;
for(int i=0;i<=list.last;i++)
if(list.data[i]%2)
sum+=list.data[i];
程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
函数fun的功能是将形参a所指结构体变量s中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。
例如:a所指变量s中的学号、姓名、和三门课的成绩依次是:
10001、" ZhangSan "、95、80、88,
修改后输出t中的数据应为:10002、"LiSi "、96、81、89。
#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
程序改错题:
输入一个正整数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 <string.h>
typedef struct student{
char name[10];
long sno;
float score;
}STU;
main( )
{ STU
a={“zhangsan”,2001,95},b={“Shangxian”,2002,90},c={“Anhua”,2003,95},d,*p=&d;
d=a;
if(strcmp(a.name,b.name)>0) d=b;
if(strcmp(c.name,d.name)>0) d=c;
printf(“%ld%s\n”,d.sno,p->name); }
答案
2002Shangxian