第二次作业



【6-7】 删除字符串中数字字符
1.设计思路:定义函数,引入变量,通过for循环,在循环中判断条件,删除字符。
2.实验代码:
`

                void delnum(char *s)

                    {

                int i,j;

                for(;*(s+i)!='\0';)

                {

	            if('0'<=*(s+i)&&*(s+i)<='9')

	            {

		            for(j=i;*(s+j)!='\0';j++)

		            {

			            *(s+j)=*(s+j+1);

		            }
	        
	            }else{i++;

    	                        
	           }

	    
                }    

`
3.本题调试过程碰到问题及解决办法:无。
4.流程图:

【6-8】 统计子串在母串出现的次数
1.设计思路:通过题目给出的字符串,使用双重for循环,从循环中先找出相同的字符串,再判断出现次数。

2.实验代码:
`

    int fun(char *str,char *substr)

    {

          int n=0,i,j,count=0;

              for(i=0;*(str+i)!='\0';i++)

                 {

                          for(j=0;*(substr+j)!='\0';j++)

                              {

                                        if(*(substr+j)==*(str+i+j))

                                                count=1;

                                         else

                                                count=0;

                                 }

                      if(count)

      {

        n++;

        count=0;

      }

    }

    return n;

    }

`
3.本题调试过程碰到问题及解决办法:最开始写代码时只有思路,但不知从何下手,具体细节不会做,在同学讲解帮助下写出了代码。
4.流程图:

【 6-9 】字符串中除首尾字符外的其余字符按降序排列
1.设计思路:首先调用函数,然后定义变量,使用for循环在循环中判断,进而输出。
2.实验代码:
`

int fun(char *s,int num)

{

  int i,m=(num-2),j;

  for(i=1;i<=(num-2);i++)

  {

    if(*(s+m)>*(s+i))

    {

      j=*(s+m);*(s+m)=*(s+i);*(s+i)=j;

    }

  }

  if(num>0)

  {


    num--;

    fun(s,num);
    
  }

    }

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

【7-1】 输出学生成绩
1.设计思路:定义变量,输入人数,然后使用动态内存分配语句,使用循环,冒泡排序法,进行排序并输出。

2.实验代码:
`

#include<stdio.h>

#include<stdlib.h>

int main()

{

      double avg=0,max=0,min=999;

      int i=0,*p,j;

      scanf("%d",&j);

  if((p=(int *)malloc(j*sizeof(int)))==NULL)

  exit(1);

      for(i=0;i<j;i++)

  {

    scanf("%d",p+i);

    if(p[i]>max)

    max=p[i];

    if(p[i]<min)
        
    min=p[i];

    avg+=p[i];
        
          }

          avg=avg/j;

          free(p);

      printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",avg,max,min);

    }

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

【7-1】 计算职工工资

1.设计思路:首先定义结构体变量,然后输入,引用结构体变量,使用循环输出各项。

2.实验代码:

`

    #include<stdio.h>  

    typedef struct work  

    {  

        char name[100];  

        float base;  

        float fdgz;  

        float expend;  

        float sum;  

      

      

    }WORK;  

    int main()  

    {  

        WORK s[10000];  

        int n, i,j;  

        scanf("%d", &n);  

        for (i = 0; i < n; i++)  

        {  

              

            scanf("%s", &s[i].name);  

            scanf("%f", &s[i].base);  

            scanf("%f", &s[i].fdgz);  

            scanf("%f", &s[i].expend);  

            s[i].sum = (s[i].base + s[i].fdgz)-s[i].expend;  

        }  

        for (j = 0; j < n;j++)  

        {  

            printf("%s %.2f\n", s[j].name, s[j].sum);  

          

        }  

        return 0;  

    }

`

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

【7-2】 计算平均成绩

1.设计思路:先定义变量类型,使用其定义该类型数组,先使用for循环输入,算出总成绩(sum),让后计算平均数,最后通过for循环在循环中判断,进而输出。

2.实验代码:

`

    #include<stdio.h>

    struct student{

        char num[6];

        char name[10];

        double grade;

    }s[1000];

    int main()

    {

        int n;

        scanf("%d\n",&n);

        int i;

        double sum=0;

        double average;

        for(i=0;i<n;i++)

        {

	        scanf("%s %s %lf",&s[i].num,&s[i].name,&s[i].grade);

                        

        }

             int j;

        for(j=0;j<n;j++)

        {

    	        sum=sum+s[j].grade;

        }

        average=sum/n;

        printf("%.2lf\n",average);

        for(j=0;j<n;j++)

        {

	        if(average>s[j].grade)

	        {

		        printf("%s %s\n",s[j].name,s[j].num);

	        }

        }

        return 0;

                	

    }

`

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

4.流程图:

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

1.设计思路:先定义函数,引入变量,在for循环中通过if语句进行多层判断,将学生成绩分出等级,然后使小于60分的单独计算出其数目,最后返回其值(count)即可。

2.实验代码:

`

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

        int count = 0, i;

        for(i = 0;i<n;i++,p++){

	        if(p->score<60){

		        p->grade = 'D';

		        count++;

	        }

	        else if((p->score<70)&&(p->score>=60)){

		        p->grade = 'C';

	        }

	        else if((p->score<85)&&(p->score>=70)){

		        p->grade = 'B';

	        }

	        else{

		        p->grade = 'A';

	        }

        }

        return count;

    }

`
3.本题调试过程碰到问题及解决办法:无。
4.流程图:

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

1.设计思路:调用calc函数,使用循环进行计算。然后调用sort函数,使用for循环,在循环中用if语句判断,进而返回值。

2.实验代码:

`

void calc(struct student *p,int n)

{

  int i=0;

  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 j=0,min=0;

  struct student a;

  for(j=0;j<n;j++)

  {

    if((p+j)->sum<(p+min)->sum)

    {

      min=j;

    }

  }

  a=*(p+min);

  *(p+min)=*(p+n-1);

  *(p+n-1)=a;

  if(n>1)

  {


    n--;

    sort(p,n);

  }

}

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

【图表】:

【git地址】:https://git.coding.net/lfyyyy/seven

【截图】:
点评同学:董欣:http://www.cnblogs.com/dx2017/p/8666072.html
高立彬: http://www.cnblogs.com/gao628526/p/8665187.html
董雅洁:http://www.cnblogs.com/exo123/p/8663311.html
总结:近两周的学习让我了解到了c语言中的许多新的知识,比如如何定义变量类型,还有如何使用已定义的变量类型定义变量,如何多变的使用指针等等,最开始还有些不太理解,两周下来已经理解的差不多了,就是对待c语言的习题,有思路但无从下手,以后勤加练习,希望有所突破。

posted on 2018-04-03 23:40  执念丶。  阅读(167)  评论(12编辑  收藏  举报

导航