第二次作业

题目6-7删除字符串中数字字符
1.设计思路
(1)本次题目的算法
第一步:阅读题目 理解主函数与函数声明
第二步:定义调用函数delnum,定义整形变量i,j
第三步:定义指针s,通过s,在函数for和函数if中的应用
第四步:通过
(s+j)=‘\0’,返回值
(2)流程图

2.实验代码

    {
		    int i,j=0;
		    for(i=0;*(s+i)!='\0';i++)
		    {
			    if(*(s+i)>='0'&&*(s+i)<='9')
			    {
			    }else
			    {
				    *(s+j)=*(s+i);
				    j++;
			    }
		    }
		    *(s+j)='\0';
	    }```
3.调试过程碰到问题及解决办法
   错误信息1:*s出错
       错误原因:调用函数指针使用出错
       改正方法:多次编译
   错误信息2:‘\0’
       错误原因:*(s+j)='\0','\0'没加‘’
       改正方法:观看错误提示后改正
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234902994-1868603066.png)



题目6-8统计子串在母串出现的次数
1.设计思路
   (1)本次题目的算法
        第一步:阅读题目 理解主函数与函数声明
        第二步:定义函数fun(),在fun()中*star,*substr,i,count
        第三步:使用for函数和函数if,在*(str+i)!='\0'的范围内,如果*(str+i)==*(substr),*(str+i+1)==*(substr+1),*(str+i+2)==*(substr+2),所以count++
        第四步:回归count
   (2)流程图
        ![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083156288-998874975.png)
2.实验代码
```int fun(char *str,char *substr)
	{
		int i,count=0;
		for(i=0;*(str+i)!='\0';i++)
		{
			if(*(str+i)==*(substr))
			{
				if(*(str+i+1)==*(substr+1))
				{
					if(*(str+i+2)==*(substr+2))
					{
						count++;
					}
				}
			}
		}
		return count;
	}```
3.调试过程碰到问题及解决办法
   错误信息1:count出错
       错误原因:count返回的值出错,编译出现问题
       改正方法:将{}括号重新梳理对齐,编译成功
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234936669-2056473653.png)



题目6-9字符串中除首尾字符外的其余字符按降序排列
1.设计思路
   (1)本次题目的算法
        第一步:阅读题目 理解主函数与函数声明
        第二步:定义调用函数fun(),定义*s,整形变量sum,I,j,k,temp
        第三步:在for循环中,在i<num-2范围内循环j<num-1,int)(*(s+k))<(int)(*(s+j))得k=j,如果k!=i,则temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp来互换改变顺序
        第四步:输出排列好的字符串
   (2)流程图 
   ![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083223939-199648699.png)
2.实验代码
```int fun(char *s,int num)
 	{
 		int i,j,k,temp;
 		for(i=1;i<num-2;i++)
 		{
 			k=i;
 			for(j=i+1;j<num-1;j++)
 			{
 				if((int)(*(s+k))<(int)(*(s+j)))
 				{
 					k=j;
				}
			}
			if(k!=i)
			{
		 	     temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp;
		 	}
	  }
		 return 0;
	}```
3.调试过程碰到问题及解决办法
   错误信息1:代码错误
       错误原因:排序的代码打印错误
       改正方法:temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp,深刻理解排序代码后,改正
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234948568-847437345.png)



题目7-1输出学生成绩
1.设计思路
   (1)本次题目的算法
        第一步:阅读题目 理解主函数与函数声明
        第二步:定义整形变量i,n,定义单精度浮点型变量sum=0,average,max,min,输入n,对*p使用malloc函数
        第三步:使用for函数,输入n个数据,得到sum,使用for与if函数找出最大数据和最小数据
        第四步:输出平均值,最高成绩,最低成绩
   (2)流程图
        
2.实验代码
```#include <stdio.h>
 #include <stdlib.h>
