C语言博客作业--结构体
一、PTA实验作业
6-4 结构体数组按总分排序
1. 本题PTA提交列表
2. 设计思路
第一个函数,计算sum的值
1.定义循环变量i,j;
2.主循环for(i=0;i<n;i++)
3.给每次的主循环p[i].sum赋初值为0;
4.第二个循环累加sum的值p[i].sum=p[i].sum+p[i].score[j];
第二个函数,给它们排序
1.定义变量i,j用于循环
2.定义结构体 z,用于交换
3.第二个循环寻找是否有某个结构体的sum值大于主循环的sum值;
4.有的话if(p[i+1].sum>p[j].sum){
z=p[j];
p[j]=p[i+1];
p[i+1]=z;
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
第一个函数没问题,但是第二个函数一开始一直排序错误。
第一次是是根本不排序,后来意识到是我代码写错,应该是拿结构体z去比,我写成拿max去比
第二个错误是排序不对,检查后发现我排序比的内容应该是和主循环的结构体比,也就是应该把if语句中的 i 改成 j ;
7-2 时间换算
1. 本题PTA提交列表
2. 设计思路
1.定义结构体struct time;
2.定义i用于循环,second计算新增秒数;
3.定义新的结构变量;
4.如果秒数累加后超过60,分和秒都得递增if((t.ss+second)>=60){
z.ss=(t.ss+second)-60;
z.mm=(t.mm)+1;
}
5.否则只增秒数
6.分钟同上,小时数是超过24的递增到零点
7.输出if(z.hh<10)printf("0%d",z.hh);//输出时间,下同
else printf("%d",z.hh);
if(z.mm<10)printf(":0%d",z.mm);
else printf(":%d",z.mm);
if(z.ss<10)printf(":0%d",z.ss);
else printf(":%d",z.ss);
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
一开始是当数值为0时,输出应该表示成00,但是我没注意到这个问题,所以输出错误。可是后来也不知道怎么解决,就用了一个特蠢的办法,具体如上代码截图。
第二个问题是无进阶输出错误,后来发现是粗心代码写错;
7-6 通讯录的录入与显示
1. 本题PTA提交列表
2. 设计思路
1.定义结构体struct information,定义为数组类型
2.主函数定义i,j,k,n用于循环,flag,temp,number【10】用于计数
3.输入N,输入结构体数据
4.输入k,输入number【k】数据
5.使用for循环,for(j=0;j<N;j++){
if(j==number[i]){
printf("%s %s %s %c %s\n",inf[j].name,inf[j].phone,inf[j].teleph,inf[j].ch,inf[j].born);
temp++;
break;
}
7.如果temp=0if(temp==0){//temp为零说明没找到
printf("Not Found\n");
}
8.temp赋初值为0
9.return 0
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
一开始无法输入K,求助同学后发现是scanf语句中引号内应加空格,否则空格会被字符数组吸收
后来是一些语法错误,导致会输出两个not found
二、截图本周题目集的PTA最后排名。
三、阅读代码
#include<stdio.h>
#include<stdlib.h>
struct student{
int num; //学生学号??
char name[20]; //学生姓名??
char sex; //学生性别??
int age; //学生年龄??
float score; //学生成绩??
};
void main()
{
struct student student1={1001,"liming",'M',20,92.5}; //定义结构体变量??
struct student *p; //定义指针变量指向结构体类型??
p=&student1; //使指针指向结构体变量??
printf("Number:%d\n",p->num); //输出学生学号??
printf("Name:%s\n",p->name); //输出学生姓名??
printf("Sex:%c\n",p->sex); //输出学生性别??
printf("Age:%d\n",p->age); //输出学生年龄??
printf("Score:%2.1f\n",p->score); //输出学生成绩??
system("pause");
return 0;
}
四、本周学习总结(1分)
1.总结本周学习内容。
- 1.递归函数原理
递归(recursion)就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。(查阅的答案) - 2.结构体
结构体有以如下代码举例
struct student{
int num;
char name[10];
int computer,english,math;
double average;
}s1,s2;
s1,s2为结构变量,结构变量可以通过结构成员操作符‘.‘对某个成员进行引用,也可以直接赋值。结构变量可以初始化,即在定义时对其赋初值。
- 3.共用体
2.罗列本周一些错题。
程序填空题:
输入n(3<n<=10)个职工的编号、姓名、基本工资、职务工资,输出其中“基本工资+职务工资”最少和最多的职工姓名。
输入输出示例:
n=5
1,林宏,1800,600
2,李涛,1700,550
3,王钢,2100,750
4,周航,1500,450
5,金明,2300,850
基本工资+职务工资最少的是:周航
基本工资+职务工资最多的是:金明
#include<stdio.h>
struct Worker
{ int num;
char name[20];
float jbpay;
float zwpay;
};
int main()
{
______1_______;
int max=0,min=0,i,n;
printf("n=");
scanf("%d",&n);
getchar();
for (i=0;i<n;i++)
{
scanf("%d%s%f%f",______2______);
if(s[max].jbpay+s[max].zwpay <s[i].jbpay+s[i].zwpay ) ______3_______;
if(s[min].jbpay+s[min].zwpay >s[i].jbpay+s[i].zwpay )______4_______;
getchar();
}
printf("基本工资+职务工资最少的是%s\n",s[min].name);
printf("基本工资+职务工资最多的是%s\n",s[max].name);
return 0;
}
参考答案
struct Worker s[10]
&s[i].num,s[i].name,&s[i].jbpay,&s[i]zwpay
max=i
min=i
我的作答
struct worker
i+1, worker[i].name, worker[i].jbpay, woreker[i].zwpay
max=i
min=i
程序改错题:
输入一个正整数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;
}