2007年9月30日 星期日

ACM 比賽題庫解題

ACM 程式設計題庫解答
100 The 3n + 1 problem
101 The Blocks Problem
102 Ecological Bin Packing
105 The Skyline Problem
107 The Cat in the Hat
108 Maximum Sum
113 Power of Cryptography
118 Mutant Flatworld Expolrers
119 Greedy Gift Givers
130 Roman Roulette
136 Ugly Numbers
145 Gondwanaland Telecom
146 ID Codes
147 Dollars
151 Power Crisis
160 Factors and Factorials
167 The Sultan's Successors
170 Clock Patience
190 Circle Through Three Points
193 Graph Coloring
195 Anagram
216 Getting in Line
253 Cube painting
256 Quirksome Squares
263 Number Chains
264 Count on Cantor
272 Tex Quotes
291 The House Of Santa Claus
294 Divisors
299 Train Swapping
300 Maya Calendar
311 Packets
324 Factorial Frequencies
326 Extrapolation Using a Difference Table
332 - Rational Numbers from Repeating Fractions
339 SameGame Simulation
340 Master-Mind Hints
341 Non-Stop Travel
344 Roman Digititis
350 Pseudo-Random Numbers
362 18,000 Seconds Remaining
369 Combinations
374 Big Mod
375 Inscribed Circles and Isosceles Triangles
382 Perfection
389 Basically Speaking
392 Polynomial Showdown
400 Unix ls
401 Palindromes
406 Prime Cuts
408 Uniform Generator
409 Excuses, Excuses!
412 Pi
424 Integer Inquiry
438 The Circumference of the Circle
439 Knight Moves
440 Eeny Meeny Moo
441 Lotto
442 Matrix Chain Multiplication
443 Humble Numbers
444 Encoder and Decoder
445 Marvelous Mazes
446 Kibbles `n' Bits `n' Bits `n' Bits
455 Periodic Strings
458 The Decoder
459 Graph Connectivity
465 Overflow
466 Mirror, Mirror
471 Magic Numbers
474 Head / Tails Probability
476 Points in Figures: Rectangles
477 Points in Figures: Rectangles and Circles
482 Permutation Arrays
483 Word Scramble
488 Triangle Wave
492 Pig-Latin
494 Kindergarten Counting Game
495 Fibonacci Freeze
499 What's The Frequency, Kenneth?
530 Binomial Showdown
534 Frogger
541 Error Correction
543 Goldbach's Conjecture
568 Just the Facts
573 The Snail
575 Skew Binary
579 ClockHands
583 Prime Factors
587 There's treasure everywhere!
591 Box of Bricks
617 Nonstop Travel
619 Numerically Speaking
619 Numerically Speaking
623 500!
624 CD
626 Ecosystem
639 Don't Get Rooked
640 Self Numbers
665 False coin
668 Parliament
673 Parentheses Balance
674 Coin Change
679 Dropping Balls
686 Goldbach's Conjecture (II)
706 LCD Display
725 Division
729 The Hamming Distance Problem
740 Baudot Data Communication Code
748 Exponentiation
750 8 Queens Chess Problem
755 487--3279
763 Fibinary Numbers
784 Maze Exploration
785 Grid Colouring
808 Bee Breeding
821 Page Hopping
825 Walking on the Safe Side
834 Continued Fractions
880 Cantor Fractions
913 Joana and the Odd Numbers
944 Happy Numbers
948 Fibonaccimal Base
974 Kaprekar Numbers
993 Product of digits
10004 Bicoloring
10008 What's Cryptanalysis?
10010 Where's Waldorf?
10013 Super long sums
10015 Joseph's Cousin
10018 Reverse and Add
10019 Funny Encryption Method
10026 Shoemaker's Problem
10034 Freckles
10035 Primary Arithmetic
10038 Jolly Jumpers
10041 Vito's family
10048 Audiophobia
10055 Hashmat the brave warrior
10062 Tell me the frequencies, also solved by David.K
10071 Back to High School Physics
10074 Take the Land
10079 Pizza Cutting
10082 WERTYU
10099 The Tourist Guide, see 10048 or 534
10102 The path in the colored field
10104 Euclid Problem
10105 Polynomial coefficients
10106 Product
10107 What is the Median?
10110 Light, more light
10126 Zipf's Law
10127 Ones
10137 The Trip
10147 Highways, see 10034
10161 Ant on a Chessboard
10182 Bee Maja
10189 Minesweeper
10209 Is This Intergration?
10220 I Love Big Numbers !
10254 The Priest Mathematician
10295 Hay Points
10297 Beavergnaw
10300 Ecological Premium
10302 Summation of Polynomials
10327 Flip Sort
10370 Above Average
10300 Ecological Premium
10346 Peter's Smokes
10359 Tiling
10392 Factoring Large Numbers
10393 The One-Handed Typist
10394 Twin Primes
10397 Connect the Campus, see 10034
10405 Longest Common Subsequence
10409 Die Game
10420 List of Conquests
10432 Polygon Inside A Circle
10450 World Cup Noise
10452 Marcus
10465 Homer Simpson
10473 Simple Base Conversion
10474 Where is the Marble?
10491 Cows and Cars
10494 If We Were a Child Again
10497 Sweet Child Makes Trouble
10499 The Land of Justice
10515 Powers Et Al.
10519 !!REALLY STRANGE!!
10530 Guessing Game
10533 Digit Primes
10539 Almost Prime Numbers
10550 Combination Lock
10551 Basic Remains
10573 Geometry Paradox
10579 Fibonacci Numbers
10583 Ubiquitous Religions
10589 Area
10608 Friends
10637 Coprimes
10649 Danger Point
10664 Luggage
10673 Play with Floor and Ceil
10678 The Grazing Cows
10684 The jackpot
10696 f91
10759 Dice Throwing
10763 Foreign Exchange
10783 Odd Sum
10784 Diagonal
10789 Prime Frequency
10790 How Many Points of Intersection?
10810 Ultra-QuickSort
10812 Beat the Spread!
10815 Andy's First Dictionary
10878 Decode the tape
10903 Rock-Paper-Scissors
10905 Children's Game
10911 Forming Quiz Teams
10912 Simple Minded Hashing
10916 Factstone Benchmark
10919 Prerequisities?
10921 Find the Telephone
10922 2 the 9s
10924 Prime Words
10929 You can say 11
10931 Parity
10963 The Swallowing Ground
10970 Big Chocolate
10994 Simple Addition
11000 Bee
11005 Cheapest Base
11015 05-2 Rendezvous
11038 How many 0's?
11069 A Graph Problem
11121 Base -2
11150 Cola
11172 Relational Operators
11185 Ternary
11192 - Group Reverse
11244 Counting Stars
11326 Laser Pointer
11342 Three-square
11401 Triangle Counting
11417 GCD
11428 Cubes
11437 - Triangle Fun
11455 Behold my quadrangle
11462 Age Sort
11461 Square Numbers
11470 Square Sums
11479 Is this the easiest problem?, see 11455
11483 Code Creator
11498 Division of Nlogonia
11520 Fill the Square
11522 Pyramid Number
11526 H(n)
11530 SMS Typing
11538 Chess Queen
11541 Decoding
11547 Automatic Answer
11586 Train Tracks
11597 Spanning Subtree
11608 No Problem
11609 Teams
11614 Etruscan Warriors Never Play Chess
11621 Small Factors
11636 Hello World!
11650 Mirror Clock
11661 Burger Time?
11666 - Logarithms
11677 Alarm Clock
11689 Soda Surpler
11714 Blind Sorting
11715 Car
11716 Digital Fortress
11727 Cost Cutting
11734 Big Number of Teams will Solve This
11743 Credit Check
11764 Jumping Mario
11805 Bafana Bafana

小考六(B) 解答


/* C Programming, Quiz 6B */
/*
小考六題目:完成函數 reciprocalSum,以計算陣列的倒數和,如附圖公式。
提示一:輸入為一個陣列,其內容由初設值設定,輸出為一個double值。
提示二:以定義陣列的大小。
*/

