c#学习笔记.docx
《c#学习笔记.docx》由会员分享,可在线阅读,更多相关《c#学习笔记.docx(20页珍藏版)》请在冰豆网上搜索。
![c#学习笔记.docx](https://file1.bdocx.com/fileroot1/2022-11/23/68f3fd4e-bc70-47b6-8ac6-e0a3b17ff804/68f3fd4e-bc70-47b6-8ac6-e0a3b17ff8041.gif)
c#学习笔记
一C#学习笔记
1在c#中制表符表示着特殊的含义
\t横向制表符、v水平制表符,\bbeep发出声音\r回车\n换行。
”\”代表转义,一下是其用法
在控制台程序中输出字符串“she'sgirlhernameis"lulu"”
代码如下:
System.Console.Write("she\'sgirlhernameis\"lulu\"");
在控制台下输出一个盘符的路径("mywindowssystemrootdirectoryid"c:
\wang.txt")
代码如下:
(方法一)System.Console.WriteLine("mywindowssystemrootdirectoryid\"c:
\\wang.txt\"");
(方法二)System.Console.WriteLine(@"d:
\wang.txt");其局限性事字符串里面不能有双引
2声名一个变量并初始化,提倡声明一个变量时给他立即初始化,运行时出现异常信息要看看异常信息
3变量f代表float|m代表decimal|u代表无符号数|L代表long|d代表double|java中不存在无符号数,Int32i=0等价于inti=0float=singel,double=Double,byte=Byte,sbyte=SByteshort=Int16,ushort=UInt16long=Int64,unlong=UInt64
decimald=123;//在程序中出现的是整数且无后缀默认是int类型
decimald2=123.0m;
floatd4=1.1//在程序中出现的是且无后缀默认是double类型
floatd3=1.1f;//在程序中出现的是且无后缀默认是double类型
inti=0;//4个字节32位
uintk=12;//代表无符号的
byte是无符号的
sbytekk=-1;//代表有符号位
我们可以用如下方法来知道各个类型的范围
代码如下:
System.Console.WriteLine("sbyte最大值:
{0}最小值:
{1}",sbyte.MaxValue,sbyte.MinValue);
System.Console.WriteLine("byte最大值:
{0}最小值{1}",byte.MaxValue,byte.MinValue);
System.Console.WriteLine("unshort最大值:
{0}最小值{1}",ushort.MaxValue,ushort.MinValue);
System.Console.WriteLine("short最大值:
{0}最小值{1}",short.MaxValue,short.MinValue);
System.Console.WriteLine("long最大值为:
{0}最小值为:
{1}",long.MaxValue,long.MinValue);
System.Console.WriteLine("ulong最大值为:
{0}最小值为:
{1}",ulong.MaxValue,ulong.MinValue);
checked关键字用于对整型算术运算和转换显式启用溢出检查(MSDN)
unchecked关键字用于取消整型算术运算和转换的溢出检查。
(MSDN)
写法如下:
unchecked
{
intval=2147483647*2;
}
4C#控制语句
相关的面试题:
输入一个四位数,从高位到底为以此输入:
(这道题主要考察%/对整数的一些操作)
System.Console.WriteLine("请输入一个四位数");
intdata=int.Parse(System.Console.ReadLine());
System.Console.WriteLine("千万数{0}",(data/1000));
System.Console.WriteLine("百位数{0}",((data%1000)/100));
System.Console.WriteLine("十位位数{0}",((data%100)/10));
System.Console.WriteLine("个位位数{0}",(data%10));
swithcase|swithcase中case中的值必须为常量const|switch中的值可以是整数,字符,字符串,bool值枚举|swith(类型)与case中的类型一致,case中不能出现重复的条件
System.Console.WriteLine("请选着0--9的数买票");
intprice=0;
intflag=Convert.ToInt32(System.Console.ReadLine());
switch(flag)
{
case0:
case1:
case3:
price=3;//代表0,1,3时价格都为3。
这点应注意
break;
case4:
price=4;
break;
case5:
price=5;
break;
case6:
price=6;
break;
case7:
case8:
case9:
price=7;
break;
default:
price=int.MaxValue;
break;
}
System.Console.WriteLine("你买的票价格为{0}元",price);
While与dowhile
Dowhile是先执行在判断条件,while则是先判断条件在执行。
输出所有水仙花数(一个三位数,每位的立方之和为其数本身)。
for(inti=100;i<1000;i++)
{
//取出个位,百位,十位
inta=i/100;
intb=(i%100)/10;
intc=i%10;
if(i==a*a*a+b*b*b+c*c*c)
{
System.Console.WriteLine("水仙花:
{0}",i);
}
2.1,2,3,4能组成多少个3位数。
并且每一位都不相等。
inta=0;
intb=0;
intc=0;
intcount=0;
for(intabc=123;abc<=432;abc++)
{
a=abc/100;
b=(abc%100)/10;
c=abc%10;
if(a==1||a==2||a==3||a==4)
{
if((b==1||b==2||b==3||b==4)&&(a!
=b))
{
if((c==1||c==2||c==3||c==4)&&(a!
=c)&&(b!
=c))
{
System.Console.WriteLine(abc);
count++;
}
else
{
continue;
}
}
else
{
continue;
}
}
else
{
continue;
}
}
System.Console.WriteLine("总共{0}个整数",count);
3.第二题有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13...打印。
求出这个数列的前20项之和。
inta=2;
intb=1;
inttemp=0;
doubletotal=2;
for(inti=0;i<20;i++)
{
temp=a+b;
b=a;
a=temp;
System.Console.WriteLine("{0}/{1}",a,b);
total+=Convert.ToDouble(a)/b;
}
System.Console.WriteLine(total);
//第三题3.古典问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少。
//An=An-1+An-2;这个是通项公式数列规律如下:
(1,2,3,5,8,13)
intn=int.Parse(System.Console.ReadLine());
inta=1;
intb=1;
inttemp=0;
inttotal=0;
for(inti=0;i{
temp=b;
b=a+b;
a=temp;
System.Console.Write("{0}",b);
total=total+b;
}
if(n==1||n==2)
{
System.Console.WriteLine("兔子总数为:
{0}",n);
}
else
{
System.Console.WriteLine("兔子总数为:
{0}",total);
}
//打印各种形状
//打印9*9乘法口诀
for(inti=1;i<=9;i++)
{
for(intj=1;j<=i;j++)
{
System.Console.Write("{0}*{1}={2}",j,i,j*i);
}
System.Console.WriteLine();
}
//用*打印一个直角三角形
for(inti=0;i<7;i++)
{
for(intj=0;j
{
System.Console.Write("*");
}
System.Console.WriteLine();
}
//用*打印等腰三角行
for(inti=1;i<7;i++)
{
for(intj=1;j<7-i;j++)//打印空格
{
System.Console.Write("");
}
//打印*
for(intj=0;j<2*i-1;j++)
{
System.Console.Write("*");
}
System.Console.WriteLine();
}
//用*打印等腰三角形
for(inti=1;i<7;i++)
{
for(intj=1;j
{
System.Console.Write("");
}
for(intj=0;j<2*(7-i)-1;j++)
{
System.Console.Write("*");
}
System.Console.WriteLine();
}
//用*打印菱形
for(inti=1;i<14;i++)
{
//打印空白
for(intj=0;j{
System.Console.Write("");
}
//打印*
for(intj=0;j<2*(7-Math.Abs(7-i))-1;j++)
{
System.Console.Write("*");
}
System.Console.WriteLine();
}
//用*打印空菱形
for(inti=1;i<14;i++)
{
//打印空白
for(intj=0;j{
System.Console.Write("");
}
//打印*
for(intj=0;j<2*(7-Math.Abs(7-i))-1;j++)
{
if(j==0)
{
System.Console.Write("*");
continue;
}
if(j==2*(7-Math.Abs(7-i))-2)
{
System.Console.Write("*");
}
else
{
System.Console.Write("");
}
}
System.Console.WriteLine();
}
//分析一下程序,一下为一个死循环,要好好仔细的分析
PublicvoidFunction
{
intk=0;
do
{
if(k>11)
{
Break;
}
if(k>=10)
{
continue;
}
//continue立即结束本次循环,开始下一次循环。
不支持本次循环的后续语句
k++;
}
while(true);
此程序为死循环
}
5.String类型
类型:
集合,数组,,c#类似与指针的机制
c#中的string类型是安全的与c,c++(有可能出现指针越界)相比。
stirng一旦初始化,string类中的方法是不会改变其内容。
但字符串可以重新符值
字符使用单引号引起来的'h'
数组是一个集合
stringk="helloword";
charv={‘a’,’b’};
可以用k[i]的放形式来去每个字符
字符串是不可变的(长度,内容)
字符数组是可以的(长度不可以改变,但是内容是可以改变)
strings=newstring(v);//把一个字符串数组转化为字符串
char[]v2=s.ToCharArray();//把一个字符串转化成一个字符数组
//诗词古式排版,
stringss="朝辞白帝彩云间,千里江陵一日还,两岸猿声啼不住,轻舟已过万重山";
//取出每句
string[]data=ss.Split(',');
for(inti=0;i{
for(intj=data.Length-1;j>=0;j--)
{
System.Console.Write("{0}",data[j].Substring(i,1));
}
System.Console.WriteLine();
}
System.Console.WriteLine();
System.Console.WriteLine();
System.Console.WriteLine();
//宋词古排
strings="念奴娇赤壁怀古大江东去浪淘尽千古风流人物故垒西边人道是三国周郎赤壁乱石穿空惊涛拍岸卷起千堆雪江山如画一时多少豪杰遥想公瑾当年小乔初嫁了雄姿英发羽扇纶巾谈笑间樯橹灰飞烟灭故国神游多情应笑我早生华发人生如梦一尊还酹江月";
string[]arr=s.Split('');
for(intk=0;k{
if(arr[k].Length!
=6)
{
arr[k]=arr[k].PadRight(6,' ');//不满6右边补0
}
}
for(inti=0;i<6;i++)
{
for(intj=23;j>=0;j--)
{
System.Console.Write("{0}",arr[j][i]);
}
System.Console.WriteLine();
}
//15位身份证升级为18位身份证
//S=Sum(Ai*Wi),i=0,...,16,先对前17位数字的权求和
//Ai:
表示第i位置上的身份证号码数字值
//Wi:
表示第i位置上的加权因子
//Wi:
7910584216379105842
//计算模
//Y=mod(S,11)
//通过模得到对应的校验码
//Y:
012345678910
////校验码:
10X98765432
System.Console.WriteLine("证号请输入你的15位身份");
stringdata=System.Console.ReadLine();
char[]Ai=newchar[18];
intSum=0;
char[]Avg={'1','0','X','9','8','7','6','5','4','3','2'};
int[]Wi={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
data=data.Insert(6,"19");//把19添加到字符串中
for(inti=0;i<17;i++)
{
Sum+=Convert.ToInt32((int)data[i]-48)*Wi[i];
}
stringresult=data+Avg[Sum%11];
System.Console.WriteLine("升级后的省份证号为{0}",result);
判断s是否是一个合法的财务数字:
条件(一个合法的浮点数或整数(小数点只能有一个,且不能在第一位,也不能在最后一位)。
精度不能大于2。
不能有非法字符)容许有负号,且最多只有一个,且只能在第一位。
容许有$负号,且最多只有一个,且只能在第一位。
同时存在$和负号的时候。
$在前。
System.Console.WriteLine("请输入一个数字");
boolvalid=true;
//isDigit判断的是0---9之间的数isnumber包含i等罗马数字
stringnumber=System.Console.ReadLine();
//最后考虑$和负号
if(number[0]=='$')
{
number=number.Substring
(1);
}
if(number.Length>0&&number[0]=='-')
{
number=number.Substring
(1);
if(number=="")
{
valid=false;
}
}
//先考虑不带-$的情况,代码如下
for(inti=0;i{
if((number[0]!
='.'&&!
char.IsDigit(number[i])))//判断是否全部是整数
{
valid=false;
break;
}
}
if(valid)//判断有小数时的情况
{
//number[0]=='.'表示数的第一个位置是否为'.'
//number[number.Length-1]=='.'表示数的最后一个位置是否为'.'
//(number.IndexOf('.')!
=number.LastIndexOf('.'))判断是否是一个小数点'.'
//(number.IndexOf('.')>=0&&number.IndexOf('.')if((number[0]=='.'||number[number.Length-1]=='.'||(number.IndexOf('.')!
=number.LastIndexOf('.'))||(number.IndexOf('.')>=0&&number.IndexOf('.'){
valid=false;
}
}
if(valid)
{
System.Console.WriteLine("是");
}
else
{
System.Console.WriteLine("否");
}
}
DateTime
//打印当年的全部日历
intyear=DateTime.Now.Year;;
for(intii=1;ii<=12;ii++)
{
System.Console.WriteLine();
System.Console.WriteLine("第{0}月",ii);
DateTimet=newDateTime(year,ii,1);
intdays=DateTime.DaysInMonth(year,ii);
System.Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}","日","一","二","三","四","五","六");
intflag=(int)t.DayOfWeek;
//计算每个月开始时应该有的空格
string[]date=newstring[days+flag];//初始化一个数组,来存放每月的天数和天数前应该填充的空白
for(inti=0;i{
date[i]="";
}
//把所有空格盒日期放在一个数组里
for(intj=1;j<=days;j++)
{
date[j+flag-1]=j.ToString();
}
//输出单个月日历每7个元素换行
for(intm=0;m{
System.Console.Write(date[m]+"\t