实训—day03

day03(8月4日)

一、8月4日课程内容(紧接8月3日)

五、Java的运算符

​ 一个条件控制——关系运算符

​ 多个条件控制——逻辑运算符

5.3、逻辑运算符 (与&&、或||、非! )

​ 参与逻辑运算的变量或者表达式都是boolean类型,运算结果也是boolean类型。

运算规则如下所示:

逻辑运算符
与 &&当且仅当两个操作数都为真,条件才为真
或 ||两个操作数任何一个为真,条件才为真
非 !如果条件为true,则逻辑非运算将得到false;如果条件为false,则逻辑非运算将得到true。
5.4、赋值运算符 ( = 、+=、-=、*=、/=、%=)

​ 赋值运算符就是为变量赋值的运算符

运算符运算规则范例结果
=赋值(要和关系运算符==区别清楚)int a=2;2
+=加后赋值int a=2; a+=24
-=减后赋值int a=2; a-=20
*=乘后赋值int a=2; a*=24
/=除后赋值int a=2; a/=21
%=取模后赋值int a=2; a%=20
5.5、字符串连接符 ( + )

​ 字符串连接就是将两个字符串连接为一个新的字符串。因为字符串是Java最常用的显示信息方式,所以字符串连接也是最常见的字符串运算。Java字符串的连接使用“+”实现。

​ 加号两侧都是数值就是数值加法。

		System.out.println(10+20);//30,此时连接符作为运算符,30是一个数字

​ 如果加号的一侧出现了字符串,就按照字符串连接运算。

		System.out.println("10"+20);//1020
		System.out.println(10+20+"");//此时30是一个字符串
		System.out.println(10+20+""+30);//3030
5.6、多元运算符——三目运算符(表达式?值1:值2)

​ 多元运算符——三目运算符
​ 语法:boolean表达式?值1:值2
​ 运算规则:如果boolean表达式的值为true,表达式的值为值1。如果boolean表达式的值为false,表达式的值为值2。

		if(a<b){
			min=a;
		else
			min=b;
		}
		//有些选择分支结构可以使用简单的条件运算符来代替
		min=(a<b)?a:b;
		
		
		int a=25,b=10;
		int max;
		//求最大值
		max=(a<b)?b:a;
		System.out.println("a、b之间的最大值为"+max);
5.7、转义符

5.8、运算符优先级

​ 优先级表格

​ 运算符的结合性:相同等级的运算符在运算时按照结合性顺序进行运算。

​ 顺序调整:可以用()调整优先级顺序

六、Java语法

6.1、Scanner输入流

​ 用户交互Scanner(输入流),Scanner是Java自带的实用工具包java.util包中的一个类,是用来扫描输入文本的,就是用来获取用户的输入。

Scanner的基本的语法:
		//该类需import导入模块
		import java.util.Scanner
		//创建Scanner类对象,附属于标准输入流System.in
		Scanner xxx = new Scanner(System.in);
		

如果要输入int或double类型的数据,在Scanner类中同样有支持,声明相应类型的变量在使用Scanner.nextXxx();来读取。

 		//提示用户输入商品单价price
			System.out.println("请输入商品单价:");
			double price=scanner.nextDouble();
		 //提示用户输入商品数量count
		 	System.out.println("请输入商品数量:");
			double count=scanner.nextDouble();
		 //提示用户输入支付金额money
			System.out.println("请输入支付金额:");
			double money=scanner.nextDouble()
		//计算商品总价totalprice
			double totalprice=price*count;
			System.out.println("商品共计"+totalprice);

​ 通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判读是否还有输入的数据。

next()方法获取输入的字符串

	public static void main(String[] args) {
	// 创建一个扫描器,用于接收键盘输入的数据,通过控制台输入数据
      	  Scanner scanner = new Scanner(System.in);
      	  System.out.println("请输入一段字符串,用next方式接收:");
	// 判断用户有没有输入字符串
        if (scanner.hasNext()) {
	// 使用next方式接收
         String s = scanner.next();
         System.out.println("输出的内容为:"+s);
        }
	// 关闭IO流节省资源,System.in属于IO流,一旦打开,它一直在占用资源,因此使用完毕后要关闭
        scanner.close();
}
请输入一段字符串,用next方式接收:
hubo hhh
输出的内容为:hubo
//空格后的内容没有被输出

