第二次作业

6-7 删除字符串中数字字符#

主要描述题目算法##

第一步:定义指针函数void delnum(char *s)
第二步:利用for循环判断指针元素是否'\0'
第三步:利用if判断袁术是否在是'0'到'9'间
第四步:按要求输出

流程图##

实验代码##

void delnum(char *s)
{
	int i,k=0;
	for(i=0;*(s+i)!='\0';i++)
	{
	if(*(s+i)>='0'&&*(s+i)<='9')	
	 { }else
	 {
	 	*(s+k)=*(s+i);
	 	k=k+1;
	 }
	}
	*(s+k)='\0';
}

错误信息##

错误原因:(s+i)=(s+k)导致的段错误
改正方法:将i与k调换

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

主要描述题目算法##

第一步:定义指针函数int fun(char *str,char *substr)
第二步:利用双层for循环判断字符串出现的次数
第三步:将最后的n值返回主函数

流程图##

实验代码##

int fun(char *str,char *substr)
{
  int i,j,k,n;
  for(i=0;str[i]!='\0';i++)
  {
    for(j=i,k=0;substr[k]==str[j];k++,j++)
    {
      if(substr[k+1]=='\0')
      {
        n++;
        break;
      }
    }
  }
  return n;
}

错误信息##

错误原因:无法编译
改正方法:将k负初值0
错误原因:无法停止
改正方法:在n++后加brake

6-9 字符串中除首尾字符外的其余字符按降序排列#

主要描述题目算法##

第一步:定义指针函数un(char *s,int num)
第二步:利用双层for循环(冒泡排序法)找到字符串的首尾字符的位置
第三步:将除首尾外的字符降序排序

流程图##

实验代码##

int fun(char *s,int num){
         int i,j,k,t;
         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){
             t=*(s+i);*(s+i)=*(s+k);*(s+k)=t;
             }
        }
         return 0;
     }

错误信息##

错误原因:排序混乱 冒泡排序时超出范围
改正方法:规定范围

7-1 输出学生成绩#

主要描述题目算法##

第一步:定义个数变量n,以及各个变量sum=0,max,min,average,*p,i;
第二步:输入n
第三步:利用for循环计算n次sum的总和
第四步:利用for循环将最大和最小数负给max,min
第五步:计算平均值并输出

流程图##

实验代码##

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

错误信息##

错误原因:答案错误
改正方法:在计算平均值时用sum*1.0/n
错误原因:交换错误
改正方法:调换位置

7-1 计算职工工资#

主要描述题目算法##

第一步:定义结构数组
第二步:在主函数中引用此函数 输入N
第三步:利用for循环多次输入数据并计算实发工资
第四步:再循环中输出name和s

流程图##

实验代码##

#include<stdio.h>
struct work{
	char name[10];
	float a,b,c;/*基本工资,浮动工资,支出*/
	float s;/*实发工资*/ 
}; 
int main()
{
    struct work s;
	int i,N;
	scanf("%d",&N);
	for(i=0;i<N;i++)
	{
		scanf("%s %f %f %f",&s.name ,&s.a ,&s.b ,&s.c );
		s.s =s.a +s.b -s.c ;
		printf("%s %.2f\n",s.name ,s.s );
	 } 
	

}

错误信息##

错误原因:编译错误
改正方法:将s.c对应的改为%s

7-2 计算平均成绩#

主要描述题目算法##

第一步:定义结构函数
第二步:定义结构数组长度[10] 并sum赋初值0 输入N
第三步:利用for循环输入数据并计算sum
第四步:计算平均值并输出
第五步:利用for循环判断并输出小于平均值的人的name和num

流程图##

实验代码##

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

错误信息##

错误原因:答案错误
改正方法:sum负初值0
错误原因:答案错误
改正方法:计算平均值数加1.0

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

主要描述题目算法##

第一步:定义循环变量i和次数count
第二步:利用for循环判断元素中score的范围
第三步:在各个范围内输出grade的范围 凑那他加一
第四步:返回count

流程图##

实验代码##

    if(((p+i)->score)>=85)
    {
     (p+i)->grade='A';
int set_grade( struct student *p, int n )
{
  int i,coun(i=0;i<n;i++)
    {  {
      
  for
    {     (p+i)->grade='C';

     (p+i)->grade='B';
    }else if(((p+i)->score)>=60)

    }else
    {
      (p+i)->grade='D';    }else if(((p+i)->score)>=70)t=0;

      count++;
    }
  }
  return count;
}

错误信息##

错误原因:编译错误
改正方法:将结构函数中的'.'改为'->'

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

主要描述题目算法##

第一步:在第一个函数中,利用for循环计算所有sum的和
第二步:在第二个函数中引入结构函数
第三步:利用双层for循环将sum排序

流程图##

实验代码##

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;
  struct student x;
  for(j=0;j<n-1;j++)
  {
    for(i=0;i<n-1-j;i++)
    {
      if((p+i)->sum<(p+i+1)->sum)
      {
        x=*(p+i);*(p+i)=*(p+i+1);*(p+i+1)=x;
      }
    }
  }
}

错误信息##

错误原因:交换中错误
改正方法:将(p+i+1)放在(p+i)后

学习总结和进度#

1、总结两周里所学的知识点有哪些学会了?(可记录每道作业题目所用的知识点)哪些还没有学会?##

学会了指针,结构函数,在这些知识点中,在结构函数中将指针和结构函数组合还有些不不太熟悉。

我的git代码##

[我的Git]https://coding.net/u/baisongtao/p/baisongtao/git/tree/master/?public=true

我点评的同学##

http://www.cnblogs.com/lh991014/p/8667145.html [林昊]
http://www.cnblogs.com/qw123/p/8665906.html [李春杨]
http://www.cnblogs.com/wwb986187/p/8727528.html [王文博]

表格和折线图##

posted on 2018-04-07 22:00  白松涛  阅读(303)  评论(1编辑  收藏  举报

导航