標籤:getchar 1.5 數字 為我 插入排序 代碼 公約數 get
一、PTA實驗作業題目1:簡化的插入排序1. 本題PTA提交列表
2.設計思路
int N,i,j,k,number輸入N定義一個長度位為N+1的整形數組輸入數組,將要插入的數放在數組最後一項for i=0 to i<N+1 if a[N]<=a[j]如果要插入的數小於數組中的最小數 number=a[N] for k=N to k>j a[k]=a[k-1]數組後移一位 a[j]=number breakfor i=0 to i<N+1輸出a[i]每個數字後面跟一個空格
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
- 一開始寫的代碼是這樣的
要判斷數組是否只有兩位,然後排序,迴圈又多又難以讀懂,導致了錯誤
題目2:判斷上三角矩陣1. 本題PTA提交列表
2.設計思路
int T,n,i,j,k,flag=0;flag為判斷是否為上三角的標誌輸入Tfor k=0 to k<=T flag=0 輸入n 定義行列都為n的整形二維數組a for i=0 to i<n for j=0 j<n j++ 輸入a[i][j] if n不為1 for i=0 to i<n for j=0 to j<i 上三角 if a[i][j]不為0 flag=1即不為上三角 else if n為1並且a[0][0]為0 flag=0 if flag為0 輸出Yes並換行 否則 輸出No並換行
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
- (1)一開始記錯了以為上三角矩陣是對角線一下全都不為0,對角線以上不全為0導致錯誤
- (2)沒有判斷它為空白矩陣以及為1階矩陣的情況
題目3:裝箱問題1. 本題PTA提交列表
2.設計思路
int n,i,j,number=0,count=1 count為箱子序號,number為裝了幾個箱子輸入n定義一個長度為1000的整形數組afor i=1 to i<=n 輸入a[i]for i=1 to i<=n forj=1 to j<count if a[i]+a[j]<=100 即箱子夠裝沒超過100 a[j]=a[i]+a[j] 把a[j]裝到a[i]裡去 輸出a[i]和j即第幾個箱子 break if j>=count 如果a[i]不夠裝 number++ 箱子數量加1 count++ 箱子的排序加1 輸出a[i]和j輸出number
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
- 一開始的代碼是這樣的
在原有的箱子不夠放時,新箱子增加後,沒有把a[i]放入箱子導致錯誤
二、本周題目集的PTA最後排名
三、同學代碼結對互評1.互評同學名稱
嚴偉傑
2.My Code、互評同學代碼
3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題
四、本周學習總結1.你學會了什嗎?1.1 C中如何儲存字串?
定義一個字元數組迴圈輸入字串的每一個字元。
1.2 字串的結束標誌是什麼,為什麼要結束標誌?
結束標誌為‘\0‘ 。因為我們無法知道字串的長度所以需要結束標誌讓它可以在接下來遍曆數組時作為一個迴圈結束的標誌比如 for(i=0;a[i]!=‘\0‘;i++; 。
1.3 字串輸入有哪幾種方法?
設a為數組。第一種:gets(a) 可以將輸入的資料和‘\0‘送入數組中,可以吸收空格,遇斷行符號結束。
第二種:scnaf("%s,"a); 可以將輸入的資料和‘\0‘送入數組中,遇斷行符號或空格輸入結束。
第三種:通過迴圈如 while((a[i]=getchar())!=‘\n‘) 的方式輸入。
1.4 數字字元怎麼轉整數,寫個虛擬碼?
char a[10]int number=0,igets(a)輸入字串for i=0 to a[i]!=‘\0‘ number=number*10+a[i]-‘0‘;
1.5 16進位、二進位字串如何轉10進位?寫虛擬碼?
十六進位:
char a[10]int i,number=0gets(a)輸入字串for i=0 to a[i]!=‘0‘遍曆數組 if a[i]為數字字元 number=number*16+a[i]-‘0‘ else if a[i]為a到f的十六進位數 number=number*16+a[i]-‘a‘+10 else if a[i]為A到F的十六進位數 number=number*16+a[i]-‘A‘+10
二進位:
char a[10]int i,number=0gets(a)輸入字串for i=0 to a[i]!=‘0‘遍曆數組 number=number*2+a[i]-‘0‘
2.本周的內容,你還不會什嗎?
pta中字串的冒泡排序不會做,請教了吳軍霖同學並且看了他的代碼以後才會做,對字串的理解不夠。
#include<stdio.h>main(){int i ,j, k,count;char str1[20],str2[20];printf("zhu chuan:");gets(str1);printf("zi chuan:");gets(str2);【1】;for(i=0;str1[i];i++)for(j=i,k=0;str1[j]==str2[k];j++,k++)if ( 【2】 )count++;printf("chuxian cishu=%d\n",count);}
課堂派中的這道題第二個空填錯,寫成str1[j+1]!= str2[k+1],這樣不能遍曆完字串從而判斷母串是否含有字串,答案為 tr2[k+1]==‘\0‘
3.期中考試小結3.1 你認為為什麼沒考好?
時間安排有問題,編程題沒有時間去做,並且會做的編程題也沒有認真看題目導致了錯誤,時間太趕。而且編程題代碼沒有注釋,導致應得分的點沒有得分,閱卷不仔細。
3.2 羅列錯題
- 這一題題目要求迴圈輸入計算多個數,而我由於時間緊張而沒看清,導致簡單題出錯。只要在主函數中寫一個while就能改正
- 我以為float的輸出格式為%lf,所以選了A,其實float輸出格式就是為%f
- 應該寫getchar()而不是scanf,scanf可能會導致錯誤
- 這一題沒有把return b改出來,以為r就是最大公約數即為b,其實r在迴圈結束時為0,while的迴圈條件題目給出的是錯誤的,雖然找出來了,但是被幹擾
3.3 下半學期要怎麼調整C的學習?
不能只做pta,書本的基礎內容更要掌握,同時接觸更高的平台,做更有深度的題目讓自己成長。
C語言部落格作業--一二維數組