C# 最基础知识介绍(三)——变量、常量、运算符、判断、循环
C# 最基础知识介绍(三)——变量、常量、运算符、判断、循环
C#变量🎈
程序运行期间,可以被改变的量
本质:变量是一个存储空间,被改变的是存储的内容
注意:变量一定要先定义再使用
一个变量只不过是一个供程序操作的存储区的名字。在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局。范围内的值可以存储在内存中,可以对变量进行一系列操作。
C# 中提供的基本的值类型大致可以分为以下几类:
C# 中的变量定义
变量定义的语法格式:
1 <data_type> <variable_list>;
类型修饰符 变量名 = 初始值
例如:int age = 23;
类型修饰符:规定了变量的空间大小,以及变量的数据类型
变量名:变量的名字,起标识作用
初始值:变量定义时的默认值
变量命名的规则
- 只能由字母、数字、下划线或@组成,并且不能以数字开头,@只能用在开头 _hello_World34
- 不可以与系统关键字同名
- 不能使用重复的变量名(C#大小写敏感)
- 要使用驼峰命名方法 int helloWorld hello_world
- 见名知意(规范)Int age = 15;
C# 中的 Lvalues 和 Rvalues
C# 中的两种表达式:
- lvalue:lvalue 表达式可以出现在赋值语句的左边或右边。
- rvalue:rvalue 表达式可以出现在赋值语句的右边,不能出现在赋值语句的左边。
变量是 lvalue 的,所以可以出现在赋值语句的左边。数值是 rvalue 的,因此不能被赋值,不能出现在赋值语句的左边。下面是一个有效的语句:
1 int g = 20;
下面是一个无效的语句,会产生编译时错误:
1 10 = 20;
常量🎉
常量:程序运行期间,不能被改变的量
常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。
常量可以被当作常规的变量,只是它们的值在定义后不能被修改。
整数常量
整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制。
整数常量也可以有后缀,可以是 U 和 L 的组合,其中,U 和 L 分别表示 unsigned 和 long。后缀可以是大写或者小写,多个后缀以任意顺序进行组合。
这里有一些整数常量的实例:
1 212 /* 合法 */ 2 215u /* 合法 */ 3 0xFeeL /* 合法 */ 4 078 /* 非法:8 不是一个八进制数字 */ 5 032UU /* 非法:不能重复后缀 */
以下是各种类型的整数常量的实例:
1 85 /* 十进制 */ 2 0213 /* 八进制 */ 3 0x4b /* 十六进制 */ 4 30 /* int */ 5 30u /* 无符号 int */ 6 30l /* long */ 7 30ul
浮点常量
一个浮点常量是由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。
这里有一些浮点常量的实例:
1 3.14159 /* 合法 */ 2 314159E-5L /* 合法 */ 3 510E /* 非法:不完全指数 */ 4 210f /* 非法:没有小数或指数 */ 5 .e55 /* 非法:缺少整数或小数 */
使用小数形式表示时,必须包含小数点、指数或同时包含两者。使用指数形式表示时,必须包含整数部分、小数部分或同时包含两者。有符号的指数是用 e 或 E 表示的。
字符常量
字符常量是括在单引号里,例如,‘x’,且可存储在一个简单的字符类型变量中。一个字符常量可以是一个普通字符(例如 ‘x’)、一个转义序列(例如 ‘\t’)或者一个通用字符(例如 ‘\u02C0’)。
在 C# 中有一些特定的字符,当它们的前面带有反斜杠时有特殊的意义,可用于表示换行符(\n)或制表符 tab(\t)。在这里,列出一些转义序列码:
以下是一些转义序列字符的实例:
1 namespace EscapeChar 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Console.WriteLine("Hello\tWorld\n\n"); 8 Console.ReadLine(); 9 } 10 } 11 }
当上面的代码被编译和执行时,它会产生下列结果:
Hello World
字符串常量
字符串常量是括在双引号 “” 里,或者是括在== @""== 里。字符串常量包含的字符与字符常量相似,可以是:普通字符、转义序列和通用字符
使用字符串常量时,可以把一个很长的行拆成多个行,可以使用空格分隔各个部分。
这里是一些字符串常量的实例。下面所列的各种形式表示相同的字符串。
1 string a = "hello, world"; // hello, world 2 string b = @"hello, world"; // hello, world 3 string c = "hello \t world"; // hello world 4 string d = @"hello \t world"; // hello \t world 5 string e = "Joe said \"Hello\" to me"; // Joe said "Hello" to me 6 string f = @"Joe said ""Hello"" to me"; // Joe said "Hello" to me 7 string g = "\\\\server\\share\\file.txt"; // \\server\share\file.txt 8 string h = @"\\server\share\file.txt"; // \\server\share\file.txt 9 string i = "one\r\ntwo\r\nthree"; 10 string j = @"one 11 two 12 three";
定义常量
常量是使用 const 关键字来定义的 。定义一个常量的语法如下:
1 const <data_type> <constant_name> = value;
下面的代码演示了如何在程序中定义和使用常量:
实例
1 using System; 2 3 public class ConstTest 4 { 5 class SampleClass 6 { 7 public int x; 8 public int y; 9 public const int c1 = 5; 10 public const int c2 = c1 + 5; 11 12 public SampleClass(int p1, int p2) 13 { 14 x = p1; 15 y = p2; 16 } 17 } 18 19 static void Main() 20 { 21 SampleClass mC = new SampleClass(11, 22); 22 Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y); 23 Console.WriteLine("c1 = {0}, c2 = {1}", 24 SampleClass.c1, SampleClass.c2); 25 } 26 }
当上面的代码被编译和执行时,它会产生下列结果:
x = 11, y = 22 c1 = 5, c2 = 10
C# 运算符🎃
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,分类如下:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符
算术运算符
下表显示了 C# 支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
- c = a++: 先将 a 赋值给 c,再对 a 进行自增运算。
- c = ++a: 先将 a 进行自增运算,再将 a 赋值给 c 。
- c= a–: 先将 a 赋值给 c,再对 a 进行自减运算。
- c = --a: 先将 a 进行自减运算,再将 a 赋值给 c 。
1 实例 2 using System; 3 4 namespace OperatorsAppl 5 { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 int a = 1; 11 int b; 12 13 // a++ 先赋值再进行自增运算 14 b = a++; 15 Console.WriteLine("a = {0}", a); 16 Console.WriteLine("b = {0}", b); 17 Console.ReadLine(); 18 19 // ++a 先进行自增运算再赋值 20 a = 1; // 重新初始化 a 21 b = ++a; 22 Console.WriteLine("a = {0}", a); 23 Console.WriteLine("b = {0}", b); 24 Console.ReadLine(); 25 26 // a-- 先赋值再进行自减运算 27 a = 1; // 重新初始化 a 28 b= a--; 29 Console.WriteLine("a = {0}", a); 30 Console.WriteLine("b = {0}", b); 31 Console.ReadLine(); 32 33 // --a 先进行自减运算再赋值 34 a = 1; // 重新初始化 a 35 b= --a; 36 Console.WriteLine("a = {0}", a); 37 Console.WriteLine("b = {0}", b); 38 Console.ReadLine(); 39 } 40 } 41 }
执行以上程序,输出结果为:
a = 2 b = 1 a = 2 b = 2 a = 0 b = 1 a = 0 b = 0
关系运算符
下表显示了 C# 支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
实例
请看下面的实例,了解 C# 中所有可用的关系运算符:
1 实例 2 using System; 3 4 class Program 5 { 6 static void Main(string[] args) 7 { 8 int a = 21; 9 int b = 10; 10 11 if (a == b) 12 { 13 Console.WriteLine("Line 1 - a 等于 b"); 14 } 15 else 16 { 17 Console.WriteLine("Line 1 - a 不等于 b"); 18 } 19 if (a < b) 20 { 21 Console.WriteLine("Line 2 - a 小于 b"); 22 } 23 else 24 { 25 Console.WriteLine("Line 2 - a 不小于 b"); 26 } 27 if (a > b) 28 { 29 Console.WriteLine("Line 3 - a 大于 b"); 30 } 31 else 32 { 33 Console.WriteLine("Line 3 - a 不大于 b"); 34 } 35 /* 改变 a 和 b 的值 */ 36 a = 5; 37 b = 20; 38 if (a <= b) 39 { 40 Console.WriteLine("Line 4 - a 小于或等于 b"); 41 } 42 if (b >= a) 43 { 44 Console.WriteLine("Line 5 - b 大于或等于 a"); 45 } 46 } 47 }
当上面的代码被编译和执行时,它会产生下列结果:
Line 1 - a 不等于 b Line 2 - a 不小于 b Line 3 - a 大于 b Line 4 - a 小于或等于 b Line 5 - b 大于或等于 a
逻辑运算符
下表显示了 C# 支持的所有逻辑运算符。假设变量 A 为布尔值 true,变量 B 为布尔值 false,则:
请看下面的实例,了解 C# 中所有可用的逻辑运算符:
实例
1 using System; 2 3 namespace OperatorsAppl 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 bool a = true; 10 bool b = true; 11 12 if (a && b) 13 { 14 Console.WriteLine("Line 1 - 条件为真"); 15 } 16 if (a || b) 17 { 18 Console.WriteLine("Line 2 - 条件为真"); 19 } 20 /* 改变 a 和 b 的值 */ 21 a = false; 22 b = true; 23 if (a && b) 24 { 25 Console.WriteLine("Line 3 - 条件为真"); 26 } 27 else 28 { 29 Console.WriteLine("Line 3 - 条件不为真"); 30 } 31 if (!(a && b)) 32 { 33 Console.WriteLine("Line 4 - 条件为真"); 34 } 35 Console.ReadLine(); 36 } 37 } 38 }
当上面的代码被编译和执行时,它会产生下列结果:
Line 1 - 条件为真 Line 2 - 条件为真 Line 3 - 条件不为真 Line 4 - 条件为真
位运算符
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
下表列出了 C# 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:
请看下面的实例,了解 C# 中所有可用的位运算符:
1 using System; 2 namespace OperatorsAppl 3 { 4 class Program 5 { 6 static void Main(string[] args) 7 { 8 int a = 60; /* 60 = 0011 1100 */ 9 int b = 13; /* 13 = 0000 1101 */ 10 int c = 0; 11 12 c = a & b; /* 12 = 0000 1100 */ 13 Console.WriteLine("Line 1 - c 的值是 {0}", c ); 14 15 c = a | b; /* 61 = 0011 1101 */ 16 Console.WriteLine("Line 2 - c 的值是 {0}", c); 17 18 c = a ^ b; /* 49 = 0011 0001 */ 19 Console.WriteLine("Line 3 - c 的值是 {0}", c); 20 21 c = ~a; /*-61 = 1100 0011 */ 22 Console.WriteLine("Line 4 - c 的值是 {0}", c); 23 24 c = a << 2; /* 240 = 1111 0000 */ 25 Console.WriteLine("Line 5 - c 的值是 {0}", c); 26 27 c = a >> 2; /* 15 = 0000 1111 */ 28 Console.WriteLine("Line 6 - c 的值是 {0}", c); 29 Console.ReadLine(); 30 } 31 } 32 }
当上面的代码被编译和执行时,它会产生下列结果:
Line 1 - c 的值是 12 Line 2 - c 的值是 61 Line 3 - c 的值是 49 Line 4 - c 的值是-61 Line 5 - c 的值是 240 Line 6 - c 的值是 15
赋值运算符
下表列出了 C# 支持的赋值运算符:
请看下面的实例,了解 C# 中所有可用的赋值运算符:
1 using System; 2 3 namespace OperatorsAppl 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 int a = 21; 10 int c; 11 12 c = a; 13 Console.WriteLine("Line 1 - = c 的值 = {0}", c); 14 15 c += a; 16 Console.WriteLine("Line 2 - += c 的值 = {0}", c); 17 18 c -= a; 19 Console.WriteLine("Line 3 - -= c 的值 = {0}", c); 20 21 c *= a; 22 Console.WriteLine("Line 4 - *= c 的值 = {0}", c); 23 24 c /= a; 25 Console.WriteLine("Line 5 - /= c 的值 = {0}", c); 26 27 c = 200; 28 c %= a; 29 Console.WriteLine("Line 6 - %= c 的值 = {0}", c); 30 31 c <<= 2; 32 Console.WriteLine("Line 7 - <<= c 的值 = {0}", c); 33 34 c >>= 2; 35 Console.WriteLine("Line 8 - >>= c 的值 = {0}", c); 36 37 c &= 2; 38 Console.WriteLine("Line 9 - &= c 的值 = {0}", c); 39 40 c ^= 2; 41 Console.WriteLine("Line 10 - ^= c 的值 = {0}", c); 42 43 c |= 2; 44 Console.WriteLine("Line 11 - |= c 的值 = {0}", c); 45 Console.ReadLine(); 46 } 47 } 48 }
当上面的代码被编译和执行时,它会产生下列结果:
Line 1 - = c 的值 = 21 Line 2 - += c 的值 = 42 Line 3 - -= c 的值 = 21 Line 4 - *= c 的值 = 441 Line 5 - /= c 的值 = 21 Line 6 - %= c 的值 = 11 Line 7 - <<= c 的值 = 44 Line 8 - >>= c 的值 = 11 Line 9 -&= c 的值 = 2 Line 10 - ^= c 的值 = 0 Line 11 - |= c 的值 = 2
其他运算符
下表列出了 C# 支持的其他一些重要的运算符,包括 sizeof、typeof 和 ? :。
实例
1 using System; 2 3 namespace OperatorsAppl 4 { 5 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 11 /* sizeof 运算符的实例 */ 12 Console.WriteLine("int 的大小是 {0}", sizeof(int)); 13 Console.WriteLine("short 的大小是 {0}", sizeof(short)); 14 Console.WriteLine("double 的大小是 {0}", sizeof(double)); 15 16 /* 三元运算符的实例 */ 17 int a, b; 18 a = 10; 19 b = (a == 1) ? 20 : 30; 20 Console.WriteLine("b 的值是 {0}", b); 21 22 b = (a == 10) ? 20 : 30; 23 Console.WriteLine("b 的值是 {0}", b); 24 Console.ReadLine(); 25 } 26 } 27 }
当上面的代码被编译和执行时,它会产生下列结果:
int 的大小是 4 short 的大小是 2 double 的大小是 8 b 的值是 30 b 的值是 20
C# 中的运算符优先级👻
运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。
例如 x = 7 + 3 * 2,在这里,x 被赋值为 13,而不是 20,因为运算符 * 具有比 + 更高的优先级,所以首先计算乘法 3*2,然后再加上 7。
下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。
实例
1 using System; 2 3 namespace OperatorsAppl 4 { 5 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 int a = 20; 11 int b = 10; 12 int c = 15; 13 int d = 5; 14 int e; 15 e = (a + b) * c / d; // ( 30 * 15 ) / 5 16 Console.WriteLine("(a + b) * c / d 的值是 {0}", e); 17 18 e = ((a + b) * c) / d; // (30 * 15 ) / 5 19 Console.WriteLine("((a + b) * c) / d 的值是 {0}", e); 20 21 e = (a + b) * (c / d); // (30) * (15/5) 22 Console.WriteLine("(a + b) * (c / d) 的值是 {0}", e); 23 24 e = a + (b * c) / d; // 20 + (150/5) 25 Console.WriteLine("a + (b * c) / d 的值是 {0}", e); 26 Console.ReadLine(); 27 } 28 } 29 }
当上面的代码被编译和执行时,它会产生下列结果:
(a + b) * c / d 的值是 90 ((a + b) * c) / d 的值是 90 (a + b) * (c / d) 的值是 90 a + (b * c) / d 的值是 50
C# 判断⛄️
判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。
下面是大多数编程语言中典型的判断结构的一般形式:
判断语句
C# 提供了以下类型的判断语句。
? : 运算符
我们已经在前面的章节中讲解了 条件运算符 ? :,可以用来替代 if…else 语句。它的一般形式如下:
1 Exp1 ? Exp2 : Exp3;
其中,Exp1、Exp2 和 Exp3 是表达式。请注意,冒号的使用和位置。
? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个 ? 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个 ? 表达式的值。
C# 循环🔔
有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
编程语言提供了允许更为复杂的执行路径的多种控制结构。
循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:
循环类型
C# 提供了以下几种循环类型。
循环控制语句
循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。
C# 提供了下列的控制语句。
无限循环
如果条件永远不为假,则循环将变成无限循环。for 循环在传统意义上可用于实现无限循环。由于构成循环的三个表达式中任何一个都不是必需的,您可以将某些条件表达式留空来构成一个无限循环。
1 实例 2 using System; 3 4 namespace Loops 5 { 6 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 for (; ; ) 12 { 13 Console.WriteLine("Hey! I am Trapped"); 14 } 15 16 } 17 } 18 }
当条件表达式不存在时,它被假设为真。您也可以设置一个初始值和增量表达式,但是一般情况下,程序员偏向于使用 for(;😉 结构来表示一个无限循环。
1.从键盘输入一个三位的正整数,按数字的相反顺序输出
方法一
1 int b; 2 b = Convert.ToInt32(Console.ReadLine()); 3 int x; 4 int y; 5 int z; 6 x = b % 10; 7 y = b /10 %10; 8 z = b / 100; 9 Console.WriteLine(100*x+10*y+z);
方法一
1 string z = ""; 2 Console.WriteLine("输入一个正整数"); 3 string str = Console.ReadLine(); 4 for (int i = 0; i < str.Length; i++) 5 { 6 z = z + str[str.Length - i - 1]; //利用字符串的长度-i,还要减1,因为从0开始 7 // Console.WriteLine(count); //Console.WriteLine(str[str.Length-i-1]); } 8 Console.WriteLine(z);
2.任意输入两个数,计算它们的和差积商
1 int a, b,c,d,e,f; 2 Console.WriteLine("请输入两个数:"); 3 a = Convert.ToInt32(Console.ReadLine()); 4 b = Convert.ToInt32(Console.ReadLine()); 5 c = a + b; 6 d = a - b; 7 e = a * b; 8 f = a / b; 9 Console.WriteLine("这两个数的和为" + c + "\n这两个数的差为" + d + "\n这两个数的积为" + e + "\n这两个数的商为" + f); 10 Console.ReadKey();
3.交换两个int类型变量的值
1 int j, k; 2 Console.WriteLine("请输入两个数j和k"); 3 j = Convert.ToInt32(Console.ReadLine()); 4 k = Convert.ToInt32(Console.ReadLine()); 5 j = j + k; 6 k = j - k; 7 j = j - k; 8 Console.WriteLine("j的值为"+j+"\nk的值为"+k);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术