初学者代码训练Day1(c/c++)第二章
Posted carieblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初学者代码训练Day1(c/c++)第二章相关的知识,希望对你有一定的参考价值。
一,写出C++语句声明一个常量PI,值为3.1416;再声明一个浮点型变量a,把PI的值赋值给a
const float PI=3.1416;
flaot a=PI;
二,写一条for语句,计数条件为n从100到200,步长为2;然后用while 和do-while语句完成同样的循环
- for循环
for(int n=100;n<=200;n+=2)
- while循环
int n=100;
while(n<=200)
n+=2;
- do-while循环
int n=100;
do
n+=2;
while(n<=200);
三,编写一个程序,运行时提示一个数字,再把这个数字显示出来
#innclude<iostream>
using namespace std;
int main()
int n=0;
cout<<"输入一个数字:";
cin>>n;
cout<<"你输入的是"<<n<<endl;
return 0;
四,打印ASCII码32~127字符
#include<iostream>
using namespace std;
int main()
for(int i=32;i<=127;i++)
char n=(char)i;
cout<<n<<endl;
return 0;
五,编写一个完整的程序,实现功能:向用户提问“现在正在下雨吗?”,提示用户输入Y或N。若输入为Y,显示“现在正在下雨。”;若输入为N,显示“现在没有下雨。”;否则继续提问“现在正在下雨吗?”。
#include<iostream>
using namespace std;
int main()
char in;
while(1)
cout<<"现在正在下雨吗?(Y or N):";
cin>>in;
if(in==\'Y\')
cout<<"现在正在下雨。"<<endl;
break;
if(in==\'N\')
cout<<"现在没有下雨。"<<endl;
break;
return 0;
202105小白训练营-day03 数据结构
单元测试
岗位:开发、测试(保证写的代码的正确)
开发者自己做完业务代码,需要自测(自己测试自己写的代码)
1)打印调试信息到控制台:syso 坏处,它浪费我们代码执行时间。以前调试时检查是否正确,正确后,真正交付用户时,把这些代码屏蔽掉。删除、注释掉(在编译compile后注释语句会从目标文件删除)
2)单元测试 jUnit(每个类的每个功能要测试-方法)要写调试,它通过一个日志级别概念。相当于全局的开关,开时就输出日志信息打印控制台,关闭时就不会输出,不执行,不影响程序效率。
单元测试是每个开发者都必须要做的事情!每天每个类都要写单元测试。
引入junit单元测试支持
1)第三方(非java原生)导包 *.jar,工程要支持junit 4,我们开发代码才可以使用
2)创建单元测试方法,替代main方法。独立方法去运行
3)main、业务方法、单元测试方法,怎么区分它们?junit提供技术:注解@Test(戴帽子)
4)把我们要测试的代码写到@Test的方法内,不写在main中了
5)右键运行,会有新菜单 java junit。运行时会额外弹出一个框,里面有进度条。如果绿色代表执行成功,如果棕色代表出错了。(改代码,重新运行)
main和junit单元测试的方法有什么区别?
main是原生方法,java的规范。
main不是必须,如果这个类需要执行(运行)必须写main,入口函数。类可以有很多方法,但main方法只有一个。运行时java会自动找main方法。有就运行,没有就不运行。
单元测试方法不是原生,不是java提供的,第三方junit提供。单元测试的方法在一个类中可以有多个。
单元测试方法可以选择某个进行执行。单元测试的方法比main方法更加灵活。
本质差异,junit单元测试的方法能否替代掉main方法?
1)main方法最终可以类似QQ、游戏,单独运行程序。(目标可以运行程序)main可以充当,但是没有junit灵活。
2)junit单元测试只为测试而生,运行时跟测试就无关。(目标就是测试)
程序
1)旧程序定义:数据结构+算法*
2)新程序定义:数据结构+算法+框架(三大框架ssm)+架构(分布式、微服务、大数据)
数据结构
1)数据存储
数据要计算,要临时存储在内存中,执行代码时,先把数据放入内存,需要计算时,从内存中去获取数据,计算完,在把数据放回内存中。内存是个稀缺资源。使用内存时必须合理使用内存。给占用小的分配小的资源,给大就分配大的资源。
怎么把生活中事务对应去变成计算机对应资源,最终体现内存所占用的大小?
在java中分为两类:
1)基本类型变量,8种
2)更复杂结构:对象,引用类型
八种基本类型
分为3类:整数类型、小数类型、其它
整数类型4个:byte、short、int、long
小数类型2个:float、double
其它2个:char、boolean
特点:长度不同,表现不同的东西,基本类型都有默认值
计算机最小单位:bit比特,开发语言java最小单位:byte字节;1byte=8bit
操作系统32b、64b
1)byte 字节型,1个字节,0,-128~127
2)short 短整型,2个字节,0,-32768~32767
3)int 整型,4个字节,0,默认,±21亿
4)long 长整型,8个字节,0
5)float 单精度浮点型,4个字节,0.0
6)double 双精度浮点型,8个字节,0.0,默认
7)char 字符型,2个字节 ISO-8859-1 ASCII(2~4个)unicode 3个字节,4个字节。空字符NUL
8)boolean 布尔型,1个字节,false
为什么java要有8个基本类型
java基本类型获取和访问的速度快;包装类型对象,它有额外很多方法,这些内容都要占内存,访问速度慢。基本类型占用内存空间小,执行速度快。包装类型(对象)占用内存空间大些,但是开发方便,无需自己去写这些额外方法。
java面对对象语言,使用额外方法,把基本类型封装包装类型。它就可以享受这些额外方法。
两个数字:100,200用什么类型存储?
package cn.tedu.datatype;
//导包
import org.junit.Test;
//表达一个值要尽量使用刚刚好的存储类型,合理分配资源
//太小存不下,太大浪费空间
public class TestSpace {
@Test
public void number() {
//存储100使用哪个基本类型更合适?
byte b = 100;
short s = 100; //错误的,浪费空间了
//可以使用byte存储,也可以使用short来存储,但显然
System.out.println(b);
//存储200使用哪个基本类型更合适
//Type mismatch: cannot convert from int to byte
//类型不匹配,默认输入一个整数,java当做int类型
byte b1 = (byte)200; //强制类型转换,强制java编译器200是字节类型
short s1 = 200;
System.out.println(b1); //字节表达:-128~127(256=2^8)
System.out.println(s1); //短整型:-32768~32767(64k,6w)
}
}
默认值
package cn.tedu.datatype;
import org.junit.Test;
//打印8个基本类型的默认值
public class TestDefaultValue {
//类级别变量,写在类名下面的,也称为成员变量,也叫字段field,属性property
byte b;
short s;
int i;
long x; //l有些字体不易和其他字母区分,所以开发中不要使用l
float f;
double d;
char c;
boolean bn;
String s; //默认值null
@Test
public void defaultValue() {
//新的概念,局部变量-方法(必须初始化),成员变量
//int a;
//The local variable a may not have been initialized
//局部变量必须初始化
//System.out.println(a);
//快捷键:ctrl+alt+下箭头(复制光标所在行)
System.out.println("byte:" + b);
System.out.println("short:" + s);
System.out.println("int:" + i);
System.out.println("long:" + x);
System.out.println(); //空行
System.out.println("float:" + f);
System.out.println("double:" + d);
System.out.println();
System.out.println("char:" + c);
System.out.println("boolean:" + bn);
}
}
字符特殊性
把人类文字通过计算机去表达,计算机0和1,二进制。a,b
解决方案ASCII编码,它把人类09,az设置一个数字顺序,编号。
a字母97整数(十进制转换二进制)二进制值:0110 0001
我们在键盘上敲击一个a字母,把a字母去查ASCII编码表中查询a字母的对应编号97,
把97整数转换二进制 0110 0001,最后计算机能识别。计算机又把二进制转换十进制97,把97又转换a字母,然后在屏幕上展现。
这个过程意义,为什么要做2次转换呢?人类和计算机通讯。
字符默认值:ASCII码表它第一个值0:NUL,总共128个,A 65,a 97
字符类型它有一个特殊性:它可以有两个身份:
char c1 = ‘a’;
char c2 = 97;
ASCII码表
为什么需要包装类型?
基本类型实现不了的。
基本类型为了性能快,它不提供去获取这个值的取值范围。
java把基本类型“包装”,java给每个基本类型都有一个对应包装类型,包装后就是对象,
它就提供额外方法,例如提供获取这个类型的最大值max和最小值min(取值范围)。
包装类型(8个)
在java中基本类型全小写,包装类型首字母大写
1)byte Byte
2)short Short
3)int Integer*
4)long Long
5)float Float
6)double Double
7)char Character*
8)boolean Boolean
取值范围
package cn.tedu.datatype;
import org.junit.Test;
//八个包装类型对应取值范围
public class TestScope {
@Test
public void scope() {
System.out.println("Byte 取值范围:"
+ Byte.MIN_VALUE+"~"+Byte.MAX_VALUE);
System.out.println("Short 取值范围:"
+ Short.MIN_VALUE+"~"+Short.MAX_VALUE);
System.out.println("Integer 取值范围:"
+ Integer.MIN_VALUE+"~"+Integer.MAX_VALUE);
System.out.println("Long 取值范围:"
+ Long.MIN_VALUE+"~"+Long.MAX_VALUE);
System.out.println();
System.out.println("Float 取值范围:"
+ Float.MIN_VALUE+"~"+Float.MAX_VALUE);
System.out.println("Double 取值范围:"
+ Double.MIN_VALUE+"~"+Double.MAX_VALUE);
System.out.println();
//字符有没有最大值和最小值?ASCII的0对应NUL和127对应DEL键(不可见字符)
System.out.println("Character 取值范围:"
+ Character.MIN_VALUE+"~"+Character.MAX_VALUE);
System.out.println("Boolean 取值范围没有,就true和false");
}
}
基本类型或者包装类型缺点
单一,只能表达一个值
学生成绩:100,99,60
int yw = 100;
int sx = 99;
int en = 60;
需求:共性它要表现一组值,多少个不定,怎么表达?
数据结构:数组 array
数组
package cn.tedu.datatype;
import java.util.Arrays;
import org.junit.Test;
//数组array,非基本类型都是引用类型,本身对象
public class TestArray {
@Test
public void scope() {
//数组定义有两种方式
//第一种方式,标准方式,使用new来创建对象实例
int[] arr = new int[4]; //声明:创建int数组,数组有3个元素
//给数组元素进行初始化,赋值。怎么访问数组某个元素?
//通过下标(索引,序号)来访问数组,从0开始
arr[0] = 100;
arr[1] = 99;
arr[2] = 60;
arr[3] = 88;
//访问数组元素
System.out.println("数组的长度:" + arr.length );
System.out.println("第一元素:" + arr[0] );
System.out.println("最后一个元素:" + arr[3-1] ); //arr[2]进过编译,编译优化
System.out.println("最后一个元素:" + arr[ arr.length-1 ]); //推荐,代码要尽量写活
//数组的第二种写法,简写,把创建和初始化合并一句代码,推荐
String[] s = {"语文", "数学", "英语", "化学"};
System.out.println("数组的长度:" + s.length );
System.out.println("第一个元素:" + s[0] );
System.out.println("最后一个元素:" + s[ s.length-1 ]);
//数组打印所有内容(工具类Arrays.toString())
System.out.println( s ); //不会打印数组的值,会打印数组对象在内存中地址
System.out.println( Arrays.toString( s ));
//数组排序(升序)(工具类Arrrays.sort(arr))
System.out.println( "排序前:"+Arrays.toString(arr) );
Arrays.sort( arr ); //特点,先排序,覆盖原有数组(原有值被改变),升序
System.out.println( "排序后:"+Arrays.toString(arr) );
}
}
数组的缺点
数组可以表现一组值,但是它的每个的元素类型都一致,不能存储不同的数据类型。
需求:表现一组成绩
语文100,数学99,英语60,化学88
既有字符串类型,又有整数类型
java中就提供最强大功能,在java万物皆对象Object。
java一个面对对象的语言。
单个对象
需求:人 person
对象的属性习惯使用包装类型
对象的属性(字段、成员变量)
1)身份证号码 cardNo(18),String
2)姓名 name,String
3)年龄 age,Integer
4)性别 sex,Boolean,true男,false女
4)地址 address,String
创建对象步骤:
1)创建类Person
2)创建成员变量(属性、字段)public String cardNo; 一般不设置初始化
3)创建对象实例 Person p = new Person();
4)给属性进行初始化 p.cardNo = “610113”; (对象是通过实例名.属性名)
5)打印对象的某个属性值 syso(p.cardNo)
package cn.tedu.datatype;
//实体:1、创建人这个类(类首字母大写)
public class Person { // 大驼峰规则
// 2、成员变量(属性)习惯包装类型
public String cardNo; // 身份证号,小驼峰规则
public String name; // 姓名
public Integer age; // 年龄
public Boolean sex; // 性别
public String address; // 地址
}
package cn.tedu.datatype;
import org.junit.Test;
//单元测试类
public class TestPerson {
@Test
public void person() {
//调用Person类
//3、创建对象实例,实例名p
Person p = new Person();
//访问属性值,引用类型默认值null
System.out.println( p.cardNo );
//4、属性初始化
p.cardNo = "610113";
p.name = "詹姆士邦德";
p.age = 50;
p.sex = true; //男
p.address = "伦敦军情六处";
//5、打印每个属性
System.out.println(p.cardNo);
System.out.println(p.name);
System.out.println(p.age);
System.out.println(p.sex);
System.out.println(p.address);
}
}
以上是关于初学者代码训练Day1(c/c++)第二章的主要内容,如果未能解决你的问题,请参考以下文章