2017年軟體技術3+2專業技能測試A卷
專業技能測試A卷
C語言
1、刪除ch
【題目】(15分)編寫程式,輸入一個字串(長度不超過50),再輸入單獨的一個字元ch,將字串str當中所有的ch字元都刪掉,從而得到一個新的字串str2,然後把這個字串打印出來。
【程式碼】
#include<stdio.h> #include <string.h> main() { char str[50]; char str2[50]; scanf("%s",str); int len=strlen(str)-1; for(int i=0,j=0;i<len;i++){ if(str[i]=='c'&&str[i+1]=='h'){ i++; }else{ str2[j++] = str[i]; } } printf(str2); }
2、取每行的最小值
【題目】(15分)編寫函式求矩陣a[n][n]中每行的最小值,結果存放到陣列b中,若
則結果為1,5,9,13
4
1 4 3 2
8 6 5 7
11 10 12 9
13 16 14 15
【程式碼】
#include<stdio.h> #include <string.h> main() { int n; scanf("%d",&n); char a[n][n]; int b[n]; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ scanf("%d",&a[i][j]); } } for(int i=0;i<n;i++){ b[i] = a[i][0]; for(int j=1;j<n;j++){ if(b[i]>a[i][j]){ b[i] = a[i][j]; } } } for(int i=0;i<n;i++){ printf("%d,",b[i]); } }
3、不安全的洞
【題目】(C語言,15分)圍繞山頂一圈有N個山洞,編號為0、1、2、3、……、N-1,有一隻狐狸和一隻
兔子在洞中居住。狐狸總想找到兔子並吃掉它,它的尋找方法是先找到第一個洞(即編號為0的洞)
中找;再隔一個洞,即編號為2的洞中找;再隔2個洞,即編號為5的洞中找;下次再隔3個洞;即
編號為9的洞中找;……。若狐狸找一圈,請為兔子指出所有不安全的洞號。程式中用a陣列元素模
擬一個洞,陣列元素的下標即為洞號,陣列元素中的值為0時,表示該洞安全,為1時表示該洞不安
全。
例如:若形參n的值為30時,不安全的洞號為0、2、5、9、14、20、2
【程式碼】
#include<stdio.h> main() { int n; scanf("%d",&n); int a[n]; int f = 1; for(int i=0;i<n;i++){ a[i] = 0; } for(int i=0;i<n;i=i+f){ a[i] = 1; f++; } }
Java
1、面積類重寫
【題目】(java,15分)方法的過載的應用。設計一個求幾何圖形--圓、長方形面積的類,根據使用者設定的
引數自動呼叫對應的方法實現。
輸出樣例:
半徑為3的圓的面積是:28.27
邊長為4,5的長方形的面積是:20.00
【程式碼】
class Area{
public static double area(double r) {
return Math.PI*r*r;
}
public static double area(double x,double y) {
return x*y;
}
}
public class 面積類 {
public static void main(String[] args) {
System.out.println("半徑為3的圓的面積是:"+Area.area(3));
System.out.println("邊長為4,5的長方形的面積是:"+Area.area(4,5));
}
}
2、隨機點名器
【題目】(java,15分)隨機點名器。編寫一個隨機點名器程式,使其能夠在全班同學中隨機點中某一名同
學的名字。包括三個模組:儲存全班同學的名字、總覽全班同學的姓名和隨機點取其中一人姓名。
執行樣例:
--------隨機點名器-------
儲存第1個姓名:張春曉
儲存第2個姓名:李思思
儲存第3個姓名:王啟明
第1個學生姓名:張春曉
第2個學生姓名:李思思
第3個學生姓名:王啟明
被點到名的同學是:王啟明
【程式碼】
package 專業技能測試A卷;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class 隨機點名器 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<String> names = new ArrayList<String>();
System.out.println("--------隨機點名器---------");
for(int i=1;i<=3;i++) {
System.out.print("儲存第"+i+"個姓名:");
names.add(sc.next());
}
for(int i=1;i<=3;i++) {
System.out.println("第"+i+"個學生姓名:"+names.get(i-1));
}
Random random = new Random();
System.out.println("被點到名的同學是:"+names.get(random.nextInt(3)));
}
}
3、隔離病毒 bfs
【題目】(java,20分)某地區爆發病毒,給定一個矩陣,x代表隔離牆,o代表病毒,病毒區域是由它水平方向或垂直方向
上相鄰的病毒連線而成,斜角連線不會構成病毒區域。你要計算出矩陣中有幾個病毒區域(假設矩陣
周邊是被隔離牆包圍的).
【程式碼】
public class 隔離病毒 {
static int x,y;
static int nums[][];
static char matrix[][];
static int ans=0;
public static void main(String[] args) {
// x隔離牆 o病毒
Scanner sc = new Scanner(System.in);
x = sc.nextInt();
y = sc.nextInt();
nums = new int[x][y];
matrix = new char[x][y];
for(int i=0;i<x;i++) {
String string = sc.next();
for(int j=0;j<y;j++) {
matrix[i][j] = string.charAt(j);
}
}
for(int i=0;i<x;i++) {
for(int j=0;j<y;j++) {
if(matrix[i][j]=='o'&&nums[i][j]==0) {
bfs(i,j);
ans++;
}
}
}
System.out.println(ans);
}
public static void bfs(int i,int j) {
if(i<0||i>=x||j<0||j>=y) {
return;
}
if(nums[i][j]==1) {
return;
}
if(matrix[i][j]=='x') {
return;
}
if(matrix[i][j]=='o') {
nums[i][j] = 1;
}
bfs(i-1,j); // 向上走
bfs(i+1,j); // 向下走
bfs(i,j-1); // 向左走
bfs(i,j+1); // 向右走
}
}