4.3 打印下列图形
public static void test4(){
for (int i = 1; i <=5 ; i++) {
for(int j = 1;j<=5;j++){
if(j-5+i<1){
System.out.print("&");
}else System.out.print("*");
}
System.out.println();
}
}
4.4 写出程序结果 public class Demo tp:相当于给当前的循环起了一个别名.主要作用:实现在内层循 环结束外层循环
public static void main(String []args)
{
int i = 0, j = 5;
tp: for (;;)
{
i++;
cc:for(;;)
{
if(i > j--)
break tp;
}
}
System.out.println("i = " + i + ", j = "+ j);
}
结果:i=1,j=-1
4.5 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Smu9Qhwm-1626959291756)(C:\Users\User\AppData\Local\Temp\1626396580167.png)]
1).
public void test6(){
for (int i = 0; i <5 ; i++) {
for (int j = 0; j <=i ; j++) {
System.out.print(" ");
}
System.out.println("*****");
}
}
2).
public void test7(){
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 9; j++) {
if(j<=i-1||j>=9-i)
System.out.print(" ");
else System.out.print("*");
}
System.out.println();
}
}
3).
public void test9(){
for (int i = 0; i <5 ; i++) {
for (int j = 0; j <=i ; j++) {
System.out.print(" ");
}
for (int j = 0; j < 5; j++) {
System.out.print((char) ((int)'A'+i+j));
}
System.out.println();
}
}
4).
public void test11(){
for (int i = 4; i >=0 ; i--) {
for (int j = 0; j <=i ; j++) {
System.out.print(" ");
}
for (int j = 0; j < 5; j++) {
System.out.print((char) ((int)'A'+i+j));
}
System.out.println();
}
}
4.6 在屏幕上输出以下内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTXCyZCd-1626959291758)(C:\Users\User\AppData\Local\Temp\1626402921857.png)]
public void test12(){
for (int i = 5; i >=1 ; i--) {
for (int j = 1; j <=i ; j++) {
System.out.print(j);
}
System.out.println();
}
}
4.7 计算10个99相加后的值并输出。
public void test13(){
int sum = 0;
for (int i = 0; i < 10 ; i++) {
sum+=99;
}
System.out.printf("结果是%d",sum);
}
4.8 计算从1加到100的值并输出。
public void test14(){
int sum = 0;
for (int i = 1; i <= 100 ; i++) {
sum+=i;
}
System.out.printf("结果是%d",sum);
}
4.9 计算10的阶乘(1x2x3x4x5x6x7x8x9x10)。
public void test15(){
int sum = 1;
for (int i = 2; i <= 10 ; i++) {
sum*=i;
}
System.out.printf("结果是%d",sum);
}
4.10 计算2的20次方。
public void test15(){
int sum1 = 1;
int sum2 = 1;
int sum3 = 1;
for (int i = 1; i <= 20 ; i++) {
sum1*=2;
sum2=sum2<<1;
}
sum3 = (int)Math.pow(2,20);
System.out.println(sum1);
System.out.println(sum2);
System.out.println(sum3);
}
4.11 计算从1到1000以内所有奇数的和并输出。 //对2取余 i%2 == 1
public void test16(){
int sum = 0;
for (int i = 1; i <1000 ; i++) {
sum+=i%2==1?i:0;
}
System.out.println(sum);
}
4.12 计算从1到1000以内所有能被3或者17整除的数的和并输出。// i % 3 == 0 || i%17==0
public void test17(){
int sum = 0;
for (int i = 1; i <1000 ; i++) {
sum+=(i%3==0||i%17==0)?i:0;
}
System.out.println(sum);
}
4.13 计算从1到1000以内所有能同时被3,5和7整除的数的和并输出。
public void test18(){
int sum = 0;
for (int i = 1; i <1000 ; i++) {
sum+=(i%105==0)?i:0;
}
System.out.println(sum);
}
4.14 计算1到100以内能被7或者3整除但不能同时被这两者整除的数的个数。 (i%70 || i%30) && !(i%70 && i%30)
public void test22(){
int count = 0;
for (int i = 0; i <100 ; i++) {
if((i%3==0||i%7==0)&&i%21!=0)
count++;
}
System.out.println(count);
}
4.15 计算1到100以内能被7整除但不是偶数的数的个数。
public void test23(){
int count = 0;
for (int i = 0; i <100 ; i++) {
if(i%7==0&&i%2==1)
count++;
}
System.out.println(count);
}
4.16 计算从1到100之间相邻两个整数的和并依次输出。比如第一次输出3(1+2),第二次输出 5(2+3),最后依次输出199(100+99)。
public void test24(){
for (int i = 1; i <=99 ; i++) {
System.out.println(i+i+1);
}
}
4.17 判断n是不是一个质数(质数是只能被1和它自身整除的数)。
public void test25(){
int n = 7;
boolean b = true;
for (int i = 2; i < n ; i++) {
if(n%i==0){
b=false;
break;
}
}
if(b){
System.out.printf("%d是质数",n);
}else System.out.printf("%d不是质数",n);
}
4.18 将某个8位的整数所有位的数值加在一起并输出。
public void test26(){
int sum = 0;
int num = 12345678;
while (num!=0){
sum+=num%10;
num=num/10;
}
System.out.println(sum);
}
附加题1. 打印出一个实心的菱形
public void test27(){
int len = 3;//菱形的长度
int dc = len/2;//对称轴
int n = 0;
for (int i = 0; i <len ; i++) {
if(i>dc){
n=len-1-i;
}else n = i;
for (int j = 0; j <len ; j++) {
if(j>=dc-n&&j<=dc+n){
System.out.print("*");
}else System.out.print(" ");
}
System.out.println();
}
}
附加题 2. 打印出空心的菱形
public void test27(){
int len = 11;//菱形的长度
int dc = len/2;//对称轴
int n = 0;
for (int i = 0; i <len ; i++) {
if(i>dc){
n=len-1-i;
}else n = i;
for (int j = 0; j <len ; j++) {
if(j==dc-n||j==dc+n){
System.out.print("*");
}else System.out.print(" ");
}
System.out.println();
}
}
4.5.1 万年历
public void test28(){
int BASE_YEAR = 1901;
int BASE_MONTH = 1;
int BASE_DAY = 1;
int BASE_WEEK = 2;
int[] monthDay = {31,28,31,30,31,30,31,31,30,31,30,31};//默认是平年
int count = 0;//距离1900年的天数
System.out.println("天天日历提示您输入想要查询的年份");
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
System.out.println("天天日历提示您输入想要查询的月份");
int month = scanner.nextInt();
//先计算整年的天数
for (int i = 1901; i < year; i++) {
if(i%4==0&&i%100!=0||i%400==0){
count+=366;
}else count+=365;
}
//计算当前年月的天数
for (int i = 0; i <month-1 ; i++) {
if(i==1){
if(year%4==0&&year%100!=0||year%400==0){
count+=29;
}else count+=28;
}else {
count+=monthDay[i];
}
}
//计算1号是星期几
int week = (count%7+BASE_WEEK)%7;
System.out.println("\t日\t一\t二\t三\t四\t五\t六");
for (int i = 0; i < week; i++) {
System.out.print("\t ");
}
for (int i = 1; i <= monthDay[month-1]; i++) {
System.out.print("\t"+i);
if((week+i)%7==0)
System.out.println();
}
}
5.7.1 设计方法,计算两个日期之间相差多少天。两个日期的年月日由参数控制。
public void test29()throws Exception{
String date1 = "2021-2-12";
String date2 = "2021-2-13";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date parse1 = simpleDateFormat.parse(date1);
Date parse2 = simpleDateFormat.parse(date2);
long days = (parse2.getTime()-parse1.getTime())/(1000*60*60*24);
System.out.printf("相差%d天",days);
}
5.7.2 开发一个标题为“FlipFlop”的游戏应用程序。它从 1 计数到 100,遇到 3 的倍数就替换为 单词“Flip”,5 的倍数就替换为单词“Flop” ,既为 3 的倍数又为 5 的倍数则替换为单 词“FlipFlop”
public void FlipFlop(){
for (int i = 1; i <=100 ; i++) {
if(i%15==0)
System.out.print("FlipFlop ");
else if (i%5==0){
System.out.print("Flop ");
}
else if (i%3==0){
System.out.print("Flip ");
}else System.out.print(i+" ");
if(i%10==0)
System.out.println();
}
}
5.7.3 两个自然数X,Y相除,商3余10,被除数、除数、商、余数的和是163,求被除数、除 数。
public void test30(){
int i;//被除数
int j;//除数
for (i = 11; i <150 ; i++) {
for (j = 1; j <150;j++) {
if(i+j+13==163&&3*j+10==i){
System.out.printf("被除数是%d,除数是%d",i,j);
break;
}
}
}
}
5.7.4 某数学竞赛中,参赛人数大约在380~450人之间。比赛结果,全体考生的总平均分为76 分,男生的平均分为75分,女生的平均分为80.1分,求男女生各有多少人?
public void test31(){
int x;//女生人数
int y;//男生人数
for (x = 1; x<=380 ; x++) {
for (y = 380-x; y <=450-x ; y++) {
if((80.1*x+75*y)/(x+y)==76){
System.out.printf("男生人数是%d,女生人数是%d",y,x);
break;
}
}
}
}
5.7.5 使用递归计算1+2+3+…+100的和
public void test32(){
System.out.println(digui1(100));
}
public int digui1(int i){
if(i==1)
return 1;
return digui1(i-1)+i;
}
5.7.6 斐波拉契数列
public void test33(){
System.out.println("第三十项等于 "+fblq(30));
}
public int fblq(int n){
if(n<=0){
return 0;
}
else if(n==1||n==2){
return 1;
}else {
return fblq(n-1)+fblq(n-2);
}
}