Java语言程序设计与数据结构(基础篇)课后练习题 第七章(一)

7.1

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Scanner input = new Scanner(System.in);
	System.out.println("Enter the number of students: ");
	int num = input.nextInt();
	int[] scores = new int[num];
	int best = 0;
	System.out.print("Enter "+num+"scores: ");
	for(int i=0;i<num;i++){
		scores[i] = input.nextInt();
		if(scores[i]>best)
			best = scores[i];
	}
	char[] grades = {'A','B','C','D'};
	for(int i=0;i<num;i++){
		System.out.printf("Student %d score is %d and grade is %c\n",i,scores[i],scores[i]==best?'A':grades[(best-scores[i]-1)/10]);
	   //三元运算符
	}
}

}

7.2

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Scanner input = new Scanner(System.in);
	System.out.println("Enter ten integers: ");
	int[] nums = new int[10];
	for(int i=0;i<10;i++)
		nums[i] = input.nextInt();
	for(int j=9;j>=0;j--)
		System.out.print(nums[j]+" ");
}

}

7.3

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	System.out.println("Enter ten integers between 1 and 100: ");
	Scanner input = new Scanner(System.in);
	//定义一个counts数组,用来显示1到100数字的出现次数。
	int[] counts = new int[101];
	for(int i=0;i<101;i++)
		counts[i]=0;
	while(true){
		int num = input.nextInt();
		counts[num]++;
		if(num==0)
			break;
	}
	
	for(int i=1;i<=100;i++){
		if(counts[i] !=0 ){
			if(counts[i]>1)
				System.out.println(i+" occurs "+counts[i]+" times");
			else
				System.out.println(i+" occurs 1 time");
		}
	}
	
}

}

7.4

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	System.out.print("Enter integers: ");
	Scanner input = new Scanner(System.in);
	int[] occurs= new int[101];
	int sum = 0;
	int count = 0;
	while(true){
		int tmp = input.nextInt();
		if(tmp<0)
			break;
		occurs[tmp]++;
		sum += tmp;
		count++;
	}
	
	double aver = 1.0*sum/count;
	int lowerCounts = 0;
	for(int i=0;i<aver;i++){
		lowerCounts += occurs[i];
	}
	
	int l = count-lowerCounts;
	System.out.println(lowerCounts+" students are lower than average.");
	System.out.println(l+" students are not lower than average.");
	
}

}

7.5

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	System.out.print("Enter 10 numbers: ");
	Scanner input = new Scanner(System.in);
	int[] nums = new int[10];
	int dis = 0;
	for(int i=0;i<10;i++){
		int tmp = input.nextInt();
		boolean in = false;
		for(int j=0;j<dis;j++){
			if(nums[j]==tmp){
				in = true;
				break;
			}
		}
		if(!in){
			nums[dis] = tmp;
			dis++;
		}
	}
    System.out.println("The number of distinct number is "+dis);
    System.out.print("The distinct numbers are: ");
  	for(int i=0;i<dis;i++)
        System.out.print(nums[i]+" ");
}

}

7.6

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
        int[] nums =new int[60];
        nums[0]=2;
        int count=1;
        while(true){
            if(count==50)
                break;
            else{
                int base = nums[count-1];
                while(true){
                    base++;
                    if(isPrime(base,nums,count)){
                    	nums[count]=base;
                        count++;
                        break;
                    }
                }
            }
        }
        for(int i=0;i<count;i++)
            System.out.print(nums[i]+" ");
    }
public static boolean isPrime(int num,int[] num2,int count){
        boolean re = true;
        for(int i=0;i<count;i++){
            if(num2[i]>Math.sqrt(num))
                break;
            if(num%num2[i]==0){
                re = false;
                break;
            }
        }
        return re;
}

}

7.7

package demo;
import java.util.*;

public class diqizhang {

public static void main(String[] args){
		int[] nums = new int[10];
		for(int i=0;i<100;i++)
			nums[(int)(Math.random()*10)]++;
		for(int i=0;i<10;i++)
			System.out.println(i+" occurs "+nums[i]+" times");
	 }

}

7.8

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("Enter 10 doubles: ");
        double[] nums = new double[10];
        for(int i=0;i<10;i++)
        	nums[i]=input.nextDouble();
        System.out.println("The average is "+average(nums));
}
public static int average(int[] array){
        int sum = 0;
        int len = array.length;
        //foreach语句
        for (int value : array) 
        	sum += value;
        return sum/len;
}
public static double average(double[] array){
        double sum=0.0;
        int len = array.length;
        for(double ass : array) 
        	sum+=ass;
        return sum/len;
}

}

7.9

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("Enter 10 doubles: ");
        double[] num = new double[10];
        for(int i=0;i<10;i++)
        	num[i]=input.nextDouble();
        System.out.println("The minimum number is "+min(num));
    }
public static double min(double[] array){
        double num1 = array[0];
        for (double num3 : array) {
            if (num3 < num1)
            	num1 = num3;
        }
        return num1;
    }

}

