C語言I博客作業11


這個作業屬於那個課程 C語言程序設計II
這個作業要求在哪里 C語言I作業11
我在這個課程的目標是 將本學期所學好好復習匯總,期末考試爭取不掛科
這個作業在那個具體方面幫助我實現目標 理解老師上課講的變量的作用域和生存期,弄懂存儲類型
參考文獻 C語言

1.PTA實驗作業

1.1 題目名1:6-1 統計某類完全平方數

題目內容描述:本題要求實現一個函數,判斷任一給定整數N是否滿足條件:它是完全平方數,又至少有兩位數字相同,如144、676等。

函數接口定義:

int IsTheNumber ( const int N );

其中N是用戶傳入的參數。如果N滿足條件,則該函數必須返回1,否則返回0。

裁判測試程序樣例:

#include <stdio.h>
#include <math.h>

int IsTheNumber ( const int N );

int main()
{
    int n1, n2, i, cnt;
	
    scanf("%d %d", &n1, &n2);
    cnt = 0;
    for ( i=n1; i<=n2; i++ ) {
        if ( IsTheNumber(i) )
            cnt++;
    }
    printf("cnt = %d\n", cnt);

    return 0;
}

/* 你的代碼將被嵌在這里 */

輸入樣例:

105 500

輸出樣例:

cnt = 6

1.1.1數據處理

  • 數據表達:定義變量N,其中N是用戶傳入的參數。如果N滿足條件,則該函數必須返回1,否則返回0。定義變量i,k,m,temp用於輔助判斷累加。
  • 數據處理:偽代碼
開始
調用數學函數

int 定義變量IsTheNumber,N 
{
    int 定義變量n1, n2, i, cnt;
	
    scanf(輸入顯示 n1,n2);
    將cnt賦值為0;
    for循環語句( i累加條件,i累加 ) {
        if條件語句( IsTheNumber(i) )
            cnt累加;
    }
    輸出顯示;

    結束
}
題目要求函數接口定義
{
   int定義變量i,k,m,temp
   int 定義一個有100個元素的數組a並將其所有值初始化為0
   int 定義一個有10個元素的數組b並將其所有值初始化為0
   令temp=N
 while條件語句(當temp/10>0) {
      將k賦值;
      temp = temp除以10;
   }
if語句(N==(int)sqrt(N)*(int)sqrt(N))
{
    for語句(將i賦值0;當i小於k;i累加)
      {
     數組a的第i+1個元素=N/m%10;
     m*=10
     if(數組b的第a數組的第i+1個元素個元素+1等於1)   返回1;
        如果不等於1              數組b的第a數組的第i+1個元素個元素+1賦值為1;
        }
     返回0;
     }
  如果不是   返回0;
}


1.1.2實驗代碼截圖

1.1.3 造測試數據

輸入數據 輸出數據 說明
105 500 cnt = 6 有六個完全平方數
100 400 cnt = 4 有四個完全平方數
50 100 cnt = 1 有一個完全平方數

1.1.4 PTA提交列表及說明

  • 編譯錯誤:第四行,第五行后面沒有打{}
  • 編譯錯誤:第七行while語句后條件判斷錯誤,寫成了temp/100>0
  • 編譯錯誤:第十八行將b[a[i]]=1打成了b[i]=1

1.2 題目2:6-2 統計各位數字之和是5的數

題目內容描述:本題要求實現兩個函數:一個函數判斷給定正整數的各位數字之和是否等於5;另一個函數統計給定區間內有多少個滿足上述要求的整數,並計算這些整數的和。

函數接口定義:

int is( int number );
void count_sum( int a, int b );

函數is判斷number的各位數字之和是否等於5,是則返回1,否則返回0。
函數count_sum利用函數is統計給定區間[a, b]內有多少個滿足上述要求(即令is返回1)的整數,並計算這些整數的和。最后按照格式

count = 滿足條件的整數個數, sum = 這些整數的和

裁判測試程序樣例:

#include <stdio.h>

int is( int number );
void count_sum( int a, int b );

int main()
{
    int a, b;

    scanf("%d %d", &a, &b);
    if (is(a)) printf("%d is counted.\n", a);
    if (is(b)) printf("%d is counted.\n", b);
    count_sum(a, b);

    return 0;
}

/* 你的代碼將被嵌在這里 */

輸入樣例:

104 999

輸出樣例:

104 is counted.
count = 15, sum = 3720

1.2.1數據處理

  • 數據表達:①定義變量x,y,並將y初賦值為0,當y除以5等於0時,返回1,反之返回0②定義變量a,b,sum,count,a,b用於for語句輔助判斷,sum,count用於累加,最后輸出sum,count。
  • 數據處理:偽代碼
開始

int 定義is函數( int 定義變量number );
void count_sum( int 定義變量a,b );

