1. 程式人生 > 實用技巧 >2017年軟體技術3+2專業技能測試A卷

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); // 向右走
	}
}