飞道的博客

吐血整理:C#顺序、选择、循环结构用法与案例,这一篇就够了!

620人阅读  评论(0)

C#语言中用于结构化程序设计的三种基本结构是:顺序结构、选择结构、循环结构。本文详细整理了以上三种结构的用法,案例。


4.1 顺序结构

4.1.1 赋值语句

1.赋值语句

由一个赋值运算符构成的赋值语句。赋值语句的格式为:

变量 = 表达式;

格式中的“=”称为“赋值号”。

赋值语句的功能是把计算赋值号右边的“表达式”的值,并 赋给赋值号左边的“变量”。

例如: int age = 30;

注意:对于任何一个变量必须首先赋值,然后才能引用,否则,未赋初值的变量将不能参与运算。另外,赋值号两边的类型必须相同,或者符合隐式类型转换规则。

2. 复合赋值语句与连续赋值语句

(1) 复合赋值语句

复合赋值语句是使用+=、-=、*=、/=等运算符构成的赋值语句,这种语句首先需要完成特定的运算,然后再进行赋值运算操作。例如:

int x=5;
x+=6;
string s="abcd";
s+="efjh";

(2) 连续赋值语句

连续赋值语句是在一条语句中使用多个赋值运算符进行赋值的语句,这种语句可以一次为多个变量赋予相同的值。例如:

int x,y,z;
x=y=z=6;
string s1,s2,s3;
s1=s2=s3="efjh";

4.1.2 输入语句

通过计算机的外设把数据送到计算机内存的过程称为输入。C#语言的输入语句常用的有两种形式:

Console.Read();
Console.ReadLine();

输入可以是整型或字符串等,但布尔型不可以直接读入。
例如:

string strInput = Console.ReadLine();

Read语句和ReadLine语句不同之处在于输入数据到各变量之后,ReadLine自动换行,从下一行开始再输入数据。

4.1.3 输出语句

输出是将内存中的数据送到外设的过程。C#语言的输出语句有两种形式:

Console.Write(输出项);
Console.WriteLine(输出项);

其中<输出项>可以是常量、变量、表达式或字符串。
例如:

Console.Write("abcd");    //输出”abcd”
Console.WriteLine("abcd");  //输出”abcd”并换行
Console.WriteLine("{0}; {1}; {2}",10,20,30);  //输出“10;20;30”并换行

Write和WriteLine的区别:Write语句是输出项输出后不换行,光标停留在最后一项后;WriteLine语句按项输出后,自动换行,光标则停留在下一行的开始位置。

4.1.4 复合语句

复合语句是由若干语句组成的序列,语句之间用分号“;”隔开,并且以 { } 括起来,作为一条语句。复合语句的一般形式:

{
语句1;
语句2;
……
语句n;
}

4.1.5 应用实例

【例4-1】 编写一个控制台应用程序,输入圆的半径值,求圆的周长和面积,结果如图4-1所示。

(1)Parse方法

Parse方法可以将特定格式的字符串转换为数值,格式为: 数值类型名称.Parse(字符串型表达式)

例如:int x=int.Parse("123");

(2) ToString方法

ToString方法可将其他数据类型的变量值转换为字符串类型,格式为:
变量名称.ToString( )
例如:int x=123; string s=x.ToString( );

**【例4-2】**使用标签与文本框实现输入与输出。输入两个数,并实现两数的算术运算:和、差、积、商,结果如图所示。

4.2 选择结构

4.2.1 if条件语句

1.单分支if语句

单分支if语句的格式为:

 if (布尔条件表达式)
     { 内嵌语句序列1; }

说明:若布尔表达式的为真时,程序执行内嵌语句序列。如果内嵌语句序列中为多个执行语句,则要使用花括号({…})组合为一个语句块。

2. 双分支if语句

双分支if语句的格式为:

 if (布尔条件表达式)
     { 内嵌语句序列1; }
 else
     { 内嵌语句序列2; }

说明:

① 若布尔表达式的值为真时,程序执行内嵌语句序列1,否则执行内嵌语句序列2。

② if…else语句中,内嵌语句序列1和内嵌语句序列2可以是简单语句,也可以是复合语句。如果内嵌语句序列中为多个执行语句,则要使用花括号({…})组合为一个语句块。

说明:

(1)首先判断表达式1,如果其值为true,则执行if语句块中的语句,然后结束if语句。

(2)如果表达式1的值为false,则判断表达式2,如果其值为true,则执行else if语句块中的语句,然后结束if语句。

(3)如果表达式2的值为false,再继续往下判断其他表达式的值。

(4)如果所有表达式的值都为false,则执行else语句块中的语句,然后结束if语句。
对于多层if嵌套结构,要特别注意if与else的配对关系,一个else必须与一个if配合,按照就近原则进行匹配。

【例4-3】 某商店为了吸引顾客,采取以下优惠活动:所购商品在1000元以下的,打9折优惠;所购商品多于1000元的,打8折优惠。试编程实现该优惠功能。

