2013年5月4日 星期六

字串處理



98年公務人員特種考試身心障礙人員考試試題 代號:31140
等 別: 三等考試
類 科: 資訊處理
科 目: 程式語言



三、請撰寫一段程式執行以下工作,不限程式語言:(20 分)
輸入:字串
輸出:原字串順序顛倒
(例如,輸入:abcd 輸出:dcba)



main(){
char a[]="abcd";
clrscr();
reverse(a);
}
reverse(char a[]){
char *b;
*b='\0';
while(*a)
*++b=*a++;
while(*b)
printf("%c",*b--);
getch();
}


2013年4月24日 星期三

四則運算

一、請設計一程式,在輸入一個正整數四則運算式(只有加、減、乘、除四種運算,不含括號)後,計算運算式並將結果輸出。假設所有運算一律採由左至右順序運算。請注意:所有輸入運算式所含數值資料皆為正整數。進行除法運算只取整數結果,若無法整除時採捨去小數方式。例如:輸入整數四則運算式:121*3/2,計算結果為181。(25分)


<html>
<head>
<title> 四則運算 </title>
</head>
<body>
<script language="JavaScript">
var inputs = prompt("請輸入運算式");
document.write("運算式 " + inputs + "=" + Math.floor(eval(inputs)));
</script>
</body>
</html>



2013年4月22日 星期一

解最高位元 mod 類型

99 年公務人員普通考試試題 代號:
類 科: 資訊處理
科 目: 程式設計概要
考試時間: 1 小時 30 分 座號:
※注意:禁止使用電子計算器。
不必抄題,作答時請將試題題號及答案依照順序寫在試卷上,於本試題上作答者,不予計分。
(請接背面)
全一張
(正面)
44020
一、用 C 語言撰寫一個函式 int most_significant_set_bit(int num),它能將一個 32-bit 整
數的最高有效位(The most significant bit)為 1 的位置計算出並回傳出來,如果全
為 0,則回傳 -1。例如數值 444 以二進位表示為 00000000 00000000 00000001
10111100,所以它回傳出最高有效位為 1 的位置為 8,也就是說 bit 8。(25 分)

main(){
int x=32767;
/*32767 以上的 Good luck上帝保佑*/
clrscr();
printf("%d",convert(x));
getch();
}

int convert(int x){
if (x){return 1+convert(x/2);}
return -1;
}

2013年4月21日 星期日

鏈結串列指標型


99 年公務人員普通考試試題 代號:
類 科: 資訊處理
科 目: 程式設計概要
考試時間: 1 小時 30 分 座號:
※注意:禁止使用電子計算器。
不必抄題,作答時請將試題題號及答案依照順序寫在試卷上,於本試題上作答者,不予計分。

二、用 C 語言撰寫一個函式,能將一只含有數字的單向鏈結串列(singly linked list)切
割成兩個單向鏈結串列,其一只包含奇數元素,另一只包含偶數元素,請勿複製節
點,切割前後都是以數字由小到大排序,假設此函式的原型(prototype)如下:
void split (node *h, node **h1, node **h2),h是切割前鏈結串列兩個單向鏈結串列指
標,h1,h2 是切割後兩個單向鏈結串列的指標。(25 分)
其中節點的資料結構為
typedef struct node {
3 4 8
3 5 7
h1 切割 h2
4 8
5 7
h
int d;
struct node *next;
} node;
單向鏈結串列範例



#include <stdio.h>
typedef struct node{
int d;
struct node *next;
}node;

typedef node *nodeptr;

void split(node *h,node **h1,node **h2){
node *ptr,*current;
current = h->next;
while(current!=NULL){
ptr=(node *)malloc(sizeof(node));
ptr->d=current->d;
ptr->next=NULL;
if((current->d%2)==1){
(*h1)->next=ptr;
*h1=ptr;
}
else{
(*h2)->next=ptr;
*h2=ptr;
}
current=current->next;
}

}
insert(nodeptr h,int value){
nodeptr previous,current;
nodeptr ptr;
previous = h;
current =h->next;
while(current!=NULL && value>current->d){
previous = current;
current=current->next;
}
ptr = (nodeptr)malloc(sizeof(node));
ptr->d=value;
ptr->next=current;
previous->next = ptr;
}

print(node *h){
node *current;
current = h->next;
while(current!=NULL){
printf("%d\n",current->d);
current=current->next;
}
}

void main()
{
node *h,**h1,**h2;
node *hp1,*hp2;
h=(node *)malloc(sizeof(node));
h->next=NULL;
h1=(node **)malloc(sizeof(node));
(*h1)->next=NULL;
h2=(node **)malloc(sizeof(node));
(*h2)->next=NULL;
insert(h,23);
insert(h,64);
insert(h,25);
insert(h,17);
insert(h,24);
insert(h,38);
hp1=h1;
hp2=h2;
split(h,&h1,&h2);
clrscr();
print(h);
printf("\n");
print(&*hp1);
printf("\n");
print(&*hp2);
getch();
}

2013年4月20日 星期六

樂透類型


101年公務人員普通考試試題 代號:44220
類 科: 資訊處理
科 目: 程式設計概要
考試時間: 1小時30分


一、使用 C 語言,寫一個叫做 count()的函式,此函式有 2 個參數,一個是整數陣列
score,另一個是代表陣列大小的整數 size。假設 score 陣列的所有元素都有整數值,
此函式將計算陣列內有多少個不同的數值,並將其傳回。(25分)
下列解答是錯的,請找出錯誤的原因。

int score[]={12,12,3,3,5,6,7};

main(){
clrscr();
printf("%d",count(score,7));
getch();
}

int count(int ary[],int size){
int i,j,counter=size;
for(i=0;i<size;i++){
j=0;
while(ary[++j]==ary[i])
counter--;
}
return counter;
}

正解


int score[]={12,8,3,3,7,6,7,5,7,8};

main(){
clrscr();
printf("\n%d",count(score,10));
getch();
}

int count(int ary[],int size){
int i,j,counter=0;
for(i=0;i<size;i++){
for(j=0;ary[j]!=ary[i];j++)
;
if (j==i)
counter++;
}
return counter;
}