C#复习(一些稍微需要注意的点,不系统也不全面)

突然翻到之前写的这个,是第一次用CSDN的时候整理的,想着也不知道能不能有点用,不如现在发出来吧😂

——————————分割线——————————

好的,记录一下第一次用这个东西

一、基础知识

(一)理论基础

1. C#语言的开发环境:.NET Framework,简称为.NET,也叫.NET框架。
2. .NET Framework:主要有两个组件,公共语言运行时和.NET Framework类库。公共语言运行时是.NET Framework的基础。
3. 命名空间
(1) 定义与理解:.Net FrameWork中的类都包含在命名空间里面。命名空间使用关键字namespace表示,它提供了一个组织相关类和其他类型的方式,它是一种逻辑组合,而不是物理组合。可以将命名空间理解为组,组中包含的是具有相同或类似功能的类。
(2) 定义规则:
在这里插入图片描述(3) 一个程序集可以包含多个命名空间,一个命名空间也可以在多个程序集中使用。

(二)语法基础

1. 转义字符
\r 回车
\n 换行
\a 蜂鸣警告
2. 变量
变量命名规则:变量名称只能由字母、数字和下划线组成;不能以数字开头;不要使用关键字。
3. 常量
使用const语句,必须设置初始值,不允许修改。比如:(让我来试一下这个代码块!

const double PI=3.1415926;

4. 输入

int x = Console.ReadLine();//读取一行字符串变量
Console.Read();//等待键入(暂停程序)

5. Math的几种方法
Math.Round (x) — 四舍五入
Math.Abs(x) — 绝对值
Math.Sqrt(x) — 开平方
Math.Pow(x,y) — xy
Math.exp() — ex
Math.Min — 最小值
Math.Max — 最大值
Math.Sin — 三角函数
注:Math类的常数:Math.PI 、Math.E (2.718)
6. 数据转换的几种方式
(1)隐式转换:类型A,取值范围完全包含在类型B中,则可转换为B,即小转大。
(2)显式转换:()里表示要转换的类型,存在数据丢失。
注:可使用checked,检测是否有数据的溢出:

   short  a = 258;
   byte  b = checked((byte)a);
   Console.WriteLine("{0}",b);
   
//另一种方法
   try
   {
   ....
   }catch(Exception)

(3)Convert转换

int a = Convert.ToInt32("128");
//a=128,数值字符串转int
Convert.ToDouble//数值字符串转double
Convert.ToSingle//数值字符串转float
Convert.ToChar//整型数转char
Convert.ToString//任意数值转为字符串

(4)特殊(数值和字符串之间的转化):

string a = "12";
double b = double.Parse(a);//字符串转化为数值
float c =123.456f;
a = c.ToString();//数值转化为字符串

7. 运算符
(1)算数运算符:
“ / ” 除法运算符:若为两个整数相除,结果将得到整数部分,不向上向下取。
注:a++和++a的区别:a++为先自增,++a为后自增。
(2)逻辑运算符,见下表:
在这里插入图片描述
注:&和&&都表示“并且”,区别在于:&需要计算并判断前后两个操作数; &&遇到第一个操作数false时就不处理第二个数, 因此也称为“短路与”。| 和 | | 同理。
(3)赋值运算符(一个奇奇怪怪的东西,鬼知道题库会不会出…):
在这里插入图片描述

(4)条件运算符里的三元运算符:逻辑表达式 ? 表达式1 : 表达式2。逻辑表达式为真,运算结果为a;否则为b。

举个栗子:如果变量x的值大于等于10并且小于等于12,则计算结果为字符串”冬天“,否则为”其它”,计算结果保存到变量y中。

string y = (x>=10) && (x<=12) ? "冬天" : "其它";

(5)运算符的优先级:
在这里插入图片描述

二、程序基本控制结构

(一)顺序结构

(二)分支结构

1. if 语句
照常使用,别忘了有一个多分支的结构 else if 。
一个简单的例题:判断输入的年份是否闰年。闰年能被400整除,或者能被4整除但不能被100整除。

int a = Convert.ToInt32(Console.ReadLine());
if(a % 400 == 0)
    Console.WriteLine("是闰年");
else 
{
    if(a % 4 == 0 & a % 100 != 0)
        Console.WriteLine("是闰年");
    else
        Console.WriteLine("不是闰年");
}

2. Switch 语句:

基本语法:
switch(表达式)
{
    case 常量表达式1:
         语句序列1;
         break;
    case 常量表达式2:
         语句序列2;
         break;   
    ...
    default:            //
         语句序列n+1; 
         break; 
}

注:switch是一个多分支结构。通常情况下,每个case分支下必须有break语句,如果没有会直接进行下一个语句。可以没有default语句。

那么举个栗子吧!用switch语句实现,输入学生成绩,判断成绩等级。
100-90:优秀;89-80:良好;79-70:中等;69-60:较差;60以下:不及格;

Console.Write("请输入成绩:");
float x = Convert.ToInt32(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;
}

注:switch 语句中的表达式和常量表达式的运算结果均为固定值,因此,switch 语句只能判断离散值,如 2,3,4 等,而不能做类似 x>2 的判断。所以该题用 (int)x/10 的形式实现转化。

p.s.加一段课本上习题的代码,困惑了我好久,来来来加强一下理解(捂脸)

int a = 2, b = 7, c = 5;
switch (a > 0)
{
    case true:
        switch (b < 0)
        {
            case true: 
                Console.Write("@");
                break;
            case false:
                Console.Write("!");
                break;
         }
         break;
    case false:
        switch (c == 5)
        {
            case true:
                Console.Write("*");
                break;
            case false:
                Console.Write("#");
                break;
            default:
                Console.Write("#");
                break;
         }
         break;
    default:
         Console.Write("&");
         break;
}       

好的,解释一下,这个玩意儿呢,我理解错的点在于我觉得switch的条件不满足就进不去,but,是根据里面的条件来判断true or false然后选择进哪一个case,对,就是这样,,

(三)循环结构

1. For 语句:
基本语法格式:

for(初始化表达式;条件表达式;迭代表达式)
{
    循环体语句;
}

在这里插入图片描述
注:别忘了还有一个循环嵌套,用 break 可以跳出循环。

2. While语句:
基本语法格式:

while (条件表达式)
{
    循环体;
}

注:要有初始循环的条件,也要有结束循环的条件。

好的,那来看一个经典的例题吧(真好哈哈哈):Fibonacci数列。有一对兔子,从出生后3个月起每个月都生一对兔子。小兔子长到第3个月又生一对兔子。那么第30个月,有多少对兔子?
分析一下:在这里插入图片描述

int a = 1;//第1个月
int b = 1;//第2个月
int c = 0;//兔子总数
int i = 3;//第i个月
while(i<=30)
{
    c = a + b;
    Console.WriteLine("第{0}月有{1}只",i,c);
    a = b;
    b = c;
    i++
}

3. Do…While语句:
基本语法格式:

do
{
    循环体;

} while (条件表达式)

4. 跳转语句:
(1)break 语句:用在循环体中,用于结束循环。
(2)continue 语句:用于循环体中,作用是结束本次循环的执行,开始下一次循环
举个栗子!:众筹项目,在200人内需筹款100万,要求:
1)在得到每一笔众筹款时显示已筹到款项的总数;
2)当众筹额超过100万时结束众筹活动;
3)每人限10万以内。若超10万则输出“超过10万,无效数据”,并进入下一次筹集。
4)用两种方法实现。