#include <stdio.h>
#include <stdlib.h>
#define SIZE 5

double reciprocalSum(double arr[]);

int main(void)
{
int i;
double result;
double B[SIZE] = {2, 4, 6, 8, 10};

/* your program is here */
result = reciprocalSum(B);

printf("The reciprocal sum is %f\n", result);

system("pause");
return 0;
}

/* your program is here */
double reciprocalSum(double arr[])
{
int i;
double sum=0;
for (i=0;i<SIZE;i++)
sum += (i+1)/arr[i];
return sum;
}

小考六(B)題目
返回小考目錄
回到首頁

小考六(B) 題目


/*
小考六題目:完成函數 reciprocalSum,以計算陣列的倒數和,如附圖公式。
提示一:輸入為一個陣列,其內容由初設值設定,輸出為一個double值。
提示二:以#define定義陣列的大小。

*/

#include <stdio.h>
#include <stdlib.h>

/* your program is here */

double reciprocalSum(double arr[]);

int main(void)
{
int i;
double result;

/* your program is here */


printf("The reciprocal sum is %f\n", result);

system("pause");
return 0;
}

/* your program is here */



解答下載
返回小考目錄
回到首頁

C 程式設計期末作業,學習函數,練習解題:解題


/* C Programming, Final Project */

#include <stdio.h>
#include <stdlib.h>
#include "adv_fval.h"

#define POP 50
#define GENNO 4
int main(void)
{
double parent[GENNO],parentFit,offspring[POP][GENNO],oFit[POP];
int gen,i,j;

for (i=0;i<GENNO;i++)
parent[i] = initPetPar2();
parentFit = IQEval2(parent[0], parent[1], parent[2], parent[3]);
for (gen=1;gen<300;gen++) {

for (i=0;i<POP;i++) {
for (j=0;j<GENNO;j++)
offspring[i][j] = parent[j] + (double)rand()/RAND_MAX*10-5.0;
oFit[i] = IQEval2(offspring[i][0], offspring[i][1], offspring[i][2], offspring[i][3]);
}

for (i=0;i<POP;i++) {
if (oFit[i]>parentFit) {
for (j=0;j<GENNO;j++) {
parent[j] = offspring[i][j];
}
parentFit = oFit[i];
}
}
printf("%10.4f %10.4f %10.4f %10.4f, parentFit=%10.4f\n", parent[0], parent[1], parent[2], parent[3], parentFit);
}

system("pause");
return 0;
}


期末作業題目
回到首頁

C 程式設計作業七,選擇邏輯、重複邏輯、輸出輸入、陣列應用:解題


/* C Programming, Project 7 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define ROW 3
#define COL 3

int marked[ROW][COL]={0}, slot[ROW][COL] = {0};
int getMarked(void);
void display(void);
int getMarked(void);
void showIcon(int);
int oneLine(void);

int main(void)
{
/* 你的程式這裡要寫 */
int colNo, rowNo;
int cMove, mi, mj;

do {
printf("Input cmd: ------> ");
scanf("%d,%d", &rowNo, &colNo);
if ((colNo>=0&&colNo<=2)&&(rowNo>=0&&rowNo<=2)&&(marked[rowNo][colNo]!=1)) {
/* printf("Your input ------> %d,%d\n", rowNo, colNo); */
marked[rowNo][colNo] = 1;
slot[rowNo][colNo] = 1;
display();

/* 回應玩家的動作 */
if (oneLine())
{
printf(" ---------------You win----------------\n");
break;
}
if (getMarked()==9)
break;
do {
cMove = rand()%9;
mi = cMove/3;
mj = cMove%3;
} while (marked[mi][mj] == 1);
marked[mi][mj] = 1;
slot[mi][mj] = -1;
display();
if (oneLine())
{
printf(" -------------Computer win--------------\n");
break;
}
} else {
printf("---------------Error input----------------\n");
}
} while (getMarked() < 9);
system("pause");
return 0;
}

int getMarked(void)
{
int i, j, total=0;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
total += marked[i][j];
return total;
}

void display(void)
{
int i, j;
for (i=0;i<ROW;i++)
{
for (j=0;j<COL;j++) {
showIcon(slot[i][j]);
if (j<2)
printf("|");
else
printf("\n");
}
if (i<2)
printf("─┼─┼─\n");
else
printf("\n");
}
}

void showIcon(int a)
{
if (a==1)
printf("O");
else if (a==-1)
printf("x");
else if (a==0)
printf(" ");
}
int oneLine(void)
{
int i, j, total;
for (i=0;i<3;i++)
{
total = 0;
for (j=0;j<3;j++)
total += slot[i][j];
if (total==3 || total==-3)
return 1;
total = 0;
for (j=0;j<3;j++)
total += slot[j][i];
if (total==3 || total==-3)
return 1;
}
total = slot[0][0]+slot[1][1]+slot[2][2];
if (total==3 || total==-3)
return 1;
total = slot[0][2]+slot[1][1]+slot[2][0];
if (total==3 || total==-3)
return 1;
return 0;

}

作業七題目
回到首頁

C 程式設計期末作業,學習函數,練習解題

作業內容:
以下是作業六科幻故事的續集。

寵物凱立歐有了新品種叫哥立歐(Gleo),哥立歐的產生是透過四種射線所形成,以這四種 x1, x2, x3, x4 射線照射所得到的品種也可以透過簡單的電子掃描得知其智力,它的智力會依四種射線照射強度不同,而有所變化,四種射線的強度在 -64.0 到 64.0 之間。

現在有了新的競賽,目的也是要培養智力達180以上的哥立歐。競賽是沒有什麼特定的規則,你可以同時擁有多隻哥立歐,自己想出培養新品種的方法,例如,每次生產很多隻,留下一些優良品種作為下一代育種用。有一種方式叫做隨機暴力法,這是演算法中的用語,就是無限的生產,無限的淘汰,使用特定的規則找遍所有可能的答案,看到好的就留下。

隨機暴力法的流程如下

第一步:隨機產生第一隻哥立歐;呼叫 initPetPar2()函數 四次,來產生每一個射線的初始強度,並計算它的IQ值。智力的計算方式是呼叫IQEval2(double, double, double, double),例如 myiq = IQEval2(a1, b1, c1, d1);。

第二步:產生另一隻子代哥立歐。方法是以父代的射線值(四個射線的處理方式相同),去加減一個隨機數,以產生不同的子代,並計算其IQ值。

例如:yi = xi ± m,d <= m <= u,亦即 m 是 d 至 u 之間的隨機數。

第三步:比較父代和子代這兩隻誰的IQ高,留下高IQ哥立歐。

第四步:如果未滿足停止條件,就回到第二步。

你也可以用作業六的方式來完成這個期末作業。

重要步驟:
1. 在開始寫這個程式之前,你必須下載三個檔案 adv_fvaldll.aadv_fval.dlladv_fval.h,放在與你主程式相同的目錄中。

2. 在你的主程式中,必須加上這一行:#include "adv_fval.h"。

3. 在Dev-C++中的Tools -> Compiler Options 中,設定連結加入adv_fvaldll.a 檔案,如下圖。

解答下載
回到首頁

C 程式設計作業六,使用函數和隨機數:解題


/* C Programming, Project 6 */

