1. 程式人生 > 實用技巧 >你kin你擦

你kin你擦

這個作業屬於哪個班級 C語言--網路2011/2012
這個作業的地址 C部落格作業04--陣列
這個作業的目標 學習陣列相關內容
姓名 楊振鵬

1.本章學習總結

1.1 學習內容總結

  • 查詢資料
    1.順序查詢:遍歷陣列,逐個判斷
    2.二分查詢:必須為正序的陣列,每次取一箇中間值判斷所需值與其大小,在左右兩個區間內確定一個再次去中間值。。。
#define M 10
#include <stdio.h>
int main(){
  int a[M]={-12,0,6,16,23,56,80,100,110,115};
  int low,mid,high,b,found;
  low=0;
  high=M-1;
  scanf("%d",&b);
  while(low <= high){
    mid=(low+high)/2;
    if(b == a[mid]){
      found =1;
      break;
    }else if(b>a[mid]){
      low=mid+1;
    }else{
      high=mid-1;
    }
  }
  if(found ==1){
    printf("The index of %d is %d",b,mid);
  }else{
    printf("There is not %d",b);
  }
  return 0;
}
  • 插入資料
    需要插入位置之後的所有元素後移
輸入資料
for(遍歷陣列)
   if(a[i]==date)
   index=i找到插入位置
   for(i=index;i<n;i++)將該位置以後的資料往後移一位
end for
輸出更改後的陣列
  • 刪除資料
    1.資料左移:
for (j=1; j <= k; j++)
  {
     scanf("%d", &x);//輸入需要刪除元素的位置
     for (i = x-1; i < n-1 ; i++)
      {
	a[i] = a[i + 1];
      }
  }

2.再定義一個數組:

int a[n]
int b[n-1]
scanf("%d",&index);//輸入需要刪除元素的位置
for(i=0;i<n;i++)
{
   if(i<index)
   {
      b[i]=a[i];
   }
   else
   {
    b[i]=a[i+1];
   }
}
  • 排序方法
    1.冒泡法:相鄰的數兩兩比較,前者比後者大就互換位置,最大換到最後,次大換到倒數第二。。。。。
    2.選擇法:遍歷陣列每次找本次最大的元素的下標,與最後一個元素互換,第二次與倒數第二個換。。。。。
  • 列舉:能約束元素的值
int a[5]={0,1,2,3,4};

沒用過

  • 雜湊陣列
    統計元素重複數量
1~9:
int n;
int a[10]={0};
for(元素總數)
{
      scanf("%d",&n);
      a[n]++;
}
A~Z
char ch;
int n;
int a[26]={0};
for(元素總數)
{
      scanf("%c",&ch);
      n=ch-'A';
      a[n]++;
}
  • 字元陣列、字串特點及程式設計注意事項
    輸入:
scanf("%s",&a);

上述結尾為'\0';

fgets(a,10,stdin);

上述結尾為'\n''\0',不夠則沒有'\n'

2.PTA實驗作業

2.1 7-1 將陣列中的數逆序存放

  • 2.1.1虛擬碼
輸入資料
for 0 to n-1
從陣列最後一個元素開始輸入
end for
正向輸出陣列元素
  • 2.1.2程式碼截圖
  • 2.1.3同學程式碼

    這個同學的程式碼是先將陣列正序輸入,然後第一個元素跟最後一個交換。第二個跟倒數第二交換,中規中矩。
    我的有點投機取巧,不過很快啊

2.2 7-15 閱覽室

  • 2.2.1虛擬碼
輸入資料
for 0 to n-1\\統計的天數
      for(輸入一天內的借還情況)
            if 書號為0 break;
      end for
      for(遍歷陣列)
      if (出現'S')
            for (遍歷接下來的陣列元素)
                  if(同書號+E)計入時間,次數+1
                  if(同書號+S)S改為E
            end for
      end for
      計算平均閱讀時間
      輸出
end for
  • 2.2.2程式碼截圖
  • 2.2.3超星
    前面和超星差不多,到計時那裡不太一樣,我巧妙的把同書號S後的S改為E,解決了問題,超星上的遇到沒換後的S選擇跳出迴圈,再尋找S

2.3 7-6 切分表示式——寫個tokenizer吧

  • 2.3.1虛擬碼
輸入資料
for(遍歷陣列)
      if(第一個字元為-或+)直接輸出
      else if(出現數字)
            for(尋找之後是否為數字或小數點)若是接著輸出,最後換行
      else if(出現不為第一個元素的-號時,且前面元素為(,後面的元素為數字)輸出不換行
      else 輸出換行
end for
  • 2.3.2程式碼截圖
  • 2.3.3超星
    差不多差不多