Year95NormalTest_Quiz1_數字反序函數設計_Quiz2_變化題_Quiz3
民國95年 _ 程式設計
Quiz1
請撰寫一個函式(function):int inverse(int x)。
此函數被呼叫時候會根據傳入的四位數正整數變數 X (大小範圍:1000<=x<=9999)
的內含值,傳回與X相反順序的數字。
例如:
若 int x = 3467; int k = inverse(x);
則整數變數k的內含值將為7643
若 int x = 2730; int k = inverse(x);
則整數變數k之內含值將為372
Sol : 解題思路
首先 一個 四位(任意位)整數
通常我們若要
取其個位數方法
就是 取10的餘數 N%10
取其十位數方法
就是 先除以10取商(去個位) 再取個位數 N%10
取其百位數方法
就是 先除以100取商(去個位、十位) 再取個位數 N%10
取其千位數方法 ----> 四位(第四位最靠左)
就是 直接除以1000(去個位、十位、百位)取商
Quiz2
請利用第一題的inverse(x)函式,撰寫一程式解決下列問題:
所有的四位數整數中存在某些四位數整數乘以一個個位數整數之後會變成
該四位數相反順序的數字
例如: 2178 * 4 = 8712
請撰寫一個程式找出所有符合上述條件之四位數及所對應的個位數
並輸出至螢幕
Sol : 解題思路
首先在題目要求上會使用到剛才的inverse(x)函式
設計方法
此外由於是 四位數
因此範圍介於 1000 到 9999 之間
四位數整數乘以一個個位數整數
變成
該四位數相反順序的數字
Quiz3
假設已存在一個實數亂數函數 float random()
可以傳回一大於等於0且小於1的實數(亦即0<random()<1)。
利用此函數,撰寫另一個int RND(int m,int n)可以傳回一介於m~n之間的
整數亂數(亦即 m <= RND(m,n) <= n)。
例如: int k = RND(10,20);
則傳回之整數亂數必介於10~20之間
Quiz1
請撰寫一個函式(function):int inverse(int x)。
此函數被呼叫時候會根據傳入的四位數正整數變數 X (大小範圍:1000<=x<=9999)
的內含值,傳回與X相反順序的數字。
例如:
若 int x = 3467; int k = inverse(x);
則整數變數k的內含值將為7643
若 int x = 2730; int k = inverse(x);
則整數變數k之內含值將為372
Sol : 解題思路
首先 一個 四位(任意位)整數
通常我們若要
取其個位數方法
就是 取10的餘數 N%10
取其十位數方法
就是 先除以10取商(去個位) 再取個位數 N%10
取其百位數方法
就是 先除以100取商(去個位、十位) 再取個位數 N%10
取其千位數方法 ----> 四位(第四位最靠左)
就是 直接除以1000(去個位、十位、百位)取商
#include <stdio.h> #include <stdlib.h> int inverse(int x); int main() { int x = 3467; int k = inverse(x); printf("原先為=%d\n",x); printf("反序後為%d\n" , k); int x2 = 2730; int k2 = inverse(x2); printf("原先為=%d\n",x2); printf("反序後為%d\n" , k2); return 0; } int inverse(int x) { int digit,decimal , hundred,thousand;///個位、十位、百位、千位 int result; ///大小範圍 1000<=x<=9999 if(x < 1000 || x>10000) return; digit = x % 10; ///取個位數 decimal = (x/10)%10;///取十位數 hundred = (x/100)%10;///取百位數 thousand = x/1000;///取千位數 result = digit*1000+decimal*100+hundred*10+thousand;///最終反順序答案 return result; }
Quiz2
請利用第一題的inverse(x)函式,撰寫一程式解決下列問題:
所有的四位數整數中存在某些四位數整數乘以一個個位數整數之後會變成
該四位數相反順序的數字
例如: 2178 * 4 = 8712
請撰寫一個程式找出所有符合上述條件之四位數及所對應的個位數
並輸出至螢幕
Sol : 解題思路
首先在題目要求上會使用到剛才的inverse(x)函式
設計方法
此外由於是 四位數
因此範圍介於 1000 到 9999 之間
四位數整數乘以一個個位數整數
變成
該四位數相反順序的數字
#include <stdio.h> #include <stdlib.h> int inverse(int x); int main() { int i,j; for(i=1000;i<=9999;i++) for(j=1;j<=9;j++) { if(i*j == inverse(i)) printf("%5d%2d\n" , i,j); } return 0; } int inverse(int x) { int digit,decimal , hundred,thousand;///個位、十位、百位、千位 int result; ///大小範圍 1000<=x<=9999 if(x < 1000 || x>10000) return; digit = x % 10; ///取個位數 decimal = (x/10)%10;///取十位數 hundred = (x/100)%10;///取百位數 thousand = x/1000;///取千位數 result = digit*1000+decimal*100+hundred*10+thousand;///最終反順序答案 return result; }
Quiz3
假設已存在一個實數亂數函數 float random()
可以傳回一大於等於0且小於1的實數(亦即0<random()<1)。
利用此函數,撰寫另一個int RND(int m,int n)可以傳回一介於m~n之間的
整數亂數(亦即 m <= RND(m,n) <= n)。
例如: int k = RND(10,20);
則傳回之整數亂數必介於10~20之間
留言
張貼留言