专业技能测试A卷
C语言
1、删除ch
【题目】(15分)编写程序,输入一个字符串(长度不超过50),再输入单独的一个字符ch,将字符串str当中所有的ch字符都删掉,从而得到一个新的字符串str2,然后把这个字符串打印出来。
【代码】
#include<stdio.h>
#include <string.h>
main()
{
char str1[50];
char str2[50];
char ch;
gets(str1);
ch=getchar();
int i=0,j=0;
int k=0;
for(i=0;i<strlen(str1);i++){
if(str1[i]==ch){
for(k=i;k<strlen(str1)-1;k++){
str1[k] = str1[k+1];
}
str1[k] = ' ';
i--;
}else{
str2[j++] = str1[i];
}
}
puts(str1);
puts(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、27
【代码】
#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;
printf("%d,",i);
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、隔离病毒 dfs
【题目】(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) {
dfs(i,j);
ans++;
}
}
}
System.out.println(ans);
}
public static void dfs(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;
}
dfs(i-1,j); // 向上走
dfs(i+1,j); // 向下走
dfs(i,j-1); // 向左走
dfs(i,j+1); // 向右走
}
}