C#基础之流程控制语句A

一笑奈何 提交于 2020-02-11 01:29:18

C#基础之流程控制语句A

结构化程序设计的三个基本流程包括:
顺序、分支、循环;
以下内容介绍三种基本流程并利用这三种流程控制语句实现——屏保程序、自动出题并判分程序等内容。
拓展:
最简单的语句:方法调用语句及赋值语句,后面有各分号;
如:
System.Console.Write("hello world!"); //方法/函数调用
b = a>0 ? a : -a;
s = TextBox1.Text; //赋值语句
d = int.Parse(str); //函数调用及赋值
注意:在C#语言中没有表达式语句一说。例:2+3;不能够成为一条语句

一、分支语句——if语句

if语句格式:
if(条件表达式)
      语句块
else
      语句块
例:判断闰年——利用if语句
LeapYear.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
    class LeapYear
    {
        static void Main(string[] args)
        {
            int year;//定义一个整型年份变量
            Console.WriteLine("请输入要判断的年份:"); 
            string str = Console.ReadLine(); //由控制台输入要判断的年份(字符串类型——string)
            year = int.Parse(str);//将控制台输入的字符串类型(string)的转化为整型(int)
            if((year % 4 == 0 && year % 100 == 0)|| (year % 400 == 0))//判断是否为闰年
            {
                Console.WriteLine(year+"年是闰年!");//闰年
            }
            else
            {
                Console.WriteLine(year + "不是闰年!");//非闰年
            }
        }
    }
}

运行结果:
在这里插入图片描述

  • 注:书写代码时需要注意书面格式,特别是缩进。将后面的花括号去掉,再重新输一下,就会自动排版。其次,也可以按Ctrl + E + D (格式文档 )或者Ctrl + E + F (格式化选中部分)。

二、分支语句—— switch语句

switch语句格式:
switch(exp){
      case const1:
              statement1;
              break;
      case const2:
              statement1;
              break;
              …
      case constN:
              statementN;
              break;
[default: statement; break;]
}
例:成绩水平判定——switch语句
GradeLevel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
    class GradeLevel
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("请输入要评定的等级:(Input Grade Level)");
            String str = Console.ReadLine();//输入要评定的字符
            char level = char.Parse(str);  // char level = (char) Console.Read(); 将控制台输入的字符串(string)转化为char型
            switch(char.ToUpper(level))  //将char字符转化为大写
            {
                case 'A':
                    Console.WriteLine(level + " is  85~100");
                    break;
                case 'B':
                    Console.WriteLine(level + " is  70~84");
                    break;
                case 'C':
                    Console.WriteLine(level + " is  60~69");
                    break;
                case 'D':
                    Console.WriteLine(level + " is  < 60");
                    break;
                default:
                    Console.WriteLine("Input error");
                    break;
            }
        }
    }
}

运行结果:
在这里插入图片描述

  • 注:
    switch语句与C++不同之处:
    变量除了整型、枚举型,还可以用字符串;
    不能随便贯穿,必须有break;(除非几个Case连起来,中间没有别的语句)

三、小程序的实现

1.屏保程序

重点:利用if语句编写而成。
步骤:打开Visual Studio 2019,创建Windows窗体应用程序
首先,修改Form1窗体的属性:
窗体背景颜色——backcolor : 黑色
窗体边框——FormBorderStyle:None //没有边框
然后,建立公共控件(label)标签:
标签文本——Text:睡觉?学习 //飘屏标签
标签字体——Font:楷体,一号
标签字体颜色——ForeColor:蓝色
最后,创建计时器(timer),修改其属性:
是否起作用——Enabled:True
时间间隔——Intervel:100
代码编写,创建Timer计时器后,形成计时器触发函数(timer1_Tick),代表当每隔一定的时间间隔,窗体中的变化。
代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace C.protect
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        int move_X = 10; //每次触发X方向移动距离
        int move_Y = 10; //每次触发Y方向移动距离
        
        
        private void timer1_Tick(object sender, EventArgs e)
        {
            this.label1.Left += move_X; //文本所处的X向位置
            this.label1.Top += move_Y; //文本所处的Y向位置
            if (this.label1.Left<0 ||this.label1.Left + this.label1.Width > this.Width) //当X向距离小于0或者大于整个窗体宽度时(即触碰到左右边界时反向移动)
            {
                move_X = -move_X;
            }
            if (this.label1.Top < 0 || this.label1.Top +this.label1.Height >this.Height)//当Y向距离小于0或者大于整个窗体高度时(即触碰到上下边界时反向移动)
            {
                move_Y = -move_Y;
            }        
        }
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            Application.Exit();//程序结束
        }
    

运行结果:
在这里插入图片描述

  • 注:屏保的使用——程序编译之后,将项目中形成的C.protect.exe文件复制到电脑C:\windows\system32中并将其后缀名改为.scr。
    C:\windows\system32\xxx.scr
2.自动出题判分程序

重点:if语句与switch语句编写而成。
步骤:创建四个标签(label),一个文本框(textBox),两个按钮(button),一个列表框(listBox)等控件并修改其属性。将控件进行命名(即修改其属性中的Name属性,使其更易展示给用户)。修改控件的Name、Text等属性。
编写按钮触发函数btnNew_Click()——即点击出题按钮,触发该函数。
编写按钮触发函数btnanswer_Click()——即点击判断按钮,触发该函数。
代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace C.protect
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        int number1, number2; //操作数
        String op; //操作符
        double result; //结果
        Random rnd = new Random();  //随机数

        private void btnnew_Click(object sender, EventArgs e)   //出题
        {
            number1 = rnd.Next(9) + 1;//从1~9随机取一个数,作为题目的操作数
            number2 = rnd.Next(9) + 1;//从1~9随机取一个数,作为题目的操作数
            int c = rnd.Next(4);//任取一个数,以此得到任意一个操作数
            switch (c) //判断操作数为
            {
                case 0:
                    op = "+";
                    result = number1 + number2;//得到结果
                    break;
                case 1:
                    op = "-";
                    result = number1 - number2;
                    break;
                case 2:
                    op = "*";
                    result = number1 * number2;
                    break;
                case 3:
                    op = "/";
                    result = number1 / number2;
                    break;
            }
            lblnumber1.Text = number1.ToString();//将第一个操作数(int型)转化为(String)字符串,赋予第一个标签文本 
            lblnumber2.Text = number2.ToString();//将第二个操作数(int型)转化为(String)字符串,赋予第二个标签文本 
            lblop.Text = op; //将操作符赋予标签文本
            txtresult.Text = "";//结果为空
        }

        private void btnanswer_Click(object sender, EventArgs e)  //判断
        {
            String str = txtresult.Text;//将文本转化为字符串(string型)
            if (str != null && str != "") //当文本框中输入的不为空,进行下一步操作
            {
                double d = double.Parse(str); //将文本中的结果转化为实数型
                string str1;//判断结果字符串形式输出
                if (d == result)
                {
                    str1 = number1 + op + number2 + '=' + result + '✳';//当输入答案正确时,判断结果
                }
                else
                {
                    str1 = number1 + op + number2 + '=' + result + '❌';//当输入答案错误时,判断结果
                }
                lstview.Items.Add(str1);//将判断结果展示到列表框中
            }
            else//当文本框中未输入结果
            {
                MessageBox.Show("请正确输入结果!");
            }
        }
    }
}

运行结果:
在这里插入图片描述
拓展:

  • 设置控件等Name属性时,进行【类型+含义】——匈牙利命名法
  • 按钮(btn+含义)、文本框(txt+含义)、标签(lbl+含义)、列表框(lst+含义)

@梦幻泡沫

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!