第二次作业

一 .

    6-7.

  1.设计思路:

    (1)第一步:定义数组初值,用for语句在数组中找出出大于0小于9的数字字符。

        第二步:出现数字数组就将其后一项前移,代替数字数组,最终完成数字数组的删除。

    (2)流程图

  2.实验代码

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

 

  3.错误提示

   6-8

  1.设计思路

    (1)第一步:用for循环找出substr数组的字符串长度,并记作一个字符串。

             第二步:再运用for循环在str数组中寻找substr数组出现的次数。

  2.实验代码

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

  3.

  错误信息1:

    错误原因:在if语句中忽略了flag==1没法继续执行这一点。

    改正方法:捋顺了一下,尝试了flag==0或1的结果,最终flag=1才能继续向下执行,并正确。

  错误信息2:

    错误原因:无意在i的旁边加了两个点...

    改正方法:对着正确的图看了几遍才发现这个问题。

  6-9

   1.设计思路

    (1)第一步:先定义几个数,并将min初始化(去掉首位)。

             第二步:运用for循环将余下的字符进行比较,并将小的字符向后移动。

             第三步:将每一个字符都与后面的进行比较并移动,最终输出正确的排序。

  2.

int fun(char *s,int num)
{
  int i,min=(num-2),k;
  for(i=1;i<=min;i++)
  {
    if(s[min]>s[i])
    {
      k=s[min];
      s[min]=s[i];
      s[i]=k;
    }
  }
  if(num>0)
  {
    num--;
    fun(s,num);
  }
}

  3.

  错误信息

    错误原因:将排序的代码打成了取值的。

    改正方法:检查一遍发现执行后的结果是取值的,并改了过来。

  7-1

   1.设计思路

    (1)第一步:使用if语句来实行动态内存分配。

             第二步:运用for语句将每一项进行比较并求出最大最小值

             第三步:用总数求出平均值,最后输出这三项。

  2

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

  3.错误信息

    错误原因:最小值的取值不能从0开始,否则无法循环查找真正的最小值。

    改正方法:重复几次尝试发现最小值要递减,所以要赋一个较大的数。

二.

  

  7-1

   1.设计思路

    (1)第一步:定义结构变量,定义职工信息,运用结构变量并输入员工信息。

             第二步:运用for循环及给定公式输出他们的姓名及实发工资。

    (2)流程图

  2.实验代码

#include<stdio.h>
struct people
{
  char name[10];
  float jbgz,fdgz,zc;
  float sfgz;
};
int main()
{
  int i=0,n;
  scanf("%d",&n);
  struct people s[n];
  for(i=0;i<n;i++)
  {
    scanf("%s %f %f %f",&s[i].name,&s[i].jbgz,&s[i].fdgz,&s[i].zc);
    s[i].sfgz=(s[i].jbgz+s[i].fdgz-s[i].zc);
  }
  for(i=0;i<n;i++)
  {
    printf("%s %.2f\n",s[i].name,s[i].sfgz);
  }
}

   3.错误信息

    错误原因:没有注意要在每位职员的姓名和实发工资中间隔一个空格。

    改正方法:检查几次,试了几次,最终询问同学才知道问题,并将其改正。

  7-2

   1.设计思路

    (1)第一步:定义结构变量,定义数组,定义学生信息。

             第二步:使用结构变量,运用for循环输入其信息,算出成绩的和。

        第三步:算出平均成绩并输出。再使用for循环找出低于平均线以下的名单并输出。

   2.实验代码

#include<stdio.h>
struct student
{
  char num[6],name[10];
  int s;
}; 
int main()
{
  int i=0,n;
  double avg=0;
  scanf("%d",&n);
  struct student s[n];
  for(i=0;i<n;i++)
  {
    scanf("%s %s %d",&s[i].num,&s[i].name,&s[i].s);
    avg+=s[i].s;
  }
  avg/=n;
  printf("%.2lf\n",avg);
  for(i=0;i<n;i++)
  {
    if(s[i].s<avg)
    printf("%s %s\n",s[i].name,s[i].num);
  }
}

  3.

三.

  6-1

   1.设计思路

    (1)第一步:定义结构变量。

             第二步:在for语句中使用结构变量,再用if、else语句将各个分段区分评级。

    (2)流程图

    

   2.实验代码

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

   3.错误信息

    错误原因:if、else的使用有些混乱,导致顺序不正确。无意间还落下了两个括号

    改正方法:仔细读题分析,回想if、else的使用方法,调整用的顺序。加上括号。

  6-2

   1.设计思路

    (1)第一步:定义结构变量,运用for语句将每个人的总分成绩计算出来。

        第二步:应用结构变量,再运用for语句将每个人按照总成绩排序。

        第三步:交换他们前边的排序,并按照原顺序输出。

   2.实验代码

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,min=0;
  struct student m;
  for(i=0;i<n;i++)
  {
    if((p+i)->sum<(p+min)->sum)
    {
      min=i;
      }
  }
  m=*(p+min);
  *(p+min)=*(p+n-1);
  *(p+n-1)=m;
  if(n>1)
  {
    n--;
    sort(p,n);
  }
}

 

   3.错误信息

 

四.学习总结和进度。

  1.这两周内主要还是学习了一下上几周学的东西,感觉之前不懂得也懂一些了。这两周新学习的结构变量感觉不是很难,就是对它的编写结构还有些生疏,对于哪步该写什么还不是很熟悉,我      觉得这部分还是需要我加强的。

  2.git地址:https://git.coding.net/wangxinyu78/wang.git

  3.史泽文:http://www.cnblogs.com/shilcz/p/8696341.html

     王姝雯:http://www.cnblogs.com/phsudie/p/8661686.html

     张金禹:http://www.cnblogs.com/17-1/p/8687764.html

  4.

posted @ 2018-04-08 19:54  訫穻_Y  阅读(133)  评论(3编辑  收藏  举报