第二次作业

作业要求一


PS:提交答案正确后的再次提交是尝试不同的方法

作业要求二

题目1 删除字符串中数字字符

1. 设计思路

(1). 算法

第一步:定义一个新的字符数组a等于要修改的字符数组s

第二步:修改字符数组s,把a中不是数字的元素赋给s,完成字符串的删除。

(2). 流程图

2. 实验代码

void delnum(char *s)
{
	int i;
	char *a=s;
	for(i=0;*(a+i)!='\0';i++)
	{
		if((*(a+i)<'0')||(*(a+i)>'9'))
		{
			*s=*(a+i);
			s++; 
		}
	}
	*s='\0'; 
}

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

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

1. 设计思路

(1). 算法

第一步:从母串第i个元素开始与字串比较,母串子串依次加一,如果存在不相等的,则flag=0,如果flag=1,则count++,

第二步:然后从母串第i=i+1个元素开始比较,直到满足*(str+i+j)=='\0'结束

第三步:返回count

这个题思路我不知道怎么描述好,可能描述的不是很清楚,不行就看看流程图吧

(2). 流程图

2. 实验代码

int fun(char *str,char *substr)
{
	int count=0,i,j=0,flag=1;
	for(i=0;*(str+i+j)!='\0';i++,flag=1)
	{
		for(j=0;*(substr+j)!='\0';j++)
		{
			if(*(str+i+j)!=*(substr+j))
			{
				flag=0;
			} 
		}
		if(flag==1)
		{
			count++;
		}
	}
	return count;
}

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

第一次做的时候没有考虑到通用性的问题,只是根据题目要求做。

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

1. 设计思路

(1). 算法

第一步:把字符串的首尾字符排除,剩余的字符按照从大到小的顺序冒泡排列

第二步:思路就是这样啊,我不是把题目复述了一遍,具体操作看代码

(2). 流程图

2. 实验代码

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

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

题目4 输出学生成绩

1. 设计思路

(1). 算法

第一步:输入数据并计算平均值

第二步:再求最大值和最小值

第三步:输出数据

(2). 流程图

2. 实验代码

#include<stdio.h>
int main()
{
	int n,i;
	int *p;
	float max,min,average=0;
	scanf("%d",&n);
	if ((p = (int *) calloc (n, sizeof(int))) == NULL) 
	{
        printf ("Not able to allocate memory. \n");
	    exit(1);
	}
	for(i=0;i<n;i++)
	{
		scanf("%d",p+i);
		average=average+*(p+i);
    }
    average=average/n;
    max=*p,min=*p;
    for(i=0;i<n;i++)
    {
    	if(max<*(p+i))
    	{
    		max=*(p+i);
		}
		if(min>*(p+i))
    	{
    		min=*(p+i);
		}
	}
	printf("average = %.2f\n",average);
	printf("max = %.2f\n",max);
	printf("min = %.2f\n",min);
}

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

题目5 计算职工工资

1. 设计思路

(1). 算法

第一步:创建结构

第二步:输入数据

第三步:计算职工工资

第四步:输出数据

(2). 流程图

2. 实验代码

#include<stdio.h>
struct message {
	char name[10];
	float jibengz;
	float fudonggz; 
	float zhichu;
	float sum;
};
int main()
{
	int n;
	scanf("%d",&n);
	struct message m1;
	while(n--)
	{
		scanf("%s%f%f%f",m1.name,&m1.jibengz,&m1.fudonggz,&m1.zhichu);
		m1.sum=m1.jibengz+m1.fudonggz-m1.zhichu;
		printf("%s %.2f\n",m1.name,m1.sum);
	}
} 

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

错误原因:结构定义时如果把变量类型定义为int型则会出现错误

改正:改成float或double型即可

题目6 计算平均成绩

1. 设计思路

(1). 算法

第一步:创建结构,输入数据

第二步:计算平均成绩并输出

第三步:如果学生成绩在平均成绩下,输出其信息

(2). 流程图

2. 实验代码

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

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

错误原因:定义id时只给出5个空间,即char id[5]

改正:应为最后会有\0,只要定义空间为6以上即可

题目7 按等级统计学生成绩

1. 设计思路

(1). 算法

第一步:判断学生成绩的等级,并赋给结构里统计等级的变量

第二步:在判断等级时,如果等级为D,则count加1,最后返回count

(2). 流程图

2. 实验代码

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

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

题目8 结构体数组按总分排序

1. 设计思路

(1). 算法

第一步:计算学生的总成绩

第二步:用冒泡排序按成绩降序把学生排列

(2). 流程图

2. 实验代码

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

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

作业要求三

1. 知识的总结

复习了指针,学习了结构。

都学会了。

2. 代码管理

Git地址

3. 点评

辛静瑶

李伍壹

陈天胤

4. 图表

不想弄了

posted @ 2018-04-06 13:24  王文博  阅读(216)  评论(10编辑  收藏  举报