nextLine()方法获取输入的字符串

	public static void main(String[] args) {
	// 创建一个扫描器,用于接收键盘输入的数据,通过控制台输入数据
      	  Scanner scanner = new Scanner(System.in);
      	  System.out.println("请输入一段字符串,用nextLine方式接收:");
	// 判断用户有没有输入字符串
        if (scanner.hasNextLine()) {
	// 使用nextLine方式接收
         String s = scanner.nextLine();
         System.out.println("输出的内容为:"+s);
        }
	// 关闭IO流节省资源,System.in属于IO流,一旦打开,它一直在占用资源,因此使用完毕后要关闭
        scanner.close();
}
请输入一段字符串,用nextLine方式接收:
hubo hhh
输出的内容为:hubo hhh
//空格后的内容被输出
6.2、流程控制语句
1、顺序结构(天然结构)

​ 逐行执行代码,每行必走。

​ 程序按照从上到下顺次执行指令序列。

2、分支结构(if 分支结构、switch 分支结构)

​ 根据分支条件选择一路指令序列执行。使用分支流程控制语句可以实现有条件的执行,并非每句都执行。

if 分支结构

​ if 语句是使用最多的条件分支结构,它属于选择语句,也可以成为条件语句。

语法结构:
		if(条件——boolean表达式){
			满足条件则...
		}
		else{
			不满足条件则....
		}
	
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入成绩:");
		int score=scanner.nextInt();
		if (score>=60&&score<=80) {
			System.out.println("成绩评定为良!");
			}
			else if(score>=80&&score<=100){
				System.out.println("成绩评定为优秀!");
			}
			else{
				System.out.println("成绩评定为一般!");
			}

​ if 分支结构又可以分为三种分支

单分支结构

	if(boolean 类型表达式){
		//条件为true,执行的代码块
	}

双分支结构

	if(boolean 类型表达式){
		//条件为true,执行的代码块
	}else{
		//条件为false,执行的代码块
	}

多分支结构

	if(boolean 类型表达式){
		代码块1;
	}else if(boolean 类型表达式){
		代码块2;
	}else if(boolean 类型表达式){
		代码块3;
	}
	....
	
switch 分支结构

​ 能用switch…case分支结构解决的问题,都可以用if…else解决,但是能用if…else分支结构解决的问题,不一定能用switch…case解决。

switch后面的表达式可以是哪些类型数据:整型、字符型、布尔型、枚举型

​ switch()语句的括号内的表达式必须是整型,它要与case 里的值呼应

​ 字符型,只有字符常量可以,例如 ‘a’ ‘b’ ‘6’ '\r’实际上是整型。

​ 布尔型(真,假) 实际上是 0, 1 …整型。

​ enum 型也可以,凡表达式值为整型的都可以

语法结构:
	switch(条件){
		case 1:			//每一个分支块用case表示,用冒号表示分支内容
			代码块;
			break;	    //跳出当前程序块
		case 2:
			代码块;
			break;
		....
		default:        //类似于else功能
			代码块;
	}
	
		int num=2;
		switch (num) {//switch(key),填入key值,与下面的case(value)中的value值匹配
					  //key值可以是(byte short int char String)类型,但不可以是浮点型
		case 1://if(条件)
			System.out.println("hhh~");
			break;//跳出当前case块
		case 2://else if(条件)
			System.out.println("find you !");
			break;//如果不跳出case 2 分支,也会执行default中的代码 
		default://所有case未匹配到时执行default中内容
			System.out.println("no~");
			break;
		}

​ 分支结构中如果只有一条路可走,未必一定执行;分支结构中如果有多条路可走,必走其中一条。

3、循环结构(如果…则继续)

​ 循环就是指循环往复的执行,反复执行一个或者多个相同的或相似的代码。