#include <stdio.h>
#include <stdlib.h>
#define POP 50
int main(void)
{
double parent[3],parentFit,offspring[POP][3],oFit[POP];
int gen,i,j;

for (i=0;i<3;i++)
parent[i] = initPetPar();
parentFit = IQEval(parent[0], parent[1], parent[2]);
for (gen=1;gen<300;gen++) {

for (i=0;i<POP;i++) {
for (j=0;j<3;j++)
offspring[i][j] = parent[j] + (double)rand()/RAND_MAX*4-2.0;
oFit[i] = IQEval(offspring[i][0], offspring[i][1], offspring[i][2]);
}

for (i=0;i<POP;i++) {
if (oFit[i>parentFit) {
for (j=0;j<3;j++) {
parent[j] = offspring[i][j];
}
parentFit = oFit[i];
}
}
printf("%10.4f %10.4f %10.4f, parentFit=%10.4f\n", parent[0], parent[1], parent[2], parentFit);
}

system("pause");
return 0;
}

作業六題目
回到首頁

2007年9月20日 星期四

C 程式設計作業七,選擇邏輯、重複邏輯、輸出輸入、陣列應用

作業內容:
完成一個玩家與電腦對抗的九宮格的圈叉遊戲。

程式一開始,由玩家先下,使用的指令格式為「r,c」,r表示列數,c表示行數,例如「0,2」表示是下在第一列,第三行,玩家與電腦輪流下,直到九個格子都下滿,或是有一方連成一線。

玩家與電腦都不可以下在已經下過的格子。

每次電腦或玩家下完,你必須顯示棋盤的結果。

下列是一個完成的例子:

作業提示:
1. 電腦不需要具有智慧,只要任意選一個沒下過的點下即可。
2. 連成一線的情形共有八種,三個列、三個行、及兩個交叉線。
3. 你可以考慮使用兩個二維陣列,例如marked[3][3]和who[3][3],marked的值有兩種,下過了的格子是1、沒下過的格子是0,以便用來判斷是否有一方在該格子下過;who的值有三種,1表示玩家下過,-1表示電腦下過,0表示沒下過的格子。當然只用who也足夠了,可自行判斷運用。
作業七解答
回到作業目錄
回到首頁

小考六(A) 解答


/* C Programming, Quiz 6A */
/*
小考六題目:完成函數 squareSum,以計算陣列的平方和,如附圖公式。
提示一:輸入為一個陣列,其內容由初設值設定,輸出為一個double值。
提示二:以#define定義陣列的大小。
*/

#include <stdio.h>
#include <stdlib.h>
/* your program is here */

#define SIZE 5 /*定義MAX為 5*/

double squareSum( double arr[] , int);
int main(void)
{
int i;
double result;
/* your program is here */

double arr[SIZE] = { 5.0, 6.3, 9.2, 4.5, 8.1};/*定義陣列的值*/

result = squareSum( arr, SIZE);/*跳入squareSum函數內,並傳回它的值給result*/

printf("The square sum is %f\n", result);/*印出算出的結果*/
system("pause");
return 0;
}
/* your program is here */
double squareSum( double arr[] , int i)
{
int a ;
double sum=0 ;
for( a=0 ; a<i ; a++)/*跳入迴圈內*/
{
sum += arr[a] * arr[a];/*平方累加*/
}
return sum;
}

小考六(A)題目
返回小考目錄
回到首頁

小考六(A) 題目


/*
小考六題目:完成函數 squareSum,以計算陣列的平方和,如附圖公式。
提示一:輸入為一個陣列,其內容由初設值設定,輸出為一個double值。
提示二:以#define定義陣列的大小。

*/

#include <stdio.h>
#include <stdlib.h>

/* your program is here */

double squareSum(double arr[]);

int main(void)
{
int i;
double result;

/* your program is here */

printf("The square sum is %f\n", result);

system("pause");
return 0;
}

/* your program is here */



解答下載
返回小考目錄
回到首頁

2007年9月18日 星期二

C語言教學影片(一),初次使用Dev C++

使用Dev C++來學習C語言教學影片

包括

  • 簡單設定
  • 編譯器步驟
  • 簡單 gcc 指令

2007年9月15日 星期六

C 程式設計作業六,使用函數和隨機數

作業內容:
以下是我們自己編的科幻故事。

在阿米爾‧艾克塞爾(Amir A. Aczel)的書「機率1:第二個地球」中,告訴你另一個地球存在的機率是 1 ,而這個故事是發生在七姐妹星團中的艾達星球,再艾達星球的人類每年都會為高中生舉辦一場智力寵物的培養大賽。

這種寵物的名字叫凱立歐(Cleo),在 α (Alpha)、β (Bravo)、γ(Gamma)三種射線照射一會兒之後,會產生出下一帶,經過約一天的餵養成長,即可長大,約有一呎長,所以平均一天可以產生一個新的子代。

長大的凱立歐可以透過簡單的電子掃描得知其智力,它的智力會依三種射線照射強度不同,而有所變化,三種射線的強度在 -32.0 到 32.0 之間。

這個競賽的內容如下,在300天的期限內,你必須養出一隻凱立歐,它的智力必須超過180,可能的智力範圍在 0~200之間,每隻凱立歐都會標示它所受到三種射線的強度。你可以經過適當控制讓這隻凱立歐產生 n 隻凱立歐, n 在 1~50之間,每天只能留下智力最佳一隻,做為生產下一代用,其餘的凱立歐必須由回收中心收回。

你只有300天的時間完成這項競賽,你必須改變這三種射線的值,以期待下一代的凱立歐會更聰明。

重要步驟:
1. 在開始寫這個程式之前,你必須下載三個檔案 fvaldll.afval.dllfval.h,放在與你主程式相同的目錄中。
2. 在你的主程式中,必須加上這一行:#inlcude "fval.h"。
3. 在Dev-C++中的Tools -> Compiler Options 中,設定連結加入fvaldll.a 檔案,如下圖。


4. 使用程式設計的方法來找出最佳的三種射線的強度組合,一次流程如下:
第一步:獲得第一隻凱立歐;呼叫 initPetPar()函數三次,來產生每一個射線的初始強度。
第二步:產生 n 隻子代凱立歐,n >= 1(自行決定)。方法是以父代的射線值(三個射線的處理方式相同),去加減一個隨機數,以產生不同的子代。
例如:yi = xi ± m,d <= m <= u,亦即 m 是 d 至 u 之間的隨機數。且 1 <= i <= 50。
第三步:計算每一隻凱立歐的智力,智力的計算方式是呼叫
IQEval(double, double, double),例如 myiq = IQEval(a1, b1, r1);。
第四步:在父代和子代的集合中,找出智力最佳的一隻做為第二天的父代。
第五步:如果300天沒用完,就回到第二步。
第六步:列印出凱立歐的智力與其使用的三個射線值。
5. 請連續執行三十次,每次都有不同的亂數序列,最後使用算出最佳智力的平均值。
解答下載
回到作業目錄
回到首頁

C 程式設計作業五,使用函數:解題


/* C Programming, Project 5 */
/* Author: 施佑達 A9228450 */

#include <stdio.h>
#include <stdlib.h>

void power_off(int z){
int i,x,y,a=1;
int area[17]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
for(i=1;i<=17;i++){ //一共停17次,每次區域皆不一樣
printf("%d, ",a);
area[a]=1;
for(x=1;x<=z;x++){ //計算未停過的區域
a=a+1;
for(y=1;y<=17;y++){ //計算已停過電的區域
if (area[a]==1)
a=a+1;
if (a==18)
a = 1;
}
}
}
}

int main(){
int b;
for (b=5;b<=8;b++){ //5-8的方法
printf("%d的停電順序為:",b);
power_off(b);
printf("\n");
}
system("pause");
return 0;
}

作業五題目
回到首頁

C 程式設計作業五,使用函數

作業內容:
紐西蘭有一年電力供應不足,所以必須分區輪流停電,全國共分為十七個區,為了能以公平的方式輪流停電,決策者選定了一個隨機數 5,每次執行停電從第 1區開始,接下來是第 6 區,亦即以 5 為區的相隔進行停電,接著是第 11 區、第 16 區,因為只有17區,所以從頭開始輪,已經停過的就不用再停電了。所以數了5次(17, 2, 3, 4, 5),因此輪到第 5 區停電。整個停電的順序是:

1 6 11 16 5 12 2 9 17 10 4 15 14 3 8 13 7

但是這個決策者覺得這個隨機數 5 似乎不盡公平,所以他又選擇了三個數字,亦即 5, 6, 7, 8,希望能用抽籤,在這四種停電順序中選一種,你的任務就是寫一個程式,能列出這四種順序來。
 

作業要求:

1. 你必須建立一個函數來尋找下一個停電的區域,例如 PowerOff = findNextPowerOff(currentPowerOff, m),m= 5 or 6 or 7 or 8。(佔40%)
2. 列印這四種停電順序。

作業提示:
1. 你應該會用到整數陣列,不過要記得只有0~n-1的索引值可以用。
例如宣告:int powerOff[17]。
2. 請多使用debug的功能去追蹤你的程式。
解答下載
回到作業目錄
回到首頁

C 程式設計作業四,迴圈與解決問題:解題


/* C Programming, Project 4 */
/* Author: 施佑達 A9228450 */

#include <stdio.h>
#include <stdlib.h>

int main()
{
/* B是指哥哥,S是指弟弟,up是指向上,down是指向下
effect是指影響度,enent是指結果,high是指井高,day是指天數 */
float B_up,B_down,B_effect,B_event=0;
float S_up,S_down,S_effect,S_event=0;
float high;
int day;

printf("請輸入井高:");
scanf("%f",&high);
printf("請輸入蝸牛哥哥的資料\n");
printf("向上:");
scanf("%f",&B_up);
printf("向下:");
scanf("%f",&B_down);
printf("疲勞影響度:");
scanf("%f",&B_effect);
printf("請輸入蝸牛弟弟的資料\n");
printf("向上:");
scanf("%f",&S_up);
printf("向下:");
scanf("%f",&S_down);
printf("黏液影響度:");
scanf("%f",&S_effect);

for(day=1;day<=20;day++)
{
B_event = B_event+(B_up-B_effect*(day-1));

if (B_event >= high) {
printf("在第%d天,哥哥爬到頂!!!\n",day);
break;
}
B_event = B_event-B_down;

if (B_event <= 0.1){
printf("在第%d天,哥哥失敗滑回底!!!\n",day);
break;
}
}

for(day=1;day<=20;day++)
{
S_event = S_event+S_up;

if (S_event >= high) {
printf("在第%d天,弟弟爬到頂!!!\n",day);
break;
}

S_event = S_event-(S_down+S_effect*(day-1));
if (S_event <= 0.1){
printf("在第%d天,弟弟失敗滑回底!!!\n",day);
break;
}
}
system("pause");
return 0;
}

作業四題目
回到首頁

2007年9月6日 星期四

C 程式設計作業四,迴圈與解決問題

作業內容:
以下是我們編的童話故事。
在一口井裡,住著一對蝸牛兄弟,他們自幼感情好,經常在一起玩耍,蝸牛哥哥練就著一身快速攀爬的工夫,但是手腳雖快,卻容易疲累 (動作快當然耗體力囉)。蝸牛弟弟則是練就著超強的抓地力(就是體液超過,全身黏乎乎)。蝸牛兄弟在井裡過的很快活,有得吃,有得玩,沒事還打打電動 (編成這樣,真是太扯了)。
終於有一天,他們兄弟倆突然想要去外面的世界看看,蝸牛哥哥居然說,我們來比賽,看誰可以先出去。因為井蠻高的,要爬出去可不是一天兩天,但是,蝸牛兄弟二人(隻)都信心滿滿,總以為自己的本事超強,可以贏過對方,等到比賽開始,他們各自發現一個現象。
蝸牛哥哥發現自己白天會爬一段高度,到晚上一定要休息,第二天要開始爬時,發現因為地心引力關係,又向井中滑去(滑固定的距離),剛開始,白天向上的高度會比晚上滑下來的距離長,可是愈爬愈累,每天向上的高度都會比前一天固定少一點,他開始擔心,會不會還沒到頂,他就沒力氣,再也爬不動了。假設他第一天向上三公尺,晚上固定滑下來二公尺,以後的日子,每天都比前一天少爬20公分,如下表顯示每日變化
開始時的高度白天爬完後的高度晚上下滑後的高度
第一天0 公尺3 公尺1 公尺
第二天1 公尺3.8 公尺1.8 公尺
第三天1.8 公尺4.4 公尺2.4 公尺
第四天2.4 公尺4.8 公尺2.8 公尺

蝸牛弟弟發現自己白天也會爬一段高度(是固定的,但是沒哥哥爬的多),到晚上也一定要休息,但因為比較黏,所以晚上會滑下來的距離卻比哥哥少,但是黏液每天消耗,也會逐漸黏不住,每天晚上下滑的距離,都會比前一天多下滑一個固定的距離。例如他每天固定向上爬二公尺,第一天晚上只下滑一公尺,之後,每天晚上多下滑30公分。每日變化如下表顯
開始時的高度白天爬完後的高度晚上下滑後的高度
第一天0 公尺2 公尺1 公尺
第二天1 公尺3 公尺1.7 公尺
第三天1.7 公尺3.7 公尺2.1 公尺
第四天2.1 公尺4.1 公尺2.2 公尺

作業要求:
1. 這個作業要能知道誰可以爬到頂?或滑回底?發生在第幾天?
2. 你會獲得的資料,包括井的高度、和蝸牛兄弟二人(隻)的能力,各有三個數字,分別是向上、向下、和疲勞影響/黏液影響,單位都是公尺。
測試方式:
輸入範例:第一行只有一個值,代表井的高度;第二行是哥哥的資料,第三行是弟弟的資料。
範例一:
5.2
3.0 2.0 0.2
2.0 0.7 0.3
範例二:
5.8
4.0 2.0 0.2
2.0 0.8 0.3
輸出範例:
範例一解答:
在第 11 天,哥哥失敗滑回底。
在第 5 天,弟弟成功爬到頂。

範例二解答:
在第 3 天,哥哥成功爬到頂。
在第 10 天,弟弟失敗滑回底。

作業四解答
回到作業目錄
回到首頁

C 程式設計作業三,選擇邏輯與迴圈應用:解題


/* C Programming, Project 3 */
/*
說明題目:這次作業是要求用文字畫一個平行四邊形或菱形的圖案,
且分實心與空心兩種,例如:你的程式是畫平行四邊形,
在輸入一個10和12的數字,
則在空心的設定時可以輸出一個平行四邊形如左下圖,
底為10,高為12。如果是菱形,
再輸入為11時則劃出對角線長度為11的值,如右下圖。
*/
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int i, j, width, height, zo; //宣告變數

printf("請輸入 0 (空心) 或 1 (實心):");
scanf("%d", &zo);

if(zo != 0 && zo != 1 ) //判斷圖形是否為實心或是空心
{
printf("請輸入正確的數字!!\n"); //輸入結果錯誤所印出來的結果
system("pause");
return 0;
}

printf("請輸入平行四邊形的底:");
scanf("%d", &width);
printf("請輸入平行四邊形的高:");
scanf("%d", &height);

/*決定平行四邊形外的空白數*/
for(i=0; i<height; i++) //用迴圈方式設定平行四邊形的高
{
for(j=0; j<i; j++) //印出空白部份
{
printf(" ");
}
/*決定平行四邊形裡的圖案*/
for(j=0; j<width; j++) //用迴圈方式設定平行四邊形的底
{
if(zo == 0) //用if判斷是空心的話,所執行的部份
{
if(i == 0 || i == height-1) //第一列與最後一列印出 X
{
printf("x");
}
else if(j == 0 || j == width-1) //第一行與最後一行印出 X
{
printf("x");
}
else //其餘印出空白
{
printf(" ");
}
}
else if(zo == 1) // 用if判斷是實心的話,所要執行的部份
{
for(j=0; j<width; j++) //此為實心印出 X
{
printf("x");
}
}
}
printf("\n"); //換行
}
system("pause");
return 0;
}