分析:该问题属于数学分段函数问题,当所购商品总额<1000元时,打折后的商品总额为所购商品总额0.9;当所购商品总额>1000时,打折后的商品总额为所购商品总额0.8。

【例4-4】 将百分制成绩转换为五分制成绩。转换标准如下:90分以上为“优秀”,80分以上为“良”,70分以上为 “中”,60分以上为“及格”,60分以下为“不及格”。

【例4-5】 设计一个判断属相的程序,输入0 ~ 11的整数,判断其对应的十二生肖。

【例4-6】 设计一个学生成绩输入程序。要求两个文本框不能为空且成绩应在0 ~ 100之间,单选按钮必须有一个被选择。用户输入了合法数据并单击”确定”按钮后的程序运行界面如图所示。单击”清除”按钮可清除上次输入的所有数据,并恢复两个单选按钮都处于未选中状态。

【例4-7】 某航空公司规定在旅游的旺季7~9月份,如果订票数超过20张,票价优惠15%,20张以下优惠5%;在旅游的淡季1~5月份、10月份、11月份,如果订票数超过20张,票价优惠30%,20张以下优惠20%;其他情况一律优惠10%。试设计程序,根据月份和订票张数决定票价的优惠率,程序运行界面如图

4.2.2 switch结构

一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。

C# 中 switch 语句的语法:

switch(expression){
   
    case constant-expression  :
       statement(s);
       break; 
    case constant-expression  :
       statement(s);
       break; 
  
    /* 您可以有任意数量的 case 语句 */
    default : /* 可选的 */
       statement(s);
       break; 
}

switch 语句必须遵循下面的规则:

  • switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。
  • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
  • case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
  • 不是每一个 case 都需要包含 break。如果 case 语句为空,则可以不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
  • C# 不允许从一个开关部分继续执行到下一个开关部分。如果 case 语句中有处理语句,则必须包含 break 或其他跳转语句。
  • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
  • C# 不支持从一个 case 标签显式贯穿到另一个 case 标签。如果要使 C# 支持从一个 case 标签显式贯穿到另一个 case 标签,可以使用 goto 一个 switch-case 或 goto default。
 switch结构:

    Console.WriteLine("输入一个数:");

    double var1 = Convert.ToDouble(Console.ReadLine());    ///读取键盘输入的数

    switch(    (int)(var/10)    )

    {
   

            case 9: Console.WriteLine("优秀");break;

            case 8:

            case 7:Console.WriteLine("良好");break;

            case 6:Console.WriteLine("及格");break;

            case var/10<6:Console.WriteLine("不及格");break;

            default:Console.WriteLine("输入错误");break;

    }    

4.3 循环结构

C#中的循环结构有几种:

• for循环
• while循环
• do…while循环
• foreach循环

支持用 break 来退出循环,用 continue 来跳过本次循环进入下一次循环。foreach循环用于处理数组,下一章介绍。

4.3.1 for循环语句

1. for语句的语法格式

for (表达式1; 表达式2; 表达式3)
{ 循环语句序列; }

功能:表达式1用于参与循环条件变量的初始化,该表达式仅执行一次;表达式2为条件判断表达式,即每次循环开始之前,判断该表达式是否成立,如果成立,进入下一次循环,否则,循环结束;表达式3用于参与循环条件变量的运算,一般为递增或递减的循环计数器。

说明:

  • 表达式1、表达式2、表达式3是可选的,但应该注意避免死循环的发生。
  • 如表达式2省略,并且不采用转移语句,会导致死循环的发生。
  • 可以在循环体中的任何位置放置break语句来强制终止for循环(随时跳出for循环)。

2. for循环语句的使用

【例4-8】 使用for语句计算1+2+3+…100。

class Program
    {
   
        static void Main(string[] args)
        {
   
            int sum; 
            sum=0;
            for(int k=1;k<=100;k=k+1)
            {
   
                sum=sum+k; 
            } 
            Console.WriteLine("从1加到100值为"+sum.ToString());
        } 
    }

4.3.2 whlie、do…while语句

1. while语句

(1)while循环语句的语法格式:

while (条件表达式)
{ 语句序列; }

while循环的执行过程:

首先计算条件表达式的值,如果为真(True),则执行后面的循环体,执行完后,再开始一个新的循环;如果为假(False),则终止循环,执行循环体后面的语句。

对while循环的有关说明如下:

① 条件表达式是一个具有boolean值的条件表达式,为循环的条件。

② 作为循环体的语句序列可以是简单语句、复合语句和其他结构语句。

③ 可以在循环体中的任何位置放置break语句来强制终止while循环(随时跳出while循环)。

④可以在循环体中的任何位置放置continue语句,在整个循环体没有执行完就重新判断条件,以决定是否开始新的循环。

(2)while循环语句的使用

在while循环语句中, while是关键字,控制while语句的条件表达式包含在括号内,括号后面的是当条件表达式值为真时应执行的循环体。循环体中应包含对条件表达式的修改,例如:

int i = 0;       //定义一个int类型的变量
while (i < 5)    //判断while条件
{
   
Console.WriteLine(i);    //输出结果
i++;        //i 加1
}

