2013年6月18日 星期二

[C]Chapter 8 Homework


I.
  • 定義一個結構用來放個人通訊錄
    • name: 10 char
    • phone: 15 char
    • email: 25 char
    • age: int
  • 首先輸入一個int 代表通訊錄要設多大 (至少4人)
  • main()用 new 配置通訊錄的大小
  • 將該通訊錄傳給一function 做輸入(Call by address)
  • 將該通訊錄傳給一function 做輸出(列印通訊錄資料)
  • 最後, 不用時要delete 該通訊錄

II.
  • 寫一個function, 把副檔名”cpp”換成”c” (字串必須更改,不可以只有輸出更改)
    • 輸入字串 “d:\vc\abc.cpp” 
    • 輸出 “d:\vc\abc.c”
III.
  • Displaying a Sentence with Its Words Reversed 
    • strtok(), please google to find how to use strtok()
    • e.g. input: I will go to school
    •        Output: school to go will I

2013年6月16日 星期日

[C]20130611 class Project

n定義一個結構用來放全班個人成績
uenglish: int
uprogram: int
umath: int
uaverage: float
n首先輸入一個int 代表要放多少人的成績(>=4)
nmain()new 配置成績結構空間
n將該結構空間傳給一function 做輸入(scanf) (Call by address)
n將該結構空間傳給一function 做輸出(Call by value/address)
n將該結構空間傳給一function 算全班各科平均(Call by address)

n最後, 不用時要delete結構空間

2013年6月5日 星期三

[C]資料排序

當有一群數字資料要排列大小時,到底該怎麼做呢?

再這邊介紹兩種方法,氣泡排序法和插入排序法。

以下都介紹昇幕排序,若要做降幕排序只要更改一下比較條件即可,至於改法就請各為自行思考囉。

一、氣泡排序法

I.規則

1.將相鄰的兩筆資料比較大小,如果第一個資料比第二個資料小就交換(結果會是昇幕排序,由小到大)
2.針對每一個組合都比對,持續運作到結束後,第一個數字會是最小,最後一個數字最大。

II.寫法

以下利用function的方式寫
void bubble_sort(int data[],int size)
{
	for(int i=0;i<size;i++)
	{
		for(int j=0;j<i;j++)
		{
			if(data[j]>data[i])
			{
				int temp=data[j];
				data[j]=data[i];
				data[i]=temp;
			}
		}
	}
}

III.實例


二、插入排序法

I.規則

1.從第二項開始取出
2.和前N-1項比較,如果比該項小,就把該項項後移一個位子
3.直到取出的項大於,當前比較的項,就停止
4.把取出的項插入
5.取下一項,重複2~5步驟
這樣講或許大家有聽沒有懂,這邊借一張wikipedia的圖片,讓大家了解實際運作規則

II.寫法

以下利用function的方式寫
void insertion_sort(int data_array[],int size)
{
	int temp;
	for(int i=1;i<size;i++)
	{
		temp=data_array[i];
		int j=i-1;
		while(j>=0 && data_array[j] > temp) // j>=0的條件是為了避免array的index為負值
		{
			data_array[j+1]=data_array[j];
			j--;
		}
		data_array[j+1]=temp;
	}
}

III.實例 

 temp相當於上面那張圖紅色框框所圈的數字

三、比較 

  1. 氣泡排序法和插入排序法在完全散亂的資料上執行的時間是一樣的(因為行為都是做逐項比較)。
  2. 插入排序法所需要的交換次數通常少於氣泡排序法。
  3. 上面的例子,氣泡排列法交換6次,插入排列法交換5次

2013年6月4日 星期二

[C]Chapter 7 homework


n  (20%)輸入一個字元,輸出其ascii code number,並判斷此字元
u 若為數字,則輸出”number”
u 若為字母,則輸出”alphabet”
u 其他則輸出”others”
u 可重複輸入,直到輸入’!’離開
n  (20%)讀一個字串 scanf(“%s”, str); 計算字串長度並輸出
u 必須用function, array,傳陣列給function
u strlen() 去做驗證是否一樣
n  (20%) A 1-D array has these ten elements:
 4.4 3.3 2.2 5.5 1.1 6.6 7.7 10.0 9.9 8.8n  Write a program to sort the array in descending order.
n  Find the max number of  the 10 elements, swap this value with the first element in the array
    Then, find the max number of  the 9 elements (except first element), swap this value with the second element in the array    …


編輯紀錄


6/7
1.補上第一題可輸入無限次,直到輸入”!”表停止。
2.第三題改為float,以支援非整數