首页 > 编程语言 >c#基础

c#基础

时间:2024-05-23 21:29:37浏览次数:25  
标签:Console string nums c# 基础 int static WriteLine

c#基础

1.占位符:使用方法:先挖个坑,再填个坑

string name = “马兴龙”

cw(“我是{}”,name)

/*

● 交换两个变量的值
*/
int n1 = 10;
int n2 = 20;
Console.WriteLine("n1="+n1);
Console.WriteLine("n2=" + n2);
int temp = 0;
temp = n1;
n1 = n2;
n2 = temp;
Console.WriteLine("n1=" + n1);
Console.WriteLine("n2=" + n2);

2.接收用户的输入

● 接收用户输入

string name=Console.ReadLine();
Console.WriteLine("您的姓名是{0}",name);

Console.ReadKey();//让程序停在这个地方

Console.WriteLine("你喜欢吃什么水果");
string fruit = Console.ReadLine();
Console.WriteLine("我也喜欢吃{0}",fruit);
Console.ReadKey();

3.转义字符

\n:换行输出

\:输出一个英文半角的双引号

 Console.WriteLine("我想输出一个\"英文半角的双引号");

\t:相当于加一个tab键

\b:会把它前面输出的字段的一个字删除(退格键),放在两边无作用

\\:表示一个杠\(取消转义作用)

@符号

1.取消\在字符串中的转义作用

2.将字符串按照原格式输出

结构

        Student student = new Student();
        student.name = "马兴龙";
        student.age = 28;
        student.gender = '3';
        Console.WriteLine("{0}\n{1}",student.name,student.age);
    }
}
public struct Student
{
public string name;
public int age;
public char gender;

}

数组:一次性存储多个相同类型的变量

 *数组类型[] 数组名=new 数组类型[数组长度]
*/
int[] nums = new int[10];
int[] nums2 = { 1, 2, 3 };
string[] strs = new string[10];//初值null
//null和""空值不一样,null没开空间
bool[] bools = new bool[10];//初值为false
//通过循环赋值
for (int i = 0; i < nums.Length; i++) 
{
    nums[i] = i;
}
//通过循环取值
for (int i = 0;i < nums.Length;i++)
{
    Console.WriteLine(nums[i]);
}

 

案例:从一个整数数组里取出最大值,最小值,综合,平均值
*/
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//声明一个最大值和最小值
//若简单赋值为0,那么数组删去0后判断语句
//将不起作用最小值也会出现0,所以
//int max = 0;
//int min = 0;
//int sum = 0;
//int avg = 0;
//给数组的一个值,当作参照造物就会解决
int max = nums[0];
int min = nums[0];
int sum = 0;
int avg = 0;

 

//循环的让数组中的每个元素跟我最大值和最小值进行比较
for (int i = 0; i < nums.Length; i++)
{
//1代表数组中的当前循环的元素
//2代表数组中的每个元素
//如果数组当中循环道德这个元素,
//比我max还要打,则把当前这个元素,赋值给我的max
if (nums[i] > max)
{
max = nums[i];
}
if (nums[i] < min)
{
min = nums[i];
}
sum += nums[i];
avg =sum/nums.Length;
}
Console.WriteLine("最大值{0},最小值{1}",max,min);
Console.WriteLine("总和{0},平均值{1}",sum,avg);

 

 /*
  * 案例:从一个整数数组里取出最大值,最小值,综合,平均值

//int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8 };
//int sum = 0;
//for (int i = 0; i < nums.Length; i++)
//{
// sum += nums[i];
//}
//Console.WriteLine(sum);
//int[] nums = { -1, -2, -3, 0, 1, 2, 3 };
//for (int i = 0; i < nums.Length; i++)
//{
// if (nums[i] > 0)
// {
// nums[i] = nums[i] -1;
// }
// else if (nums[i] < 0)
// {
// nums[i] = nums[i] + 1;
// }
//}
//for (int i = 0; i < nums.Length; i++)
//{
// Console.WriteLine(nums[i]);
//}
/
/
string str = null;
string[] names = { "老马", "老宋", "老李", "老张" };
for (int i = 0; i< names.Length-1; i++)//把老张后的竖线删去
{
str += names[i] + "|";
}
Console.WriteLine(str + names[names.Length-1]);
Console.ReadKey();
*/

