第二次作业(第二学期)

作业要求一 (20分)

完成下列编程题目,每次上完课都会增加2-3道题目,并将编程过程记录在博客里,一次PTA作业任选一道题目给出设计思路、流程图、源代码和错误记录,其他题目可只给出设计思路、源代码和错误记录:

1)C高级第一次PTA作业(1)

2)C高级第一次PTA作业(2)

3)C高级第一次PTA作业(3)

4)C高级第一次PTA作业(4)

作业要求二(65分)

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

1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:将所给字符串的每个字符的值进行比较,看其是否在0到9内。
第二步:如果不在0到9内则输入至另一字符数组,否则略过,比较下一字符。
第三步:将新数组的字符串复制到原数组。
(2)流程图(4分)

2.实验代码(2分)

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

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

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

1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:以每个字母为起点进行比较看其与其后的2个字符是否为asd。
第二步:如是,则count进行一次计数。
第三步:返回count的值。
(2)流程图(4分)

2.实验代码(2分)

int fun(char *str,char *substr)
{
	int i;
	int count=0;
	for(i=0;;i++)
	{
		if(str[i]=='')
		{break;
		}
		if(str[i]=='a')
		{
			if(str[i+1]=='s')
			{if(str[i+2]=='d')
			{count++;
			}
			}
			
		}
	}
return count;
}

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

题目6-9 字符串中除首尾字符外的其余字符按降序排列
1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:在略过第一个字符和最后一个字符的基础上,利用选择排序的方法。
第二步:从第二个字符开始,每一轮选出最大值放在最前面。
第三步:之后每次循环略过已排好的字符,从还未排序的第一个字符进行如上排序操作。
(2)流程图(4分)

2.实验代码(2分)

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

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

题目7-1 输出学生成绩
1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:输入学生成绩数,并依次输出其成绩。
第二步:进行求和运算,求平均值运算,并选出其最值。
第三步:输出均值,最值。
(2)流程图(4分)

2.实验代码(2分)

#include<stdio.h>
#include<stdlib.h>
int main()
{int *p;
  int n;
  int i;
  double ave=0,max=0,min=0,sum=0;
  scanf("%d",&n);
  p=(int*)calloc(n,sizeof(int));	
    for(i=0;i<n;i++)
    {scanf("%d",(p+i));
	}
	min=*(p+0);
	max=*(p+0);
	for(i=0;i<n;i++)
	{sum=sum+*(p+i);
	if(*(p+i)<min)
	{min=*(p+i);
	 } 
	 if(*(p+i)>max)
	 {max=*(p+i);
	 }
	}
	ave=sum/n*1.0;
	printf("average = %.2lf
max = %.2lf
min = %.2lf",ave,max,min);
	free(p);	
	return 0;
}

3.本题调试过程碰到问题及解决办法(4分)
错误原因:忽略了int除以double乘1.0的括号导致错误

提交列表

题目7-1 计算职工工资

1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:涉及输入多种类型数据,故先定义结构体
第二步:输入人数,依次输入其各项数据,同时进行求和计算
第三步:按输入顺序 输出其姓名 及数据
(2)流程图(4分)

2.实验代码(2分)

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

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

7-2 计算平均成绩

1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:涉及多个类型数据,定义结构体
第二步:输入人数,并依次输入各项数据,同时进行求和计算
第三步:求出均值,并将每组的great值与其比较,输出比其小的姓名及数值。
(2)流程图(4分)

2.实验代码(2分)

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

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

提交列表

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

1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:根据每个人分数,给低于60的计一次数。
第二步:根据每个人的分数所在层次给其grade赋值。
第三步:返回所计次数。
(2)流程图(4分)

2.实验代码(2分)

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

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

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

1.设计思路(6分)
(1)主要描述题目算法(2分)。
第一步:根据每一个结构体内各数据求和。
第二步:根据其和的值按照选择排序法对结构体数组各元素排序。
第三步:输出结构体数组各元素。
(2)流程图(4分)

2.实验代码(2分)

void calc(struct student *p,int n)
{
	int i;
	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,j,mark;
     float max;
     struct student t;
	for(i=0;i<n;i++)
	{   mark=i;
		max=(p+i)->sum;
	for(j=i;j<n;j++)
	{
		if((p+j)->sum>max)
		{
			max=(p+j)->sum;
			mark=j;
		}
	}
	t=*(p+i);
	*(p+i)=*(p+mark);
	*(p+mark)=t;
	}
}

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

提交列表


要求三、学习总结和进度(15分)

1、总结两周里所学的知识点有哪些学会了?(可记录每道作业题目所用的知识点)哪些还没有学会?
学会了:1.结构数组的使用
2.结构体作为函数参数
3.结构体的定义与初始化
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
地址:https://git.coding.net/Donahue_Xu/The-Second-Homework2.git

截图:

3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业,无点评作业(你的作业未被3人点评)/或者没有回复同学或老师的点评都倒扣该题分数。(4分)
刘炜旗:http://www.cnblogs.com/ryo-/p/8746826.html
赵寅胜:http://www.cnblogs.com/2017023960ZYS/p/8653086.html
史泽文:http://www.cnblogs.com/shilcz/p/8696341.html

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

折线图:

原文地址:https://www.cnblogs.com/xmb1547828350/p/8657376.html