目录
第3章 习题
1.求1!+3!+…+13!。
代码见 实验 showFact()
//1.1递归求阶乘
private static long factorial(int num){
if(num == 1){
return 1;
}else{
return num * factorial(num - 1);
}
}
//展示阶乘
private static void showFact(){
long sum = 0;
for(int i = 1; i <= 13; i+=2){
sum = sum + factorial(i);
}
System.out.println("1!+3!+…+13! = " + sum);
}
//1.2 循环求阶乘
private static void factorial_2(){
long sum = 0, factorial;
for(int i = 1; i <= 13; i+=2){
factorial = 1;
for(int j = 1; j <= i; j++){
factorial = factorial * j;
}
sum = sum + factorial;
}
System.out.println("题目1结果:" + sum);
}
2.分别用do-while和for循环计算1+1/2!+1/3!+1/4!…的前20项之和。
代码见 实验 u3p2()
//2.前n项和 方法1,for
private static void u3p2(){
//for方式
int j;
double sum = 0;
for(int i = 1; i <= 20; i++){
for (j = 1; j <= i; j++){
j*=j;
}
sum = sum + (1 / (double)j);
}
System.out.println(sum);
//do-while方式
int j2, i2 = 1;
sum = 0;
do {
j2 = 1;
do {
j2 *= j2;
j2++;
}while(j2 <= i2);
i2++;
sum = sum + 1/(double)j2;
}while (i2 <= 20);
System.out.println(sum);
}
3. 编写程序对三个整数排序。
- 从键盘输入整数分别存入变量num1、num2和num3,对他们进行排序,使得num1<=num2<=num3。
代码见 实验 u3p3()
//3.排序3个数
private static void u3p3(){
int num1, num2, num3;
Scanner sc = new Scanner(System.in);
System.out.println("输入比较的3个数:");
num1 = sc.nextInt();
num2 = sc.nextInt();
num3 = sc.nextInt();
//每一次都要选出一个最值,然后对剩下的2个数字进行比较
if(num1 > num2 && num1 > num3){
// System.out.println("num1 > " + num1);
if(num2 > num3){
System.out.println("num1 > num2 > num3: " + num1 + ">" + num2 + ">" + num3);
}else {
//num2 < num3
System.out.println("num1 > num3 > num2: " + num1 + ">" + num3 + ">" + num2);
}
System.out.println("num1" + num1);
}else if(num2 > num3 && num2 > num1){
if(num1 > num3){
System.out.println("num2 > num1 > num3: " + num2 + ">" + num1 + ">" + num3);
}else {
System.out.println("num2 > num3 > num1: " + num2 + ">" + num3 + ">" + num1);
}
}else if(num3 > num1 && num3 > num2){
if (num1 > num2){
System.out.println("num3 > num1 > num2" + num3 + ">" + num1 + ">" + num2);
}else {
System.out.println("num3 > num2 > num1" + num3 + ">" + num2 + ">" + num1);
}
}
}
4.从键盘读入个数不确定的整数,并判断读入的正数和负数个数,输入为0时结束程序。
代码见 实验 u3p4()
//4.判断输入的个数
private static void u3p4(){
int input, positive = 0, negative = 0; //正数,负数
System.out.println("输入数据:");
Scanner sc = new Scanner(System.in);
while((input = sc.nextInt()) != 0) {
if (input > 0)
positive++;
else
negative++;
}
System.out.println("正数有:" + positive + "\n负数有:" + negative);
}
5.读入整数并求它们的总和与平均值。输入为0时程序结束。
代码见 实验 u3p5()
//5.求和,平均值
private static void u3p5(){
int num, sum = 0, count = 0;
System.out.println("输入数据:");
Scanner sc = new Scanner(System.in);
//也可以用 !sc.hasNext("0") 做判读
//如果下一个标记与从指定字符串构造的模式匹配,则返回 true
while ((num = sc.nextInt()) != 0){
sum += num;
count++;
}
System.out.println("求和:" + sum + "\n平均值: " + sum / count);
}
6.用while循环求㎡大于12000的最小数m。
代码见 实验 u3p6()
//6.求㎡大于12000的最小数m
private static void u3p6(){
int m = 1;
while((m * m) < 12000){
m++;
}
System.out.println("n方大于12000的最小数: " + m);
}
7.编写程序读入一个整数,显示它的所有素数因子。例如,若输入整数为120,输出应为2、2、2、3、5.
代码见 实验 u3p7()
//7.素数因子
private static void u3p7(){
Scanner sc = new Scanner(System.in);
System.out.println("求素数因子,请输入一个整数:");
int a=sc.nextInt();
System.out.println("该整数所有素数因子为:");
for (int i = 2; i <= a;) {
if(a % i == 0) {
a = a / i;
System.out.print(i+" ");
i=2;
}
else {
i++;
}
}
}
8.写一个嵌套的for循环打印下列图案:
1
1 2
1 2 3
1 2 3 4
代码见 实验 u3p8()
//8.打印
private static void u3p8(){
for (int i = 1; i <= 4; i++){
for (int j = 1; j <= i; j++){
System.out.print(j + " ");
}
System.out.println();
}
}
9.分别用switch语句和if语句写两个例子
- 说明它们在应用中的优缺点。
代码见 实验 u3p9()
//9.写例子
private static void u3p9(){
//判断输入的数
int num;
System.out.println("1-3的数:");
Scanner sc = new Scanner(System.in);
num = sc.nextInt();
//switch方式
switch(num){
case 1:
System.out.println("输入的是1");
break;
case 2:
System.out.println("输入的是2");
break;
case 3:
System.out.println("输入的是3");
break;
default:
System.out.println("输入1-3的数");
}
//if方式
if (num == 1)
System.out.println("输入的是1");
if (num == 2)
System.out.println("输入的是2");
if (num == 3)
System.out.println("输入的是3");
if(num != 1 && num != 2 && num != 3)
System.out.println("输入1-3的数");
}
10.分别用do-while和while编写程序,求,3*n!。
代码见 实验 u3p10()
//10.用do-while和while编写程序,求,3*n!
private static void u3p10(){
//while方式
int n,temp;
long sum = 1;
System.out.println("输入数字:");
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
temp = n;
while (n > 1){
sum = sum * n;
n--;
}
System.out.println("3*n! = " + 3 * sum);
sum = 1;
n = temp; //重新赋值,前面的循环让n 减到了0
do{
sum = sum * n;
n--;
}while (n > 1);
System.out.println("3*n! = " + 3 * sum);
}
11.写一个例子程序,包含return语句、break语句和continue语句的应用。
代码见 实验 u3p11()
//10.用do-while和while编写程序,求,3*n!
private static void u3p10(){
//while方式
int n,temp;
long sum = 1;
System.out.println("输入数字:");
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
temp = n;
while (n > 1){
sum = sum * n;
n--;
}
System.out.println("3*n! = " + 3 * sum);
sum = 1;
n = temp; //重新赋值,前面的循环让n 减到了0
do{
sum = sum * n;
n--;
}while (n > 1);
System.out.println("3*n! = " + 3 * sum);
}
//11.return语句、break语句和continue语句的应用
private static void u3p11(){
for (int i = 0; i <= 5; i++) {
if (i == 3){
System.out.print(i + " ");
continue;
}
System.out.print(i + " ");
}
System.out.println("continue后跳转到循环语句的最右侧 程序继续执行");
for (int i = 0; i <= 5; i++) {
if (i == 3){
System.out.print(i + " ");
break;
}
System.out.print(i + " ");
}
System.out.println("break 跳出整个循环程序");
for (int i = 0; i <= 5; i++) {
if (i == 3){
System.out.print(i + " ");
System.out.println("return 程序停止运行");
return;
}
System.out.print(i + " ");
}
}
12.
假定y为3,.以下表达式运算后,y的值是什么?表达式的值是多少?
(y>1)&(y++>1)
y=4
true
13.
假定y为8,.以下表达式运算后,y的值是什么?表达式的值是多少?
(y>1)&& (y++>1)
y=8
true
14.switch(x)语句中,变量x应该是什么数据类型?
- 如果在执行case语句之后没有使用关键字break,那么下一条要执行的语句是什么?
- 可以把switch语句转换成等价的if语句?反过来可以吗?使用switch语句的优点是什么?
整型、字符串、字符型
继续执行本语句下面的语句
所有的switch语句都可以被if—else if替换,但是反过来则不一定。
switch相对if来说,还有if比不了的优点就是在选择分支较多时,switch…case结构会生成跳转表,根据变量的取值跳转到合适的分支用switch…case结构会提高程序的效率
15.使用switch语句重写下列if语句,并画出switch语句的流程图:
if (a==1)
x+=2;
else if (a==2)
x+=3;
else if(a==3)
x+=4;
else if(a=4)
x+=5;
switch (a){
case 1:
x += 2;
break;
case 2:
x += 3;
break;
case 3:
x += 4;
break;
case 4:
x += 5;
break;
16.使用条件运算符重写下列if语句
if(count % 8==0)
System.out.println(count +“\n”);
else
System.out.println(count +“ ”);
该段代码报错
count%8 = =0 ? System.out.println(count +“\n”) : System.out.println(count +“ ”);
17.
- 解释下列代码的输出:
int i=2; System.out.println(--i + i + i++);
System.out.println(i+ ++i);
3
5
18.
- 下列语句执行的结果是什么?
for(int i=1 ; ;) System.out.println(i+ ++i);
i的取值分别为1、2、3…循环输出( 2*i+1) 的值
19.
- 如果一个变量是在for循环中说明的,退出循环后还可以使用该变量吗?
不能
执行
- 上面的为方法块
import java.util.Scanner;
public class unit_3 {
public static void main(String[] args) {
//1.方式一:递归求阶乘
showFact();
//1.方式二:循环求阶乘
factorial_2();
//2.求前n项和,for方法
u3p2();
//3.排序
u3p3();
//4.判断输入的个数
u3p4();
//5.求和,平均值
u3p5();
//6.求㎡大于12000的最小数m
u3p6();
u3p7();
u3p8();
u3p9();
u3p10();
u3p11();
}