案例:首尾交换

//Array.Reverse(nums);//倒序反转

a b c d e 5个元素交换2次

a b c d e f

0 1 2 3 4 5

第一趟交换:a和f交换 0,5交换 i=0 length-1

第2趟交换:b和e交换 1,4交换 i=1 length-1-1

第3趟交换:c和d交换 2,3交换 i=2 length-1-2

。。。。。。。。。。。。。。。。。i=? length-1-i

 

//案例:讲一个字符串数组的元素书序进行反转
string[] names = { "我", "是", "好人" };
for (int i = 0; i < names.Length/2; i++)
{
    string temp = names[i];
    names[i] = names[names.Length - 1 - i];
    names[names.Length - 1 - i] = temp;
}
for (int i = 0;i < names.Length; i++)
{
    Console.WriteLine(names[i]);
}

冒泡排序:讲一个数组元素按照从小到大或从大到小进行排序

int[] nums = {9,8,7,6,5,4,3,2,1,0 };

第一趟比较:8,7,6,5,4,3,2,1,0,9 比较了9次 i =0,j=9

第二趟比较:7,6,5,4,3,2,1,0,8,9 比较了8次 i=1,j=8

第三趟比较:6,5,4,3,2,1,0,7,8,9 比较了7次 i=2,j=num.length-1-2

第四趟比较:5,4,3,2,1,0,6,7,8,9 交换了6次

。。。。。

9趟

Array.Sort(nums);//升序排列

//Array.Reverse(nums);//倒序反转

//降序的话,先sort再reverse;

for (int i = 0; i < nums.Length; i++)

{

Console.WriteLine(nums[i]);

}

int[] nums = { 9,8,7,6,5,4,3,2,1,0 };
for (int i = 0; i < nums.Length-1; i++) 
{
    for (int j=0;j<nums.Length-1-i;j++)
    {
        if (nums[j] > nums[j + 1])
        {
            int temp = nums[j];
            nums[j] = nums[j + 1];
            nums[j + 1] = temp;
        }
    }
}
for (int i = 0;i<nums.Length;i++)
{
    Console.WriteLine(nums[i]);
}
Console.ReadKey();

方法的调用

1.我们在Main()函数中,调用Test()函数,我们管Main()函数称之为调用者,管Test()函数称之为被调用者

1)传递参数

 static void Main(string[] agrs)
 {
     int a = 3;
     Test(a);
     Console.WriteLine(a);
 }
 public static void Test(int a)
 {
     a = a + 5;
 }

2)使用静态字段来模拟全局变量

//字段 属于类的字段
public static int _int = 5;
static void Main(string[] agrs)
{
int a = 3;
Test();
Console.WriteLine(_int);

}
public static void Test()
{
//a = a + 5;
}

如果调用者想要得到被调用者的值

--要有返回值

 static void Main(string[] agrs)
 {
 int a = 3;
 int res = Test(a);
 Console.WriteLine(res);

}
public static int Test(int a)
{
a = a + 5;
return a;
}

不管是形参或实参都是在内存中开空间。

 

    //比较两个数字的大小,返回最大的
    int a = 2;
    int b = 3;
    int res = GetMax(a, b);
    Console.WriteLine(res);
}
/// <summary>
/// 比较两个数字的大小,返回最大的
/// </summary>
/// <param name="a">第一个数</param>
/// <param name="b">第二个数</param>
/// <returns></returns>
public static int GetMax(int a,int b)
{
    int max = a > b ? a : b;//三元表达符是真输出a,是假输出b
    return max;
}

异常捕获

1.语法上没有错误,在程序运行的过程中,由于某些原因程序出现了错误,不能在正常运行

//将接收到的数据转换成int类型,当我们知道在写的代码

