1. while 循环
// 1. 从键盘输入一个整数,判断这个数是不是素数
// 提示,素数的定义:质数又称素数。指在一个大于1的自然数中,
// 除了1和此整数自身外,没法被其他自然数整除的数。(用while或for皆可)
// 此操作用到取模%运算符。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1. 从键盘输入一个整数,判断这个数是不是素数
// 提示,素数的定义:质数又称素数。指在一个大于1的自然数中,
// 除了1和此整数自身外,没法被其他自然数整除的数。(用while或for皆可)
// 此操作用到取模%运算符。
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数,让我来判断他是不是素数:");
int n = sc.nextInt();
int i=2;
boolean flag = true;
while(i<n/2){
if(n%i==0){
flag = false;
break;
}
i++;
}
if (flag){
System.out.println("是素数");
}
else{
System.out.println("不是素数");
}
}
}
// 2. 学生参考下述程序,程序为产生一个1-6之间的随机数。(模仿摇色子)
//public static void main(String[] args) {
// // TODO Auto-generated method stub
// //Math.random()函数返回0.0(含)-1.0(不含)之间的小数
// //乘以6之后,转换为正数,范围为0-5,加1,范围变为1-6
// int a = (int)(Math.random() * 6) + 1;
// System.out.println("a = " + a);
// }
//题目要求:
//要求学生根据参考程序,做出模拟程序,具体要求如下:
//1) 用1-13表示扑克牌中的A、2-10、J、Q、K共13张牌。
//2) 用while循环发牌,发5张牌,然后将发到的牌显示出来。不用按大小排序。
//3) 输出结果参考:“您本次发到的牌为10、J、Q、K、A”
//4) 不用校验是否5张牌一样。(扑克中每种牌只有4张)
//5) 发完牌后,可以结合switch来实现1、11、12、13这几张牌到字母的转换。(用不用都可以,只要能正确输出结果)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 2. 学生参考下述程序,程序为产生一个1-6之间的随机数。(模仿摇色子)
//public static void main(String[] args) {
// // TODO Auto-generated method stub
// //Math.random()函数返回0.0(含)-1.0(不含)之间的小数
// //乘以6之后,转换为正数,范围为0-5,加1,范围变为1-6
// int a = (int)(Math.random() * 6) + 1;
// System.out.println("a = " + a);
// }
//题目要求:
//要求学生根据参考程序,做出模拟程序,具体要求如下:
//1) 用1-13表示扑克牌中的A、2-10、J、Q、K共13张牌。
//2) 用while循环发牌,发5张牌,然后将发到的牌显示出来。不用按大小排序。
//3) 输出结果参考:“您本次发到的牌为10、J、Q、K、A”
//4) 不用校验是否5张牌一样。(扑克中每种牌只有4张)
//5) 发完牌后,可以结合switch来实现1、11、12、13这几张牌到字母的转换。(用不用都可以,只要能正确输出结果)
int i=0;
int[] a = new int[5];
String[] s = new String[5];
System.out.print("您本次发到的牌是:");
while (i<a.length){
a[i] = (int)(Math.random() * 13) + 1;
switch(a[i]){
case 1:s[i]="A";break;
case 11:s[i] = "J";break;
case 12:s[i] = "Q";break;
case 13:s[i]="K";break;
default:s[i] = String.valueOf(a[i]);
}
System.out.print(s[i]+" ");
i++;
}
}
}
2.for循环
// 1. 将上题,发扑克牌程序,改写为支持以下要求(用for语句):
// 1) 给6个人发牌,每人发5张牌。
// 2) 如果某人第5张牌与前4张相同,则重发这一张牌(结合continue)
// 3) 输出6个人的牌面,如:“玩家1的牌面为:A、10、10、9、9”。不用按大小排序。等等。
// 给六个人发牌循环6次;
public class Main{
public static void main(String[] args){
// 1. 将上题,发扑克牌程序,改写为支持以下要求(用for语句):
// 1) 给6个人发牌,每人发5张牌。
// 2) 如果某人第5张牌与前4张相同,则重发这一张牌(结合continue)
// 3) 输出6个人的牌面,如:“玩家1的牌面为:A、10、10、9、9”。不用按大小排序。等等。
// 给六个人发牌循环6次;
for (int i = 0;i<6;i++){
// 给每个人发5张,牌面大小1-13
int[] a = new int[5];
String[] s = new String[5];
System.out.print("第"+(i+1)+"个人拿到的牌是:");
for (int j=0;j<5;j++){
a[j] = (int)(Math.random()*13)+1;
switch(a[j]){
case 1:s[j]="A";break;
case 11:s[j] = "J";break;
case 12:s[j] = "Q";break;
case 13:s[j]="K";break;
default:s[j] = String.valueOf(a[j]);
}
System.out.print(s[j]+" ");
}
System.out.println();
}
}
}
// 2. 使用for语句(嵌套),打印出以下图形:
// *
// ***
// *****
// *******
// ********//9个星号
// *******
// *****
// ***
// *
//提示:①可以分两次打印出上半部和下半部两个三角形号。
//②如果有兴趣,可以试验一下一次性输出上述图形,
// 提示一种思路:可以在for( 1; 2; 3)的第3部分,用问号运算符写一个判断,看是增加还是减少。
//③注意,考虑控制循环的次数和星号、空格的个数的关系。
public class Main{
public static void main(String[] args){
// 2. 使用for语句(嵌套),打印出以下图形:
// *
// ***
// *****
// *******
// *********//9个星号
// *******
// *****
// ***
// *
//提示:①可以分两次打印出上半部和下半部两个三角形*号。
//②如果有兴趣,可以试验一下一次性输出上述图形,
// 提示一种思路:可以在for( 1; 2; 3)的第3部分,用问号运算符写一个判断,看是增加还是减少。
//③注意,考虑控制循环的次数和星号、空格的个数的关系。
for(int i = 0;i<5;i++){
for(int j=0;j<5-i;j++){
System.out.print(" ");
}
for(int j=0;j<2*i-1;j++){
System.out.print("*");
}
System.out.println();
}
for(int i=5;i>0;i--){
for (int j=0;j<5-i;j++){
System.out.print(" ");
}
for(int j=0;j<i*2-1;j++){
System.out.print("*");
}
System.out.println();
}
}
}
3.函数递归调用
// 1. 函数的编写和调用
// 1) 自己编写一个整数的求N次方的函数。
// 要求从控制台输入2个整数,第一个整数为底数,第二个整数为次方数,函数返回该整数的N次方幂。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
// 1. 函数的编写和调用
// 1) 自己编写一个整数的求N次方的函数。
// 要求从控制台输入2个整数,第一个整数为底数,第二个整数为次方数,函数返回该整数的N次方幂。
Scanner sc = new Scanner(System.in);
System.out.println("请输入底数");
int a = sc.nextInt();
System.out.println("请输入次方");
int b = sc.nextInt();
System.out.println(sum(a,b));
}
static int sum(int a, int b){
int sqr = 1;
for(int i=0;i<b;i++){
sqr*=a;
}
return(sqr);
}
}
// 3. 函数的递归调用
//1) 有一分数序列1/1 + 1/2 + 1/3 + 1/4 + 1/5……,求出这个序列前100项之和。
//注意:①整型值和浮点型的精度问题。思考把一个浮点型值赋值给整形会怎么样。
//②怎样控制递归调用的次数,在100次时完成返回。
//2) 有一分数序列 2/1,3/2,5/3,8/5,13/8… 求出这个序列前20项之和。
//3) 结合递归调用第1题(1/1 + 1/2 + 1/3 + 1/4 + 1/5……),和课堂练习的阶乘递归函数,用递归函数编写1/1! + 1/2! + 1/3! + 1/4! + 1/5!……的头10项之和。
//提示:分母的值为一次调用阶乘函数。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
// 3. 函数的递归调用
//1) 有一分数序列1/1 + 1/2 + 1/3 + 1/4 + 1/5……,求出这个序列前100项之和。
//注意:①整型值和浮点型的精度问题。思考把一个浮点型值赋值给整形会怎么样。
//②怎样控制递归调用的次数,在100次时完成返回。
//2) 有一分数序列 2/1,3/2,5/3,8/5,13/8… 求出这个序列前20项之和。
//3) 结合递归调用第1题(1/1 + 1/2 + 1/3 + 1/4 + 1/5……),和课堂练习的阶乘递归函数,用递归函数编写1/1! + 1/2! + 1/3! + 1/4! + 1/5!……的头10项之和。
//提示:分母的值为一次调用阶乘函数。
System.out.println(sum(100));
System.out.println(sum20(20));
System.out.println(sum1(20));
}
//求和1/1+1/2+1/3+...前100项
static double sum(int b){
double summ=0;
double a ;
for(int i=1;i<=b;i++){
a = (double)1/i;
summ +=a;
}
return summ;
}
//2/1,3/2,5/3,8/5,13/8… 求和
static double sum20(int b){
double sum20=2 ;
int a1 =2;
if (b==1){
return 2;
}
else {
for (int i = 1; i <b; i++) {
sum20 += ((double) a1 + i) / (double) (a1);
a1 = a1 + i;
}
return sum20;
}
}
//求和阶乘分之一
static double sum1(int b){
double sum1 =0;
for(int i=1;i<b;i++){
sum1+=(double)1/jiecheng(i);
}
return sum1;
}
//分母阶乘的计算
static int jiecheng(int i){
int num = 1;
for (int j=i;j>0;j--){
num*=j;
}
return num;
}
}