循环的四要素:循环变量的初始化;循环的条件;循环变量的改变;循环体。

while循环

​ while循环:不计次,先判断再执行,有可能一次也不执行。

while循环的结构:
		while(循环条件 boolean){//1、首先计算循环表达式的值,如果循环条件是true,则执行循环体
			循环体				//2、执行完毕后再次判断循环条件是否为true,直到表达式的值是false为止
		}

利用while循环来实现猜数循环

/*猜数游戏*/
		//利用强制转换((Math.random*100)+1)为int类型生成0-100之间的随机数
		int num=(int)(100*Math.random()+1);//0-100之间的随机数
		//在控制台上输出生成的随机数
		System.out.println(num);//在控制台上输出随机生成数
		//导入Scanner类,让用户输入数字
		Scanner scanner=new Scanner(System.in);
		System.out.println("开始猜数吧!");
		//使用Scanner.nextInt()声明int类型的变量guess
		int guess=scanner.nextInt();
		//利用while循环进行多次猜数
		while(guess!=num){//判断条件为猜的数与生成的随机数不等
			if (guess<num) {
				System.out.println("小啦!");
			}else if (guess>num) {
				System.out.println("大啦!");
			}
			System.out.println("继续猜吧!");
			//当猜的数guess与生成的随机数相等时,跳出循环
			guess=scanner.nextInt();
		}
		//跳出循环并输出语句
		System.out.println("厉害啦!猜对啦!");
开始猜数吧!
12
小啦!
继续猜吧!
99
大啦!
继续猜吧!
88
厉害啦!猜对啦!
do while循环

​ do while循环:不计次循环,先执行一次再进行判断是否继续执行。

do while循环的结构:
		do{
			循环体;
		}while(循环条件);

利用do while循环来实现猜数循环

/*猜数游戏*/
		//利用强制转换((Math.random*100)+1)为int类型生成0-100之间的随机数
		int num=(int)(100*Math.random()+1);//0-100之间的随机数
		//在控制台上输出生成的随机数
		System.out.println(num);//在控制台上输出随机生成数
		//导入Scanner类,让用户输入数字
		Scanner scanner=new Scanner(System.in);
		System.out.println("开始猜数吧!");
		//使用Scanner.nextInt()声明int类型的变量guess
		int guess=scanner.nextInt();
		//利用do-while循环进行多次猜数
		do{
			guess=scanner.nextInt();
			if (guess<num) {
				System.out.println("太小了!");
			}else if (guess>num) {
				System.out.println("太大了");
			}else if (guess==num) {
				System.out.println("猜对啦!");
			}
		}while(guess!=num);//猜测数据guess与生成的随机数num不等
开始猜数吧!
33
太小了!
66
太大了
12
猜对啦!
for循环

​ 计次循环,固定次数循环结构,万能循环。

​ for循环的要素:声明循环变量(循环中反复执行的数)和初始量;循环方向(向循环结束的方向循环);循环体。

for循环的语法结构:
		for(声明并初始化循环变量(1);循环条件(2);变量改变的方向(3)){
				循环体(3);
		}

​ for循环变量的作用域,只在循环内有效。在for以外定义的变量作用于所有循环。

//利用for循环实现九九乘法表
		for(int a=1;a<=9;a++){
			//9的乘法表乘法表
			for(int b=1;b<=a;b++){
				System.out.print(a+"*"+b+"="+a*b);
			}
			System.out.println();
		}
6.3、Math类中的随机数random( )

​ jJava的Math类是属于java.lang中的一个类,math工具包提供了与数学有关的常量和计算方法,包括PI、E等常量,还有sin( )、cos( )等函数。Java在Math类还提供了random( )用于产生随机数。Math.random()返回值是一个0到1之间的随机数,其范围包括0,不包括1。

利用Math.random()返回值是一个0到1之间的随机数,可以进一步得到任何范围内的随机数