//会出现各种异常,你如果想要你的程序坚强一些,在你的

//代码中应该经常使用try-catch来进行异常捕获

//哪行代码有可能出现异常,你就踹他一脚

让代码满足某些条件去执行的话,使用bool类型

如下列代码;

在Main函数中定义一个布尔类型 b赋值为true

在catch中将 b修改为flase

通过if语句判断如果b == true 证明没有出现异常 则打印输出

number*2,如果b == flase,证明出现异常,走了catch分支

则不输出

 int number = 0;
 bool b = true;
 Console.WriteLine("请输入一个数字:");
 try {
      number = Convert.ToInt32(Console.ReadLine());

}
catch
{
Console.WriteLine("输入的内容不能够转换成数字");
b= false;
}

if (b==true)
{
Console.WriteLine(number * 2);
}
Console.ReadKey();

变量的作用域:

变量的作用域就是你能够使用到这个变量的范围

变量的作用域一般从声明它的那个括号开始到那个括号所对应的结束的括号结束

在这个范围内,我们可以访问并使用变量,超出这个范围就访问不到了

方法的注意事项

方法的功能要单一

方法中最忌讳的就是提示用户输入

 

    /*
     * 1.读取输入的整数
     * 多次调用(如果用户输入的是数字,则返回,否则提示用户重新输入)
     */
    Console.WriteLine("请输入一个数字");
    string input=Console.ReadLine();
    int number = GetNumber(input);
    Console.WriteLine(number);
    Console.ReadKey();
}
/// <summary>
/// 这个方法需要判断用户的输入是否是数字
/// 如果是数字,则返回
/// 如果不是数字,提示用户重新输入
/// </summary>
public static int GetNumber(string s)
{
    while (true)
    {
        try
        {
             int number = Convert.ToInt32(s);
            return number;
        }
        catch
        {
            Console.WriteLine("输入有误!!!");
            s= Console.ReadLine();//如果输入有误,
                                  //就会把输入重新输入的值赋给s,
                                  //直到输入正确为止
        }
    }
}

方法练习

* 只允许用户输入y或n,请改成方法

*/

static void Main(string[] agrs)
{
/*
* 只允许用户输入y或n,请改成方法
*/
Console.WriteLine("请输入yes或者no");
string str = Console.ReadLine();
string result = IsYesOrNo(str);
Console.WriteLine(result);
Console.ReadKey();

}
public static string IsYesOrNo( string input)
{
while (true)
{
if (input "yes"||input"no")
{
return input;
}
else
{
Console.WriteLine("只能输入yes或者no,请重新输入");
input = Console.ReadLine();
}
}
}

计算输入数组的和 int GetSum(int[] nums)

/// <summary>

/// 计算输入数组的和 int GetSum(int[] nums)

/// </summary>

/// <param name="nums">要求总和的数组</param>

/// <returns>返回这个数组的总和</returns>

    //计算输入数组的和 int GetSum(int[] nums)
    int[] nums = { 1, 2, 3, 4, 5 };
    int result = GetSum(nums);
    Console.WriteLine(result);
}

/// <summary>
/// 计算输入数组的和 int GetSum(int[] nums)
/// </summary>
/// <param name="nums">要求总和的数组</param>
/// <returns>返回这个数组的总和</returns>
public static int GetSum(int[] nums)
{
int sum = 0;
for (int i = 0;i<nums.Length;i++)
{
sum += nums[i];
}
return sum;
}

方法的高级参数

out参数

