標籤:輸入 == 題意 理解 平均值 條件陳述式 老師 相加 一個
作業要求二
題目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次作業