Java函式程式設計練習
【練習題】
編寫兩個函式,分別求最大公約數(greatest common divisor)和最小公倍數(least common multiple)。
解:
(1)函式原型與引數說明:
最大公約數函式:int gcd(int a,int b)
形參與函式型別 |
含義 |
int a |
第一個數 |
int b |
第二個數 |
int gcd() |
返回最大公約數 |
最小公倍數函式:int lcm(int a,int b,int g)
形參與函式型別 |
含義 |
int a |
第一個數 |
int b |
第二個數 |
int g |
兩個數的最大公約數 |
int gcd() |
返回最小公倍數 |
public class Test1 { public static void main(String[] args) { Scanner reader = new Scanner(System.in); System.out.println("請輸入兩個正整數:"); int n = reader.nextInt(); int m = reader.nextInt(); System.out.println("這個數的最大公約數是:" + gcd(m, n)); System.out.println("這個數的最小公倍數是:" + lcm(m, n)); } static int gcd(int a, int b) { int i; for (i = (b < a ? b : a); i >= 0; i--) if (a % i == 0 && b % i == 0) break; return i; } static int lcm(int a, int b) { return a * b / gcd(a, b); } }
【練習題】
編寫一個判斷素數(prime number)的函式。
解:
(1)函式原型與引數說明:
求素數函式:int prime (int n)
形參與函式型別 |
含義 |
int n |
一個整數 |
int prime () |
是素數返回1,不是素數返回0 |
public class Test2 { public static void main(String[] args) { Scanner reader = new Scanner(System.in); System.out.println("請輸入一個正整數:"); int m = reader.nextInt(); if (prime(m)) System.out.println(m + "是素數"); else System.out.println(m + "不是素數"); } static boolean prime(int m) { if (m == 1) return false; for (int i = 2; i < m; i++) if (m % i == 0) return false; return true; } }
【練習題】
編寫函式,使得給定的一個二維陣列(3*3)轉置(transposition)。
解:
(1)函式原型與引數說明:
二維陣列轉置函式:int [][] trans (int a[][])
形參與函式型別 |
含義 |
int a[][] |
陣列名 |
Int[][] trans () |
返回值,通過傳址實現轉置 |
public class Test3 {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("輸入:");
int a[][] = new int[3][3];
for (int i = 0; i < a.length; i++)
for (int j = 0; j < a[i].length; j++)
a[i][j] = reader.nextInt();
int b[][] = trans(a);
printArray(b);
}
static void printArray(int b[][]) {
if (b == null)
return;
for (int i = 0; i < b.length; i++)
System.out.println(Arrays.toString(b[i]));
}
static int[][] trans(int a[][]) {
if (a == null)
return null;
int b[][] = new int[a.length][a.length];
int i, j;
for (i = 0; i < a.length; i++)
for (j = 0; j < a[i].length; j++)
b[j][i] = a[i][j];
return b;
}
}
【練習題】
編寫一個函式,使得輸入的一個字串反序存放。
解:
(1)函式原型與引數說明:
反序函式:void inverse (char c[])
形參與函式型別 |
含義 |
char c[] |
字元陣列名 |
void inverse () |
沒有返回值,通過傳址實現反序 |
public class Test4 {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("輸入:");
String s = reader.nextLine();
char ch[] = s.toCharArray();
inverse(ch);
System.out.println(ch);
}
static void inverse (char c[]){
for (int i=0; i<c.length/2; i++){
char t=c[i];
c[i]=c[c.length-1-i];
c[c.length-1-i]=t;
}
}
}
【練習題】
編寫一個函式,連線(connect)兩個字串。
解:
(1)函式原型與引數說明:
字串連線函式:char[] connect (char s1[],char s2[])
形參與函式型別 |
含義 |
char s1 [] |
字串1 |
char s2 [] |
字串2 |
Char[] connect () |
返回值,通過傳址實現字串連線 |
public class Test5 {
/*
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("輸入:");
String s1 = reader.nextLine();
String s2 = reader.nextLine();
char c1[] = s1.toCharArray();
char c2[] = s2.toCharArray();
System.out.print(connect(c1,c2));
}
static char[] connect (char s1[],char s2[]){
char s[]=new char[s1.length+s2.length];
for(int i=0;i<s1.length;i++){
s[i]=s1[i];
}
for(int j=0;j<s2.length;j++){
s[s1.length+j]=s2[j];
}
return s;
}
*/
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("輸入:");
String s1 = reader.nextLine();
String s2 = reader.nextLine();
System.out.print(connect(s1,s2));
}
static String connect (String s1,String s2){
return s1+s2;
}
}
【練習題】
編寫一個函式,將一個字串中的母音字母(vowel:a、e、i、o、u)複製到另一個字串中。
解:
(1)函式原型與引數說明:
母音字母複製函式:void vowel (char s1[],char s2[])
形參與函式型別 |
含義 |
char s1 [] |
字串 |
char s2 [] |
母音字母字串 |
void vowel () |
沒有返回值,通過傳址實現母音字母複製 |
public class Test6 {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("輸入:");
String s = reader.nextLine();
char s1[] = s.toCharArray();
char s2[]=new char[s1.length];
vowel(s1,s2);
System.out.println(s2);
int count = 0;
for(int i=0;i<s2.length;i++){
if(s2[i]=='a'||s2[i]=='e'||s2[i]=='i'||s2[i]=='o'||s2[i]=='u')
count++;
continue;
}
for(int i=0;i<count;i++)
System.out.print(s2[i]);
}
static void vowel (char s1[],char s2[]){
int j = 0;
for(int i=0;i<s1.length;i++)
if(s1[i]=='a'||s1[i]=='e'||s1[i]=='i'||s1[i]=='o'||s1[i]=='u')
s2[j++]=s1[i];
}
}
【練習題】
編寫一個函式,將字串中最長的單詞輸出。