第2次作业

6-7 删除字符串中数字字符
1 设计思路
(1)主要描述题目算法
第一步:定义相应数组的指针。
第二步:在循环中判断非数字字符,保留原数组的非数字字符。
第三步:循环结束后添加字符串结束符。
(2)流程图


2.实验代码

#include "stdio.h"
void delnum(char *s);
int main ()
{ char item[80];
gets(item);
 delnum(item);
 printf("%s\n",item);
 return 0;
}

void delnum(char *s)
{
	char *p = s;
	while(*p != '\0')
	{
		if((*p < '0')||(*p > '9'))
		{
			*s++ = *p;
		}
		*p++;
	}
	*s = '\0';
}

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

6-8 统计子串在母串出现的次数
1 设计思路
(1)主要描述题目算法
第一步:在循环中判断母串中每个字符后三位是否完全与字串相符。
第二步:在循环中每符合一次字串增加计数器。
第三步:返回计数。
(2)流程图


2.实验代码

#include<stdio.h>
int fun(char *str,char *substr);
int main()
{ char str[81]="asdasasdfgasdaszx67asdmklo",substr[4]="asd";
 int n;
 n=fun(str,substr);
 printf("n=%d\n",n);
 return 0;
}


int fun(char *str,char *substr)
{
	int a,b,n;
	for(a = 0,n = 0;*(str + a) != '\0';a = a + 1)
	{
		for(b = 0;b < 3;b = b + 1)
		{
			if(*(str + a + b) != *(substr + b))
			{
				break;
			}
		}
		if(b >= 3)
		{
			n = n + 1;
		}
	}
	return n;
}

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

6-9 字符串中除首尾字符外的其余字符按降序排列
1 设计思路
(1)主要描述题目算法
第一步:在除首尾字符的字符串内进行冒泡排序。
第二步:将字符按ASCII码降序排列。
(2)流程图


2.实验代码

#include <stdio.h>
int fun(char *s,int num);
int main()
{
 char s[10];
 gets(s);
 fun(s,7);
 printf("%s",s);
 return 0;
 }

int fun(char *s,int num)
{
	char x;
	int a,b;
	for(a = 0;a < (num - 3);a = a + 1)
	{
		for(b = 0;b < (num - 3 - a);b = b + 1)
		{
			if(*(s + b + 1) < *(s + b + 2))
			{
				x = *(s + b + 1);
				*(s + b + 1) = *(s + b + 2);
				*(s + b + 2) = x;
			}
		}
	}	
}

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

7-1 输出学生成绩
1 设计思路
(1)主要描述题目算法
第一步:输入人数申请动态内存。
第二步:在循环内输入成绩,储存总值,最大值,最小值。
第三步:计算平均值,输出对应值。
第四步:释放内存。
(2)流程图

2.实验代码

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int a,n,*p;
	double ave,max,min;
	scanf("%d",&n);
	p = (int *)calloc(n,sizeof(int));
	for(a = 0,ave = 0;a < n;a = a + 1)
	{
		scanf("%d",(p + a));
		if(a == 0)
		{
			max = *(p + a);
			min = *(p + a);
		}
		ave = ave + *(p + a);
		if(max <= *(p + a))
		{
			max = *(p + a);
		}
		if(min >= *(p + a))
		{
			min = *(p + a);
		}
	}
	ave = ave / n;
	printf("average = %.2f\nmax = %.2f\nmin = %.2f",ave,max,min);
	free (p);
}

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

7-1 计算职工工资
1 设计思路
(1)主要描述题目算法
第一步:构造数据类型,输入人数。
第二步:在循环内输入相应数据,计算相应数值。
第三步:输出相应值。
(2)流程图

2.实验代码

#include <stdio.h>
struct staff
{
	char name[10];
	float basic_salary;
	float floating_wage;
	float expenditure;
};
int main()
{
	struct staff s1;
	int n,a;
	float real_wages;
	scanf("%d",&n);
	for(a = 0;a < n;a = a + 1)
	{
		scanf("%s %f %f %f",s1.name,&s1.basic_salary,&s1.floating_wage,&s1.expenditure);
		real_wages = s1.basic_salary + s1.floating_wage - s1.expenditure;
		printf("%s %.2f\n",s1.name,real_wages);
	}		
}

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

7-2 计算平均成绩
1 设计思路
(1)主要描述题目算法
第一步:构造数据类型数组,输入人数。
第二步:在循环内输入相应值,计算总值。
第三步:计算平均值输出。
第四步:在循环内判断程序输出相应数据。
(2)流程图

2.实验代码

