第3章 习题
1.求1!+3!+…+13!。
代码见 实验 showFact()
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);
}
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()
private static void u3p2(){
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);
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()
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();
if(num1 > num2 && num1 > num3){
if(num2 > num3){
System.out.println("num1 > num2 > num3: " + num1 + ">" + num2 + ">" + num3);
}else {
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()
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()
private static void u3p5(){
int num, sum = 0, count = 0;
System.out.println("输入数据:");
Scanner sc = new Scanner(System.in);
while ((num = sc.nextInt()) != 0){
sum += num;
count++;
}
System.out.println("求和:" + sum + "\n平均值: " + sum / count);
}
6.用while循环求㎡大于12000的最小数m。
代码见 实验 u3p6()
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()
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()
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()
private static void u3p9(){
int num;
System.out.println("1-3的数:");
Scanner sc = new Scanner(System.in);
num = sc.nextInt();
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 (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()
private static void u3p10(){
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;
do{
sum = sum * n;
n--;
}while (n > 1);
System.out.println("3*n! = " + 3 * sum);
}
11.写一个例子程序,包含return语句、break语句和continue语句的应用。
代码见 实验 u3p11()
private static void u3p10(){
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;
do{
sum = sum * n;
n--;
}while (n > 1);
System.out.println("3*n! = " + 3 * sum);
}
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) {
showFact();
factorial_2();
u3p2();
u3p3();
u3p4();
u3p5();
u3p6();
u3p7();
u3p8();
u3p9();
u3p10();
u3p11();
}
|