//用for循环实现:
float sum = 0,amount,n = 0;
for(int i = 1 ; i <= 200 ; i++)
{
    Console.Write("请输入筹集资金(万):");
    amount = Convert.ToSingle(Console.ReadLine());
    if(amount > 10)
    {
        Console.WriteLine("超过10万,无效数据");
        continue;
    }
    n++;
    sum += amount;
    Console.WriteLine("第{0}笔:当前众筹资金:{1}万元\n",n,sum);
    if(sum>1000)
    {
        Console.WriteLine("众筹活动结束。");
        break;
    }
} 

//用While循环
float sum = 0,amount=0,i=0;
while (true)
 {
    Console.Write("请输入筹集资金:");      
    amount = Convert.ToSingle(Console.ReadLine());
    if (amount>10)
    {
        Console.WriteLine("超过10万,无效数据");
        continue;
    }
    i++;  
    sum += amount;
    Console.WriteLine("第{0}笔:当前众筹资金:共{1}万\n", i, sum);
    if (sum >= 100)
    {
       Console.WriteLine("众筹活动结束。");
       break;
    }                
 }

(3)goto 语句
goto语句可以实现代码的直接跳转。在C#中,允许给代码加上标签,这样就可以使用goto语句直接跳转到相应的标签行。
标签的定义:标签名:
goto语句的用法:goto 标签名;
好的,这种奇怪的东西必然要举个栗子(捂脸):计算1+2+3+…+100的值。

int i = 1,sum = 0;
x1:
    sum += i;
    i++;
    if(i > 100)   
        goto x2;
    goto x1;
x2:
    Console.WriteLine("1+2+3+...+100={0}",sum);
    Console.ReadKey(); 

再复习一下几个简单的循环的作业(捂脸)
#1 九九乘法表:

for (int i = 1; i <= 9; i++)
{
    Console.WriteLine();
    for (int j = 1; j <= 9; j++)
    {
        if (i >= j)  
            Console.Write("{0}*{1}={2}  ", j, i, i * j);                  
    }
}

就能得到这个效果:
在这里插入图片描述
emmmm…接下来,讲一下怎么生成随机数(我也不知道为什么这个知识点在这里出现hhh)

//产生一个1到100之间的随机数。
Random ran = new Random();
int num = ran.Next(1,100);

三、数组和字符串

数组

1. 一维数组

//数组的声明:数据类型[] 数组名;
int[] score;
string[] name;

/* 数组的初始化:1.数组名=new 数组类型[数组元素个数];
                2.数组名=new [数组元素个数]{数组元素列表}  */
score=new int[5]{1,2,3,4,5};

//声明的同时初始化并赋值:
int[] a=new int[3]{1,2,3};
char[] a=new char[]{'i','l','o','v','e','c','#'}
string[] str={ "I","love","c","#"};//注意单引号和双引号的区别

//数组的引用:数组名[下标];  注意!!下标从0开始!
float[] score=new float[3];
score[0]=97;
score[1]=89;
score[2]=66

注:bool 类型默认初值为 false,char 类型默认初值为 ‘a’ ,string 类型默认初值为null。

好的,来看几个例题吧!
编写7选3抽奖程序。要求:
1)产生3个随机数,大于等于1且小于等于7 。
2)这3个随机数保存到数组中。
3)这3个数不能重复。

//用do...while循环
int max = 8,num = 3;
Random ran = new Random();
int[] a = new int[num];
bool same;
int b,index = 1;
a[0] = ran.Next(1,max);
do
{
    b = ran.Next(1,max);
    same = false;
    for(int i = 0; i < index; i++)
    {
        if(b == a[i])
        {
            same = true;
            break;
        }
    }
    if(!same)
    {
        a[index] = b;
        index++;
    }
}while(index < num);
Console.WriteLine("{0} {1} {2}",a[0],a[1],a[2]);

//用for循环

字符串

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值