int main()
{
    int 定義變量a,b

    scanf(顯示輸入兩個數a,b);
    if語句 is函數 printf(輸出a);
    if語句 is函數 printf(輸出 b);
    范圍由a到b

   返回 0;
}
int 定義is函數( int 定義變量number )
{
    int 定義變量x,y並將y初賦值0;
    do
    {
       x為number除以10的余數;
       number為number/10所得結果;
       y最后為x加y;
    }
    while(number不等於0);
    如果(y等於5)
    返回 1;
    否則
    返回 0;
}
void count_sum(  定義變量a,b )
{
   int 依題意定義變量count,sum0並初賦值為0
   int 定義變量i;
   for玄幻語句(i等於a;i小於等於b;i累加)
   {
       if條件語句(is函數))
       {
           count累加;
           sum等於sum+i;
       }
   }
   printf(顯示輸出count和sum);
}



1.2.2實驗代碼截圖

1.2.3 造測試數據

輸入數據 輸出數據 說明
1 2 count=0,sum=0 滿足條件的整數個數為0,這些整數的和為0
5 10 5 is counted.count=1,sum=5 5的各個位數之和等於5,滿足條件的整數個數為1,這些整數的和為5
10 20 count=1,sum=14 滿足條件的整數個數為1,這些整數的和為14

1.2.4 PTA提交列表及說明

  • 編譯錯誤:第七行將 number=number/10打成了 number=number%10;
  • 編譯錯誤:第11行中將if(y5)打成了number(y5)
  • 編譯錯誤:第16行一開始沒有按題目要求寫上函數接口定義void count_sum( int a, int b ),而是按我自己平常的定義打的。
  • 編譯錯誤:第18行沒有將count,sum,初賦值
  • 編譯錯誤:將22行if(is(i))打成if(is)
  • 編譯錯誤:將25行sum=sum+i;打成了sum++

2.代碼互評

  • 同學代碼(彭傑)

  • 自己代碼

比較

  • 1.他的代碼比我要簡潔很多,而且變量定義的更少,占的空間也小,顯然思路比我清晰很多。
  • 2.在判斷N是否滿足條件上,我的判斷語句是(b[a[i]]1),而他的判斷語句是滿足s[i]2,返回1,滿足n/=10,返回0。
  • 3.相比兩份代碼,毫無疑問他的代碼更好,更簡潔,思路更清晰,我的代碼很混亂,定義的變量也多,判斷語句也不簡潔,我要向他學習的地方很多。

同學代碼(袁思凡)

自己代碼

比較

  • 1.他的代碼也比我的簡潔很多,我定義的變量很多,而且用了兩組數組,他不但變量定義的少,而且只用了一組數組
  • 2.在if語句輸出判定條件上,他的語句為如果p[i]>1,返回1,否則返回0。
  • 3.我的格式很亂,語句很復雜,他直接用一個for循環語句和一個if條件語句判斷輸出,而我用了兩個if條件語句,一個for循環語句判斷輸出,把思路理很亂。
  • 4.相比之下,我認為他的思路非常值得我學習,還有他處理問題的語句和方法,我還要在格式上加以改進,以后把思路理清楚在打代碼。

3.學習總結

3.1 學習進度條

周/日期 這周所花的時間 代碼行 學到的知識點簡介 目前比較迷惑的問題
第四周 8小時 50行 簡單輸出
第五周 10小時 70行 學習輸入
第六周 20小時 150行 用WinGW-w64來編譯C程序
第七周 24小時 150行 運用if,else語句 對符號的意思不太理解
第八周 18小時 200行 運用for循環語句
第九周/10.25 8小時 200行 學習了自定義函數 符號容易弄混
第十周/11.1 26小時 250行 熟悉並掌握了多分支結構 各個運算符的意思還不太理解
第十一周/11.8 24小時 300行 熟悉唱我多分支結構switch語句 對空格的使用還比較疑惑
第十二周/11.15 20小時 300行 熟悉whlie和do-whlie結構
第十三周/11.21 16小時 280行 學會了break、continue的使用和循環的嵌套解決問題 對循環的嵌套還不怎么懂
第十四周/11.28 24小時 350行 對pow函數有了更深的理解,對循環嵌套語句的不懂得地方都弄懂了 不會將自己的語句用C語言表達出來
第十五周/12.4 24小時 300行 自學了一點數組的知識 對數組不完全了解,對自定義函數也不太懂

3.2 累積代碼行和博客字數

時間 博客字數 代碼行數
第四周 450 70
第五周 450 140
第六周 1200 290
第七周 2400 490
第八周 3600 740
第九周 4800 990
第十周 6000 1240
第十一周 7300 1740
第十二周 8700 2120
第十三周 10800 2800
第十四周 12500 3200
第十五周 14000 3500

3.3 學習內容總結和感悟

3.3.1 學習內容總結

3.3.2 學習體會

  • 本周題目很難,難到自己有些題目已經無法解決,然后寫多了難題會慢慢發現以前的難題根本不算什么,我認為這應該也算是一種進步吧
  • 對於自定義函數還不太熟練,還有很多不懂的地方,馬上就要考試了,得趕緊補知識漏洞了
  • 剛認識數組,還沒完全懂,現在老師也沒教,走在老師教學進度前面的感覺很棒,可是又沒有完全弄懂又覺得有點遺憾,不管怎么說,感覺進步已經很大了,繼續加油吧!


免責聲明!

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



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