//写一个方法,求一个数组中的最大值,最小值,总和,平均值

    int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8 };
    //将要返回的4个值,放到一个数组中返回
    //int[] res = GetMaxMinSumAvg(numbers);
    //Console.WriteLine("最大值为{0},最小值为{1}" , res[0], res[1]);
    //Console.WriteLine("总和为{0},平均值为{1}", res[2], res[3]);
    int max = 0;
    int min = 0;
    int sum = 0;
    int avg = 0;
    bool b;
    string s;
    Test(numbers,out max,out min,out sum,out avg,out b,out s);
    Console.WriteLine(max);
    Console.WriteLine(min);
    Console.WriteLine(sum);
    Console.WriteLine(avg);
    Console.WriteLine(b);
    Console.WriteLine(s);
}
/// <summary>
/// 当在一个方法中返回多个不同类型值的时候
/// 可以用out参数,out参数就侧重于在一个方法中可以返回
/// 多个不同类型的值
/// </summary>
/// <param name="nums"></param>
/// <returns></returns>
public static int[] GetMaxMinSumAvg(int[] nums)

{
int[] res = new int[4];//声明长度为4的数组
//假设res[0]最大值,res[1]最小值
//res[2]总和res[3]平均值
res[0] = nums[0];
res[1] = nums[0];
res[2] = 0;
string name = "马兴龙";
bool b = true;
for (int i = 0; i < nums.Length; i++)
{
//如果当前循环到的元素比我假定的最大值还大
if (res[0] < nums[i])
{
//将当前循环到的元素赋值给我的最大值
res[0] = nums[i];
}
if (res[1] > nums[i])
{
//最小值
res[1] = nums[i];
}
//总和
res[2] += nums[1];
}
//平均值
res[3] = res[2] / nums.Length;
return res;
}
//out方法
//方法void不能有返回值,但out可以使可以有多余的返回的值
public static void Test(int[] nums,out int max,out int min,out int sum,out int avg,out bool b,out string s)
{
//out参数要求在方法的内部必须为其赋值
max = nums[0];
min= nums[0];
sum = 0;
b = true;
s = "mxl";
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] > max)
{
max = nums[i];
}
if (nums[i] < min)
{
min = nums[i];
}
//总和
sum += nums[i];
}
avg = sum / nums.Length;
}

out参数做登陆

分别的提示用户输入用户名和密码

//你写一个方法来判断用户输入的是否正确

//返回给用户一个登陆结果,并且还要单独的返回给用户

//一个登陆信息

//如果用户名错误,除了返回登陆结果之外,还要返回一个

//"用户名错误","密码错误"

 

    Console.WriteLine("请输入用户名: ");
    string userName=Console.ReadLine();
    Console.WriteLine("请输入密码: ");
    string usepwd=Console.ReadLine();
    string msg;
    bool b = IsLogin(userName, usepwd, out msg);
    Console.WriteLine("登陆结果{0}:",b);
    Console.WriteLine("登录信息{0}:",msg);
}
public static bool IsLogin(string name, string pwd, out string msg)
{
    if (name == "admin" && pwd == "888888")
    {
        msg = "登录成功";
        return true;
    }
    else if (name == "admin")
    {
        msg = "密码错误";
        return false;
    }
    else if (pwd=="888888")
    {
        msg = "用户名错误";
        return false ;
    }
    else
    {
        msg = "未知错误";
        return false;
    }
}

int.TryParse的具体实现,字符串转换成int类型,转换成功后返回bool类型

//bool b = int.TryParse("123", out num);

//Console.WriteLine(num);

//Console.WriteLine(b);

 static void Main(string[] agrs)
 {
     //int num;
 string s = "123aaa";
 int result;
 bool b = MyTryParse(s, out result);
 Console.WriteLine("转换信息: {0} ",b);
 Console.WriteLine("转换结果: {0} ",result);

}
public static bool MyTryParse(string s, out int result)
{
//将s转换成int类型
result = 0;
try
{
result = Convert.ToInt32(s);
return true;
}
catch
{
return false;
}
}

ref参数:能够将一个变量带入一个方法中进行改变改变完成后,再将改变后的值带出方法

好处:不需要再写返回值

要求:再方法外必须为其赋值,在方法内可以不赋值

    //使用方法来交换两个int类型的变量
    int n1 = 10;
    int n2 = 20;
    Replace(ref n1, ref n2);
    Console.WriteLine("n1 = {0}", n1);
    Console.WriteLine("n2 = {0}",n2);

}
public static void Replace(ref int n1,ref int n2)
{
int temp = n1;
n1 = n2;
n2 = temp;
}

