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;

}
posted @ 2017-12-24 15:07  一叶落而秋将至  阅读(443)  评论(0编辑  收藏  举报