第二次作业(2)

时间:2020-12-31 22:04:29

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

1、设计思路:

第一步:定义函数。
第二步:从不是空格的第一个字符开始判断,如果它不在0到9的范围内就将这个字符重新放到指针s中,按顺序进行。
第三步:直到空格停止。

2、实验代码

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

3、本题调试过程碰到问题及解决办法

错误1:在定义时忘记在末尾加分号并缺少一个中括号造成编译错误。
错误2:将j++放在了for循环的外面,造成输出只有一个数。

4、提交列表

第二次作业(2)
第二次作业(2)

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

1、设计思路

第一步:定义函数。
第二步:因为题目给了固定的输入和所查找的字符串所以直接通过for循环在不是空格的第一个字符开始寻找连续三个字符都相等的字符串,如果相等则n递加。
第三步:返回n。

2、实验代码

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

3、本题调试过程碰到问题及解决办法

错误1:n++错打成n=+。
第二次作业(2)
错误2:应该在for循环中判断是否为空格。
第二次作业(2)

4、提交列表

第二次作业(2)

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

1、设计思路

第一步:定义函数。
第二步:结合冒泡排序法除去字符串的第一位和最后一位进行排序,定义temp来实现交换。
第三步:结束。

2、流程图

第二次作业(2)
第二次作业(2)

3、实验代码

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

4、本题调试过程碰到问题及解决办法

4、提交列表

第二次作业(2)

7-1 输出学生成绩

1、设计思路

第一步:定义所需变量,根据要求先输入。
第二步:将*s中的首地址看做是最大值和最小值,之后判断如果遇到比它大的数则把新的数赋给最大值,一直到最后一个数,最小值同理。
第三步:计算平均值、输出、加上动态内存分配,输出。

2、实验代码

#include<stdio.h>
#include<stdlib.h>
int main()
{
  int *s;
  int N;
  double average,max,min,sum=0;
  int i=0;
  scanf("%d/n",&N);
  if((s=(int*)malloc(N*sizeof(int)))==NULL)
  exit(1);
  for(i=0;i<N;i++)
  {
    scanf("%d/n",s+i);
  }
  max=*s;
  min=*s;
  for(i=0;i<N;i++)
  {
    sum=sum+*(s+i);
   
    if(*(s+i)>max)
    {
      max=*(s+i);
    }
    if(*(s+i)<min)
    {
      min=*(s+i);
    }
  } 
  average=sum/N;
  printf("average = %.2f\n",average);
  printf("max = %.2f\n",max);
  printf("min = %.2f",min);
  free(s);
  return 0;
}

3、本题调试过程碰到问题及解决办法

错误1:没有看到题目中的提示没有用动态内存分配,一直处于编译错误的状态,在同学的帮助下修改完成。
第二次作业(2)

5、提交列表

第二次作业(2)

7-1 计算职工工资

1、设计思路

第一步:定义结构,按照其要求定义变量类型。
第二步:输入并计算平均值。
第三步:输出。

2、实验代码

#include<stdio.h>

struct employee{
  char name[10];
  float base;
  float floating;
  float payment;
}employee1;
int main()
{
  int N,i;
  float  fsalary;
  scanf("%d\n",&N);
  for(i=0;i<N;i++)
  {
    scanf("%s %f %f %f",employee1.name,&employee1.base,&employee1.floating,&employee1.payment);
    fsalary=employee1.base+employee1.floating-employee1.payment;
    printf("%s %.2f\n",employee1.name,fsalary);
  }
}

3、本题调试过程碰到问题及解决办法

4、提交列表

第二次作业(2)

7-2 计算平均成绩

1、设计思路

第一步:定义结构和变量类型。
第二步:输入并计算平均值。
第三步:通过for循环中if语句判断分数是否高于平均值,并输出低于平均分的同学姓名学号。

2、流程图:

第二次作业(2)

3、实验代码:

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

4、本题调试过程碰到问题及解决办法

错误1:student打错了。
第二次作业(2)
错误2:刚开始并没有将结构变量student1定义成数组所以一直都只能输出一个未达到平均分的同学姓名学号。
第二次作业(2)

5、提交列表

第二次作业(2)

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

1、设计思路

第一步:定义函数,根据题意可知它判断学生分数的‘A'、’B‘、’C‘、’D‘等且计算不及格人数。
第二步:通过if语句判断分别给等级,如果为’D‘等则count++。
第三步:输出。

2、流程图

第二次作业(2)

3、实验代码

int set_grade( struct student *p, int n )
{
  int i,count=0;
  for(i=0;i<n;i++)
  {
    if(p[i].score<=100&&p[i].score>=85)
    {
      p[i].grade='A';
    }
    if(p[i].score<85&&p[i].score>=70)
    {
      p[i].grade='B';
    }
    if(p[i].score<70&&p[i].score>=60)
    {
      p[i].grade='C';
    }
    if(p[i].score<60)
    {
      p[i].grade='D';
      count++;
    }
  }
  return count;
}

4、本题调试过程碰到问题及解决办法

第二次作业(2)
最后一个if判断出现了else,前面的‘A'、’B‘、’C‘等并没有跳出循环所以会进入else输出错误答案。

5、提交列表

第二次作业(2)

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

1、设计思路

第一步:这道题需要完成两个函数,首先是求总分,将总分赋初值0,后先循环确保计算了每一学生的总分,其次循环一个学生的各科成绩,最后叠加。
第二步:第二个排序,利用冒泡排序法,引入一个量交换位置。
第三步:结束。

2、实验代码

void calc(struct student *p,int n)
{
  int i,j;
  p->sum=0;
  for(i=0;i<n;i++,p++)
  {
  for(j=0;j<3;j++)
  {
   p->sum=p->sum+p->score[j];
     }
     }
}     
void sort(struct student *p,int n)
{
  int i,j;
  struct student temp;
  for(i=0;i<n;i++)
  {
     for(j=0;j<n-1-i;j++)
      {
      if((p+j)->sum<(p+j+1)->sum)
      {
         temp=*(p+j+1);
        *(p+j+1)=*(p+j);
        *(p+j)=temp;    
        }        
        }
    }
}

3、本题调试过程碰到问题及解决办法

第二次作业(2)
在交换时直接定义了一个整型temp,没有考虑到所要交换的是结构。

4、提交列表

第二次作业(2)

学习总结和进度

1、总结两周里所学的知识点有哪些学会了?(可记录每道作业题目所用的知识点)哪些还没有学会?

这两周我们主要学习了结构,结构的用法,但不够熟练。

2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。请注意git地址应是类似“https://git.coding.net/Dawnfox/wf4_2.git”这样的字符串且是可被访问者直接点击进行访问的链接

我的git地址是:https://coding.net/u/zhouxuan12/p/123/git?public=true
第二次作业(2)
第二次作业(2)

3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业,无点评作业(你的作业未被3人点评)/或者没有回复同学或老师的点评都倒扣该题分数。

http://www.cnblogs.com/fengzx/p/8735254.html
http://www.cnblogs.com/gu-an-cheng-wxm/p/8697025.html
http://www.cnblogs.com/dx2017/p/8666072.html

4、图表

第二次作业(2)
第二次作业(2)