流程控制作业练习

Source

练习一:某人有100000元,每经过一个路口需要缴费 规则如下:

1.当现金>50000时,每次交5%
2.当现金<=50000时,每次交1000
计算该人可以经过多少次路口,使用while break完成
自己的代码

/*某人有100000元,每经过一个路口需要缴费 规则如下:
		1.当现金>50000时,每次交5%
		2.当现金<=50000时,每次交1000
		计算该人可以经过多少次路口,使用while break完成*/
		/*思路分析------
		1.定义一个double 变量赋值100000 定义一个int变量记录次数
		2.使用while无限循环一直经过路口,当钱不够1000时跳出
		3.循环内添加两个if判断现金不同扣除多少费用
		4.当进入任意一个if扣费后,使用次数变量自增,记录
		5.当现金少于最低扣费标准 少于1000后跳出循环,输出扣费次数*/
		double people = 100000;
		int cs = 0;
		int a = 0;
		while(true){
    
      //无限循环
			if (people>50000) {
    
      
				System.out.println("扣费5%");
				people = people-(people*0.05);
				a++;
			}
			if (people<=50000&&people>=1000) {
    
      
				System.out.println("扣费1000");
				people = people-1000;
				a++;
			}
			if (people<1000) {
    
      
				System.out.println("余额不足");
				break;
			}
		}
		System.out.println("一共扣除了"+a+"次,余额还有"+people);

输出结果:一共扣除了62次,余额还有767.4979115529859
老师改进建议:不同的余额可以使用if elseif分支实现,people<=50000条件可以省略,当余额>=1000时由于上面的if条件有上限>50000那么第二个创造一个下限就可以了

练习二:实现判断一个整数,属于哪个范围:大于0;小于0;等于0

Scanner mysc = new Scanner(System.in);
		System.out.println("请输入整数");
		int a = mysc.nextInt();
		if (a>0) {
    
      
			System.out.println("大于0");
		}else if(a==0){
    
      
			System.out.println("等于0");
		}else if(a<0){
    
      
			System.out.println("小于0");
		}

练习三:判断一个年份是不是闰年(闰年条件,4的倍数且不能被100整除,能被400整除)

Scanner mysc = new Scanner(System.in);
		System.out.println("请输入整数");
		int a = mysc.nextInt();
		if (a%4==0 && a%100!=0 ) {
    
      
			System.out.println(a+"年是闰年");
		}else if(a%400==0){
    
      
			System.out.println(a+"年是闰年");
		}
		else{
    
      
			System.out.println(a+"年不是闰年");
		}

练习四:判断一个整数是否是水仙花数,(水仙花数是指一个3位数,其 各个位上的数字立方和 等于其本身)例如153=111+555+333

提示:利用除法获取百位 十位 个位

Scanner mysc = new Scanner(System.in);
	int n = mysc.nextInt();;
	int n1 = n/100;
	int n2 = n%100/10;
	int n3 = n%10;
	if (n==n1*n1*n1+n2*n2*n2+n3*n3*n3) {
    
      
		System.out.println(n+"是水仙花数");
	}else{
    
      
		System.out.println(n+"不是水仙花数");
	}

练习五:查看以下代码会输出什么

int m = 0,n = 3;
		if (m>0) {
    
      
			if(n>2){
    
      
				System.out.println("OK1");
			}else{
    
      
				System.out.println("OK2");
			}
		}

输出结果为:
什么也不会输出

练习六:输出1~100之间不能被5整除的数,每5个一行

int b = 0;//计算次数
		for (int a =1;a<=100 ;a++ ) {
    
      
			if (a%5!=0) {
    
      
				System.out.print(a+"\t");
				b++;
			}
			if (b==5) {
    
      
				b-=5;
				System.out.println();
			}
		}

练习七:输出小写的a~z以及大写的Z-A

提示:char字符对应的是unicode编码表
unicode编码表:a~z对应十进制 97-122 A-Z对应十进制 65-90

for(int a = 65;a<=90;a++){
    
      
			char c = (char)a;
			System.out.print(c+" ");
		}
		System.out.println();
		for (int b = 97;b<=122 ;b++ ) {
    
      
				char d = (char)b;
				System.out.print(d+" ");
			}

在这里插入图片描述
或者直接在char类型上+1限制条件为<=‘z’也可以
for(char i = ‘a;i<=‘z’;i++’){
System.out.print(i+" ");
}

练习八:求出1-1/2+1/3-1/4…1/100的和

找出规律其实就是
1-(1/2)+(1/3)-(1/4)+(1/5)-…(1/100)

//求出1-1/2+1/3-1/4...1/100的和
		/*思路分析:找出规律其实就是
		1-(1/2)+(1/3)-(1/4)+(1/5)-......(1/100)*/
		//(1).使用for循环从1更迭到100,然后利用取模分出奇数和偶数
		//(2).再根据奇数或者偶数进行+或者-
		double num = 0;
		for (int a = 1;a<=100 ;a++ ) {
    
      
			if (a%2==0) {
    
      
				num-=1.0/a;
			}else if(a%2!=0){
    
      
				num+=1.0/a;
			}
		}
		System.out.println(num);

注意点:需要把分子 1写成 1.0(double类型) 才能得到精确的小数(我也不晓得为啥)

练习九:求出1+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+2+3+…+100)的结果

//求出1+(1+2)+(1+2+3)+(1+2+3+4)+.
		//..+(1+2+3+..+100)的结果
		//思路分析:
		//1.定义一个int变量存储和
		//2.利用双层for循环:第一层为100项相加和每一项的最后一个数
		int sum =0;
		for (int i = 1;i<=100 ;i++ ) {
    
      
			for (int j=1;j<=i ;j++ ) {
    
      //因为i是最后一位数字,所以j<=i可以让内层循环退出去重新进来一遍,并且上限+1,sum保存了上次的和
				sum=sum+j;
			}
		}
		System.out.println(sum);