params参数:可变参数,将实参列表中跟可变参数数组类型一致的元素都处理为数组中的元素

params可变参数必须是形参列表中的最后一个参数

一个参数列表中只能有一个params可变参数

    //int[] s = { 99, 88, 77 };
    Test("马兴龙",99,88,77,22);
}
public static void Test(string name, params int[] score)
{//可变参数数组
    int sum = 0;
    for (int i = 0; i < score.Length; i++)
    {
        sum += score[i];
    }
    Console.WriteLine("{0}这次考试的总成绩是{1}", name, sum);
}
    
    int result = GetSum(1, 3, 5, 67, 8, 4, 1);
    Console.WriteLine(result);
}
public static int GetSum(params int[] n)
{
    int sum = 0;
    for (int i = 0; i < n.Length; i++)
    {
        sum += n[i];
    }
    return sum;
}

方法的重载:方法的重载指的是方法的名称相同,但参数不同

1)如果参数个数相同,那么参数的类型就不能相同

2)如果参数的类型相同,那么参数的个数就不能相同

3)方法的返回值,跟重载没有关系

    M(1, 2);
    //M(2.0, 3.7);
    //M(1,2,3);
    //M("mxl","mmm");
    Console.WriteLine(M);
}
public static void M(int n1, int n2)
{
    int result = n1 + n2;
}
public static double M(double n1, double n2) 
{
    double result = n1 + n2;
    return result;
}
public static void M(int n1, int n2,int n3)
{
    int result = n1 + n2 +n3;
}
public static string M(string n1,string n2)
{
    return n1 + n2;
 }

方法的递归:方法自己调用自己,但要有循环结束语句

例子:找出一个指定文件夹中所有的文件

    TellStory();
    Console.WriteLine();
}
//可以把静态字段当作全局变量来使用,
//因为静态字段作用域在整个类中,在类中的每个函数
//中都可以访问
public static int i = 0;
public static void TellStory()
{
Console.WriteLine("从前有座山");
Console.WriteLine("山里有座庙");
Console.WriteLine("庙里有个老和尚和小和尚");
Console.WriteLine("有一天小和尚哭了,老和尚给小和尚讲了一个故事");
i++;
if (i &gt;= 10)
{
    return;
}
TellStory();

}

方法的练习

1.用方法来实现,有一个字符串数组:{"马龙","迈克尔乔丹","雷吉米勒","蒂姆邓肯","勒布朗詹姆斯"}//请求处最长的字符串

            //1.用方法来实现,有一个字符串数组:{"马龙","迈克尔乔丹","雷吉米勒","蒂姆邓肯","勒布朗詹姆斯"}
            //请求处最长的字符串
            string[] names = { "马龙", "迈克尔乔丹", "雷吉米勒", "蒂姆邓肯", "勒布朗詹姆斯" };
            string max = GetLongest(names);
            Console.WriteLine(max);
            Console.ReadKey();
        }
        //求一个字符串数组中最长的元素
        public static string GetLongest(string[] s)
        {
            string max = s[0];
            for (int i = 1; i < s.Length; i++)
            {
                if ( s[i].Length > max.Length )
                {
                    max = s[i];
                }
            }
            return max;
        }

2.用方法实现:请计算出一个整型数组的平均值,保留两位小数

    int[] numbers = { 1, 2, 7 };
    double avg = GetAvg(numbers);
    Console.WriteLine("{0:0.00}",avg);//输出仅保留两位小数并且仅保留两位小数     
    //把avg转换成字符串类型,
    string s = avg.ToString("0.00");
    Console.WriteLine(s);
    Console.WriteLine(avg);
    Console.ReadKey();
}
public static double GetAvg(int[] nums)
{
    double sum = 0;//把一个参数改为浮点数
    for (int i = 0; i < nums.Length; i++)
    {
        sum+= nums[i];
    }
    return sum/nums.Length;
}