#include <stdio.h>
struct student
{
	char student_id[6];
	char name[10];
	int grade;
};
int main()
{
	struct student s[10];
	int n,a,sum;
	double ave;
	scanf("%d",&n);
	for(a = 0,sum = 0;a < n;a = a + 1)
	{
		scanf("%s %s %d",s[a].student_id,s[a].name,&s[a].grade);
		sum = sum + s[a].grade;
	}
	ave = sum / (1.0 * n);
	printf("%.2f\n",ave);
	for(a = 0;a < n;a = a + 1)
	{
		if(s[a].grade < ave)
		{
			printf("%s %s\n",s[a].name,s[a].student_id);
		}
	}
}

3.本题调试过程碰到问题及解决办法
错误信息1:输出学号时同时输出了姓名。
错误原因:缺少字符串结束符。
改正方法:定义学号时增加范围。

6-1 按等级统计学生成绩
1 设计思路
(1)主要描述题目算法
第一步:在循环内判断学生成绩并判断更改成绩等级。
第二步:在循环内判断不及格人数并计数结束后返回。
(2)流程图


2.实验代码

#include <stdio.h>
#define MAXN 10

struct student{
    int num;
    char name[20];
    int score;
    char grade;
};

int set_grade( struct student *p, int n );

int main()
{   struct student stu[MAXN], *ptr;
    int n, i, count;

    ptr = stu;
    scanf("%d\n", &n);
    for(i = 0; i < n; i++){
       scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
    } 
   count = set_grade(ptr, n);
   printf("The count for failed (<60): %d\n", count);
   printf("The grades:\n"); 
   for(i = 0; i < n; i++)
       printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
    return 0;
}

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

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

6-2 结构体数组按总分排序
1 设计思路
(1)主要描述题目算法
第一步:在循环内计算更改学生总成绩。
第二步:构造一个相同结构。
第三步:冒泡排序判断总成绩进行排序。
(2)流程图



2.实验代码

#include <stdio.h>
struct student					
{
int num;
char name[15];
float score[3];
float sum;
};
void calc(struct student *p,int n);	 
void sort(struct student *p,int n);
int main()
{
struct student stu[5];
int i,j;
float f;
for(i=0;i<5;i++)
{
	scanf("%d%s",&stu[i].num,stu[i].name);
	for(j=0;j<3;j++)
	{ 
    	scanf("%f",&f);
		stu[i].score[j]=f;
	}
}
calc(stu,5);
sort(stu,5);
for(i=0;i<5;i++)
{
	printf("%5d%15s",stu[i].num,stu[i].name);
	printf("  %.1f  %.1f  %.1f  %.1f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2], stu[i].sum);
}
return 0;
}


void calc(struct student *p,int n)
{
	int a;
	float sum = 0;
	for(a = 0;a < n;a = a + 1)
	{
		(&p[a])->sum = p[a].score[0] + p[a].score[1] + p[a].score[2];
	}
}
void sort(struct student *p,int n)
{
	struct student q;
	int a,b;
	for(a = 0;a < (n - 1);a = a + 1)
	{
		for(b = 0;b < (n - a - 1);b = b + 1)
		{
			if(p[b].sum < p[b + 1].sum)
			{
				q = p[b];
				p[b] = p[b + 1];
				p[b + 1] = q;
			}
		}
	}
}

3.本题调试过程碰到问题及解决办法
错误信息1:答案错误。
错误原因:未完全检验多种情况,出现多种排序错误。
改正方法:更改使用冒泡排序。

学习总结和进度
1、总结两周里所学的知识点有哪些学会了?(可记录每道作业题目所用的知识点)哪些还没有学会?
学习了动态内存分配,结构。
结构数组使用,结构函数使用,指针传递结构体数据。
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
1.git地址
https://git.coding.net/z732511533/ZYS.git


3、点评3个同学的本周作业。
http://www.cnblogs.com/xmb1547828350/p/8657376.html
http://www.cnblogs.com/dx2017/p/8666072.html
http://www.cnblogs.com/fengzx/p/8672569.html
4、请用表格和折线图呈现你本周(3/26 8:00~4/9 8:00)的代码行数和所用时间、博客字数和所用时间。

时间 代码行数 时间1(min) 博客字数 时间2(min)
3.26 97 100 564 20
3.27 0 0 355 70
3.28 0 0 0 0
3.29 60 70 0 0
3.30 0 0 0 0
3.31 0 0 0 0
4.01 0 0 572 57
4.02 150 88 426 78
4.03 0 0 0 0
4.04 0 0 0 0
4.05 0 0 0 0
4.06 0 0 0 0
4.07 0 0 0 0
4.08 0 0 129 25
4.09 0 0 0 0

posted @ 2018-04-08 19:40  左右羽  阅读(230)  评论(8编辑  收藏  举报