码迷,mamicode.com
首页 > 编程语言 > 详细

2018上C语言程序设计(高级)作业- 第2次作业

时间:2018-03-28 18:49:04      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:输入   ==   题意   理解   平均值   条件语句   老师   相加   一个   

作业要求二

  • 题目6-7删除字符中数字字符
    1、设计思路:
    (1)第一步:本题要求是删除字符中的数字字符,我的主要思路是通过数组遍历若遇到数字,就把其删除,把之后的非数字的字符向前移动;
    第二步:根据此思路,首先定义两个循环变量i,j;通过while条件语句来进行判断数字字符,之后再逐一删除,前移;
    2、实验代码:

    #include "stdio.h"
    void delnum(char *s)
    {
    int i = 0,j = 0;  
    while(s[i] != ‘\0‘) {  
        if (!(s[i] >= ‘0‘ && s[i] <= ‘9‘)) {  
            s[j] = s[i];  
            j++;
        }  
        i++;  
    }   
    s[j] = ‘\0‘;
    }
       3、本题调试过程碰到问题及解决办法
                    本题是字符问题,当我在遇到这个问题的时候,只是有想法,知道怎么去做,但是却不知道怎么去用if条件来判断出数组中的是否含有数字字符。简单的说我只会构思,不会去写成代码。其主要问题是在

    技术分享图片

就是不会写这个条件;
改正方法:我去网站上找了下这个题,看了许多的大佬的程序,他们的代码方式写的有很多中,之后我自己找到了这个条件,之后就顺利写出这个题目了。

  • 题目6-8 统计子串在母串出现的次数
    1、设计思路:
    (1)第一步:首先要遍历数组,若要找出子串在母串的出现次数,在遍历数组的时候,利用if条件语句进行逐一的判断;
    第二步:在遍历的过程中,循环变量要逐一的相加,而不是看子串的字符个数,这样才能较为准确的去查找出现次数;(自我感觉自己的算法比较麻烦,但是实在是想不出简单的算法,就只能将就着用)
    2、实验代码

    #include<stdio.h>
    int fun(char *str,char *substr)
    {
    int result=0,i=0;
    for(i=0;str[i]!=‘\0‘;i++)
    {
        if(substr[0]==str[i]&&substr[1]==str[i+1]&&substr[2]==str[i+2])
        {
            result++;
        }
    }
    return result;
     } 
       3、本题调试过程碰到问题及解决办法
               本题没有问题;
  • 题目6-9字符串中除首尾字符外的其余字符按降序排列
    1、设计思路:
    (1)第一步:本题可按照之前的非字符的冒泡排序的方法去来实现这个问题,只是在遍历数组的时候,出去首尾两项;
    第二步:根据这个思路,首先定义循环变量,之后遍历数组(注:在遍历数组的时候要注意不要包括首尾两项)之后再按照冒泡的方法进行排序即可;
    2、实验代码

    #include <stdio.h>
     int fun(char *s,int num)
     {
    int i=1,j=1,max;
    for(i=1;i<num-3;i++)
    {
        for(j=1;j<num-2;j++)
        {
            if(s[j]<s[j+1])
            {
                char swap;
                swap=s[j];s[j]=s[j+1];s[j+1]=swap;
             }
          } 
     }
     }
         3、本题调试过程碰到问题及解决办法
               本题没有问题;
  • 题目7-1输出学生成绩
    1、设计思路
    (1)第一步:根据题意,首先要定义一些相关的变量,例如学生人数n,循环变量i,等等;
    第二步:之后在创建内存动态存储;(这个我之后按照老师上课讲的照抄照搬,自己当时听懂的内容也是不是很多,后来我也去上网查了许多的有关动态存储的相关的教程,也算是略有了解,但还是理解的不够深刻)
    第三步:在创建动态存储之后,之后就开始在数组中存储内容(成绩),在存储的同时可以进行求和,以便进行之后的求平均值的操作;
    第四步:存储之后,求平均值,之后遍历数组进行找最大值和最小值;(此时应把最大值和最小值变量先初始化为数组的首地址元素,方便比较)之后根据数组遍历来找出最大值和最小值;
    第五步:最后便可按照题目要求进行输出;
    (2)流程图:

      2、实验代码
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
    int n=0,i=0,*p,sum=0,max=0,min=0;
    double 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);
        sum=sum+*(p+i);
    }
    average=(double)(sum*1.0/n*1.0);
    max=*p;min=*p;
    for(i=0;i<n;i++)
    {
    
        if(max<*(p+i))
        {
            int swap=0;
            swap=max;max=*(p+i);*(p+i)=swap;
        }
    }
    for(i=0;i<n;i++)
    {
    
        if(min>*(p+i))
        {
            int tmp=0;
            tmp=min;min=*(p+i);*(p+i)=tmp;
        }
    }
    printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",average,(double)max,(double)min);
    free(p);
    return 0;
    }
      3、本题调试过程碰到问题及解决办法
             错误信息1:

    技术分享图片
    这个问题是我把max和min的初始化都放到了for循环里面了,导致在提交的时候总是有一个点过不去;
    改正方法:在出现这个错误之后,当时我也很纳闷,因为我在输入例题啥的都正确但就是不能过那个点。之后我也尝试了老师所说的进行单步调试,在调试的过程中我发现了,每次在进行for循环的时候都会把max和min在初始化依次,当时只是略有怀疑,因为我还是很惯性的认为即使初始化也没啥问题,因为输出的结果还是正确的。但是它总是过不去这个点,之后我就去询问同学,在同学帮助下,也是指出了这个问题,最终我把max和min初始化放到了for之前了最后通过了。

2018上C语言程序设计(高级)作业- 第2次作业

标签:输入   ==   题意   理解   平均值   条件语句   老师   相加   一个   

原文地址:https://www.cnblogs.com/gao628526/p/8665187.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!