2011年3月29日 星期二

Ex07. 結構練習 Ch2-4e.c

修改程式範例: Ch2-4.c  為Ch2-4e.c
1.假設有一個6 X 9的稀疏矩陣,如下圖所示:
2.請使用結構陣列的壓縮表示法建立稀疏矩陣的內容。

2011年3月5日 星期六

Ex03.陣列程式

Ex03.陣列程式
修改程式範例: Ch2-1-2.c 為Ch2-1-2e.c
1.增加成績對調的功能
2.於選單增加”成績對調”選項
3.詢問欲對調成績的學生學號
4.將輸入的學生學號對應的成績執行對調
對調方式:
temp=scores[std1];
scores[std1]=scores[std2];
scores[std2]=temp;
ANS:
#include <stdio.h>
#include <stdlib.h>
/* 主程式 */
int main() {
   /* 學生成績陣列 */
   int scores[10] = {76,85,90,67,59,79,82,95,91,65};
   int num;          /* 學號 */
   int grade;        /* 成績 */
   int i, choice;    /* 選項 */
   int n,temp;    /* 對調 */
   int doit = 1;
   /* 執行操作的主迴圈 */
   while ( doit ) {
     printf("----選單----\n");
      printf("1: 查詢成績\n");
      printf("2: 修改成績\n");
      printf("3: 成績對調\n");
      printf("4: 顯示成績\n");
      printf("5: 離開作業\n");
      printf("請輸入選項( 1 到 5 ). ==> ");
      scanf("%d", &choice);
      if (choice < 4 ) {
         printf("請輸入學生學號( 0 到 9). ==> ");
         scanf("%d", &num);  /* 讀入學號 */
      }
      switch( choice ) {
         case 1:  /* 查詢成績 */
            grade = scores[num];    /* 取得成績 */
            printf("學生成績: %d\n", grade);
            break;
         case 2:  /* 修改成績 */
            grade = scores[num];
            printf("原來學生成績: %d\n", grade);
            printf("輸入新成績. ==> ");/* 讀取新成績 */
            scanf("%d", &grade);
            scores[num] = grade;    /* 更新成績 */
            break;
         case 3:  /* 成績對調 */
            grade = scores[num];  /* 取得成績 */
         printf("請輸入欲對調學生之學號. ==> ");
         scanf("%d", &n);  /* 讀入欲對調學生之學號 */
         temp = scores[num];
         scores[num] = scores[n];
          scores[n] = temp;
            break;
         case 4:  /* 顯示成績 */
            printf("學生成績: \n");
            for ( i = 0; i < 10; i++ )
               printf("%d:%d ", i, scores[i]);
            printf("\n");
            break;
         case 5:  /* 結束作業 */
            doit = 0;
            break;
      }
   }  
   system("PAUSE");
   return 0;
}

2011年2月26日 星期六

Ex02. 頻率計數

(1)
     for ( i = 0 ; i < n ; i ++ )                      n+1
          for ( j = 0 ; j < n ; j ++ )                 n(n+1)
               for ( k = 0 ; k < n ; k ++ )         n2(n+1)
                    a = a + 1 ;                         n3

     頻率計數:2n3+2n2+2n+1


(2)
     i = 1 ;                                                1
     while ( i <= n )                                    n+1
     {
          a = a + 1 ;                                     n
          i ++ ;                                             n
     }

     頻率計數: 3n+2

Ex01. 迴圈


EX.01 迴圈

EX.01 迴圈
請說明

遞迴是什麼?
         ANS:一個問題的內涵是由本身所定義的話,稱之為遞迴。
          遞迴函數是由上而下分析方法的一種特殊的情況,因為子問題本身和原來問題擁有相同的特性,只是範圍改變,範圍逐漸縮小到一個終止條件。

遞迴擁有哪些特性?
           ANS:1.函數在每次呼叫時,都可以使問題範圍逐漸縮小。
                    2.函數需要擁有一個終止條件,以便結束遞迴函數的執行,否遞迴函

 數並不會結束,而是持續的呼叫自己,類似無窮迴圈。
遞迴分為哪兩種?
          ANS:1.直接遞迴


       遞迴函數是在遞迴函數本身的程式碼進行呼叫
        也就是自己呼叫自己,稱為直接遞迴,例如:
Void a()
  {
     …
     A();
     …
  }


2.間接遞迴

至少需要2個函數A() 和 B(),在函數A()的程式碼呼叫函數B();
函數B()的程式碼呼叫函數A(),此情況的遞迴呼叫稱為間接遞迴
例如:
Void A()
   {
     …
    B();
    …
   }
Void B()
  {
   …
   A()
   …
  }