作業三題目
回到首頁

C 程式設計作業三,選擇邏輯與迴圈應用

作業內容:
這次作業是要求用文字畫一個平行四邊形或菱形的圖案,且分實心與空心兩種,例如:你的程式是畫平行四邊形,在輸入一個10和12的數字,則在空心的設定時可以輸出一個平行四邊形如上圖,底為10,高為12。如果是菱形,再輸入為11時則劃出對角線長度為11的值,如下圖。


作業要求:
1. 使用一種符號,但不要用星號(*)來畫,因為已經被我用了。
2. 平行四邊形或菱形只要選一個來做。
3. 必須能畫實心和空心兩種。
測試方式:
狀況 A:實心,使用兩個值,範圍在15~20之間。
狀況 B:空心,使用兩個值,範圍在10~15之間。
作業三解答
回到作業目錄
回到首頁

C 程式設計作業二,選擇邏輯與輸出、輸入應用:解題


/* C Programming, Project 2 */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int choice1,choice2,choice3,choice4;/*宣告變數choice1,choice2,choice3,choice4*/
int choice5,choice6,choice7,choice8;/*宣告變數choice5,choice6,choice7,choice8*/
char playername[10];/*宣告可容納10個字元的字元陣列playername*/

printf("\n歡迎來到 \"千隨島\"\n\n");
printf("請玩家輸入姓名:");/*印出請玩家輸入姓名:*/
scanf("%s",playername);/*讀取字串,並把他寫到playername字串陣列裡*/
printf("遊戲方式:每次可以選擇\'向左\'或者\'向右\'走。\n");/*印出遊戲執行方式*/
printf("時間:西元六千年。\n");/*印出遊戲的時間*/
printf("背景:在千隨島上的生物以狼人與吸血鬼為主。 早在西元4350年,曾經\n");
printf("雙方有意和平相處而出現所謂的「和平會議」,但終究宣告失敗。世世\n");
printf("代代相互殘殺......\n");
printf("相傳在千隨島的某個森林中,存在唯一的人類叫\'密斯\'。而玩家的目的\n");
printf("在於尋找到密斯,並跟隨密斯拯救整個千隨島......,千隨島是否能和平\n");
printf("與是否能完成此任務,一切都在於你。\n");/*此段印出遊戲的故事背景*/

