第二次作业

作业要求一

作业截图:
6-7:

6-8:

6-9:

7-1:

7-1:

6-1:

6-2:

作业要求二

作业要求二

题目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)本题调试过程中碰到的问题及解决方法
本题中的且的符号||最开始我用的并的符号&&,结果出现了这种情况,最后我发现只需要满足一组条件就能完成,不需要用并的符号。

题目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语句来遍历数组,找出子串在母串中出现的次数,逐一判断。
第二步:应该用子串中的每一个循环变量寻找,所以循环变量要逐一增加,而不是用子串寻找。
流程图

(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,每一行输入职员的信息,再给相应的变量赋初值,在根据题目中的公式计算实发工资,最后输出。
流程图:

(3)本题调试过程中碰到的问题及解决方法
上课的时候老师讲的结构体定义,只是听懂了结构体定义这个知识点,如何运用还是不懂,然后看了一下下一节的结构体数组,再结合这道题就感觉用数组比较简单,最后没注意看结应该保留小数点后两位,结果导致答案错误如下图。

题目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赋值,最后进行不及格人数返回值的操作。
流程图:

(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地址:

地址
截图:

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

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

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

表格:

折线图:

posted @ 2018-04-03 19:25  胡景文  阅读(234)  评论(5编辑  收藏  举报