第二次作业

作业要求一

作业截图:
6-7:
1240942-20180403192441289-1912056305.png
6-8:
1240942-20180403192559153-1726776812.png
6-9:
1240942-20180403192624648-215071464.png
7-1:
1240942-20180403192646219-101300647.png
7-1:
1240942-20180408210815379-1650162978.png
6-1:
1240942-20180408210920134-1644374512.png

6-2:
1240942-20180408210925135-197144780.png

作业要求二

作业要求二

题目6-7 删除字符串中数字字符

(1) 实验代码

void delnum(char *s)
{
char a[80];
int i=0,j=0;
for(j=0,j=0;*(s+i)!='\0';i++)
{
  if(s[i]>'9'||s[i]<'0')
  {
    a[j]=s[i];
    j++;
  }
}
a[j]='\0';
strcpy(s,a);
}

(2) 设计思路
主要描述题目算法
第一步:本题的要求是删除给出的一行字符串中的数字字符,需要用数组遍历字符串,遇到数字,就删除,然后将之后的字符向前移动。
第二步:我的方法先定义两个变量ij然后用if循环遍历数组中元素判断数字字符并将其删除,之后将字符向前移动。
(3)本题调试过程中碰到的问题及解决方法
本题中的且的符号||最开始我用的并的符号&&,结果出现了这种情况,最后我发现只需要满足一组条件就能完成,不需要用并的符号。
1240942-20180407190914244-1590591737.png

题目6-8 统计子串在母串出现的次数

(1) 实验代码

int fun(char *str,char *substr)
{
int i=0,j=0;
for(j=0;str[j]!='\0';j++)
  {
    if(substr[0]==str[j]&&substr[1]==str[j+1]&&substr[2]==str[j+2])
    {
      i++;
    }
  }
  return i;
}

(2) 设计思路
主要描述题目算法
第一步:运用if语句来遍历数组,找出子串在母串中出现的次数,逐一判断。
第二步:应该用子串中的每一个循环变量寻找,所以循环变量要逐一增加,而不是用子串寻找。
流程图
1240942-20180408214159073-1310972182.png

(3)本题调试过程中碰到的问题及解决方法
本题没有问题。

题目6-9 字符串中除首尾字符外的其余字符按降序排列

(1) 实验代码

int fun(char *s,int num)
 {
    int i=0,j=0;
    for(i=1;i<num-1;i++)
    {
        for(j=1;j<num-2;j++)
        {
            if(*(s+i)>*(s+j))
            {
                int t;
                t=*(s+i);
                *(s+i)=*(s+j);
                *(s+j)=t;
            }
         }
     }
 }

(2) 设计思路
主要描述题目算法
第一步:跟前两道题的方法差不多,需要遍历数组,还需要加上冒泡法的方法。
第二步:开始定义循环变量,之后遍历数组,然后用冒泡方法对除了首尾字符的字符进行排序。
(3)本题调试过程中碰到的问题及解决方法
本题没有问题

题目7-1 输出学生成绩

(1) 实验代码

#include<stdio.h>
int main()
{
    int n=0;
    scanf("%d",&n);
    int a[n],i=0,sum=0,max=0,min=0;
    float ave=0;
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        sum=sum+a[i];
    }
    ave=(float)(sum*1.0/n*1.0);
    for(i=0;i<n;i++)
    {
        if(a[min]>a[i])
        {
            min=i;
        }
    }
    for(i=0;i<n;i++)
    {
        if(a[max]<a[i])
        {
            max=i;
        }
    }
    printf("average = %.2f\nmax = %.2f\nmin = %.2f",ave,(float)a[max],(float)a[min]);
    
}

(2) 设计思路
主要描述题目算法
第一步:
(3)本题调试过程中碰到的问题及解决方法
本题没有问题

题目7-1计算职工工资

(1) 实验代码

#include<stdio.h>
struct employer{
    char name[10];
    float a;
    float b;
    float c; 
};
int main()
{
    int N=0,i=0;
    scanf("%d",&N);
    struct employer e[N];
    for(i=0;i<N;i++)
    {
        scanf("%s %f %f %f",e[i].name,&e[i].a,&e[i].b,&e[i].c);
    }
    for(i=0;i<N;i++)
    {
        printf("%s %.2f\n",e[i].name,e[i].a+e[i].b-e[i].c); 
    }
}