/*列印出遊戲開始狀況-狀況1*/
printf("\n%s玩家,目前你所在位置在島嶼的西北方,身上僅有一把瑞士刀。\n",playername);
printf("開始朝著森林深處前進...。\n");
printf("第一個交叉路口:(1)左(2)右");
scanf("%d",&choice1);/*讀取鍵盤之輸入,並存於choice1*/
if(choice1==1)/*判斷做出狀況1選擇時所遭遇之各種狀況*/
{
printf("在森林路徑尋找到一個山洞,在洞中找到一些乾糧及水。\n");
}
else if(choice1==0||choice1>2)
{
printf("輸入錯誤,遊戲結束。\n");/*不當選擇,程式結束*/
}
else
{
printf("唉唷!因尚未熟悉地形,不幸踩空,跌落山谷。\n");
printf("%s, 你執行任務失敗,遊戲結束。\n",playername);
system("pause");
return 0;
}
/*列印出狀況2*/
printf("遇到凶猛的猛獸,拿起瑞士刀與他戰鬥。但終究不敵猛獸...轉身逃跑。\n");
printf("第二個交叉路口:(1)左(2)右");
scanf("%d",&choice2);/*讀取鍵盤之輸入,並存於choice2*/
if(choice2==2)/*判斷做出狀況2選擇時所遭遇之各種狀況*/
{
printf("順利逃脫猛獸的追逐,往另一個方向前進。\n");
}
else if(choice2==0||choice2>2)
{
printf("輸入錯誤,遊戲結束。\n");/*不當選擇,程式結束*/
system("pause");
return 0;
}
else
{
printf("在猛獸追逐中,被路上的小石頭絆倒,被猛獸咬死。\n");
system("pause");
return 0;
}
/*列印出狀況3*/
printf("\n在千隨島的東方尋得擁有三百五十六歲數的狼人智者,從他口中得知在西元\n");
printf("4182年曾經發生大規模狼人與吸血鬼被屠殺的事件。據說是傳說中的「最後\n");
printf("武器」-銀造成的,也在那之後,雙方禁止使用最後武器在戰爭上。必從他\n");
printf("口中探得密斯的隱居地。繼續向前邁進...。\n");
printf("第三個交叉路口:(1)左(2)右");
scanf("%d",&choice3);/*讀取鍵盤之輸入,並存於choice3*/
if(choice3==2)/*判斷做出狀況3選擇時所遭遇之各種狀況*/
{
printf("順利越過沼澤地,向著密斯的隱居地-岳畔湖 旁的小屋前進。\n");
}
else if(choice3==0||choice3>2)
{
printf("輸入錯誤,遊戲結束。\n");/*不當選擇,程式結束*/
system("pause");
return 0;
}
else
{
printf("因誤入沼澤地的禁地,遭傳說中居住者的誤會而被帶走,並成為其奴隸。\n");
system("pause");
return 0;
}
/*列印出狀況4*/
printf("\n抵達位於東方的岳畔湖,並且發現一小木屋。但須在兩小路口抉擇...。\n");
printf("第四個交叉路口:(1)左(2)右");
scanf("%d",&choice4);/*讀取鍵盤之輸入,並存於choice4*/
if(choice4==1)/*判斷做出狀況4選擇時所遭遇之各種狀況*/
{
printf("發現密斯,告訴密斯來此尋找他的目的。請求他的幫忙,\n");
}
else if(choice4==0||choice4>2)
{
printf("輸入錯誤,遊戲結束。\n");/*不當選擇,程式結束*/
system("pause");
return 0;
}
else
{
printf("誤入密斯獨門的陣法中,盤旋其中,不得而出。\n");
system("pause");
return 0;
}
/*列印出狀況5*/
printf("\n密斯要求與他對決,戰勝才願意跟隨%s並且聽命於他。於是,將和密斯來\n",playername);
printf("一場攻防追逐戰。\n");
printf("第五個選擇:(1)左(2)右 追逐密斯");
scanf("%d",&choice5);/*讀取鍵盤之輸入,並存於choice5*/
if(choice5==2)/*判斷做出狀況5選擇時所遭遇之各種狀況*/
{
printf("恭喜%s,追逐到密斯,且與密斯的對決戰勝了。密斯加入你的隊伍。\n\n",playername);
}
else if(choice5==0||choice5>2)
{
printf("輸入錯誤,遊戲結束。\n");/*不當選擇,程式結束*/
system("pause");
return 0;
}
else
{
printf("喔喔!你輸了。因未取得密斯信任而導致無法繼續執行任務。\n");
printf("%s, 你無法完成任務,遊戲結束。\n",playername);
system("pause");
return 0;
}
/*列印出狀況6*/
printf("密斯告訴%s,除了有他還不夠,必須尋找另外一位有相當身手的狼人作為\n",playername);
printf("保鏢,因為狼人能靠著氣味察覺周遭狀況。而密斯建議的人是荳兒。於是\n");
printf("密斯一行人繼續前進,朝著\"清欣\"城市走...。\n");
printf("第六個交叉路口:(1)左(2)右");
scanf("%d",&choice6);/*讀取鍵盤之輸入,並存於choice6*/
if(choice6==2)/*判斷做出狀況6選擇時所遭遇之各種狀況*/
{
printf("抵達清欣城市,在清欣城市的Papaya酒吧找到荳兒。因密斯的邀請,\n");
printf("荳兒隨即加入隊伍。\n");
}
else if(choice6==0||choice6>2)
{
printf("輸入錯誤,遊戲結束。\n");/*不當選擇,程式結束*/
system("pause");
return 0;
}
else
{
printf("在清欣城市遭遇到狼人與吸血鬼雙方展開的獵捕行動,不幸慘遭其中\n");
printf("一位狼人的牙齒咬斷脖子,因而身首異處。任務失敗!\n\n");
system("pause");
return 0;
}
/*列印出狀況7*/
printf("\n%s一行人隨即出發尋找密斯祖傳的藏寶圖中的藏寶地點,也就是位於清欣城\n",playername);
printf("市西北西方位的遺跡......。\n");
printf("第七個交叉路口:(1)左(2)右");
scanf("%d",&choice7);/*讀取鍵盤之輸入,並存於choice7*/
if(choice7==1)/*判斷做出狀況7選擇時所遭遇之各種狀況*/
{
printf("發現遺跡!位於遺跡入口寫了一排字......\n");
printf("「一把來自異地的鑰匙,將讓和平之光再度閃耀...」\n");

}
else if(choice7==0||choice7>2)
{
printf("輸入錯誤,遊戲結束。\n");/*不當選擇,程式結束*/
system("pause");
return 0;
}
else
{
printf("沒有足夠水量,無法穿越過沙漠,渴死在沙漠之中。\n");
system("pause");
return 0;
}
/*列印出狀況8*/
printf("\n根據藏寶圖上的暗語,%S和密斯一行人必須決定位於遺跡內的兩個暗門。",playername);
printf("左邊的暗門寫著\'ξ\',而右邊的暗門寫著\'ζ\'。\n");
printf("第八個選擇:(1)左(2)右");
scanf("%d",&choice8);/*讀取鍵盤之輸入,並存於choice8*/
if(choice8==2)/*判斷做出狀況8選擇時所遭遇之各種狀況*/
{
printf("順利取得最後武器 銀 ,並且尋得寶箱數十箱。\n");
printf("最後武器由密斯帶走,和平解決了狼人與吸血鬼的仇恨,千隨島回復平靜。\n");
}
else if(choice8==0||choice8>2)
{
printf("輸入錯誤,遊戲結束。\n");/*不當選擇,程式結束*/
system("pause");
return 0;
}
else
{
printf("跌入遺跡中用來預防入侵者的陷阱,被封鎖在其一密室中。\n");
system("pause");
return 0;
}
system("pause");
return 0;
}

