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+含义)
@梦幻泡沫
来源:CSDN
作者:Mr_Singto
链接:https://blog.csdn.net/Mr_Singto/article/details/104253270