2018c语言第2次作业

1 删除字符串中数字字符

1.设计思路

(1)主要描述题目算法
第一步:先用for循环比较每个数是否符合删除条件。
第二步:如果符合就把这个数利用交换把这个数提前一位。

2.实验代码

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

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

无错误.

2 统计子串在母串出现的次数

1.设计思路

(1)主要描述题目算法
第一步:定义一个sum作为返回值。
第二步:用循环和条件语句判断这个数是否等于'a','s','d'。等于就使sum加一。
第三步:返回sum。
(2)流程图

2.实验代码

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

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

无问题.

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

1.设计思路

(1)主要描述题目算法
第一步:通过定义初值来空开最前和最后两个数值。
第二步:根据循环和判断来判断大小交换选出最大值排在前面。
第三步:然后不符合条件就一直返回函数不断循环。

2.实验代码

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

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

无。

4输出学生成绩

1.设计思路

(1)主要描述题目算法
第一步:定义一个数组来储存所给的数。
第二步:根据条件找出最大值,最小值和平均值。
第三步:最后再保留两位小数输出。

2.实验代码

#include <stdio.h>
#include <math.h>
#define N 1000 
int main()
{
  int n,i=0;
  float average=0,max=0,sum=0;
  int a[n];
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
    scanf("%d",&a[i]);
  }
  float min=a[0];
  for(i=0;i<n;i++)
  {
    if(max<a[i])
    max=a[i];
    if(min>a[i])
    min=a[i];
    sum=a[i]+sum;
  }
    printf("average = %.2lf\n",sum/n);
    printf("max = %.2lf\n",max);
    printf("min = %.2lf",min);
  return 0;
}

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

错误原因:输出格式有问题。
改正方法:把%lf换成%.2lf就正确了。

5计算职工工资

1.设计思路

(1)主要描述题目算法
第一步:定义一个结构体,利用数组储存所给的数值。
第二步:根据for循环求出最后的总工资。
第三步:最后按所给的格式保留两位小数输出。

2.实验代码

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

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

错误原因:结构体运用不熟练,结构体数组定义错误.
改正方法:在主函数内定义struct wages a[N]即可。

6计算平均成绩

1.设计思路

(1)主要描述题目算法
第一步:利用结构体把数值存入数组,把编号定义成字符方便最后输出。
第二步:把分数相加除以人数求平均值。
第三步:判断低于平均线的人再进行输出。
(2)流程图

2.实验代码

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

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

(无)

7 判断回文字符串

1.设计思路

(1)主要描述题目算法
第一步:利用指针根据分数用不同的条件进行赋值。
第二步:定义一个初值为0的数作为不及格人数,没有一个'D'就加一。
第三步:返回不及格的人数。
(2)流程图

2.实验代码

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

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

7结构体数组按总分排序

1.设计思路

(1)主要描述题目算法
第一步:先求出每个人成绩的总和,再进行比较。
第二步:把成绩高的人往前排。
第三步:然后一直循环这个函数知道符合条件。

2.实验代码

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

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

无。

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

这两周我学会了结构的概念,结构变量的定义和初始化结构变量的使用。

2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。请注意git地址应是类似


https://git.coding.net/yangzhiqun/cfsafa.git

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

徐伟业http://www.cnblogs.com/xuweiye/p/8747209.html
徐铭博http://www.cnblogs.com/xmb1547828350/p/8657376.html于耀淞http://www.cnblogs.com/jsjyys/p/8672972.html###4、请用表格和折线图呈现你本周(3/12 8:00~3/26 8:00)的代码行数和时间、博客字数和时间(3分)。

posted @ 2018-04-08 21:57  杨志群  阅读(387)  评论(2编辑  收藏  举报