7.10

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("Enter 10 doubles: ");
        double[] nums=new double[10];
        for(int i=0;i<10;i++){
        	nums[i]=input.nextDouble();
        }
        System.out.println("The lowest index is "+indexOfSmallestElement(nums));
}  

public static int indexOfSmallestElement(double[] array){
	int index = 0;
	for(int i=0;i<array.length-1;i++){
		if(array[i]<array[index])
			index=i;
	}
	return index;
}

}

7.11

package demo;
import java.util.*;

public class diqizhang {

public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("Enter 10 doubles: ");
        double[] nums=new double[10];
        for(int i=0;i<10;i++){
        	nums[i]=input.nextDouble();
        }
        System.out.printf("The mean is %3.2f\n",mean(nums));
        System.out.printf("The standard deviation is %6.5f",deviation(nums));
    }
    
public static double deviation(double[] x){
	double sum = 0;
	double mean=mean(x);
	for(double num2 : x)
		sum += Math.pow(num2-mean, 2);
	return Math.sqrt(sum/(x.length-1));
}

public static double mean(double[] x){
	double sum=0;
	for(double num1 : x)
		sum +=num1;
	return sum/x.length;
}

}

7.12

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("Enter 10 doubles: ");
        double[] nums=new double[10];
        for(int i=0;i<10;i++){
        	nums[i]=input.nextDouble();
        }
        reverse(nums);
        for(double n:nums)
        	System.out.print(n+" ");
}
    
public static double[] reverse(double[] num1){
    	int len = num1.length;
    	for(int i=0;i<len/2;i++){
    		double tmp = num1[i];
    		num1[i] = num1[len-i-1];
    		num1[len-i-1] = tmp;
    	}
    	return num1;
}

}

7.13

package demo;
import java.util.*;

public class diqizhang {

public static void main(String[] args){
        System.out.println("The random number is "+getRandom(1,2,3,4,5,6,7));
}
public static int getRandom(int...numbers){
    	int ran = (int)(Math.random()*54)+1;
    	while(inArray(numbers,ran))
    		ran = (int)(Math.random()*54)+1;
    	return ran;
}
public static boolean inArray(int[] num1,int num2){
	for(int value:num1){
		if(value == num2)
			return true;
	}
	return false;
}

}

7.14

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
        System.out.print("Enter 5 numbers: ");
        Scanner input = new Scanner(System.in);
        int[] nums = new int[5];
        for(int i=0;i<5;i++)
        	nums[i]=input.nextInt();
        System.out.println("The gcd of the numbers is "+gcd(nums));
}

public static int gcd(int...numbers){
    if(numbers.length==1)
        return numbers[0];
    else if(numbers.length==2)
        return gcd(numbers[0],numbers[1]);
    else{
        int gcd = gcd(numbers[0],numbers[1]);
        for(int i=2;i<numbers.length;i++)
            gcd=gcd(gcd,numbers[i]);
        return gcd;
    }
}

public static int gcd(int num1,int num2){
    int gkd = Math.min(num1,num2);
    while((!(num1%gkd==0&&num2%gkd==0))&&gkd>=2)
        gkd--;
    return gkd;
}

}

7.15

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
    System.out.print("Enter 10 numbers: ");
    Scanner input = new Scanner(System.in);
    int[] num1 = new int[10];
    for(int i=0;i<10;i++)
        num1[i]=input.nextInt();
    int[] num2 = eliminateDuplications(num1);
    System.out.print("The distinct numbers are: ");
    for(int value:num2)
    	System.out.print(value+" ");
}

public static int[] eliminateDuplications(int[] list){
	int ptr=0;
	int len=list.length;
	int[] num = new int[len];
	for(int value:list){
		int occur=0;
		for(int j=0;j<ptr;j++){
			if(value == num[j])
				occur++;
		}
		if(occur == 0){
			num[ptr] = value;
			ptr++;
		}
	}
	int[] num2 = new int[ptr];
	System.arraycopy(num, 0, num2, 0, ptr);//实现将一个数组的指定个数元素复制到另一个数组中 
	return num2;
}

}

7.16

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
        int[] million = createRandomArray();
        int kk = (int)(Math.random()*100000);
        long startTime = System.nanoTime();
        linearSearch(kk,million);
        long endTime = System.nanoTime();
        long timel = endTime-startTime;
        sort(million);
        startTime = System.nanoTime();
        binarySearch(kk,million);
        endTime = System.nanoTime();
        long timeb = endTime-startTime;
        System.out.println("The time of linear search is "+timel+", and the time of binary search is "+timeb);
}
public static int[] createRandomArray(){
    int[] nums = new int[100000];
    for(int i=0;i<100000;i++)
    	nums[i]=(int)(100000*Math.random());
    return nums;
}
public static int linearSearch(int key,int[] num){
    int jb=-1;
    for(int i=0;i<num.length;i++){
        if(num[i]==key){
            jb=i;
            break;
        }
    }
    return jb;
}
public static void sort(int[] num){
    for(int i=num.length-1;i>=2;i--){
        for(int j=0;j<i;j++){
            if(num[j]>num[j+1]){
                int tmp = num[j];
                num[j] = num[j+1];
                num[j+1]=tmp;
            }
        }
    }
}
public static int binarySearch(int key,int[] num){
    int jb=-1;
    int high=num.length-1;
    int low=0;
    while(high>=low){
        int mid=(high+low)/2;
        if(num[mid]==key)
            jb=mid;
        else if(num[mid]<key)
            low=mid+1;
        else
            high=mid-1;
    }
    return jb;
}

}

