【1】
題目一 數組中偶數的和
1.實驗代碼
#include<stdio.h>
int main()
{
int i,sum=0;
int a[10];
for(i=0;i<10,i++)
{
scanf("%d",&a[i]);
if(a[i]%2==0){
sum=sum+a[i];}
}
printf("s=%d",sum);
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求十個數組中的偶數和,首先要定義一個數值為十的數組a[10],然后還要定義一個循環所需的變量i,以及所求的偶數和sum。
第二步:利用for循環實現十個數組的輸入,如果某個數組除以二取余為零,則證明其為偶數,進行累加。
第三步:當i大於10后結束循環,輸出sum的值。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
本題在設計思路上並沒有什么問題,只在編譯時出現了一些小的失誤,通過錯誤提示改正。

4.本題PTA提交列表

題目二輸出小於均值的數
1.實驗代碼
#include<stdio.h>
int main()
{
int i,sum=0;
double average;
int a[10];
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
sum=sum+a[i];}
average=sum/10;
for(i=0;i<10;i++){
if(a[i]<average)
printf("%d ",a[i]);}
printf("\n");
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求輸入10個整數,計算這些數的平均值,再輸出所有小於平均值的數。
第二步:先定義一個數值為十的數組a[10],再定義一個循環所需的變量i,以及一個數組和sum和平均數average。
第三步:利用for循環實現數組的輸入以及和的累加計算出平均數。
第四步:如果某個數大於平均數就進行輸出。注意輸出的格式每個數字后面必須有一個空格,即“%d "。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
本題和老師在課上講的才不多,我覺得將兩個for循環並到一起寫應該沒什么影響,但提交后顯示答案錯誤。通過調試發現平均數是不能進入循環的,所以必須使用兩個for循環。

4.本題PTA提交列表

題目三 將數組中的數逆序存放
1.實驗代碼
#include <stdio.h>
int main()
{
int i,n,x;
int a[10];
scanf("%d\n",&n);
for (i=0;i<n;i++)
scanf("%d", &a[i]);
for (i=0;i<n/2;i++)
{
x = a[i];
a[i] = a[n-1-i];
a[n-1-i]=x;
}
for(i=0;i<n-1;i++){
printf("%d ",a[i]);}
printf("%d\n",a[n-1]);
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題將給定的n個整數存入數組中,將數組中的這n個數逆序存放,再按順序輸出數組中的元素。
第二步:先定義一個循環所需的變量i,輸入數值的個數n,以及一個替換變量x。再定義一個大小為10的數組a[10]。
第三步:先利用for輸出所有的數組,在利用for循環對原數組進行逆序存放,此循環作用是將對稱的元素的值互換,然后按要求輸出所有的數組。
注:要求行末不得有多余空格,所以在輸出最后一個數組的時候應該以printf("%d",a[n-1])這種情況輸出。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
本題開始沒有注意到輸出的格式沒有考慮到最后沒有空格的情況。

在老師給的c-7數組中找到了問題的所在,進行了改正。
4.本題PTA提交列表

題目四fibonacci數列
1.實驗代碼
#include<stdio.h>
int main()
{
int i;
int fib[12]={1,1};
for (i=2;i<12;i++)
fib[i]=fib[i-1]+fib[i-2];
for(i=0;i<12;i++)
{
printf("%6d",fib[i]);
if((i+1)%3==0)
printf("\n");
}
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求用數組計算fibonacci數列的前12個數,並按每行打印3個數的格式輸出。即前兩個數相加得第三個數。
第二步:先定義一個數值為十二的數組,給出前兩個數的數值,再定義一個循環所需的變量i。
第三步:利用for循環依次算出十二個數值,注意:因為前兩個數值的大小已經給出,所以i要從2開始。
第四步:本題要求使用%6d的格式輸出,所以輸出格式為“%6d"。
第五步:要求在輸出最后一個數字后,有一個換行,所以i加1等於數組的個數后進行除3取余,實現三個數換行。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
本題和老師講的基本一樣,只是更改了每行的個數,只在編譯上出了點小問題,看錯了每行的個數以及誤將for循環中的分號打成了句號。

4.本題PTA提交列表

題目五 求最大值及其下標
1.實驗代碼
#include <stdio.h>
int main()
{
int i, index, max, n;
int N = 10;
int a[N];
scanf("%d",&n);
for(i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
max = a[0]; index = 0;
for(i = 1; i < n; i++)
{
if(a[i] > max)
{
max = a[i];
index = i;
}
}
printf("%d %d", max , index);
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求在給出的n個數中找到最大值及其下標。
第二步:先定義出所需的字符,i代表循環所需的變量,index代表下標,max代表最大值,n代表輸入數值的個數。同時還要定義一個數組a[N],按要求N最大為10。
第三步:首先利用for循環輸入所有的數組值,然后假設a[0]為最大值,其下標也為0。
第四步:將所有的數組與最大值max比較大小,如果給出的數組a[i]比max大,就進行交換,使max永遠保持最大,利用for循環實現所有數組的比較。
第五步:按要求輸出最終的結果。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
本題在思路上還是比較清晰的,出現了一些小的問題,在編譯上還是會粗心丟三落四的,沒有注意到輸出方式。

經過逐步的更改和調試最終才得到正確的答案。
4.本題PTA提交列表


題目六 交換最小值和最大值
1.實驗代碼
#include <stdio.h>
int main ()
{
const int N=10;
int n,i,a[N],max,min,j,m;
int t,y;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
min=0;
max=n-1;
for(j=0;j<n;j++)
{
if(a[j]<a[min])
min=j;
}
if(min!=0){
y=a[0];
a[0]=a[min];
a[min]=y;}
for(m=0;m<n;m++)
{
if(a[max]<a[m])
max=m;
}
if(max!=n-1)
{
t=a[n-1];
a[n-1]=a[max];
a[max]=t;
}
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
}
2.設計思路
(1)主要描述題目算法
第一步:先定義好所需的相關變量,數組個數n,循環所需變量i,j,m,數組a[N]以及最大值max和最小值min。(N=10)
第二步:先利用一個for循環輸入所有的數組值,假設第一個數組值為最小的,利用for循環將所有的數組與第一個數比較,找到數組中的最小值,進行交換,同時實現下標的交換。
第三步:如果最小值不是第一個,就將其換到相應的位置,定義一個交換所需的變量y進行交換。
第四步:最大值的交換與最小值的類似,將最后一個數假定為最大的,之后的重復二,三步的操作。
第五步:最后利用for循環輸出所有的數組。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
本題在思路上有些混亂,老師在課上講了最小值的替換,類似的題型,我就按照老師個的c-7數組中的進行了編譯,但由於最大值與最小值替換同時進行產生錯誤。

重復修改了幾遍后仍然沒有找到問題的所在,看見群里有編譯此題時遇見了相同的困難,就請教了她是如何解決的,錯誤的點在哪里,然后進行了改正。
4.本題PTA提交列表


題目七 選擇法排序
1.實驗代碼
#include<stdio.h>
int main()
{
int i,k,a[10],N,t,max;
scanf("%d",&N);
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
for(k=0;k<N-1;k++){
max=k;
for(i=k+1;i<N;i++){
if(a[max]<a[i]){
max=i;
t=a[max];
a[max]=a[k];
a[k]=t;}
}
}
for(i=0;i<N;i++){
if(i+1==N)
printf("%d",a[i]);
else
printf("%d ",a[i]);
}
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求將給定的n個整數從大到小排序后輸出。
第二步:先定義編譯所需的變量,循環所需的變量i,t,數組a[10],輸入的數組個數N以及交換大小的變量t。
第三步:利用for循環輸入所有的數組。假設最大值的下標max=k,利用for循環,如果最大值a[max]小於數組a[i],就進行交換,讓max=i,將最大值換給a[k],直到完成所有的排序結束循環。
第四步:本題要求行末不得有多余空格,所以最后一個值的輸出格式應為 printf("%d ",a[i])。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
本題先按照老師上課時講的打出了一部分,但是后續的就不會打了,對一些循環的條件的意義有些不理解,通過百度進行逐句地解釋,再通過不斷的調試,然后解決了本道題
(由於思路完全跑偏,就沒有進行錯誤截圖)
4.本題PTA提交列表


題目八 求矩陣各行元素之和
1.實驗代碼
#include<stdio.h>
int main()
{
int m,n,i,j,sum=0;
scanf("%d %d",&m,&n);
int a[m][n];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
sum=sum+a[i][j];
}
printf("%d\n",sum);
sum=0;
}
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求矩陣各行元素之和,要將每行的兩個數相加求和,再依次輸出。
第二步:先定義此數組有m行n列,再定義循環所需的變量為i,j,所求的和為sum,初始值為0。定義矩陣數組為a[m][n]。
第三步:利用for的雙層循環輸入矩陣數組的所有值。外循環代表行,內循環代表列。
第四步:再利用for的雙層循環依次求出每行的和。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
在編譯此題時,我習慣性的將所有所需的變量定義出來,然后才輸入的m,n的值,導致出現了段錯誤的情況。

通過錯誤提示的提醒,糾正了錯誤,也意識到有些題所需的條件是有先后順序的,要注意邏輯思路。
4.本題PTA提交列表

題目九 方陣左下三角元素的和
1.實驗代碼
#include<stdio.h>
int main()
{
int i,j,sum=0;
int a[4][4];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++) \\for(j=0;j<=i;j++)
{
sum=a[0][0]+a[1][0]+a[1][1]+a[2][0]+a[2][1]+a[2][2]+a[3][0]+a[3][1]+a[3][2]+a[3][3]; \\sum=sum+a[i][j];
}
}
printf("%d",sum);
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求方陣左下三角元素的和,首先要輸入規定的方陣的行列,在寫出要加和的數組。
第二步:先定義循環所需的變量i,j,以及所求的和sum。同時定義出要求的四行四列的數組a[4][4]。
第三步:利用for的雙層循環輸出所有的數組,再利用for的雙層循環列出所有要加和的數,進行累加。\內循環使j<=i,使得輸出的值都在對角線的下半部分,通過循環進行累加。
第四步:最后輸出和sum。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
本題沒有遇到問題。
4.本題PTA提交列表

題目十 求整數序列中出現次數最多的數
1.實驗代碼
#include<stdio.h>
int main()
{
int i,j,n,N=1000;
scanf("%d",&n);
int a[N],b[N];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i]==a[j])
b[i]=b[i]+1;
}
}
int x;
for(i=0;i<n;i++)
{
if(x<b[i]){
x=b[i];
j=i;
}
}
printf("%d %d",a[j],x);
return 0;
}
2.設計思路
(1)主要描述題目算法
第一步:本題要求整數序列中出現次數最多的數,需要利用循環找出重復次數最多的數。
第二步:先定義出所需的變量,循環所需的變量i,j,輸出的個數你,數組個數N=1000,以及數組a[N],b[N]。
第三步:輸入n后,再利用for循環輸入所有的數組值。
第四步:利用for的雙層循環找出相等的數組,同時實現個數的累加。
第五步:在定義一個中間變量x,考慮到如果x小於相同數組的個數就讓x=b[i],同時實現下標的轉換,利用for循環排除所有的這種情況。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
本題剛開始沒有理解透題意,沒有將輸出的個數定義成數組,導致陷入了誤區。