程序段中就包含了对循环控制变量i的修改(i++).

2. do… while语句

(1) do… while的语法格式

do
{ 语句序列; }
while (布尔条件表达式);

功能:当程序执行到do区域的时候,就进入了循环体,第一次进入这个循环体没有进行任何判断,就可以执行这个循环体的所有语句,然后进入while条件判断,如果条件符合,再次进入do区域,否则退出循环。

(2) do… while的使用

do语句后面是一个循环体,后面紧跟着一个while关键字。控制循环执行次数的条件表达式位于while关键字的后面。条件表达式在循环体执行后再判断,循环体执行一次(至少一次)或若干次。例如:

int i = 3;                    //定义一个整型变量
do
{
     Console.WriteLine(i);    //输出结果
  i++;                    //i加1
} while (i < 3);                //判断while条件

程序段中定义了整型变量i,它的值为3。当程序执行到do区域的时候,就进入了循环体,第一次进入这个循环体没有进行任何判断,就可以执行这个循环体的所有语句,然后进入while条件判断,如果条件符合,再次进入do区域,否则退出循环。

【例4-9】 使用do…while语句实现1+2+3+…100。

static void Main(string[] args)
        {
   
            int sum;
            sum = 0;
            int k = 1;
            do
            {
   
                sum = sum + k;
                k = k + 1;
            }
            while (k <= 100);
            Console.WriteLine("从1加到100值为" + sum.ToString());
        }

4.3.3 循环嵌套

一个循环(称为”外循环”)的循环体内包含另一个循环(称为”内循环”),则称为循环的嵌套。

内循环中还以包含循环,形成多层循环(循环嵌套的层数理论上无限制)。

三种循环(while循环、do…while循环、for循环)可以互相嵌套。

使用跳转语句,可以使程序执行跳转到程序中其它部分。C#中提供四种转移语句:goto语句、break语句、continue语句、return语句。

C#中提供四种转移语句:

  • goto语句。可以将程序控制直接转移给标签制定的语句。
  • break语句。只能在循环体内和switch语句体内使用break语句,使运行的程序立刻退出它所在的最内层循环或者退出一个switch语句。
  • continue语句。仅从当前的循环迭代中退出,然后执行下一次迭代循环。只能用在while语句、do-while语句、for语句、或者foreach语句的循环体内。
  • return语句。用于指定函数返回的值。return语句只能出现在函数体内。

【例4-10】 使用计数器循环语句(for)了解continue语句的使用,要求输出大于5的数 。

4.3. 4 应用实例

【例4-11】 计算n!,假设n=10。

分析:该例实现阶乘的运算。可以使用循环语句,通过改变乘数的值来实现连乘。

static void Main(string[] args)
        {
   
            int sum, k;
            sum = 1;
            for (k = 1; k <= 10; k++)
            {
   
                sum = sum * k;
            }
            Console.WriteLine(sum.ToString());
        }

【例4-12】 编写一个控制台应用程序,求300以内的素数,程序的运行结果如图所示。

static private Boolean IsSuShu(int x)
        {
   
            Boolean Yes = true;
            for (int i = 2; i <= Math.Sqrt(x); i++)
            {
   
                if((x % i)==0)
                {
   
                    Yes = false;
                 }
            }
            return Yes;    
        }
static void Main(string[] args)
        {
   
            for (int i = 2; i < 300; i++)
            {
   
                if (IsSuShu(i) == true)
                {
   
                    Console.Write(i.ToString());
                    Console.Write("  ");
                }
            }
            Console.ReadKey();
        }

【例4-13】 设有一张厚为X mm,面积足够大的纸,将它不断地对折。试问对折多少次后,其厚度可达珠穆朗玛峰的高度(8844.43 m)。

设对折后纸的厚度为h mm,计数器为n。在没有对折时,纸厚为X mm,每对折一次,其厚度是上一次的2倍,在未到达8844.43 m时,重复对折。在程序中,纸的厚度就是对折后纸的厚度,所以用一个变量h。

static void Main(string[] args)
        {
   
            int n = 0;
            float h;
            Console.Write("请输入纸的厚度:\n");
            h = float.Parse(Console.ReadLine());
            while (h < 8844430)
            {
   
                n = n + 1;
                h = 2 * h;
            }
            Console.WriteLine( n.ToString());
         }

【例4-14】 编程实现九九乘法表。

分析:使用两重循环,利用循环变量作为被乘数和乘数,就可方便的解决问题。外层循环变量i的取值从1~9,内层 循环变量k的取值也是1~9。

static void Main(string[] args)
        {
   
            string s = "";
            int sum;
            for (int i = 1; i < 10; i = i + 1)
            {
   
                s = "";
                for (int k = 1; k <= i; k = k + 1)
                {
   
                    sum = k * i;
                    s = s + k.ToString() + "×" + i.ToString() + "=" + sum.ToString() + ";";
                }
                Console.WriteLine(s);
        }


转载:https://blog.csdn.net/lucky51222/article/details/115862224
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场