7.17

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
	        Scanner input = new Scanner(System.in);
	        System.out.print("Enter the number of students: ");
	        int stuNum = input.nextInt();
	        String[] str1 = new String[stuNum];
	        System.out.print("Enter the names of the students: ");
	        for(int i=0;i<stuNum;i++)
	        	str1[i]=input.next();
	        int[] str2 = new int[stuNum];
	        System.out.print("Enter the scores of the students: ");
	        for(int i=0;i<stuNum;i++)
	        	str2[i]=input.nextInt();
	        int[] keys = new int[stuNum];
	        for(int i=0;i<stuNum;i++)
	            keys[i]=i;
	        for(int j=stuNum-1;j>=2;j--){
	            for(int i=0;i<j;i++)
	                if(str2[i]<str2[i+1]){
	                    int tmp=keys[i];
	                    keys[i]=keys[i+1];
	                    keys[i+1]=tmp;
	                }
	        }
	        for(int i=0;i<stuNum;i++)
	            System.out.print(str1[keys[i]]+" ");
}

}

7.18

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
		  Scanner input = new Scanner(System.in);
		  double[] list = new double[10];
		  System.out.print("ENter ten numbers: ");
		  for(int i=0;i<10;i++){
			  list[i]=input.nextDouble();
		  }
		  bubbleSort(list);
		  System.out.print("After bubble sort: ");
		  for(int i=0;i<10;i++)
			  System.out.print(list[i]+" ");
}
public static void bubbleSort(double[] list){
		  boolean n = false;
		  for(int i=0;i<list.length-1;i++){
			  n = false;
			  for(int j=list.length-1;j>i;j--){
				  if(list[j-1]>list[j]){
					  double tmp = list[j-1];
					  list[j-1] = list[j];
					  list[j] = tmp;
					  n = true;
				  }
			  }
			  if(n == false)
				  break;
		  }
}

}

7.19

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
		  Scanner input = new Scanner(System.in);
		  System.out.print("Enter the size of the list: ");
		  int num = input.nextInt();
		  int[] str1 = new int[num];
		  System.out.print("Enter the contents of the list: ");
		  for(int i=0;i<num;i++)
			  str1[i] = input.nextInt();
		  System.out.print("The list has "+num+" integer(s) ");
		  for(int i=0;i<num;i++)
			  System.out.print(" "+str1[i]);
		  System.out.println();
		  if(isSorted(str1))
			  System.out.println("The list is already sorted");
		  else
			  System.out.println("The list is not sorted");
}
public static boolean isSorted(int[] list){
	  int len = list.length;
	  if(len == 1 || len == 0)
		  return true;
	  else{
		  for(int i=0;i<len-1;i++){
			  if(list[i]>list[i+1])
				  return false;
		  }
	  }
	  return true;
}

}

7.20

package demo;
import java.util.*;
public class diqizhang {

public static void main(String[] args){
		  Scanner input = new Scanner(System.in);
		  System.out.print("Enter 10 doubles: ");
		  double[] str = new double[10];
		  for(int i=0;i<10;i++)
			  str[i]=input.nextDouble();
		  selectionSort(str);
		  for(int i=0;i<10;i++)
			  System.out.print(str[i]+" ");
}
public static void selectionSort(double[] list){
	  for(int i=0;i<list.length-1;i++){
            double currentMax = list[i];
            int currentMaxIndex = i;
            for(int j=i+1;j<list.length;j++){
                if(currentMax<list[j]){
                    currentMax=list[j];
                    currentMaxIndex=j;
                }
            }
            if(currentMaxIndex!=i){
                list[currentMaxIndex]=list[i];
                list[i]=currentMax;
            }
        }
}

}

7.21

这个题要求使用命令行来解释,所以需要调用main中的args。

package demo;
import java.util.*;

public class diqizhang {
	 public static void main(String[] args){
		 int sum=0;
		 for(int i=0;i<args.length;i++)
			 sum += Integer.parseInt(args[i]);
			 System.out.println("The sum is "+sum);
	 }

}

7.22

和上题一样,命令行输入。

package demo;
import java.util.*;

public class diqizhang {
	 public static void main(String[] args){
		 int count=0;
		 String str = args[0];
		 int len = str.length();
		 for(int i=0;i<len;i++){
			 if(str.charAt(i)<='Z'&&str.charAt(i)>='A')
				 count++;
		 }
		 System.out.print("There are "+count+" numbers.");
}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xupengboo

你的鼓励将是我创作最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值