作業二題目
回到首頁

C 程式設計作業二,選擇邏輯與輸出、輸入應用

作業內容:
還記得小時候玩過的捲紙找寶藏的遊戲嗎?這次的作業要你設計一個簡單的尋寶遊戲。
下圖是個範例:

程式一開始,要求使用者輸入姓名,然後出現:「選擇向左走,或向右走?」,以上圖為例,當玩家選擇向右走,則程式會出現:「某某某,你遇到陷阱了,遊戲結束。」,如果玩家選擇向左走,則程式會出現:「某某某,你通過第一關,請選擇向左走,或向右走?」,然後,玩家繼續,直到遊戲結束。
本次作業要求至少有七種不同的「終結情節」(例如遇見黑熊、死當等等),請發揮自己的想像力,創造你個人的情節,同時有自己的路徑安排。為了讓程式充滿趣味,輸出與輸入的文字請自行發揮。
測試方式:
狀況 A:成功走到最後。
狀況 B:走到中途因故失敗。

作業二解答
回到作業目錄
回到首頁

期末考(B) 解答


/* C Programming, Final Exam B */

/*
期末考題目:完成函數 final_func 以計算並列印附圖公式 n=50 和 n=90 的值。
*/
#include
#include
#include

double final_func(int);

int main(void)
{
/* 你的程式這裡要寫 */

printf("f(50)=%10.8f\n", final_func(50));
printf("f(90)=%10.8f\n", final_func(90));
system("pause");
return 0;
}

/* 你的程式這裡要寫 */
double final_func(int n) {

int i;
double sum = 0;
for (i=1;i<=n;i++) {
if (i%2==1)
sum += 1/sin(i);
else
sum -= 1/cos(i);
}
return sum;
}

期末考(B)題目
返回小考目錄
回到首頁

期末考(B) 題目


/*
班別:高資ㄧ甲
學號:
姓名:
期末考題目:完成函數 final_func 以計算並列印附圖公式 n=50 和 n=90 的值。
*/
#include
#include
#include

double final_func(int);

int main(void)
{
/* 你的程式這裡要寫 */

system("pause");
return 0;
}

/* 你的程式這裡要寫 */


附圖:

解答下載
返回小考目錄
回到首頁

期末考(A) 解答


/* C Programming, Final Exam A */
/*
期末考題目:完成函數 final_func 以計算並列印附圖公式 n=100 和 n=200 的值。
*/
#include <stdio.h>
#include <stdlib.h>

double final_func(int);

int main(void)
{
/* 你的程式這裡要寫 */
printf("f(100)=%10.8f\n", final_func(100));
printf("f(200)=%10.8f\n", final_func(200));

system("pause");
return 0;
}

/* 你的程式這裡要寫 */
double final_func(int n) {

int i;
double sum = 0;
for (i=2;i<=n;i++) {
if (i%2==0)
sum += (double)(i-1)/(i*i);
else
sum -= (double)(i-1)/(i*i);
}
return sum;
}

期末考(A)題目
返回小考目錄
回到首頁

期末考(A) 題目


/* C Programming Final Exam A */
/*
期末考題目:完成函數 final_func 以計算並列印附圖公式 n=100 和 n=200 的值。
*/
#include <stdio.h>
#include <stdlib.h>

double final_func(int);

int main(void)
{
/* 你的程式這裡要寫 */

system("pause");
return 0;
}

/* 你的程式這裡要寫 */


附圖:

解答下載
返回小考目錄
回到首頁

小考五(A) 解答


/* C Programming Quiz 5A */
/*
小考五題目:完成函數 quiz5_func 以計算並列印附圖公式 n=100 和 n=200 的值。
注意:你必須使用到 x_square 的函式呼叫。
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double x_square(double);
double quiz5_func(int);

int main(void)
{
/* 你的程式這裡有幾行要寫 */

printf("f(100)=%12.10f\n", quiz5_func(100));
printf("f(200)=%12.10f\n", quiz5_func(200));

system("pause");
return 0;
}

double x_square(double x)
{
return x*x;
}

double quiz5_func(int n) {
int k;
double sum=0;
for (k=1;k<=n;k++) {
sum += (k-1)*log(k)/(x_square(k+1)*k);
}
return sum;
}

小考五(A)題目
返回小考目錄
回到首頁

小考五(A) 題目


/* C Programming Quiz 5A */
/*
小考五題目:完成函數 quiz5_func 以計算並列印附圖公式 n=100 和 n=200 的值。
注意:你必須使用到 x_square 的函式呼叫。
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double x_square(double);
double quiz5_func(int);

int main(void)
{
/* 你的程式這裡有幾行要寫 */



system("pause");
return 0;
}

double x_square(double x)
{
return x*x;
}

/* 你的程式這裡有幾行要寫 */



附圖:

解答下載
返回小考目錄
回到首頁

小考四(B) 解答


/* C Programming Quiz 4B */
/*
小考四題目:完成函數 computeTriangleArea,以記算附圖的斜線面積。
*/
#include <stdio.h>
#include <stdlib.h>

double computeTriangleArea(double);

int main(void)
{
double theArea; /* 斜線面積 */

/* 你的程式從這裡開始 */

double a = 0.4, b;
theArea = computeTriangleArea(a);

printf("斜線面積是%20.8f\n", theArea);
system("pause");
return 0;
}

/* 你的程式這裡也有 */
double computeTriangleArea(double x){

return x * (30 - ((2 * 5 / 2) + (4 * 5 / 2) + (2 * 2.5 / 2)));
}

小考四(B)題目
返回小考目錄
回到首頁

小考四(B) 題目


/* C Programming Quiz 4B */
/*
小考四題目:完成函數 computeTriangleArea,以記算附圖的斜線面積。
*/
#include <stdio.h>
#include <stdlib.h>

double computeTriangleArea(double, double);

int main(void)
{
double theArea; /* 斜線面積 */

/* 你的程式從這裡開始 */




printf("斜線面積是%20.8f", theArea);
system("pause");
return 0;
}

/* 你的程式這裡也有 */





附圖

解答下載
返回小考目錄
回到首頁

小考五(B) 解答


/* C Programming Quiz 5B */
/*
小考五題目:完成函數 quiz5_func 以計算並列印附圖公式 n=10 和 n=20 的值。
注意:你必須使用到 reciprocal 的函式呼叫。
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double x_square(double);
double quiz5_func(int);

int main(void)
{
/* 你的程式這裡有幾行要寫 */

printf("f(10)=%12.10f\n", quiz5_func(10));
printf("f(20)=%12.10f\n", quiz5_func(20));

system("pause");
return 0;
}

