要求一
[https://edu.cnblogs.com/campus/hljkj/Cprogramming_2018Autumn_CST2018_3/homework/2503]
要求二
判斷奇偶性
1.實驗代碼
int even (int n)
{
if(n%2 == 0)
return 1;
else
return 0;
}
2.解題思路
(1)算法
第一步:定義判斷奇偶性的函數even(int n)。
第二步:輸入n。
第三步:當n%2為0時,返回真;當n%2不為0時,返回假。
第四步:當返回真時輸出"%d is even.\n",當返回假時輸出"%d is odd.\n"。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
(1)錯誤提示截圖

(2)單步調試截圖

(3)遇到的問題及解決辦法
代碼編寫沒有錯誤,但是在pta提交的時候沒有注意函數接口定義,於是出現了編譯錯誤,將定義的接口之前的部分代碼去掉后提交就正確了。
交換最小值和最大值
1.實驗代碼
#include<stdio.h>
int main()
{
int i, n, index, a[10], c, d, min, max;
scanf("%d", &n);
for(i = 0; i < n; i ++)
{
scanf("%d", &a[i]);
}
min = max = a[0];
for(i = 0; i < n; i ++)
{
if(a[i] <= min)
{
min = a[i];
index = i;
}
}
c = a[0];
a[0] = min;
a[index] = c;
for(i = 0; i < n; i ++)
{
if(a[i] >= max)
{
max = a[i];
index = i;
}
}
d = max;
a[index] = a[n - 1];
a[n - 1] = d;
for(i = 0; i < n; i ++)
{
printf("%d ", a[i]);
}
return 0;
}
2.解題思路
(1)算法
第一步:定義變量i, n, index, c, d, min, max以及數組a[10]。
第二步:第一行中輸入一個正整數N(≤10),第二行給出N個整數。
第三步:用比較的方法尋找最小值和最大值,將找到的最小值與數組的第一個數進行交換,然后將找到的最大值與數組中的最后一個數交換。
第四步:輸出交換后的整數序列。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
(1)錯誤提示截圖

(2)單步調試截圖

(3)遇到的問題及解決辦法
為段錯誤。在進行比較的過程中出現取值范圍錯誤,將比較中的"<"和">"分別改為"<="和">="即正確。
選擇法排序
1.實驗代碼
#include<stdio.h>
int main(void)
{
int i, index, k, temp;
int a[10];
for(i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
for(k = 0; k < 3; k++)
{
index = k;
for(i = k + 1; i < 10; i++)
{
if(a[i] < a[index])
{
index = i;
}
}
temp = a[index];
a[index] = a[k];
a[k] = temp;
}
for(i = 0; i < 10; i++)
{
printf("%5d", a[i]);
}
return 0;
}
2.解題思路
(1)算法
第一步:定義變量i, index, k, temp以及數組a[10]。
第二步:輸入十個無序整數。
第三步:題目要求排序只排三輪,因此條件k<3。
第四步:輸出變化后的數組。
注意:注意格式要求每個整數輸出占5列。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
(1)錯誤提示截圖

(2)單步調試截圖

(3)遇到的問題及解決辦法
一開始沒有注意到題目排三輪的要求,后來將條件"k<9"改為"k<3",答案正確。
要求三
個人總結
(1)學到的內容:這幾周主要學習了函數和數組,主要包括了尋找最大值和最小值,數字金字塔,冒泡排序法,選擇排序法等題型。
收獲:我學會了運用數組尋找最大值最小值,還學會了用兩種方法排序。通過學習我知道了如何定義排序輪數,以及整數輸出占五列用"%5d"。
(2)對於我來說,剛剛接觸數組的時候,排序問題是一個難點,通過課上聽講以及課下查找資料,我慢慢地理解了排序的思路,並學會了定義排序的次數。在做作業的時候,數組流程的的繪畫也成了我的一大難關,但我希望通過上網查找資料,我能夠攻克這個難題。


