第四次作業


 

作業要求:https://edu.cnblogs.com/campus/hljkj/CS201801/homework/2523

預習

1、數組視頻全看了

2、學到了一維數組和二維數組,如何定義使用數組

3、數組的排序,不能熟練使用二維數組,只能初步定義

 

 

 

 

 

 

 

 

 

第一題:

7-2 輸出所有大於平均值的數

作業要求:

本題要求編寫程序,將輸入的n個整數存入數組a中,然后計算這些數的平均值,再輸出所有大於平均值的數。

代碼:

 1 #include<stdio.h>
 2 int main(){
 3     int n,sum=0;
 4     int i,judge=0;
 5     double average=0;
 6     scanf("%d",&n);
 7     if(n>=1&&n<=10){
 8         int a[n];
 9         for(i=0;i<n;i++){
10             scanf("%d",&a[i]);
11             sum=sum+a[i];
12         }
13         average=1.0*sum/n;
14         printf("%.2f\n",average);
15         for(i=0;i<n;i++){
16             if(a[i]>average){
17                 printf("%d ",a[i]);
18             }
19         }
20         for(i=0;i<n;i++){
21             if(a[i]!=average)
22           judge=1;
23         }
24         if(judge==0){
25           printf("\n");
26           
27         }
28     }
29     else{
30         printf("Invalid.");    
31     }
32     return 0;
33 }

 

思路:

第一:定義變量,輸入n;

第二:根據題目要求,n若不在1n10內,則輸出Invalid.;

第三:n若在1n10內,則執行循環輸入a[i],sum+=a[i];

第四:求平均數average=1.0*sum/n;

第五:循環判斷a[i]是否大於average,若大於則輸出a[i];

第六:定義變量judge=1,假設數組中有數等於average;

第七:循環判斷a[i]是否不等於average,若是則令judge=0;

第八:如果judge=0,則輸出空行;

結束

流程圖:

 

 

 運行過程:

 

 

 

 

 做得很輕松一遍過

 

 

 調試一下

 

 運行成功

 

第二題:

7-3 交換最小值和最大值 

作業要求:

本題要求編寫程序,先將輸入的一系列整數中的最小值與第一個數交換,然后將最大值與最后一個數交換,最后輸出交換后的序列。注意:題目保證最大和最小值都是唯一的。

代碼:

 1 #include<stdio.h>
 2 int main(){
 3     int n,i;
 4     scanf("%d\n",&n);
 5     int a[n];
 6     for(i=0;i<n;i++){
 7         scanf("%d",&a[i]);
 8     }
 9     if(n==2){
10         if(a[0]>a[1])
11         printf("%d %d ",a[1],a[0]);
12         else
13         printf("%d %d ",a[0],a[1]);
14     }
15     else{
16         int max=a[0],index1=0;
17         int min=a[0],index2=0;    
18         for(i=0;i<n;i++){
19             if(max<a[i]){
20                 max=a[i];
21                 index1=i;
22             }                            
23         }
24         a[index1]=a[n-1];
25         a[n-1]=max;
26         for(i=0;i<n;i++){
27             if(min>a[i]){
28                 min=a[i];
29                 index2=i;    
30             }                            
31         }
32         a[index2]=a[0];
33         a[0]=min;
34         for(i=0;i<n;i++){
35             printf("%d ",a[i]);        
36         }
37     }
38 
39     return 0;
40 }

思路:

第一:定義變量,輸入n;

第二:循環輸入a[i];

第三:如果n=2,進入條件語句(第四,第五);

第四:如果a[0]>a[1],輸出a[1],a[0];

第五:如果a[0]<=a[1],輸出a[0],a[1];

第六:如果n!=2,定義變量max=min=a[0],index1=index2=0;

第七:i從0到n-1如果max<a[i]則max=a[i],index1=i;

第八:a[index1]=a[n-1],a[n-1]=max;

第九:i從0到n-1如果min>a[i]則min=a[i],index2=i;

第十:a[index2]=a[n-1],a[n-1]=min;

最后:循環輸出數組a

 

流程圖:

 

 

 

 

運行過程:

 

 寫pta出現的問題

 

 首次調試

 

 

 

 在這是對的,注意下一波

 

 

 

 

 a[3]出現失誤

 

 

 

 

 

 

 

 

 

 想了很久,發現是我的for循環值會覆蓋,於是我把for循環拆成兩個

 

 

 

 

 

 

 

 

 

 調試一下新代碼,perfect

 

 

 

總結:

  學習了簡單的數組運用,選擇排序,冒泡排序,還看了指針的一些內容。

  學習了數組以后,發現了解數組簡單,但是在運用這方面就有點落后了,編程的代碼不能如自己所想的那樣,最后結果不如我所願。我是這么去解決的,遇到了就先改,改到自己認為的極限以后,再去考慮補,打補丁來解決問題。在下一段的學習中,我會先進行簡單的運算,類似於與計算機進行交流,思考好了如何編程,再去碼,不想當然的去碼代碼。

點評:

 https://www.cnblogs.com/wangxiangbo/p/10165493.html

https://www.cnblogs.com/chengxu230921/p/10170865.html

https://www.cnblogs.com/1a2B3c4D/p/10160490.html

 

 

 

 

 

累積代碼行數和時間:

 

累積博客字數和時間:

 


免責聲明!

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



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