程序处理的对象是各种各样的数据,因此,我们必须让计算机了解需要处理什么样的数据,以及采用哪种方式进行处理,按什么格式进行保存等等。比如,在编码程序中需要处理单个字符,在定购票系统需要打印货币金额,在科学运算中我们需要不同精度的小数,这些都是不同的数据类型。
C#将数据分为不同的类型,它们分别表示不同范围、不同精度、不同用途的数据。将数据分类是由于不同类型的数据在计算机内占用的内存空间大小不同、运算速度不同。为了有效利用计算机的内存资源和达到最佳的程序运行效果,需要根据不同形式数据的大小和特征来选择最合适表示它们的数据类型。C#语言的数值类型包括了由整数类型、浮点 数类型、小数类型、字符型、布尔型组成的简单类型和由结构、枚举等组成的构造类型。
整数类型是指那些没有小数部分的数字,包括整数常量和整数变量。
整数常量即整数类型的常数,一般包括以下两种形式。
● 十进制数:348、-56、0等。
● 十六进制数:这类数据以“0x”(其中0是数字0)开头,如:0x61,相当于十进制数据97。
整数类型又有有符号整数与无符号整数。有符号整数可以带正负号,无符号整数不需带正负号,默认为正数。
顾名思义,整数类型的变量的值为整数。数学上的整数可以从负无穷大到正无穷大,但是由于计算机的存储单元是有限的,所以计算机语言提供的整数类型的值总是在一定的范围之内。根据变量在内存中所占的二进制位数不同和是否有符号位,C#语言中整数类型分八种:字节型(sbyte)、无符号字节型(byte)、短整型(short)、无符号短整型(ushort)、整型(int)、无符号整型(uint)、长整型(long)、无符号长整型(ulong)。所占的二进制位数不同,表示的数值的取值范围也不同,所占的二进制位数越多,表示的数值的取值范围越大。比如说8位整数,它可以表示2的8次幂个数值,即256个不同的数值,如果用来表示有符号8位整数(sbyte),其取值范围就是在-128 到 127 之间,而如果用来表示无符号8位整数(byte),其取值范围就是在0 到 255 之间。具体各整数类型及其取值范围见表2-2。
表 2-2 整数类型及其取值范围
可使用关键字char来定义字符类型数据。char类型的变量占用2个字节的内存,其中存储的数字(对应某个ASCII码或Unicode码)被解释为一个字符。
字符变量用来存放字符常量,请注意只能放一个字符。举例:
char ch1=’a’;
char ch3=(char)97 ; //97是字符a对应的ASCII码
【例2-4】输出26个大写字母。大写字母的ASCII码范围为65~90,小写字母的ASCII码为97~122。
using System;
class Program
{
static void Main(string[] args)
{
int num;
char ch;
for (num = 65; num <= 90; num = num + 1)
{
ch = (char)num; //将整数转换为字符
Console.WriteLine("{0} is {1}", num, ch);
}
}
}
图2-4 例2-4运行结果
浮点数类型,又叫实数类型,是指带有小数部分的数字。浮点数类型数据同样也包括了常量和变量,定义这种类型的常量和变量的格式同上述整数类型。C#支持float和double两种浮点数类型。
1.float型(单精度类型)
float数据类型使用4个字节的内存来存储数字。
注意:
float testfloat = 23.03;这样写是错误的,因为C#中默认的数值数据类型为double. 一定要在数字后加上F才行。长类型到短类型的转换需要强制进行。
float testfloat = 23.03F; //这样写才是正确的。
2.double型(双精度类型)
double类型的变量占用8个字节的内存,double型精度为15~16位有效数字。
【例2-5】从键盘输入两个浮点数,然后输出这两个数相加的结果(要求小数后取4位)。
using System;
class Program
{
static void Main(string[] args)
{
float f1, f2;
string s;
Console.WriteLine("请输入浮点数1:");
s = Console.ReadLine(); //从键盘读入字符串
f1 = Convert.ToSingle(s); //将字符串转换为float类型
Console.WriteLine("请输入浮点数2:");
s = Console.ReadLine();
f2 = Convert.ToSingle(s);
Console.WriteLine("{0}+{1}={2:F4}", f1, f2, f1 + f2);
}
}
布尔类型是一种用来表示“真”和“假”的逻辑数据类型。布尔类型占用1个字节的内存。布尔类型变量只有两种取值:true代表“真”,false代表“假”,true或false是C#关键字。
例如:
bool isExist = false;
bool b = (i>0 && i<10);
【例2-7】使用bool类型。
using System;
class Program
{
static void Main(string[] args)
{
bool b;
b = false;
Console.WriteLine("b is {0}", b);
b = true;
Console.WriteLine("b is {0}", b);
//一个布尔值能够控制if语句
if (b)
Console.WriteLine("b is True");
else
Console.WriteLine("b is False");
//关系运算符的结果是一个布尔值
Console.WriteLine("10>9 is {0}", (10 > 9));
}
}
字符串类型的变量是由关键字string来定义的,它是类System.String的别名。
字符串类型也有常量和变量之分。字符串变量由关键字string来定义,而字符串常量和字符常量很相似,所不同的就是字符常量是用单引号‘’来表示,而字符串常量要用双引号“”表示。另外,一个字符常量只能由一个字符组成,而字符串常量可以由一个或多个字符组成。
除了上述描述的字符串常量的形式外,还可以指定一种逐字字符串常量。逐字字符串常量以@开始,引号内的内容可以包含新行、制表符等,而不必使用转义序列。唯一的例外是,如果要在文本中要包含双引号”,就必须在一行中使用一对双引号””。如:
String str = @"Hello\world";
【例2-8】使用字符串数据类型。
using System;
class Program
{
static void Main(string[] args)
{
string a = "Hello "; //定义字符串并赋值
string b = "world";
string c;
c = a + b; //连接a、b字符串
Console.WriteLine(c);
Console.WriteLine(c.Length);//输出字符串的长度
}
}
应用程序使用运算符来处理用户输入的数据,运算符(如+和-)用于处理变量并返回值。运算符是一组用于计算或比较的一个或多个字符,运算符可以将一个或多个数据值(称为操作数)转换成新的数据值。
表达式(expression)是可以进行运算并能够产生值的式子,是操作数与运算符按照一定的规则的组合,计算的结果称为此表达式的值。操作数是运算的对象,可以是任意常量、变量、方法等等。运算符是具体要执行的操作。下面是表达式的示例:
double Pi = 3.1415926 ;
double r =10.0 ;
double area ;
area = Pi*r*r ;
该例中声明圆周率Pi的值为3.1415926 ,圆半径r的值为10.0,圆的面积area为 Pi*r*r ,式子Pi*r*r就是一个表达式,计算出来的结果4712就是表达式的值。
赋值运算就是给一个变量赋一个新值。赋值运算符的左操作数必须是一个变量。
表2-4列出了操作符的用法并描述了常用的赋值操作符。
表2-4 常用的赋值操作符
【例2-12】 赋值运算。
using System;
class Program
{
static void Main(string[] args)
{
int op1 = 10;
int op2 = 20;
int result;
result = op1 + op2;
Console.WriteLine(result);
result += 10; // 相当于 result=result+10;
Console.WriteLine(result);
}
}
算术运算符包括基本算术运算符+、-、*、+、/、%和一元操作符自加、自减运算符“++、--“等。算术表达式就是用算术运算符将操作数连接起来的算式。
表2-5描述了常用的算术操作符。
表2-5 常用的算术操作符
一元操作符用于增加或减少操作数1。表2-6说明了增加和减少操作符的用法。
表2-6 增加和减少操作符的用法
注意前置操作符与后置操作符的不同:
● Y=++(或--)x:先将x值做++(或--)运算,然后再赋值给y;
● y=x++(或--):先将x值赋给y,然后再将x值做++(或--)运算。
【例2-13】加法运算。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(8 + 8); //数字加法
Console.WriteLine("8+ 0.8"); //字符串原样输出
Console.WriteLine("a" + "a"); //字符串加法
Console.WriteLine(8.3 + "a"); //混合类型相加
Console.WriteLine(8 + 'a'); //字符和数字混合相加
Console.WriteLine(8.3 + 'a'); //数字和字符相加
}
}
【例2-15】自增和自减运算。
using System;
class Program
{
static void Main(string[] args)
{
double x;
x = 1.5;
Console.WriteLine(++x); //自增运算,x先加1再输出
x = 1.5;
Console.WriteLine(x++); //自增运算,x先输出再加1
x = 1.5;
Console.WriteLine(--x); //自减运算,x先减1再输出
x = 1.5;
Console.WriteLine(x--); //自减运算,x先输出1再减
}
}
【例2-16】己知a=l,b=2,c=3,x=2,计算y=a*x^2+bx+c之值。
using System;
class Program
{
static void Main(string[] args)
{
int a = 1, b = 2, c = 3, x = 2, y;
y = a * x*x + b * x + c;
Console.WriteLine("y={0}", y);
}
}
【例2-17】取余运算。
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(0 % 2);
Console.WriteLine(1 % 2);
Console.WriteLine(5 % 2);
}
}
关系运算符可以它理解为一实种“判断”,判断的结果关系运算要么是“真”,要么是“假”,也就是说关系表达式的返回值总是布尔类型。C#语言提供的关系运算符有六个:
= = ! = < < = > > =
由操作数和关系运算符组成的表达式就是关系表达式。
关系运算符用于比较两个值并且在比较结果的基础上执行某个操作。表2-7介绍了常用的比较操作符的用法。
表2-7 常用的比较操作符
逻辑运算符是用来进行布尔表达式计算的。在C#语言中提供的逻辑运算符主要有三种:逻辑与“&&”、逻辑或“||”和逻辑非“!”。逻辑运算符对表达式a和b的操作见表2-8。
表2-8 逻辑运算表
“&&”运算符表示逻辑“与”,它被用于判断是否同时满足两个或两个以上的条件的时候。其操作数可以是布尔类型变量或关系表达式。例如,在数学中,判断变量x是否在开区间(1,10)中,C#语句可表示为:
If (x>1)&&(x<10)
如果变量y的值为true,则表明变量x的值在开区间(1,10)。
“&&”的短路特性:在一个“与”操作中,如果第一个操作数是假,则不管第二个操作数是什么值,结果都是假。
例如:逻辑表达式a&&b&&c,只有a为true时,才需要判断b的值;只有a和b都为true的情况下才需要判别c的值;只要a为false,就不必判断b和c;如果a为true,b为false,不判断c。
||运算符表示逻辑“或”,它用来判断是否满足两个或两个以上的条件之一,其操作数可以是布尔类型变量或关系表达式。例如,判断变量x是否满足小于1,或者大于10,其C#语句可写为:
Bool y=(x<1)|| (x>10);
如果变量y的值为true,则表明变量x的值或者小于1,或者大于10。
“||“的短路特性:在一个或操作中,如果第一个操作数是真,则不管第二个操作数是什么值,结果都是真。
“!”运算符是一个一元运算符,表示逻辑非。同样,其操作数可以是布尔类型变量或者关系表达式。例如判断变量x是否不小于100时,C#语句可写为:
bool y=!(x<100)
如果变量y的值为true,则表明变量x的值不小于100。
条件运算符“?:”是唯一的一个三目运算符,它需要3个操作数。条件运算表达式的一般格式是:
关系表达式?表达式1:表达式2
功能:如果关系表达式的值是true,则条件运算表达式得到的值为表达式l的值,否则为表达式2的值。
【例2-18】
using System;
class Program
{
static void Main(string[] args)
{
int a = 20;
int b = 50;
int max = (a > b) ? a : b;
Console.WriteLine("较大值为{0}", max);
}
}
运行结果如图2-18所示。
图2-18 例2-18运行结果
说明:
语句int max=(a>b)?a:b的执行过程是:如果a>b为true,则条件表达式的值为a,即max的值为a;否则max的值为b;也就是说,max变量的值取a、b中较大的值。
当表达式中包含多个运算符时,运算符的优先级控制各运算符的计算顺序。例如,表达式 x + y * z 按 x + (y * z) 计算,因为 * 运算符具有的优先级比 + 运算符高。表2-9按照从最高到最低的优先级顺序概括了所有的运算符:
表2-9 运算符优先级表
说明:
建议在写表达式的时候,如果无法确定运算符的有效顺序,则尽量采用括号来保证运算的顺序,这样编程时才能够做到思路清晰,编写的程序一目了然。
【例2-14】从键盘输入两个数,计算并显示结果。
初步流程图如图所示。当采取上述步骤时,计算机接收第一个数字(又称为值),并把它存储在内存中。然后计算机接收第二个值并把它存储在内存中。执行第三步时,计算机访问此前存储在内存中的两个值,执行运算,再把运算的结果也存储在内存中。为显示结果,计算机访问存储该结果的内存位置。
图2-13 流程图
使用变量的流程图如图所示。
图2-13 使用变量的流程图
代码实现如下:
using System;
class Program
{
static void Main(string[] args)
{
int num1, num2, sum;
Console.Write("请输入数字1:");
num1 =Convert.ToInt32( Console.ReadLine()); //从键盘读入字符串并转化为整数
Console.Write("请输入数字2:");
num2 = Convert.ToInt32(Console.ReadLine());
sum = num1 + num2;
Console.WriteLine("{0}+{1}={2}",num1,num2,sum);
}
}
本文来源:https://www.2haoxitong.net/k/doc/9f41e33f15791711cc7931b765ce05087632752d.html
文档为doc格式