第1次作業


第一次作業(2)

6-1 在數組中查找指定元素

1.設計思路

(1)題目算法

第一步:閱讀題目,明確題目所需要的目標結果
第二步:閱讀樣例找到對應的形參和實參
第三步:回憶之前數組的學習中,用循環找到數組中相應數下標的過程
第四步:將上一步與所學的指針相結合,具體看書P232-234例10.6,學習將指針變量指向數組元素的幾種不同的表達形式
第五步:進行調試,驗證結果,並針對個別問題進行修改

(2)流程圖

2.實驗代碼

int search( int list[], int n, int x )
{
	int *p=list , i ,idx;
	for(i=0;i<n;i++,p++){
		if(*p==x){
			idx=i;break;
		}
		if(i==(n-1)&&*p!=x){
			idx=-1;break;
		}
	}
	return idx;
}

3.調試問題及解決方法

錯誤信息:調試結果沒有錯誤,但是提交到PTA后,有一項出現答案錯誤


6-2 找最大值及其下標

1.設計思路

(1)題目算法

第一步;閱讀題目,明確題目所需要的目標結果
第二步;閱讀樣例找到對應的形參和實參
第三步:回憶如何在數組中找最大值並且取其下標的方法
第四步:將數組與指針相結合,這次主要看書P238例10.7,了解指針變量之間如何進行交換
第五步;進行調試,驗證結果,並針對個別問題進行修改

(2)流程圖

2.實驗代碼

int fun(int *a,int *b,int n)
{
	int i,m=0;
	for(i=0;i<n;i++,a++){
		if(*a>m){
			m=*a;
			*b=i;
		}
	}
	return m;
}

3.調試問題及解決辦法

錯誤信息1:max的最終值不正確

錯誤原因:被調用函數中m的值沒有返回,導致最終max不能准確地取到值
改正方法:在被調用函數最后加 return m; 使函數最終取值回歸到m

第一次作業(3)

6-1 最小數放前最大數放后

1.設計思路

(1)題目算法

第一步:看題,目的是求最大值和最小值,以及利用指針進行數組間數字的交換
第二步:回憶數組找到最大值和最小值的方法,聯系指針
第三步:利用指針進行數組間數字的交換
第四步:進行調試,驗證結果,針對個別問題進行修改

(2)流程圖

2.實驗代碼

void input(int *arr,int n)
{
	int i;
	for(i=0;i<n;i++,arr++){
		scanf("%d",*arr);
	}
}
void max_min(int *arr,int n)
{
	int i,max=0,min=*arr,p,q,temp;
	for(i=0;i<n;i++,arr++){
		if(*(arr+i)>max){
			max=*(arr+i);
			p=i;
		}
		if(*(arr+i)<min){
			min=*(arr+i);
			q=i;
		}
	}
	temp=*(arr+p); *arr=temp; *(arr+p)=*arr;
	temp=*(arr+q); *(arr+n-1)=temp; *(arr+q)=*(arr+n-1);
}
void output(int *arr,int n)
{
	int i;
	for(i=0;i<n;i++,arr++){
		printf("%3d",*arr);
	}
}

第一次作業(4)

6-1 判斷回文字符串

1.設計思路

(1)題目算法

第一步:了解如何用數組判斷字符串是否為回文
第二步:將數組與指針相結合
第三步:進行調試與修改

(2)流程圖

2.實驗代碼

bool palindrome( char *s )
{
	int i;
	int n=strlen(s);
	for(i=0;i<=n;i++,n--){
		if(*(s+i)!=*(s+n-1)){
			return false;
	    }	    
	}
	return true;
}

3.調試問題及解決辦法

錯誤信息1:無論輸入什么,輸出結果總是NO
錯誤原因:沒有調用strlen函數,用的for循環求字符串數組的實際長度
改正方法:使用strlen函數求字符串數組實際長度,讓代碼更簡潔
錯誤信息2:輸出結果是NO
錯誤原因:在比較第一個字符和最后一個字符時,沒有將n-1,導致輸出錯誤
改正方法:舉一些實際數據,用實例明白為什么要n-1

6-2 使用函數實現字符串部分復制

1.設計思路

(1)題目算法

第一步:明確題意,目標是將字符串進行復制,並且從特定位置開始
第二步:參考課本P253例10.18,明白字符串復制過程及注意事項
第三步:根據題意進行修改,進行調試

(2)流程圖

2.實驗代碼

void strmcpy( char *t, int m, char *s )
{
	int i,n;
	for(i=0;*(t+i)!='\0';i++){
		n=i;
	}
	if(m>n){
		*s='\0';
	}else{
		for(i=0;*(t+m-1)!='\0';i++,m++){
		*(s+i)=*(t+m-1);
		
	}
	*(s+i)='\0';
	}
	
}

3.調試問題及解決方法

錯誤信息1:strlen(t)函數不能使用
錯誤原因:在題目中並沒有定義strlen()函數
改正方法:運用for循環及'\0'的位置,測出字符數組的實際長度
錯誤信息2:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM