• 1. 第5章C#程序设计
  • 2. 第4章知识点回顾C#提供了一元、二元和三元操作符。其中基本算术操作符遵循先乘除后加减的规则,而赋值操作符的优先级最低。可采用括号来明确指定表达式的运算顺序。 不同类型的数值进行算术运算时,结果类型与精度较高的操作数类型相同。如果超出数值类型的范围,算术运算会发生溢出。 自增和自减表达式是对算术表达式的简写,其前缀和后缀操作符的作用效果是不同的。 位运算的操作数是二进制整数,它们具有很高的计算效率。如:左移位和右移位运算可以代替整数的乘法和除法运算。
  • 3. 第4章知识点回顾 等号操作符“=”的作用就是将右操作数的值赋予左操作数,对用的表达式叫做简单赋值表达式;而复合赋值表达式是对算术运算和简单赋值的合并。 关系表达式用于对指定的条件进行判断,其返回值结果为布尔类型。实际应用中常使用条件逻辑操作符将各个关系表达式组合起来,以实现复合逻辑判断。条件逻辑表达式具有“短路”效应。 is操作符判断左操作数是否与右操作数的类型兼容,as操作符将左操作数转换为右操作数的类型。
  • 4. if (b-exp) { statement;}FalseTruestatementb-expExit
  • 5. static void Main() { int x; Console.Write(“x=“); x=int.Parse(Console.ReadLine()); if(x<0) x=-x; Console.WriteLine(“ 绝对值为:{0}“,x); } 程序功能:输出用户输入的整数的绝对值
  • 6. if (b-exp) {statement1;} else {statement2;}TrueFalsestatement2b-expExitstatement1
  • 7. static void Main() { int x; Console.Write(“x=“); x=int.Parse(Console.ReadLine()); if(x<0) Console.WriteLine(“ 绝对值为:{0}“,-x); else Console.WriteLine(“ 绝对值为:{0}“,x); } 程序功能:输出用户输入的整数的绝对值
  • 8. static void Main() { int year; Console.Write(“输入年份,year=“); year=int.Parse(Console.ReadLine()); if(year%400==0||((year%4==0)&&(year%100!=0))) Console.WriteLine(“ {0}是闰年“,year); else Console.WriteLine(“{0}不是闰年“,year); } 程序功能:判断用户输入的年份是否闰年
  • 9. if (b-exp1) {statement1;} else if (b-exp2) {statement2;} else statement3;TrueFalsestatement3b-exp1Exitstatement1TrueFalseb-exp2statement2
  • 10. public static void Main() { Console.WriteLine("请输入0--100之间的一个分数:"); float x=int.Parse(Console.ReadLine()); if(x>=90) Console.WriteLine("优秀"); else if(x>=80) Console.WriteLine("良好"); else if(x>=70) Console.WriteLine("中等"); else if(x>=60) Console.WriteLine("及格"); else Console.WriteLine ("不及格"); }程序功能:根据用户输入的分数给出等级
  • 11. switch(exp) { case c-exp1: s1; break; case c-exp2: s2; break; case c-exp3: s3; break; …… default: sn; break; } if (exp = = c-exp1) s1; else if (exp = = c-exp2) s2; else if (exp = = c-exp3) s3; …… else sn;当有多条选择路径时,可以采用switch语句
  • 12. public static void Main() { Console.WriteLine("请输入0--100之间的一个分数:"); float x=int.Parse(Console.ReadLine()); switch((int)x/10) { case 10: case 9: Console.WriteLine ("优秀"); break; case 8: Console.WriteLine ("良好"); break; case 7: Console.WriteLine ("中等"); break; case 6: Console.WriteLine ("及格"); break; default: Console.WriteLine ("不及格"); break; } }程序功能:根据用户输入的分数给出等级
  • 13. C#语法规定: (1)switch语句中各个case标签后常量表达式的值不能相等; (2)每个case分支都必须以break、return、goto或throw语句结束,而且语句中的任何代码都不能修改控制表达式的值; (3)switch语句中case分支的排列顺序不会影响到整个语句的功能
  • 14. while (b-exp) {statement;} TrueFalseb-expExitstatement修改exp
  • 15. static void Main( ) { int digit,num; Console.Write(“请输入一个整数:”); num=int.Parse(Console.ReadLine()); Console.Write(“反向显示结果:”); while(num!=0) { digit=num%10; num/=10; Console.Write(digit); } Console.WriteLine(); } 程序功能:将用户输入的整数反向显示出来 如输入123,输出321
  • 16. do {statement;} while (b-exp); TrueFalseb-expExitstatement
  • 17. Static void Main( ) { int digit,num; Console.Write(“请输入一个整数:”); num=int.Parse(Console.ReadLine()); Console.Write(“反向显示结果:”); do { digit=num%10; num/=10; Console.Write(digit); } while(num!=0); Console.WriteLine(); } 程序功能:将用户输入的整数按位反向显示出来 如输入123,输出321
  • 18. for(init; cond; iter) {statement;} TrueFalseexpExitinitstatementiter
  • 19. Static void Main( ) { int i,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) { Console.Write(“{0}*{1}={2}”,i,j,i*j); } Console.WriteLine(); } } 程序功能:输出九九乘法表
  • 20. C#中提供了foreach循环语句,它类似于for语句,也可以用来产生循环。不过foreach语句提供了一种简单明了的方法来访问数组元素,使我们不用直接接触到数组的索引。 foreach(T x in collection) statement; T为变量类型,x为变量标识,collection为一个集合,集合类型可以是System.Array或其派生类型(如数组),变量x的类型必须与集合的元素类型兼容。
  • 21. class program { public static void Main() { Console.WriteLine("请输入一个正整数"); uint x=uint.Parse(Console.ReadLine()); Console.WriteLine(Fact(x)); } public static ulong Fact(uint x) { ulong result=1; uint[] iArray=new uint[x]; foreach(uint i in iArray) result*=x--; return result; } }循环语句中没有用到集合的元素变量,此处的foreach循环语句仅用以控制循环次数
  • 22. class program { public static void Main() { int[] array={1,3,5,7,9}; int sum=0; foreach(int i in array) sum+=i; foreach(int i in array) Console.Write(“{0,5}”,i); Console.WriteLine(); Console.WriteLine(“sum={0}”,sum); } } 此处的foreach循环语句用以计算数组中所有元素的和 此处的foreach循环语句用以输出数组中所有元素 此处的5表示输出字符串的宽度,正数表示字符串靠右输出,负数靠左输出
  • 23. foreach循环对于集合collection中的每个元素都执行一次statement语句。相当于下列for循环语句: for(int i=0; i
  • 24. foreach语句失去了输出格式的控制权。(比如不能设置一行输出元素的个数) foreach只能用来读,不能修改array内容! foreach(int i in array) i++; 在foreach循环中不允许修改集合的元素。
  • 25. 使用foreach循环语句时,可以将字符串作为集合,而将其中的字符作为循环变量。 static void Main() { Console.Write("请输入一个字符串:"); string text=Console.ReadLine(); int i=0; foreach(char ch in text) { if(ch=='a') i++; } Console.Write("字符a一共出现了{0}次",i); } 程序功能:用以统计输入字符串中出现字符“a”的次数
  • 26. 对于规则多维数组,foreach语句会依次遍历其中所有元素,而对于不规则多维数组,foreach语句遍历的是其中各个子数组。 class Program { static void Main() { int[,] a=new int[,] {{0,0,1,1},{1,1,2,2},{2,3,4,5}}; Console.WriteLine(“数组 a:”); foreach(int x in a) { Console.Write(x); Consoel.Write(‘ ‘); } int[][] b=new int[3][]; b[0]=new int[] {0,0,1,1}; b[1]=new int[]{1,1,2,2}; b[2]=new int[]{2,3,4,5}; Console.WriteLine(“\r\n数组 b:”); foreach(int[] c in b) { foreach(int x in c) { Console.Write(x); Consoel.Write(‘ ‘); } Console.WriteLine(); } } }
  • 27. while (b-exp) {statement;} TrueFalseexpExitstatement避免死循环的方法有: 修改exp 或者使用跳转语句
  • 28. break:用于跳出当前的代码段,适用于while、do-while、for和foreach循环结构以及选择结构中的switch语句。 执行到break语句时,将程序的控制权转移到上述语句的结束点。 Break语句只能跳出选择或循环结构的当前嵌套层次。
  • 29. class Program { static void Main() { Console.WriteLine("请输入一个正整数:"); ulong n, i; ulong.TryParse(Console.ReadLine(), out n); for (i = 2; i <= n / 2; i++) { if (n % i == 0) { Console.WriteLine("{0}不是一个素数", n); break; } } if (i > n / 2) Console.WriteLine("{0}是一个素数", n); } } 程序功能:判断一个正整数是否是素数
  • 30. continue:能够跳出while、do-while、for和foreach循环语句,将控制权转移到这些语句的开始点,继续下一次循环。 如计算数列:1+2+4+5+7+8+…+n(不包括3的倍数) for(int i=1,s=0;i<=n;i++) { if(i%3==0) continue; s+=i; }
  • 31. class Program { static void Main() { Console.WriteLine("请输入一个字符串:"); string str = Console.ReadLine(); if (str == "") return; Console.Write(str[0]); int i = 0; while (i < str.Length - 1) { if (str[i++] == str[i]) continue; else Console.Write(str[i]); } } } 程序功能:合并一个字符串中所有相邻的重复字符
  • 32. class Program { static void Main() { int sum=0,n=1; while(n!=0) { Console.Write(“输入一个整数(输入0表示结束)”); n=int.Parse(Console.ReadLine()); if(n<0) continue; sum+=n; } Console.WriteLine(“所有整数之和={0}”,sum); } } 程序功能:计算输入的所有正数的和,输入0程序结束
  • 33. while (exp) { …… …… if(exp1) continue; …… …… if(exp2) break; …… …… }
  • 34. return:用于方法的返回,将控制权转移给方法的调用程序。程序主方法Main()中的return语句表示整个应用程序的退出点。 class Program { static void Main() { Console.WriteLine(“请输入一个正整数:”); ulong n; ulong.TryParse(Console.ReadLine(),out n); if(IsPrime(n)) Console.WriteLine(“{0}是一个素数”,n); else Console.WriteLine(“{0}不是一个素数”,n); } public static bool IsPrime(ulong n) { for(ulong i=2;i<=n/2;i++) if(n%i==0) return false; return true; } }
  • 35. goto:用于程序指令的无条件跳转,需预先在程序中声明标号,并在goto关键字后面指定该标号,将程序的控制权转移到标号之后的语句。
  • 36. class Program { static void Main() { start: Console.WriteLine("请输入身份证号码:"); string s = Console.ReadLine(); if (s.Length != 15 && s.Length != 18) goto error; if ((s.Length == 15 && s[14] % 2 == 0) || (s.Length == 18 && s[16] % 2 == 0)) Console.WriteLine("性别为女"); else Console.WriteLine("性别为男"); return; error: Console.WriteLine("长度不正确"); goto start; } }
  • 37. goto语句是典型的非结构化控制语句,在程序中应限制使用。使用goto语句的程序完全可以修改为更为合理的程序结构。 同学们尝试把上面的根据身份证号判断性别的程序中的goto语句去掉而实现同样的功能。
  • 38. C#中用于流程控制的关键字有: 选择结构:if、else、swith、case 循环结构:while、do、for、foreach 跳转结构:break、continue、return、goto 这其中较为复杂的是循环结构,灵活运用它可以实现许多高效的算法,希望同学们自觉多加练习。本章小结