(2) 设计思路
第一步:首先定义一个结构体,在结构体中定义题目中的姓名、基本工资、浮动工资和支出,还应该注意题目中的精度要求;
第二步:在主函数里面输入正整数n,每一行输入职员的信息,再给相应的变量赋初值,在根据题目中的公式计算实发工资,最后输出。
流程图:
1240942-20180407195717889-583645274.png
(3)本题调试过程中碰到的问题及解决方法
上课的时候老师讲的结构体定义,只是听懂了结构体定义这个知识点,如何运用还是不懂,然后看了一下下一节的结构体数组,再结合这道题就感觉用数组比较简单,最后没注意看结应该保留小数点后两位,结果导致答案错误如下图。
1240942-20180408170802235-1099390437.png

题目7-2 计算平均成绩

(1) 实验代码

#include<stdio.h>
struct student
{
    char name[10];
    char a[5];
    int b;
};
int main()
{
    int n=0,i=0,sum=0;
    float average;
    scanf("%d",&n);
    struct student s[n];
    for(i=0;i<n;i++)
    {
        scanf("%s %s %d",s[i].a,s[i].name,&s[i].b);
        sum=sum+s[i].b;
    }
    average=(float)(sum*1.0/n*1.0);
    printf("%.2f\n",average);
    for(i=0;i<n;i++)
    {
        if((float)(s[i].b)<average)
        {
            printf("%s %s\n",s[i].name,s[i].a);
        }
    }
}

(2) 设计思路
第一步:首先定义一个结构体,里面定义学号(字符类型)、姓名和成绩,然后在主函数中定义几个变量n、i、sum、average;
第二步:在输入n行后,把每个学生的成绩进行求和,求和后就可以求出平均值;
第三不:最后进行遍历数组,进行比较,找出成绩在平均值以下的学生,输出结果,要注意平均值的精度范围。
(3)本题调试过程中碰到的问题及解决方法
本题没有问题。

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

(1) 实验代码

int set_grade( struct student *p, int n )
{
    int j,num=0;
    for(j=0;j<n;j++)
    {
        if(((p+j)->score)>=85 && ((p+j)->score)<=100)
        {
            ((p+j)->grade)='A';
        }else if(((p+j)->score)>=70 && ((p+j)->score)<=84)
        {
            ((p+j)->grade)='B';
        }else if(((p+j)->score)>=60 && ((p+j)->score)<=69)
        {
            ((p+j)->grade)='C';
        }else if(((p+j)->score)>=0 && ((p+j)->score)<=59)
        {
            ((p+j)->grade)='D';
            num=num+1;
        }
    }
    return num;
}

(2) 设计思路
第一步:首先定义循环变量j和用来统计不及格人数的num,在后面通过if循环条件判断不及格人数;
第二步:然后需要遍历这个数组,用if循环条件进行判断,给出每个学生相应的等级,并给grade赋值,最后进行不及格人数返回值的操作。
流程图:
1240942-20180408193718818-1860091399.png
(3)本题调试过程中碰到的问题及解决方法
本题没有问题。

题目6-2 结构体数组按总分排序

(1) 实验代码

#include <stdio.h>
void calc(struct student *p,int n)
{
    int i=0;
    for(i=0;i<n;i++)
    {
        (p+i)->sum=(p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2];
    }   
}
void sort(struct student *p,int n)
{
    int i=0,l=0;
    struct student swap;
    for(i=0;i<n;i++)
    {
        for(l=i+1;l<n;l++)
        {
            if(p[i].sum<p[l].sum)
            {
                swap=p[i];p[i]=p[l];p[l]=swap;
            }
        }
    }
    
}

(1)设计思路
第一步:首先计算总分,先在定义的第一个函数里进行定义循环变量i,之后通过遍历数组来计算出总分;
第二步:在计算出总分之后,可以开始根据总成绩进行排名。
(3)本题调试过程中碰到的问题及解决方法
本题没有问题。

作业要求三学习总结和进度

1、总结两周里所学的知识点有哪些学会了?

本周主要学习了如何定义一个结构体,还有结构体数组和结构体指针,还有学习了字符串在结构体中的应用,较以前的知识更加繁琐,所以需要上课认真听讲,对于结构的应用自己不是很熟练,尤其是结构体指针的知识掌握的不娴熟,导致pta上指针的题做了很久还有通过同学的指点才做出来,以后应该多培养自己的思维能力。

2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址:

地址
截图:
1240942-20180408195931447-69453658.png

3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业:

点评的同学:
张金禹
高立彬
班庆泽
邀请点评的同学:
丰大为
高立彬
班庆泽

4、请用表格和折线图呈现你本周(3/26 8:00~4/9 8:00)的代码行数和所用时间、博客字数和所用时间

表格:
1240942-20180408210506604-149931741.png
折线图:
1240942-20180408210536371-492871274.png

转载于:https://www.cnblogs.com/wshjw/p/8710431.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值