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

一、PTA实验作业

6-4 结构体数组按总分排序

1. 本题PTA提交列表

1233242-20171224154518521-1722665115.png

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.代码截图

1233242-20171224155017818-267213506.png

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

第一个函数没问题,但是第二个函数一开始一直排序错误。
第一次是是根本不排序,后来意识到是我代码写错,应该是拿结构体z去比,我写成拿max去比
1233242-20171224155712896-1334262955.jpg

第二个错误是排序不对,检查后发现我排序比的内容应该是和主循环的结构体比,也就是应该把if语句中的 i 改成 j ;
1233242-20171224155813865-1830693312.jpg

7-2 时间换算

1. 本题PTA提交列表

1233242-20171224171732490-505728448.png

1233242-20171224171809271-2111623558.png

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.代码截图

1233242-20171224172333912-2116206087.jpg

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

一开始是当数值为0时,输出应该表示成00,但是我没注意到这个问题,所以输出错误。可是后来也不知道怎么解决,就用了一个特蠢的办法,具体如上代码截图。
1233242-20171224221114865-1120186362.jpg

第二个问题是无进阶输出错误,后来发现是粗心代码写错;
1233242-20171224221415053-25035770.jpg

7-6 通讯录的录入与显示

1. 本题PTA提交列表

1233242-20171225153348978-841894380.png

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.代码截图

1233242-20171225190452056-369939510.png

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

一开始无法输入K,求助同学后发现是scanf语句中引号内应加空格,否则空格会被字符数组吸收
1233242-20171225191251822-1883818114.jpg

后来是一些语法错误,导致会输出两个not found
1233242-20171225191524806-419527795.jpg

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

1233242-20171225153256353-905933534.png

三、阅读代码

#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;

}

转载于:https://www.cnblogs.com/yiyeluo0701/p/8098111.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值