double reciprocal(double x)
{
return 1.0/x;
}

/* 你的程式這裡有幾行要寫 */

double quiz5_func(int n) {

double k;
double sum=0;
for (k=1;k<=n;k++) {
sum += (double)cos(2*M_PI*reciprocal(k))*(1/(k+1));

}
return sum;
}

小考五(B)題目
返回小考目錄
回到首頁

小考五(B) 題目


/* C Programming Quiz 5B */
/*
小考五題目:完成函數 quiz5_func 以計算並列印附圖公式 n=10 和 n=20 的值。
注意:你必須使用到 reciprocal 的函式呼叫。
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double x_square(double);
double quiz5_func(int);

int main(void)
{
/* 你的程式這裡有幾行要寫 */



system("pause");
return 0;
}

double reciprocal(double x)
{
return 1.0/x;
}

/* 你的程式這裡有幾行要寫 */






附圖:

2007年9月4日 星期二

小考四(A) 解答


/* C Programming Quiz 4A */
/*
小考四題目:完成函數 computeCircleArea,以記算附圖的斜線面積。
提示:你將使用到 math.h 中的 M_PI。
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double computeCircleArea(double);

int main(void)
{
double theArea; /* 斜線面積 */

/* 你的程式從這裡開始 */

double a = 10.25;

theArea = computeCircleArea(a);


printf("斜線面積是%20.8f\n", theArea);
system("pause");
return 0;
}
double computeCircleArea(double x)
{
double y = 7.5;
return (2 * x * x + y * y) * M_PI / 4 ;
}

小考四(A)題目
返回小考目錄
回到首頁

小考四(A) 題目


/* C Programming Quiz 4A */
/*
小考四題目:完成函數 computeCircleArea,以記算附圖的斜線面積。
提示:你將使用到 math.h 中的 M_PI。
*/
#include <stdio.h>
#include <stdlib.h>

double computeCircleArea(double);

int main(void)
{
double theArea; /* 斜線面積 */

/* 你的程式從這裡開始 */




printf("斜線面積是%20.8f", theArea);
system("pause");
return 0;
}

附圖:


小考三(A) 解答


/* C Programming Quiz 3A */
/*
小考三題目:寫一個程式,以"*"印出一個三角形,這個三角形是一個正方形的右上半部。
例如:
當輸入 5 時,印出

*****
****
***
**
*

輸入值:正方形的邊長(整數),1 <= n <= 50
輸出值:倒三角形
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int n; /* 正方形的邊長 */
int i, j, k, m; // 四個計時器
printf("輸入正方形的邊長 -> ");
scanf("%d", &n);

/* 你的程式從這裡開始 */
m = n;
for(k=1; k<=m; k++){
for(j=n; j<m; j++)//印出空白
printf(" ");
for(i=1; i<=n; i++)//印出星星
printf("*");
printf("\n");
n--;
}

system("pause");
return 0;
}

小考三(A)題目
返回小考目錄
回到首頁

小考三(A) 題目


/* C Programming Quiz 3A */
/*
小考三題目:寫一個程式,以"*"印出一個三角形,這個三角形是一個正方形的右上半部。
例如:
當輸入 5 時,印出

*****
****
***
**
*

輸入值:正方形的邊長(整數),1 <= n <= 50
輸出值:倒三角形
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int n; /* 正方形的邊長 */

printf("輸入正方形的邊長 -> ");
scanf("%d", &n);

/* 你的程式從這裡開始 */









system("pause");
return 0;
}

解答下載
返回小考目錄
回到首頁

小考三(B) 解答


/* C Programming Quiz 3B */
/*
小考三題目:寫一個程式,以"*"印出一個三角形,這個三角形是一個正方形的右下半部。
例如:
當輸入 5 時,印出

*
**
***
****
*****

輸入值:正方形的邊長(整數),1 <= n <= 50
輸出值:三角形
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int n; /* 正方形的邊長 */
int i, j, k, m; // 四個計時器
printf("輸入正方形的邊長 -> ");
scanf("%d", &n);

/* 你的程式從這裡開始 */

m = n;
for(k=1; k<=m; k++){
for(j=1; j<n; j++)//印出空白
printf(" ");
for(i=n; i<=m; i++)//印出星星
printf("*");
printf("\n");
n--;
}

system("pause");
return 0;
}


小考三(B)題目
返回小考目錄
回到首頁

小考三(B) 題目


/* C Programming Quiz 3B */
/*
小考三題目:寫一個程式,以"*"印出一個三角形,這個三角形是一個正方形的右下半部。
例如:
當輸入 5 時,印出

*
**
***
****
*****

輸入值:正方形的邊長(整數),1 <= n <= 50
輸出值:三角形
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int n; /* 正方形的邊長 */

printf("輸入正方形的邊長 -> ");
scanf("%d", &n);

/* 你的程式從這裡開始 */









system("pause");
return 0;
}


解答下載
返回小考目錄
回到首頁

小考二(B) 解答


/* C Programming Quiz 2B */
/*
小考二題目:某零件進口商的驗收退貨制度如下表

進口數 <= 5000
-------------------------------------------------------------
狀況: 瑕疵品 <= 2% 2% < 瑕疵品 <= 5% 瑕疵品 > 5%
-------------------------------------------------------------
退貨數: 0 瑕疵數 全數退貨
-------------------------------------------------------------
-------------------------------------------------------------
進口數 > 5000
-------------------------------------------------------------
狀況: 瑕疵品 <= 3% 3% < 瑕疵品 <= 6% 瑕疵品 > 6%
-------------------------------------------------------------
退貨數: 0 瑕疵數 全數退貨
-------------------------------------------------------------

例一:進口 4000 個零件,瑕疵品有 400 個,佔比例 10%,所以退貨數為 4000 個。
例二:進口 6000 個零件,瑕疵品有 200 個,佔比例 3.33%,所以退貨數為 200 個。

輸入值:第一個數字是進口數,第二個數字是瑕疵數
輸出值:退貨數
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
float import_num, bad_item, return_num, return_limit; /* 進口數、瑕疵數、退貨數、退貨條件 */
printf("輸入進口數 -> ");
scanf("%f", &import_num);
printf("輸入瑕疵數 -> ");
scanf("%f", &bad_item);

/* 你的程式從這裡開始 */
if(import_num <= 0)
printf("請輸入大於0的數值\n");
if(import_num < bad_item)
printf("瑕疵品不可能比進口量大,請輸入合理數值!!!\n");
if(import_num > 0 && import_num <= 5000)
{
return_limit = bad_item / import_num;
if(return_limit <= 0.02)
return_num = 0;
if(return_limit > 0.02 && return_limit <= 0.05)
return_num = bad_item;
if(return_limit > 0.05)
return_num = import_num;
}

if(import_num > 5000)
{
return_limit = bad_item / import_num;
if(return_limit <= 0.03)
return_num = 0;
if(return_limit > 0.03 && return_limit <= 0.06)
return_num = bad_item;
if(return_limit > 0.06)
return_num = import_num;
}


printf("退貨數為 %.0f 個\n", return_num);
system("pause");
return 0;
}

小考二(B)題目
返回小考目錄
回到首頁

小考二(B) 題目


/* C Programming Quiz 2B */
/*
小考二題目:某零件進口商的驗收退貨制度如下表

進口數 <= 5000
------------------------------------------------------------------
狀況: 瑕疵品 <= 2% 2% < 瑕疵品 <= 5% 瑕疵品 > 5%
------------------------------------------------------------------
退貨數: 0 瑕疵數 全數退貨
------------------------------------------------------------------
------------------------------------------------------------------
進口數 > 5000
------------------------------------------------------------------
狀況: 瑕疵品 <= 3% 3% < 瑕疵品 <= 6% 瑕疵品 > 6%
------------------------------------------------------------------
退貨數: 0 瑕疵數 全數退貨
------------------------------------------------------------------

例一:進口 4000 個零件,瑕疵品有 400 個,佔比例 10%,所以退貨數為 4000 個。
例二:進口 6000 個零件,瑕疵品有 200 個,佔比例 3.33%,所以退貨數為 200 個。

輸入值:第一個數字是進口數,第二個數字是瑕疵數
輸出值:退貨數
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int import_num, bad_item, return_num; /* 進口數、瑕疵數、退貨數 */

