標籤:作業 考試 == 3.1 c語言 測試 定義 多個 無法
一、PTA實驗作業題目1:7-5 數組迴圈左移1. 本題PTA提交列表
2. 設計思路
定義整型變數n,m,輸入n,m的值
定義數組a[n+m],輸入這n個數
for i=0 到i<n,依次將這n個數存放到數組中
for j=i 到j<m+n,從輸入n個數的第一位元繼續儲存到數組中
for i=m 到i<n+m,輸出左移m位後的數字排列
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。
剛開始寫的代碼有用到數值間的交換,對於題目給出的範例能正確的輸出,但是當n大於m時,輸出的就是錯的。
題目2:7-2 求整數序列中出現次數最多的數1. 本題PTA提交列表
2. 設計思路
定義整型變數 n,j,i,max,number;
輸入n的值
定義整型數組a[n],count[1001];
for i=0;到i<1001
count[i]賦初值
for i=0到 i<n
a[i]賦初值
for(i=0;i<n;i++){
for(j=0;j<=1000;j++){
如果j==a[i]
count[j]=count[j]+1
如果max<count[j]
max=count[j]
number=j
輸出number,max的值
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。
呃,這題在pta上並沒有通過,圖上顯示的測試點都沒有過,按照題目的範例,輸出是一樣的,測試了一些其他的也可以,代碼還是存在問題的吧,所以才會過不了
題目3:7-9 判斷上三角矩陣1. 本題PTA提交列表
2. 設計思路
定義整型變數t,n,flag=0,輸入t,n的值
定義數組a[n][n]
for(i=0;i<n;i++) for(j=0;j<n;j++) 將數值儲存到數組中
j<i的時候,判斷a[i][j]是否為0,如果不等於0,flag=1
當n=1 並且a[0][0]等於0的時候,flag=0
if flag=1,輸出no
else 輸出yes
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明。
最開始在判斷是否存在非0元素的時候,是想一旦碰到某個數值為非0元素時,就讓它結束迴圈,但是寫出來的代碼跟我想的不一樣,它只是結束了這一個迴圈,開始了下一次的迴圈,flag的值被不斷的改變著,無法達到自己預期的效果
二、本周題目集的PTA最後排名。
三、同學代碼結對互評1.互評同學名稱
周炳輝
2.My Code、互評同學代碼
My Code
#include<stdio.h>int main(){ int n,number,x,i,temp,j,temp1; scanf("%d\n",&n); int a[n+1]; for(i=0;i<n;i++) scanf("%d\n",&a[i]); scanf("%d",&x); a[i]=x; for(i=0;i<n;i++) if(a[n]<a[i]) { temp=a[i]; a[i]=a[n]; for(j=i+1;j<=n;j++){ temp1=a[i+1]; a[j]=temp; temp=temp1; i++; } } for(i=0;i<=n;i++){ printf("%d ",a[i]);} return 0;}
同學的代碼
#include<stdio.h>int main(){ int N,i,j,k,number; scanf("%d",&N); int a[N+1]; for(i=0;i<N+1;i++) scanf("%d",&a[i]);//將要插入的數放在數組最後一項 for(j=0;j<N;j++){ if(a[N]<=a[j]){ number=a[N]; for(k=N;k>j;k--){//數組後移一位 a[k]=a[k-1]; } a[j]=number;//插入 break; } } for(i=0;i<N+1;i++) printf("%d ",a[i]); return 0;}
3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題。
我定義的變數比同學多,用了多個變數和數值間的交換才實現了資料的插入,而同學先是找到了要插入的位置,然後巧妙的利用數組後移一位實現資料的插入,這種方法更加簡潔明了,我的顯得複雜多了,效率也低。
更喜歡同學的代碼風格,簡潔明了易懂。
四、本周學習總結1.你學會了什嗎?1.1 C中如何儲存字串?
用一維字元數組來儲存
1.2 字串的結束標誌是什麼,為什麼要結束標誌?
‘\0‘
因為字串沒有明確的給出有效字元的個數,只規定在字串結束符‘\0‘之前的字元都是字串的有效字元,所以要用‘\0‘來控制迴圈的結束
1.3 字串輸入有哪幾種方法?
函數scanf()和gets()
1.4 數字字元怎麼轉整數,寫個虛擬碼?
定義變數int number ,char ch
ch=getchar()
number=ch-48
1.5 16進位、二進位字串如何轉10進位?寫虛擬碼?
16進位
定義字元型數組a[80] 定義整型變數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
2進位
定義字元型數組a[80] 定義整型變數i,number=0gets(a)字串for i=0 to a[i]!=‘\0‘ if a[i]為數字字元 number=number*2+a[i]-‘0‘
2.本周的內容,你還不會什嗎?
pta閱覽室那題挺懵逼的,不知道該如何下手,還有出生年那題的如何判斷有幾個不同的數字自己也不是很懂
3.期中考試小結3.1 你認為為什麼沒考好?
1.基礎知識還不夠紮實,文法掌握得不夠透徹,自己閱讀代碼的能力實在太差了,平時做題的時候過度依賴於dev c
2.時間把握得不夠好,在一些題目上浪費了太多的時間,導致自己做不完
3.自己的態度不夠認真,考試前沒有將書本翻一遍看看,沒有將自己還記不牢的知識再看一遍
3.2 羅列錯題。
選擇題
a++和++a的用法還是沒有記清楚,考試時有點混亂,以為printf語句裡的a++要先執行a=a+1,再將這個a的值作為a++的值
填空題
第9空錯得很不應該,這個錯誤平時已經是有犯過的了,這種知識點的題也做過好幾次的了,但是考試的時候自己還是忘了1要用1.0
改錯題
對於變數是否要賦初值還不夠敏感,所以第一個錯誤沒有改出來。
term=-termxx/(n+1)(n+2)後面的(n+1)(n+2)應該要用括弧括起來和n++這兩個地方自己都沒有發現錯誤,= =不夠認真吧
編程題
自己的能力是真的挺差的,猜數位題書上講過好幾次了,也做過好幾次了,考試的時候自己還是不懂,寫得亂七八糟的,可見自己平時學的真的不怎麼紮實,是時候該好好反思反思自己是怎麼學的了。
3.3 下半學期要怎麼調整C的學習?
課前預習,將自己看不懂的地方用筆畫出來,等老師講課的時候,遇到要講自己不懂的地方,仔細的聽,必要的時候做做筆記
課後認真的複習,將自己做錯的題目翻出來看,加深自己的印象
多找優秀的同學看看他們寫的代碼,提高自己的編程能力和閱讀代碼的能力
C語言部落格作業--一二維數組