C語言部落格作業--一二維數組

來源:互聯網
上載者:User

標籤:temp   表情   3.2   amp   tps   bre   [1]   計數   while   

7-3 出生年:1. 本題PTA提交列表:

2. 設計思路:

定義控制變數i,j,k,年份year,不同數字個數n,年份取代值digit,統計相同個數變數same;用sum=year+i;累加年份,用digit記錄sum的值digit=sum;count=digit%10;a[j]=count;digit=digit/10,存放每個位的數字,對sum重新賦值same=0;將a[i]遍曆數組,即嵌套迴圈for(k=0;k<4;k++)for(j=k+1;j<4;j++)如果(a[k]==a[j])則same++;
如果(same==1&&n==3)break;
如果((same==3||same==2)&&n==2)break;
如果(same==0&&n==4)break;
如果(same==6&&n==0)break;
輸出i的值;
用迴圈for(j=3;j>=0;j--)依次逆序輸出年份;

3.代碼:

4.本題調試過程碰到問題及PTA提交列表情況說明:
  • 1.一開始沒注意到迴圈條件的自相矛盾,寫成for(i=0;i>=0;i++),導致怎麼也進不了迴圈內,後來在同學和老師協助下改正;

  • 2.把digit=digit/10寫成count=count/10;

  • 3.後來提交PTA時,發現n=2時錯誤,自己怎麼也弄不懂為什麼錯,因為答案輸出和sample一樣,在同學協助下終於知道了自己少寫了一種情況,即same=2時,剛好也有兩個不同的情況,而自己只考慮了3個相同時2個不同的情況,這是考慮問題不周全引發的錯誤;

7-2 求整數序列中出現次數最多的數:1. 本題PTA提交列表:

2. 設計思路:

定義控制變數i,j,max存放最大值,,n為輸入整數的個數,a[1000]存放整數,count2存放出現次數最多的數,count1統計統計每個整數出現的次數;
輸入n,scanf("%d",&n);
迴圈輸入整數存入數組a[1000],for(j=0;j<n;j++)scanf("%d",&a[j]);
令最大值為a[0],max=a[0];
for(i=0;i<n;i++) 令count1=0;
統計出現次數最多的數
for(j=0;j<n;j++)
如果(a[i]==a[j])則count1++;
如果(j==(n-1)&&count1>count2)則 count2=count1;max=a[i];
輸出"%d %d",max,count2”;

3.代碼:

4.本題調試過程碰到問題及PTA提交列表情況說明。
  • 1.一開始把統計次數的迴圈for(j=0;j<n;j++)寫成for(j=i+1;j<n;j++),調試發現這樣會使得統計數本身沒有統計到,開始時以為乾脆把每個數都從頭到尾統計一遍就行,現在發現了一種更高效的做法,即寫成for(j=i;j<n;j++),這樣的話雖然不是每個數都會被完整統計一遍出現次數,只有那個數在出現第一次時才會完整統計個數,但依然可以得出出現次數最多的數

  • 2.如果條件滿足(j==(n-1)&&count1>count2),則 max=a[i];而不是max=a[j];a[i]才是拿來比較的那個數,a[j]是用來將數組遍曆一遍的數;

7-6 閱覽室:1. 本題PTA提交列表:

2. 設計思路:

定義time1[1001],time2[10]={0},time1存放初借書數間,time2存放不同天數借書的總時間,將time2的元素全歸0;
定義count[10]={0},day,i=0,book=1,其中count統計不同天借閱總次數;
定義h和m,記錄時間的時和分;定義ch;
輸入day;
while(i<day)
輸入("%d %c %d:%d",&book,&ch,&h,&m);
如果(ch==‘S‘&&book!=0)則time1[book]=h60+m;這是記錄不同書號開始借的時間
如果(ch==‘E‘&&book!=0&&time1[book]!=0)則time2[i]=time2[i]+h
60+m-time1[book]; count[i]++;當天借閱時間總和;
當book!=0時執行以上迴圈;
i++;
for(i=0;i<day;i++)
如果(count[i]==0)輸出"%d %d\n",count[i],0;
否則輸出"%d %0.f\n",count[i],time2[i]*1.0/count[i];

3.代碼:

4.本題調試過程碰到問題及PTA提交列表情況說明。
  • 1.如果要將time1[1001]歸0,則需用迴圈來做,而不是像初始化定義那樣令time1[1001]={0};
  • 2.scanf("%d%c%d:%d")時%d和%c之間要空格,即scanf("%d %c %d:%d");
  • 3.i此時是0,所以while(i<=day)改為while(i<day);
  • 4.time2[i]=h60+m-time1[book]改為time2[i]=time2[i]+h60+m-time1[book],這樣才能做到累加;

    二、本周題目集的PTA最後排名:

三、同學代碼結對互評

李琴的代碼:

My Code:

1.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?
  • 1.這題是7-4 簡化的插入排序,My Code主要是設定了兩個數組,用數組a重新排列後給數組b賦值,而李琴的代碼主要是插入排序法,我覺得她的代碼比較簡潔,但是不大容易理解,My Code相對複雜,但可能更容易理解,但還是比較喜歡簡潔的風格;

    四、本周學習總結:
  • 1.1 C中如何儲存字串?
    儲存方式和數組差不多,都是一個字元對應一個儲存單元,最後一個一定是0;

  • 1.2 字串的結束標誌是什麼,為什麼要結束標誌?
    是‘\0’,因為對字元數組的操作只能針對有效字元和字串結束符,所以需要通過檢測字串結束符來判斷是否結束對字元的操作;
  • 1.3 字串輸入有哪幾種方法?
    方法一:char str[80]="HAPPY";
    方法二:s[0]=‘a‘;s[1]=‘\0‘;
    方法三:while((str(i)=getchar())!=‘\n‘)i++;str[i]=‘\0‘;
  • 1.4 數字字元怎麼轉整數,寫個虛擬碼?
    number=number*16+hexad[i]-‘0‘;
  • 1.5 16進位、二進位字串如何轉10進位?寫虛擬碼?
    if(s[i]>=‘A‘&&s[i]<=‘F‘)
    n=s[i]-‘A‘+10;
    else if(s[i]>=‘a‘&&s[i]<=‘f‘)
    n=s[i]-‘a‘+10;
    else n=s[i]-‘0‘;
    temp=temp*16+n;

    2.本周的內容,你還不會什嗎?

詳細羅列不明白地方,包括課堂派錯題、PTA錯題。

3.期中考試小結

3.1 你認為為什麼沒考好?

3.2 羅列錯題。

請在選擇題、填空題、改錯題、編程題分別舉一題說明為什麼錯了,怎麼改?
3.3 下半學期要怎麼調整C的學習?

C語言部落格作業--一二維數組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.