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 >= 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