• 2018第二次作业


    一.代码:



    1. 删除字符串中数字字符:

    1).设计思路:

    (1).文字描述:

    第一步:主函数,定义一个数组,写入数组,引用函数,输出。
    第二步:定义一个指针p并将s赋给*p,用一个for循环遍历字符串,并在其中用一个if语句判断是否是数字,如果是 p++=s ,循环过后将最后一个赋上‘’;

    (2).流程图:

    主函数

    函数

    2).实验代码

    ` 
    #include <stdio.h>
    void delnum(char *s);
    int main ()
    { char item[80];
    gets(item);
     delnum(item);
     printf("%s
    ",item);
     return 0;
    }
    
    void delnum(char *s)
    {
    	char *p = s;
    	for(;*s;s++)
       {
             if ( *s >'9' || *s < '0' )
                   *p++=*s ;
       }
       *p='';
    	 
    }       
    `
    

    3).遇到的问题:

    未遇到问题。

    2. 统计子串在母串出现的次数:

    1).设计思路:

    (1).文字描述:

    第一步:主函数定义一个待查找的数组并赋值,定义一个被查找的字符串,引用函数并将函数的值赋给n,输出n的值。
    第二步:函数,遍历字符串,并在for语句中用一个if语句判断当前三个字符分别为a,s,d如果是n++,最后统计出n的值,最后返回n值。

    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);
     return 0;
    }
    
    /* int fun(char *str,char *substr)
    {
    	int n=0,i;
    	for(i = 0;*(str + i) != '';i++){
    		if(*(str + i) == 'a'&&*(str+i+1) == 's' && *(str + i + 2) == 'd'){
    			n++;
    		}
    	}
    	return n;
    	
    }  */ 
    
    int fun(char *str,char *substr) 
    {
    	int count = 0;
    	char *p=str,*ps= substr;
    	for(;*p != '';p++){
    		ps = substr;
    		if(*ps == *p){
    			while(*p == *ps){
    				if(*p == *ps){
    				p++;
    				ps++;
    			}else break;
    			}
    			
    		}
    		if(*p == ''){
    			count ++;
    		}
    	}	
    	return count;
     }      
    `
    

    3).遇到的问题:

    未遇到问题。

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

    1).设计思路:

    (1).文字描述:

    第一步:主函数,定义字符数组s,写入字符串,引用函数,输出排序后所得的字符串。
    第二步:函数,用一个for循环表示循环的趟数,由于只需要排出排除首尾的顺序所以只需要循环num-3次,在此循环下再用一次循环进行排序,并且只需要排出从第二个到num-j-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)
    {
    	int i,j;
    	char t;
    	for(j=0;j<num-3;j++)
           for(i=1;i<num-j-2;i++)
            if(s[i]<s[i+1])
           {t=s[i]; s[i]=s[i+1]; s[i+1]=t;}
    }    
    `
    

    3).遇到的问题:

    在for语句中循环次数错过两次,出现下面的问题。

    这个问题是因为运用冒泡排序法的时候for循环次数过多。
    之后通过改进for循环的次数纠正了错误。

    4. 输出学生成绩:

    1).设计思路:

    (1).文字描述:

    第一步:输入数字个数n,动态存储分配。
    第二步:用for语句进行输入数据,并计算和,for语句结束后计算出平均值。
    第三步:令最大,最小值等于第0个数,遍历所有数据,并在其中用两个if语句判断出最大值和最小值并记录。
    第四步:输出最大最小值和平均数。

    2).实验代码

    `
    #include<stdio.h>
    
    int main()
    {
    	int *p,i,sum = 0,max,min,n;
    	double avg;
    	scanf("%d",&n);
    	
    	if((p=(int*)calloc(n,sizeof(int)))==NULL){
       		 exit(1);
        }
        
    	for(i=0;i<n;i++){
            scanf("%d",&*(p+i));
    		sum = sum + *(p+i);}
    	
    	avg = (double)sum /(double) n;
    	max = *p;
    	min = *p;
    	for(i=1;i<n;i++){
    		if(*(p + i) > max){
    			max = *(p+i);
    		}
    		
    		if(*(p + i) < min){
    			min = *(p+i);
    		}
    	}
          
    	printf("average = %.2lf
    max = %.2lf
    min = %.2lf",avg,(double)max,(double)min);
                  free(p);
    	
    }        
    `
    

    3).遇到的问题:

    再求平均数的时候忘记转化成double型了,导致最后输出的数全为整数。

    5计算职工工资:

    1).设计思路:

    (1).文字描述:

    第一步:定义一个结构体,并在其中定义姓名,基本工资,浮动工资和支出。
    第二步:主函数中输入数据个数n,引用结构体。
    第三步:用一个for循环进行数据录入,再用一个for循环将计算后的数据输出。

    (2).流程图:

    2).实验代码

    `
    #include <stdio.h>
    
    
    struct emp{
            char  name[10];
            double jbg;
            double fdg;
            double zc;
        } ;
        
    int main ()
    {
        
        int i, n;
        scanf("%d", &n);
        struct emp s[n] ;
     for(i=0;i<n;i++)
     {
     	scanf("%s %lf %lf %lf",s[i].name,&s[i].jbg,&s[i].fdg,&s[i].zc);
     }
         for (i = 0; i < n; i++)
      {
      	printf ("%s %.2lf
    ", s[i].name, s[i].jbg + s[i].fdg - s[i].zc);
      }
    }
    `
    

    3).遇到的问题

    在主函数中忘记引用“struct emp s[n] ;”导致错误。
    请教班级的同学后进行改正。

    6. 计算平均成绩:

    1).设计思路:

    (1).文字描述:

    第一步:定义一个结构体,并在其中定义学号num,姓名name,分数score。
    第二步:主函数中先输入整数n,引用结构体,用一个for循环输入学号,姓名,分数并计算出分数的和。
    第三步:计算出平均数。
    第四步:用一个for循环遍历数据,并用if语句判断当前分数是否低于平均数,如果是输出相应的姓名和学号。

    2).实验代码

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

    3).遇到的问题:


    出现上面的情况输出学号的时候前面的0不见了。
    后来想到要想保留前面的0需要将学号的类型改为字符型。

    7. 按等级统计学生成绩:

    1).设计思路:

    (1).文字描述:

    第一步:定义一个结构体,并在其中定义学号num,姓名name,分数score,成绩等级grade。
    第二步:主函数中:引用结构体,并输入学生个数n,用一个for语句进行数据录入,引用函数进行计算,最后进行输出。
    第三步:函数中:用for语句进行遍历,并用if语句进行等级的区分,其中如果在D等级则不及格人数count加一。最后返回count值。

    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);
        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
    ", count);
       printf("The grades:
    "); 
       for(i = 0; i < n; i++)
           printf("%d %s %c
    ", stu[i].num, stu[i].name, stu[i].grade);
        return 0;
    }
    
    int set_grade( struct student *p, int n )
    {
    	int i,count = 0;
    	for(i = 0;i < n;i ++,p++){
    		if(p->score <=100 && p->score >= 85){
    			p->grade = 'A';
    		}else if(p->score <85 && p->score >= 70){
    			p->grade = 'B';
    		}else if(p->score <70 && p->score >= 60){
    			p->grade = 'C';
    		}else{
    			p->grade = 'D'; 
    			count ++;
    		}
    	}
    	return count;
     } 
    
        `
    

    3).遇到的问题:

    最开始没有看到返回不及格人数的条件,导致前两个点出现错误。

    8. 结构体数组按总分排序:

    1).设计思路:

    (1).文字描述:

    第一步:定义一个结构体,并在其中定义学号num,姓名name,分数score,分数和sum。
    第二步:主函数中:先引用结构体,用一个for语句进行数据输入,引用函数calc求出每名学生的总分,函数sort按每名学生的总分从高到低对这组数据进行排序,用一个for语句进行输出。
    第三步:函数calc:仅需一个for语句进行遍历,并在遍历过程中算出sum值。
    第四步:函数sort:定义一个结构体t为之后交换做准备,之后用冒泡排序法进行排序即可。

    (2).流程图:

    主函数:

    函数calc:

    函数sort:

    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
    ",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 i;
    	for(i = 0;i < n;i ++,p++){
    		p->sum = p->score[0] + p->score[1] + p->score[2];
    		
    	}
    }
    
    void sort(struct student *p,int n)
    {
    	int j,i;
    	struct student t;
     		for(j=1;j<=n-1;j++)
           for(i=0;i<=n-j-1;i++){
           		if((p + i)->sum < (p + i + 1)->sum){
           			t = *(p + i);
           			*(p + i)= *(p+ i + 1);
           			*(p+ i + 1)= t;
    			   }
    	   }
    }
    	
    
    
        `
    

    3).遇到的问题:

    最初在第二个函数中将t定义为int型,发现编译的时候出现问题,最后改为引用结构体定义t;

    二,学习总结和进度:

    1.近期所学知识点:

    首先是对指针进行了深入的复习,并对pta中出现的问题进行讲评。之后,这两周主要学习了结构。首先学习的就是对结构体的概念和定义,并且在所需结构调用时需要在函数中调用一下结构体再去使用。再之后学习到结构数组,其中引用格式为结构数组名[下标].结构成员名。最后,学到了结构指针引用格式可以为p->结构成员名。

    2.Git:

    Git地址;

    3.学习进度:

    1).表格:

    日期 代码行数 代码时间 博客字数 博客时间 知识点
    3.26 100 90 0 0 pta
    3.27 150 120 0 0 pta
    3.28 0 0 500 120 博客园
    3.29 200 120 0 0 pta
    3.30 50 30 0 0 结构体
    3.31 100 50 100 60 pta
    4.1 0 0 50 60 博客园
    4.2 200 90 300 90 pta
    4.3 0 0 200 60 博客园
    4.4 50 30 0 0 结构体的引用
    4.5 100 50 0 0 结构体与数组
    4.6 80 30 0 0 结构体与数组
    4.7 100 60 100 60 结构体与指针
    4.8 80 60 100 30 结构体与指针

    2).折线图:

    4.作业互评:

    1,点评同学作业:

    于耀淞;
    胡景文;
    赵寅胜;

    2,邀请同学点评作业:

    胡景文;
    班庆泽;
    董欣;

  • 相关阅读:
    分梨
    18岁生日
    马的移动
    摆积木
    杭电2093考试排名
    栈的应用——四则运算表达式求值
    用指针实现对二维数组元素的访问
    用多种方法访问字符数组元素
    fread()函数和fwrite()函数进行文件操作
    hdu-1431 素数回文
  • 原文地址:https://www.cnblogs.com/DavidPark/p/8664273.html
Copyright © 2020-2023  润新知