2018上C語言程式設計(進階)作業- 第2次作業

來源:互聯網
上載者:User

標籤:輸入   ==   題意   理解   平均值   條件陳述式   老師   相加   一個   

作業要求二
  • 題目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次作業

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.