int main()
{
	int i,n;
	float sum=0,average,max,min;
	scanf("%d",&n);
	float *p=(float *)malloc(n);
	for(i=0;i<n;i++)
	{
		scanf("%f",(p+i));
		sum+=*(p+i);
	}
	min=*(p+0);max=*(p+0);
	for(i=0;i<n;i++)
	{
		if(min>*(p+i))
		{
			min=*(p+i);
		}
		if(max<*(p+i))
		{
			max=*(p+i);
		}
	}
	printf("average = %.2f\n",sum/n*1.0);
	printf("max = %.2f\n",max);
	printf("min = %.2f\n",min);
	return 0;
}```
3.调试过程碰到问题及解决办法
   错误信息1:无
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234959353-1112028153.png)



题目7-1计算职工工资
1.设计思路
   (1)本次题目的算法
        第一步:阅读题目 理解主函数与函数声明
        第二步:定义一个结构体变量wage,在其中定义name,actual_wage,basic_wage,floating_wage,expenditure,
        第三步:在主函数中定义整形变量N,i,利用for函数,引用结构体,计算
        第四步:输出
   (2)流程图
        ![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083352746-442209476.png)
2.实验代码
```#include<stdio.h>
 #include<stdlib.h>
struct wage
{
  int num;
  char name[10];
  float actual_wage;
  float basic_wage;
  float floating_wage;
  float expenditure;
};
int main()
{
  int N,i;
  scanf("%d",&N);
  struct wage wage[N];
  for(i=0;i<N;i++)
  {
    scanf("%s %f %f %f",wage[i].name,&wage[i].basic_wage,&wage[i].floating_wage,&wage[i].expenditure);
    wage[i].actual_wage=wage[i].basic_wage+wage[i].floating_wage-wage[i].expenditure*1.0;
  }
  for(i=0;i<N;i++)
  {
    printf("%s %.2f\n",wage[i].name,wage[i].actual_wage);
  }
  return 0;
}```
3.调试过程碰到问题及解决办法
   错误信息1:for函数
       错误原因:for(i=1;i<=N;i++)
       改正方法:for(i=0;i<N;i++)
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408235008808-928874077.png)



题目7-2 计算平均成绩
1.设计思路
   (1)本次题目的算法
        第一步:阅读题目 理解主函数与函数声明
        第二步:定义一个结构体变量student,在其中定义student_id,name,grade
        第三步:在主函数中定义整形变量N,i,sum,浮点型变量average,多次利用for和if函数,引用结构体student,计算
        第四步:输出
   (2)流程图
        ![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083434681-1233859386.png)
2.实验代码
```#include<stdio.h>
 #include<stdlib.h>
struct student
{
  int num;
  char student_id[6];
  char name[11];
  int grade;
};
int main()
{
  int N,i,sum=0;
  float average=0;
  scanf("%d",&N);
  struct student student[N];
  if(N>0&&N<=10)
  {
    for(i=0;i<N;i++)
    {
      scanf("%s %s %d",student[i].student_id,student[i].name,&student[i].grade);
      sum=sum+student[i].grade;
    }
    average=sum*1.0/N;
    printf("%.2f\n",average);
    for(i=0;i<N;i++)
    {
      if(average>student[i].grade)
      {
        printf("%s %s\n",student[i].name,student[i].student_id);
      }
    }
  }
  return 0;
}```
3.调试过程碰到问题及解决办法
   错误信息1:数组
       错误原因:student_id[5],name[10]
       改正方法:student_id[6],name[11]
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408235018093-1985472171.png)


学习总结和进度
1.学会的知识点
   指针和排序方法
   for函数的使用
   结构体的应用
2.未完全掌握的知识点
   结构体的使用还是不太明确
3.学习进度表格和折线图
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180409001239331-65015124.png)
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180409001245376-683786166.png)

posted on 2018-04-07 21:17  苏冽  阅读(171)  评论(13编辑  收藏  举报

导航