学习情境2.docx
《学习情境2.docx》由会员分享,可在线阅读,更多相关《学习情境2.docx(97页珍藏版)》请在冰豆网上搜索。
学习情境2
学习情境二:
“C#基础:
结构化程序设计
——实现学生成绩从小到大的排序即”冒泡排序””
学习领域
C#程序设计
总课时
48
学习情境
C#基础:
结构化程序设计
参考课时
15
教学安排:
第2学期
学习任务:
♦C#程序结构
♦控制台的输入/输出操作
♦C#中数据类型
♦常量和变量、变量的赋值
♦C#常用的运算符和表达式
♦C#程序的基本结构、标识符的相关概念
♦C#的主要数据类型以及类型标识符
♦使用C#中的运算符,选择结构和循环结构
♦定义和使用数组,了解结构和枚举
♦熟悉C#中的预处理指令
♦熟悉C#中的字符串处理
♦实现学生成绩从小到大的排序“冒泡排序”应用程序。
学习目标:
♦掌握控制台的输入/输出操作
♦熟悉C#的主要数据类型以及类型标识符
♦熟悉数据类型的转换
♦熟悉常量和变量、变量的赋值、常用的运算符
♦使用C#中的运算符,选择结构和循环结构
♦定义和使用数组,了解结构和枚举
难点:
♦结构化程序设计的应用。
♦C#的结构和枚举
♦熟悉数组的定义和使用
♦ 嵌套循环的应用
主要内容及标准:
单项能力
评价内容
评价标准
♦熟悉掌握控制台的输入/输出操作
♦使用C#中的运算符,选择结构和循环结构
♦判断语句、循环语句的运用
1.熟悉掌握控制台的输入/输出操作
2.使用C#中的运算符,选择结构和循环结构
3.判断语句、循环语句的运用
4、掌握“冒泡排序”程序设计方法的应用
1.建立结构化程序设计思想。
2.熟悉C#程序结构
3.常量和变量、变量的赋值、常用的运算
4.熟练定义和使用数组,了解结构和枚举
5.灵活运用判断语句、循环语句。
教学方法建议:
讲述法项目式教学法任务教学法实践操作法
考核与评价:
1.基本知识技能应用评价
2.任务完成情况评价
3.工作态度评价
4.工作态度评价
教学环境:
微机、白板、投影仪、多媒体教学系统、多媒体课件、网络教学资源
Win2000、IIS、Dreamweaver、VisualStudio2008、SQLServer
教师需要的能力与知识:
1、C#程序设计相关的基础知识
2、C#程序的基本结构、标识符的相关概念
3、C#程序的编译和执行
4、控制台的输入/输出操作
5、C#的主要数据类型以及类型标识符
6、数据类型的转换
7、常量和变量、变量的赋值
8、C#常用的运算符
9、使用C#中的运算符,选择结构和循环结构
10、定义和使用数组,了解结构和枚举
11、熟悉C#中的预处理指令
12、熟悉C#中的字符串处理
学生需要的能力与知识:
1、C#程序设计相关的基础知识
2、C#程序的基本结构、标识符的相关概念
3、C#程序的编译和执行
4、控制台的输入/输出操作
5、C#的主要数据类型以及类型标识符
6、数据类型的转换
7、常量和变量、变量的赋值
8、C#常用的运算符
9、使用C#中的运算符,选择结构和循环结构
10、定义和使用数组,了解结构和枚举
11、熟悉C#中的预处理指令
12、熟悉C#中的字符串处理
学习情境二“C#基础:
结构化程序设计
—实现学生成绩从小到大的排序即”冒泡排序””任务书
1.设计
通过学习C#程序设计相关的基础知识,理解常用的四个有关控制台输入、输出方法;熟悉C#的数据类型、运算符和表达式;熟悉三种控制结构:
顺序结构、选择结构和循环结构;熟悉数组的定义和使用;熟悉结构和枚举。
开发环境的配置:
提供开发所需环境,包括VisualStudio2008和.NETFramework
2.任务分配
分角色进行,按组完成该项目。
要求在项目中分为不同角色完成下列任务:
(1)完成总体设计任务
要求完成项目规划设计
(2)完成概要设计任务
要求完成项目目标、开发及运行环境的配置
(3)完成详细设计任务
要求完成集成环境的面板配置,新项目的创建,并测试功能。
“C#基础:
结构化程序设计”学习指导
在上一情境里读者接触到了第一个C#应用程序,虽只是简单地在控制台输出了一句问候语,但它却充分体现了VisualStudio2008的易用性及C#语言的特点。
理解了C#的用途之后,就可以学习如何使用它。
本章将介绍C#的基本语法知识,通过本章学习,读者将了解以下内容:
●理解C#中的数据类型。
●理解常量和变量的含义及用法。
●理解数据类型转换的含义。
●会运用常用的运算符和表达式。
1、C#中的数据类型
应用任何一种程序语言,需要充分了解它提供的数据类型,这样才能明白它的功能与限制,以便选择合适的数据类型来处理不同的数据。
例如在平时生活中,我们会用整数来表达东西的数量,而在工程、金融领域我们要用到很高精度小数。
但对计算机来说,数据的含义更要宽泛些,比如说一句话、一个字符等,对计算机来说都是数据。
计算机会用不同的方式来处理它遇到的不同类型的数据。
C#中数据类型主要分为两大类:
值类型和引用类型。
这里我们先讲解这两种类型,然后再讨论数据类型之间的转换。
1.1值类型
什么是值类型呢?
值类型的数据存储在内存的堆栈中,可以提供快速访问。
如果变量是值类型,这个变量就包含实际数据,在一个独立的内存区域保存自己的值,如果在代码中修改其值后,在内存中会保存修改后的值。
C#中大多数基本数据类型如:
整型、字符型、浮点型、布尔型等都属于值类型,结构、枚举也属于值类型。
1.整数类型
整数类型的数据值只能是整数,计算机语言所提供的数据类型有一定的范围。
类型标识符
描述
可表示的数值范围
sbyte
8位有符号整数
-128~+127
byte
8位无符号整数
0~255
short
16位有符号整数
-32768~+32767
ushort
16位无符号整数
0~65535
int
32位有符号整数
-2147483648~+2147483647
uint
32位无符号整数
0~232-1
long
64位有符号整数
-9223372036854775805~+9223372036854775807
ulong
64位无符号整数
0~264-1
2.浮点类型
浮点类型的数据包含两种:
单精度浮点型(float)和双精度浮点型(double),其区别在于取值范围和精度的不同。
float类型是32位宽,double类型是64位宽。
单精度:
取值范围在+1.5×10-45~3.4×1038之间,精度为7位数。
双精度:
取值范围为+5.0×-324~1.7×10308之间,精度为15~16位数。
3.小数类型
小数类型(decimal)占用16个字节(128位),主要为了满足需要高精度的财务和金融计算机领域。
小数类型数据的取值范围和精度如下:
取值范围在+1.0×10-28~7.9×1028之间,精度为29位数。
注意:
小数类型数据的后面必须跟m或者M后缀来表示它是decimal类型的,如3.14m、0.28m等,否则就会被解释成标准的浮点类型数据,导致数据类型不匹配。
例如:
138f代表float类型的数值138.0
518u代表uint类型的数值518
36897123ul代表ulong类型的数值36897123
22.1m代表decimal类型的数值22.1
12.68代表double类型的数值12.68
36代表int类型的数值36
刚开始学习,不可能一下子掌握这么多数值类型,先牢记以下几种:
int型:
凡是要表示带符号的整数时,先考虑使用int型;
uint型:
凡是需要不带符号的整数时,先考虑使用uint型;
double型:
凡是需要做科学计算,并且精度要求不是很高时,考虑使用double型。
4.字符类型
字符类型的类型标识符是char,采用Unicode字符集。
凡是在单引号中的一个字符,就是一个字符常数,如:
‘你’、‘A’、‘?
’、‘6’、‘2’
注意:
在表示一个字符常数时,单引号内的有效字符数量必须且只能是一个,并且不能是单引号或者反斜杠(\)。
为了表示单引号和反斜杠等特殊的字符常数,C#提供了转义符。
C#常用的转义符
转义符
字符名称
\’
单引号
\"
双引号
\\
反斜杠
\0
空字符(Null)
\a
发出一个警告
\b
倒退一个字符
\f
换页
\n
新的一行
\r
换行并移到同一行的最前面
\t
水平方向的Tab
\v
垂直方向的Tab
如Console.WriteLine(“Hello,”+”\’”+”打印出单引号“+”\‘“);
例:
usingSystem;
classStrDemo
{
staticvoidMain()
{
Console.WriteLine(“FirstLine\nSecondLine”);
Console.WriteLine(“A\tB\tC”);
Console.WriteLine(“D\tE\tF”);
}
}
5.布尔类型
布尔类型的类型标识符是bool。
布尔类型常数只有两种值:
true(代表“真”)和false(代表“假”)。
布尔类型数据主要应用在流程控制中。
例:
boolb=5>3;//b的值为true;
b=false;
1.2引用类型
引用类型指向存储在内存堆中的数据的指针或引用。
与纯粹的地址不同,引用总是指向一个对象,而且这个对象具有指定的类型,并且在堆上分配了地址。
字符串、数组、接口、类都属于引用类型。
C#支持两个引用类型:
object类和string类。
1.object类
object类是系统提供的基类型,是所有类型的基类,C#中所有的类型都直接或间接派生于对象类型。
对于任一个object变量,均可以赋以任何类型的值。
doubled=3.14;
objectobj1;
obj1=d;
obj1=‘k’;
对于object类型的变量,声明必须使用object关键字。
2.string类
一个字符串是被双引号包含的一系列字符。
string类是专门用于对字符串进行操作的。
如:
stringstr1="中国,";
stringstr2="你好!
";
stringstr3=str1+str2;//这相当于str3="中国,你好!
"
charc=str3[0];//取出str3的第一个字符,即“中”字。
C#支持两种形式的字符串常数。
(1)常规字符串常数
如:
“thisisatest”
“C#程序设计教程”
例:
usingSystem;
classStrDemo
{
staticvoidMain()
{
Console.WriteLine("First\0line\nSecond\0line");
Console.WriteLine("你好\a");
Console.WriteLine(“1\t2\t3");
Console.WriteLine(“*\t**\t***”);
}
}
例如:
usingSystem;
classStringDemo
{
publicstaticvoidMain()
{
stringstr1=“Astring”;
stringstr2="Anotherstring.";
Console.WriteLine(“{0}\n{1}”,str1,str2);
}
}
运行结果如下:
(2)逐字字符串常数
逐字字符串常数以@开头,后跟一对双引号,在双引号中放入字符。
如:
@“电子高专”
@“Thisisabook.”
逐字字符串常数同常规字符串常数的区别:
在逐字字符串常数的双引号中,每个字符都代表其最原始的意义,在逐字字符串常数中没有转义字符。
注意:
如果要包含双引号("),就必须在一行中使用两个双引号("")。
例:
stringstr1;//定义字符串类型
stringstr2="hello,world";//规则字符串常数:
hello,world
stringstr3=@"hello,world";//逐字字符串常数:
hello,world
stringstr4="hello\tworld";//helloworld
stringstr5=@"hello\tworld";//hello\tworld
stringstr6=“Hesaid\"Hello\"toyou";//Tomsaid"Hello"toyou
stringstr7=@“Hesaid""Hello""toyou";//Tomsaid"Hello"toyou
例如:
usingSystem;
classTest
{staticvoidMain()
{
Console.WriteLine(@"Thisisaverbatim
stringliteral
thatspansseverallines.");
Console.WriteLine(@"Hereissometabbedoutput:
1234
5678");
Console.WriteLine(@"Programmerssay,""IlikeC#""");
}
}
运行结果如下:
1.3数据类型转换
数据类型在一定条件下是可以相互转换的。
C#允许使用两种转换的方式:
隐式转换和显式转换。
1.隐式转换
隐式转换是系统默认的、不需要加以声明就可以进行的转换。
隐式数据转换的使用方法如下:
inti=518;//a为整型数据
longb=i;//b为长整型数据
floatf=i;//f为单精度浮点型数据
2.显式转换
显式转换又叫强制类型转换,显式转换要明确指定转换类型。
显式转换格式:
(类型标识符)表达式
意义为:
将表达式的值的类型转换为类型标识符的类型。
比如:
(char)65//把int类型的65转换成char类型
注意:
(1)显式转换可能会导致错误。
(2)对于将float,double,decimal转换为整数,将通过舍入得到最接近的整型值,如果这个整型值超出目标域,则出现转换异常。
比如:
(int)6.28m//转换的结果为6
(int)3e25f//将产生溢出错误
3、字符串与数值之间的转换
C#中不仅仅存在数值类型数据之间的互相转换,字符串和数值之间也是可以互相转换的,只是方法不同而已。
(1)数值型转换为字符串
数值型数据转换为字符串用ToString()方法即可实现。
如:
intnum1=10;
stringmynum=num1.ToString();
(2)字符串转化为数值型
字符串数据转换为数值型使用Parse()方法。
字符串转换为整型:
int.Parse(string);例如:
stringstr="13";
intnumber=int.Parse(str);
字符串转换为双精度浮点型:
double.Parse(string);例如:
stringstr="14";
doublenumber=double.Parse(str);
字符串转换为单精度浮点型:
float.Parse(string);例如:
stringstr="15";
floatnumber=float.Parse(str);
注意:
Parse()括号中的参数只能是字符串,不能是其他数据类型。
4、用Convert类实现数据类型转换
通过前面的学习我们知道.NetFramework提供了很多类库,其中Convert类就是专门进行类型转换的类,它能够实现各种基本数据类型之间的相互转换。
一面代码演示了Convert类转换数据类型的方法。
namespaceExample_ConvertTest2
{
classConvertEX
{
staticvoidMain(string[]args)
{
floatnum1=82.26f;//原始数值
intinteger,num2;//转换后的整型
stringstr,strdate;//转换后的字符串型
DateTimemydate=DateTime.Now;//把当前时间赋给日期型变量
//Convert类的方法进行转换
integer=Convert.ToInt32(num1);
str=Convert.ToString(num1);
strdate=Convert.ToString(mydate);
//num2=Convert.ToInt32(mydate);
//输出结果
Console.WriteLine("转换为整型数据的值{0}",integer);
Console.WriteLine("转换为字符串{0}",str);
Console.WriteLine("日期型数据转换为字符串值为{0}",strdate);
Console.ReadKey();
}
}
}
1.4装箱和拆箱
C#语言类型系统中有两个重要的概念,分别是装箱和拆箱。
通过装箱和拆箱,任何值类型都可以被当作object引用类型来看待。
本节将对装箱和拆箱进行详细讲解。
1.装箱
装箱是指将值类型换成引用类型的过程。
例如:
下面的两条语句就执行了装箱转换:
inti=518;
objectobj=i;
例:
在程序中执行装箱转换。
usingSystem;
classBoxingDemo
{
staticvoidMain()
{
Console.WriteLine("执行装箱转换:
");
intk=200;//声明一个int类型变量k,并初始化为200
objectobj=k;//声明一个object类型变量obj,其初始化值为i
k=300;//重新将i赋值为300
Console.WriteLine("obj={0}",obj);
Console.WriteLine("k={0}",k);
}
}
从程序运行结果可以看出,值类型变量的值复制到装箱得到的对象中,装箱后改变值类型变量的值,并不会影响装箱对象的值。
2.拆箱
和装箱相反,拆箱是指将引用类型转化为值类型的过程。
拆箱的执行过程大致可以分为一下两个阶段:
●检查对象的实例,看它是不是值类型的装箱值。
●把这个实例的值复制给值类型的变量。
例如:
objectobj=228;
intk=(int)obj;
例如:
在程序中使用拆箱转换。
usingSystem
classUnboxingDemo
{
staticvoidMain()
{
intk=228;//声明int类型变量
objectobj=k;//执行装箱操作
Console.WriteLine("装箱操作:
值为{0},装箱之后对象为{1}",k,obj);
intj=(int)obj;//拆箱转换
Console.WriteLine("拆箱操作:
拆箱对象为{0},值为{1}",obj,j);
}
}
该程序执行后,输出结果如下:
从程序运行结果可以看出,拆箱后得到的值类型数据的值与装箱对象相等。
注意:
在执行拆箱操作时,要符合类型一致的原则,否则会出现异常。
1.5字符串应用—String类
字符串是我们在程序中用的非常多的数据类型,是最常用的一种引用类型。
在前面的示例代码中几乎都用到了string这个数据类型。
这节主要学习String类的用法。
1.常用的字符串处理方法
.NETFramework提供了很多处理字符处的方法,下表列出了常用的一些方法,并对每个方法的作用加以说明。
boolEquals(stringstr)
与“==”作用相同,用于比较一个字符串和另一个字符串是否相等,相等返回true,不相等返回false
ToLower()
返回字符串的小写形式
ToUper()
返回字符串的大写形式
Trim()
去掉字符串两端的空格
SubString(intstartindex,intlength)
从字符串的指定位置startindex开始获取长度为length的子字符串
IntIndexOf(stringstr)
获取指定的字符串str在当前字符串中第一个匹配项的索引,有匹配项就返回索引,没有就返回-1
IntLastIndexOf(stringstr)
获取指定的字符串str在当前字符串中最后一个匹配项的索引,有匹配项就返回索引,没有就返回-1
String[]Split(charseparator)
用指定分隔符分割字符串,返回分割后的字符串组成的数组
StringJoin(stringSeparator,string[]str)
字符串数据str中的每个字符用指定的分隔符Separator连接,返回连接后的字符串
StringCompare(stringstrA,stringstrB)
比较两个字符串的大小,返回一个指数。
如果strA小于strB,返回值小于0;如果两个字符串相等,返回值等于0;如果strA大于strB,返回值小于0
Replace(stringoldvalue,stringnewvalue)
用newvalue值替换oldvalue
实例:
本程序实现下列功能:
输入Email邮箱,获取邮箱的用户名。
输入带空格的字符串,分割并连接。
输入写大英文字符转化为小写
staticvoidMain(string[]args)
{
stringstrname;//email的用户名
stringinputStr;//输入的字符串
string[]splitString;//分割后的字符串数组
stringjoinString;//连接后的字符串
stringstrEnglish;//输入的大写英文字符
stringemail;//email
Console.WriteLine("请输入您的邮箱");
email=Console.ReadLine().Trim();//接收输入
Console.WriteLine("您的邮箱是{0}",email);
//抽取邮箱用户名
intintindex=email.IndexOf("@");//获取@的索引
if(intindex>0)
{
strname=email.Subs