printf("輸入進口數、瑕疵數 -> ");
scanf("%d %d", &import_num, &bad_item);

/* 你的程式從這裡開始 */









printf("退貨數為 %d 個\n", return_num);
system("pause");
return 0;
}


解答下載
返回小考目錄
回到首頁

小考二(A) 解答


/* C Programming Quiz 2A */
/*
小考二題目:我國綜合所得稅的課徵方式採採累進稅率制,稅率表如下
所得淨額 稅率
-----------------------------------
0 to 370,000------------( 6%)
370,001 to 990,000------(13%)
990,001 to 1,980,000----(21%)
1,980,001 to 3,720,000--(30%)
3,270,001 to -─ -------(40%)
-----------------------------------
例如:所得淨額為1,000,000元時,扣稅金額為
370,000*0.06 + (990,000-370,000)*0.13 + (1,000,000-990,000)*0.21 = 104,900 元。
也就是,所得淨額在不同的金額範圍,稅率不同,上面的例子所得淨額為一百萬,所以
有三個不同範圍稅額要加起來,請寫一個程式計算扣稅金額。
輸入值:所得淨額 (0 - 5,000,000之間)。
輸出值:扣稅金額。
*/
#include
#include

int main(void)
{
float income; /* 所得淨額 */
float tax; /* 扣稅金額 */

printf("輸入所得淨額 -->");
scanf("%f", &income);

/* 你的程式從這裡開始 */
if(income > 0 && income <= 370000)
tax = income * 0.06;
if(income > 370000 && income <= 990000)
tax = 370000 * 0.06 + (income - 370000) * 0.13;
if(income > 990000 && income <= 1980000)
tax = 370000 * 0.06 + (990000 - 370000) * 0.13 + (income - 990000) * 0.21;
if(income > 1980000 && income <= 3720000)
tax = 370000 * 0.06 + (990000 - 370000) * 0.13 + (1980000 - 990000) * 0.21 + (income - 1980000) * 0.3;
if(income > 3720000)
tax = 370000 * 0.06 + (990000 - 370000) * 0.13 + (1980000 - 990000) * 0.21 + (3720000 - 1980000) * 0.3 + (income - 3720000) * 0.4;


printf("扣稅金額為 %.0f 元\n", tax);
system("pause");
return 0;
}


小考二(A)題目
返回小考目錄
回到首頁

小考二(A) 題目


/* C Programming Quiz 2A */
/*
小考二題目:我國綜合所得稅的課徵方式採採累進稅率制,稅率表如下
所得淨額 稅率
-----------------------------------
0 to 370,000------------( 6%)
370,001 to 990,000------(13%)
990,001 to 1,980,000----(21%)
1,980,001 to 3,720,000--(30%)
3,270,001 to -─ -------(40%)
-----------------------------------
例如:所得淨額為1,000,000元時,扣稅金額為
370,000*0.06 + (990,000-370,000)*0.13 + (1,000,000-990,000)*0.21 = 104,900 元。
也就是,所得淨額在不同的金額範圍,稅率不同,上面的例子所得淨額為一百萬,所以
有三個不同範圍稅額要加起來,請寫一個程式計算扣稅金額。
輸入值:所得淨額 (0 - 5,000,000之間)。
輸出值:扣稅金額。
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int income; /* 所得淨額 */
int tax; /* 扣稅金額 */

printf("輸入所得淨額 -->");
scanf("%d", &income);

/* 你的程式從這裡開始 */








printf(" 扣稅金額為 %d 元\n", tax);
system("pause");
return 0;
}


解答下載
返回小考目錄
回到首頁

2007年9月3日 星期一

小考一(B) 解答


/* C Programming Quiz 1B */
/*
題目:輸入時間,並計算出停車費。假設停車時間在 30 分鐘
以下免費,超過時,每半小時為 15 元,不滿半小時以半
小時計算,每日最高以 240 元計算。
輸入值:0 ~ 720 分鐘之間任意值
輸出值:價格
*/

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int park_time, price;

printf("To compute the price, please enter the time -> ");
scanf("%d",&park_time);
if (park_time>=0 && park_time<=720){
//如果在要求範圍內,則計算價格。
if(park_time <= 30)
printf("30分鐘以下,停車免費!!!\n");
if(park_time > 30){
price = (park_time-30)/30*15;
//判斷是否有不滿半小時的時間。
if((park_time-30)%30 != 0)
price = price +15;
printf("價格是%d元\n",price);
}
}
else
printf("請輸入0-720的時間範圍!!!\n");

system("pause");
return 0;
}

小考一(B)題目
返回小考目錄
回到首頁

小考一(B) 題目


/* C Programming Quiz 1B */
/*
題目:輸入時間,並計算出停車費。假設停車時間在 30 分鐘
以下免費,超過時,每半小時為 15 元,不滿半小時以半
小時計算,每日最高以 240 元計算。
輸入值:0 ~ 720 分鐘之間任意值
輸出值:價格
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int park_time, price;

printf("To compute the price, please enter the time -> ");
/* Your program starts here */



system("pause");
return 0;
}

解答下載
返回小考目錄
回到首頁

程式設計比賽試題

實踐大學高雄校區資管系程式設計比賽試題
95學年度題目
試題一
試題二
試題三
96學年度題目
試題一
試題二
試題三

小考一(A) 解答


/* C Programming Quiz 1A */
/*
題目:輸入里程,並計算出車費。假設里程在 1500 公尺以下皆為 70 元,
每超過 500 公尺加 5元,不足 500 公尺以 500 公尺計算。
輸入值:0 ~ 5000 公尺之間任意值
輸出值:價格
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int taxi_dist, price;

printf("To compute the price, please enter the distance -> ");
scanf("%d",&taxi_dist);
if (taxi_dist>=0 && taxi_dist<=5000) /*如果在要求範圍內,則計算價格。*/
{
if (taxi_dist >= 1500)
{
price = 70 + 5*(taxi_dist-1500)/500;
if ((taxi_dist-1500)%500 != 0) /* 判斷是否有不滿500公尺的距離。 */
price += 5;
}
else
price = 70;
printf("價格是%d元\n",price);
}
else
printf("請輸入0-5000的距離範圍!!!\n");

system("pause");
return 0;
}

小考一(A)題目

小考目錄

回到首頁

小考一(A) 題目


/* C Programming Quiz 1A */
/*
題目:輸入里程,並計算出車費。假設里程在 1500 公尺以下皆為 70 元,每超過 500 公尺加 5元,不足 500 公尺以 500 公尺計算。
輸入值:0 ~ 5000 公尺之間任意值
輸出值:價格
*/


#include <stdio.h>
#include <stdlib.h>
int main(void)

{
int taxi_dist, price;

printf("To compute the price, please enter the distance -> ");
/* Your program starts here */




system("pause");
return 0;
}



解答下載
返回小考目錄
回到首頁

C語言考古題,作業系列

系列一(95學年)
作業一:選擇邏輯與輸出、輸入應用
作業二:選擇邏輯與輸出、輸入應用
作業三:選擇邏輯與迴圈應用
作業四:迴圈與解決問題
作業五:函數
作業六:函數和隨機數
期末作業(A):函數和練習解題能力
作業七:選擇、重複邏輯與輸出、輸入應用,並學習陣列之使用
作業八:陣列、函數與指標之使用
作業九:結構、結構陣列與檔案處理之應用
期末作業(B):結構、結構陣列、檔案處理與模組化設計之應用

系列二(96學年)
作業一:選擇邏輯與輸出、輸入應用
作業二:選擇邏輯與迴圈應用
作業三:迴圈與隨機數應用
作業四:迴圈與函數應用
作業五:解題練習
期末作業:解題練習
作業六:陣列與字串之使用
作業七:指標之使用
作業八:結構之使用
期末作業:解題
回到首頁