标签:Console,string,nums,c#,基础,int,static,WriteLine
From: https://www.cnblogs.com/mxlblog/p/18209412

相关文章

  • Pytorch-01 框架简介
    智能框架概述人工智能框架是一种软件工具,用于帮助开发人员构建和训练人工智能模型。这些框架提供了各种功能,如定义神经网络结构、优化算法、自动求导等,使得开发人员可以更轻松地实现各种人工智能任务。通过使用人工智能框架,开发人员可以更快速地开发和部署机器学习和深度学......
  • Pytorch-08 实战:手写数字识别
    手写数字识别项目在机器学习中经常被用作入门练习,因为它相对简单,但又涵盖了许多基本的概念。这个项目可以视为机器学习中的“HelloWorld”,因为它涉及到数据收集、特征提取、模型选择、训练和评估等机器学习中的基本步骤,所以手写数字识别项目是一个很好的起点。我们的要做......
  • CubeMX离线安装stm32f1固件包
    一.打开CubeMX软件点击Help选择Manageembededsoftwarepackages二、找到STM32F1版本最新的固件包,点击install 三、登录账号 四、等待下载完成五、下载完成......
  • 【Java学习】第19节:时间类(Date、Calendar、SimpleDateFormat)、包装类
    目录第一章Date类1.1Date概述1.2Date常用方法第二章SimpleDateFormat类2.1构造方法2.2格式规则2.3常用方法2.4练习1(初恋女友的出生日期)2.5练习2(秒杀活动)第三章Calendar类3.1概述3.2常用方法3.3get方法示例3.4set方法示例:3.5add方法示例:第......
  • js逆向系列1.1、JavaScript基础语法
    JS逆向爬虫语法初阶dy:a_b,xhs:x-s等有需要联系。v:a2247429407【1】JavaScript初识JavaScript是一种用于在客户端(即用户的浏览器)上运行的编程语言。它是一种脚本语言,可以直接嵌入到HTML页面中,并由浏览器解释和执行。在客户端环境中,JavaScript可以与用户交互,操作和修......
  • 为什么别人写的SCI文章,容易接收?有技巧?
      这篇文章是写给想发期刊文章的,但是导师没有时间去指导的人看的,无论是SCI还是EI、核心这类的,都适用。想发文章,首先你得有文章!以下从写论文的新手内心历程来解答。    paper怎么来呢?那肯定是找创新点,找模型,找应用。先看看这些文章都发在什么期刊上,哪种类型的期刊,然......
  • 在linux中离线安装docker操作指南
    1.在有网络连接的环境下,下载Docker安装包,包名为docker-xx.x.x.tgz。 下载地址:https://download.docker.com/linux/static/stable/x86_64/2.将压缩包上传到目标服务器,解压压缩包。3.执行如下命令卸载旧版docker。 yumremovedocker*4.将解压的所有文件拷贝到/usr/bin目录......
  • netcore webapi部署到docker容器,api调用后显示中文乱码
    vs2022webapi部署到docker容器,api调用后显示中文乱码。原因是:源代码文件不是utf-8编码(用vscode打开是乱码,在vscode修改后,再提交,正常)解决方法:在中文环境下用过微软家Visualstudio的都知道,新建文件的保存编码都默认为当前系统语言,所以你的文件编码永远都是GB2312,非常令人蛋......
  • [Java]Socket套接字(网络编程入门)
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18032037出自【进步*于辰的博客】参考笔记二,P61。注:“一对一”、“多对多”是相对于Socket而言,而非服务端/客户端类的个数。目录1、概述2、二种聊天模式2.1“一对一......
  • 在C++中,将类的成员函数(也称为方法)作为参数传递
    在C++中,你可以将类的成员函数(也称为方法)作为参数传递,但这通常涉及到使用函数指针或者更现代的C++11及以后版本的std::function和lambda表达式。不过,更常见的是传递成员函数指针,但请注意,成员函数指针与常规函数指针在语法和使用上有所不同,因为成员函数需要访问类的特定实例(即对象)。......