通過百度知道了輸出個數同樣也要定義成數組。同時以進一步理解了每個循環代表的意義,具體如設計思路中所說。
4.本題PTA提交列表



【2】
1.git地址:
https://git.coding.net/sunna1/text.git
2.git截圖:

【3】
個人總結
(1)學習內容:近兩周,先學習了數組。這其中包括什么是數組,如何使用,定義數組,二位數組的元素的存放方式。之后通過數組延伸到排序問題,最為經典的是冒泡排序。還學習了矩陣相關的一些編譯問題。變換各種題型進行了練習。
收獲:除了對新學的知識有所收獲以外,對編程有了更深的認識。感覺編程很神奇,不同的代碼可以編譯成不同的東西,千變萬化,值得去探究。
(2)難點:我覺得選擇排序以及冒泡排序比較難,過程很復雜,利用for的雙層循環加大了理解難度。
不明白:對於冒泡排序理解的還是不透徹,有些循環的概念有一些模糊。
互評和學習進度:
點評作業:
(1)陳雨秋:
http://www.cnblogs.com/cyq66992152/p/7946077.html

(2)孫佳鈺:
http://www.cnblogs.com/SR1011/p/7965948.html

(3)馬宇欣:
http://www.cnblogs.com/mayuxin/p/7900356.html

表格及折線圖
1.表格

2.折線圖

