C語言I作業08


這個作業屬於那個課程
這個作業要求在哪里
我在這個課程的目標是
這個作業在那個具體方面幫助我實現目標
參考文獻

1.PTA實驗作業(20分/題)

從PTA題目集中選出2個你最滿意的題目完成以下內容,選擇題目難度越大,分值越高,每題20分(每項5分),內容要求如下:

1.1 題目名1

7-3 jmu-c-二進制轉10進制 (20 分)
輸入一組二進制字符,輸出其對應的十進制數。當輸入回車鍵時,輸入結束。若輸入非二進制字符,輸出error input!

輸入樣例1:
11111111
輸出樣例1:
255
輸入樣例2:
34
輸出樣例2:
error input!

1.1.1數據處理

    #include<stdio.h>
 int main(){

   聲明變量用於計算進制 s = 0;

    聲明字符 n;
    死循環while(1){
	輸入字符 n;
	if(按下回車)
	跳出循環;
	else
	  if( 輸入字符為'1'、 '0')
	  	s = s*2 + (n - '0');//計算二進制到十進制的公式
	  else
     	 跳出循環;
    } 
      if(按下回車)
      輸出結果 s;
      else
     輸出"error input!";
      return 0;

}

1.1.2實驗代碼截圖

1.1.3 造測試數據

輸入數據 輸出數據 說明
-1 error input! 負值
1 1 1
11111111 255 題目所給

1.1.4 PTA提交列表及說明

部分正確:由於我一開始的解題方向就錯了,用的是沒有字符的方法,所以總有一個測試點沒過(但是代碼可以解決問題)
解決方法:改用字符
如果不用字符的解法如下(但題目要求字符,所以測試點有字符存在,因此會有一給測試點報錯):

1.2 題目2

7-6 整除光棍 (20 分)
這里所謂的“光棍”,並不是指單身汪啦~ 說的是全部由1組成的數字,比如1、11、111、1111等。傳說任何一個光棍都能被一個不以5結尾的奇數整除。比如,111111就可以被13整除。 現在,你的程序要讀入一個整數x,這個整數一定是奇數並且不以5結尾。然后,經過計算,輸出兩個數字:第一個數字s,表示x乘以s是一個光棍,第二個數字n是這個光棍的位數。這樣的解當然不是唯一的,題目要求你輸出最小的解。

提示:一個顯然的辦法是逐漸增加光棍的位數,直到可以整除x為止。但難點在於,s可能是個非常大的數 —— 比如,程序輸入31,那么就輸出3584229390681和15,因為31乘以3584229390681的結果是111111111111111,一共15個1。

輸入格式:
輸入在一行中給出一個不以5結尾的正奇數x(<1000)。

輸出格式:
在一行中輸出相應的最小的s和n,其間以1個空格分隔。

輸入樣例:
31
輸出樣例:
3584229390681 15

1.2.1 數據處理

#include<stdio.h>
int main()
{
    聲明變量 x, s = 1, n = 1;
    給x賦值
    while (s < x)//為了使下面不在答案前輸出0
    {
	    s = s * 10 + 1;
	    n++;
    }
    while(1)
    {
	    if (s % x 整除了)
	    {
		    printf("%d", s / x);
		    break;
	    }
	    else
	    {
		    輸出s / x;              //沒有上面的while (s < x)部分會出現因s < x而打印出0
		    s = s % x或s - x;             //加不加while (s < x)部分雖然答案數值大小沒影響
		    s = s * 10 + 1;      //但題目要求數值前面沒有0
		    n++(計數有幾根光棍);
	    }
    }
    輸出光棍個數 n;
    return 0;
}

ps:送大家一張能豁然開朗的圖= ̄ω ̄=

1.2.2實驗代碼截圖

1.2.3 造測試數據

輸入數據 輸出數據 說明
31 3584229390681 15 題目所給
1 1 1 x=1
111 1 3 x為光棍

1.2.4 PTA提交列表及說明

部分正確:就如我上面數據處理說的一樣,我的答案前多輸出了0
編譯錯誤:改代碼時少打了個“;”
解決方法:加上我在數據處理中的while (s < x)部分即可

2.代碼互評(5分)

找2份同學代碼,和自己代碼比較,建議互評代碼盡量找代碼風格差異較大。

同學代碼截圖

同學1

同學2

自己代碼截圖

1.第一位同學用的是while循環加if else結構,並且設置了數組,但其實可以不用數組
2.第二位同學有兩個return 0;可以將兩種情況分開結束
3.我的代碼運用while(1)死循環,並將按回車作為跳出循環的條件

3.學習總結(15分)

3.1 學習進度條(5分)

周/日期 這周所花的時間 代碼行 學到的知識點簡介 目前比較迷惑的問題
第一周 2h 72 輸出 對於輸出的符號還不熟
第二周 3.5h 57 計算 算法陌生
第三周 3.5h 81 分支結構 分支的邏輯理不清
第四周 1.5h 180 for循環,+= 終止條件理不清
第五周 2h 600 函數結構 對於算法的處理比較迷惑
第六周 2h 1000 嵌套 對於嵌套的結構過多會解讀的很吃力
第七周 2h 1246 switch結構 switch結構里的case最后若是不加break會怎么樣
第八周 3h 1102 while結構 字符的運用不熟

3.2 累積代碼行和博客字數(5分)

3.3 學習內容總結和感悟(5分)

3.3.1 學習內容總結

3.3.2 學習體會

這周我在寫pta上的感覺就是吃力,真的非常吃力,但也痛並快樂着吧,那種將一道道難題搞懂的感覺真的很不錯
但同時我也發現自己的思維不夠靈活,並且對於字符的運用還十分陌生,之后還需多加練習,不過我感覺我的偽代碼
寫的比之前好些了,我還會繼續加油的!(。・∀・)ノ


免責聲明!

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



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