Math.random()0.000010.23100.56780.9978
Math.random()*1000.00123.1056.7899.78
(int) Math.random()*1000(强制转换成int类型,舍弃小数部分)235699
((int) Math.random()*100)+100100123156199
/*练习:掷骰子*/
		//使用math工具类,java.lang.math,math工具包提供了一系列数学的相关方法
		//random代表随机数,取值范围为0.0-1.0,不包括1.0的所有浮点型(double)随机数
		//Math.random()        0.0-0.99999999
		//Math.random()*100    0.0-99.9999999
		//强制转换成int类型 (int) 0-99

		//获取1-6之间的整数随机数
		int i=(int)(6*Math.random()+1);//强制转换为int类型以后小数点部分就舍弃了
		if (i<3) {
			System.out.println("");
		}

6.4、Random API

​ 为了简化随机数的使用,Java提供了Random API,封装了Math.random( )生成随机数的算法,利用这个API提供的方法就可以方便的获取随机数。

使用步骤
1、导入Random API,是java.util工具包下的一个类import java.util.Random;
2、创建Random对象Random xxx = new Random( );
3、调用random的方法获得随机数int n=random.nextInt(100);//参数100表示随机数的最大取值范围,此时方法返回的随机数范围为:[0,100)
	/*生成100-200之间的随机数*/
	Random random=new Random();
	int n=random.nextInt(100)+100;
	System.out.println(n);

---------------------------------- |
| 1、导入Random API,是java.util工具包下的一个类 | import java.util.Random; |
| 2、创建Random对象 | Random xxx = new Random( ); |
| 3、调用random的方法获得随机数 | int n=random.nextInt(100);//参数100表示随机数的最大取值范围,此时方法返回的随机数范围为:[0,100) |

	/*生成100-200之间的随机数*/
	Random random=new Random();
	int n=random.nextInt(100)+100;
	System.out.println(n);

​ Random提供了生成各种类型的随机数的方法,调用方法就可以得到随机数。Random和Math.random()没有本质区别,可自由选择。

以下是一个简单的C语言万年历的实训报告,供您参考: 一、实训目的 本次实训的主要目的是通过编写一个简单的C语言万年历程序,巩固C语言基本语法和编程思想,提高编程能力和解决问题的能力。 二、实训要求 1、能够使用C语言基本语法和控制语句编写程序。 2、能够使用数组来存储和操作数据。 3、能够使用函数来实现模块化编程。 4、能够使用指针来操作内存中的数据。 5、能够使用文件来读取和写入数据。 三、实训内容 1、程序功能 本程序实现了一个简单的万年历功能,可以通过输入年份和月份来显示该月的日历。 2、程序实现 以下是本程序的主要代码实现: ```c #include <stdio.h> // 判断是否为闰年 int is_leap_year(int year) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return 1; } else { return 0; } } // 获取某个月份的总天数 int get_days(int year, int month) { int days[] = {31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; return days[month - 1]; } // 获取某个日期是星期几 int get_weekday(int year, int month, int day) { if (month == 1 || month == 2) { year--; month += 12; } int c = year / 100; int y = year % 100; int w = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; w = (w % 7 + 7) % 7; return w; } // 显示日历 void show_calendar(int year, int month) { int days = get_days(year, month); int weekday = get_weekday(year, month, 1); printf(" 日 一 二 三 四 五 六\n"); int i; for (i = 0; i < weekday; i++) { printf(" "); } for (i = 1; i <= days; i++) { printf("%2d ", i); if ((weekday + i) % 7 == 0) { printf("\n"); } } if ((weekday + days) % 7 != 0) { printf("\n"); } } int main() { int year, month; printf("请输入年份:"); scanf("%d", &year); printf("请输入月份:"); scanf("%d", &month); if (month < 1 || month > 12) { printf("月份输入错误!\n"); return 1; } printf(" %d年%d月\n", year, month); show_calendar(year, month); return 0; } ``` 四、实训总结 通过本次实训,我学会了如何使用C语言来编写一个简单的万年历程序,巩固了C语言基本语法和编程思想,加强了对函数、数组、指针、文件等概念和用法的理解,提高了编程能力和解决问题的能力。同时,我也意识到在编程过程中需要注重代码的规范、可读性和可维护性,这对于日后的开发工作非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值