C++学习小结之语句
一、顺序语句
二、条件,分支语句
1、if语句
关键是能够熟练运用if的嵌套。要考虑好所有的情况。
如果说条件是两种情况相互对应的,那么就可以只用if与else。但必须要想好每个else跟哪个if是一对。
如果情况是相互独立的三种情况以上,那么可以选择运用if...elseif...else。
1.if语句
if(条件)
{
满足条件的时候执行;
}
2.if(条件)
{
满足条件执行;
}
else
{
不满足条件时执行;
}
3if(条件1)
{
满足条件1的时候执行;
}
elseif(条件2)
{
不满足条件1的情况下满足条件2;
}
4.
if(条件1)
{
if(条件2)
{
既满足条件1又满足条件2的时候执行;
}
}
2、switch语句
如果说可选的条件比较多时,选择switch语句,要比if语句效率要高。特别注意的是case后跟的break。
eg:
//eg.6swtich语句 作用域
staticvoidMaine(string[]args)
{
//Console.WriteLine("你本次选择出场的英雄是:");
Randomr=newRandom();
intn=r.Next(10);
stringa;
switch(n)
{
case1:
a="赵信"; break;
case2:
a="寒冰射手";break;
case3:
a="无极剑圣";break;
case4:
a="机器人"; break;
default:
a="齐天大圣";break;
}
Console.WriteLine("本次选择的英雄是:"+a);
}
三、循环语句
for循环
四要素:
初始条件,循环条件,状态改变,循环体。执行过程:
初始条件--循环条件--循环体--状态改变--循环条件....
注意:for的小括号里面分号隔开,for的小括号后不要加分号。
利用加断点的方式,可以更好的明白for的工作原理。
1.for循环空操作完成的实例,输出100以内的数字
staticvoidMain(string[]args) { inti=1; for(;;) { if(i>100) { break; } Console.Write(i+"\t"); i++; } Console.ReadKey(); }
当然你也可以用while,if()break;的嵌套完成上述操作。
.正序和逆序的推断问题。(折纸问题)
//eg.5折纸问题
staticvoidMaine(string[]args) { //Console.WriteLine("请输入次数"); //intn=Convert.ToInt32(Console.ReadLine()); //inti=0; //for(doublesum=0.0001;sum<=8848.0;sum=sum*2) //{ //i++; //} //Console.WriteLine(i); doublesum=0.0001; intz=0; for(inti=0;;i++) { z++; sum=sum*2; if(sum>=8848.0) { Console.WriteLine(z); break; } } }
.应用:a.穷举法:用循环把各种可能的情况都给走一遍,然后用if条件把满足要求的结果给筛选出来。
//eg.6百马百石大马驮2石,中马驮1石小马驮0.5石
staticvoidMain6a(string[]args) { for(inti=0;i<=50;i++) { for(intj=0;j<=100;j++) { for(intk=0;k<=200;k++) { if((i*2+j*1+k*0.5==100)&&(i+j+k==100)) { Thread.Sleep(50); Console.WriteLine("大马需要"+i+"头,中马需要"+j+"头,小马需要"+k+"头。"); } } } } }
//eg.7
staticvoidMaing(string[]args) { for(inti=1;i<10;i++) { for(intj=1;j<5;j++) { for(intk=1;k<25;k++) { if(i*5+j*10+k*25==50) { Console.WriteLine("50元用来买"+i.ToString()+"个牙刷,"+j.ToString()+"个牙膏,"+k.ToString()+"块肥皂,正好能用完。"); } } } } }
//eg.8有1块,2块,5块的钱若干,凑出20块钱,有几种凑法
staticvoidMainh(string[]args) { intm=0; for(inti=0;i<=20;i++) { for(intj=0;j<=10;j++) { for(intk=0;k<4;k++) { if(i*1+2*j+5*k==20) { m++; Console.WriteLine("一共有"+m+"中方法。"); Console.WriteLine("需要1元的"+i+"张,2元的"+j+"张,5元的"+k+"张。"); } } } } }
//eg.9 1()2()3()4=4;问括号里我要填(-或+)
staticvoidMaini(string[]args) { for(inti=1;i<=1;i+=2) { for(intj=-1;j<=1;j+=2) { for(intk=-1;k<=1;k+=2) { for(intl=-1;l<=1;l+=2) { if(1*i+2*j+3*k+l*4==4) { Console.WriteLine("i="+i+",j="+j+",k="+k+",l="+l+"。"); } } } } } }
//eg.10 123()45()67()8()9=100;要求在()里面填写+或-使等式成立。
staticvoidMaini2(string[]args) { for(inta=-1;a<=2;a+=2) { for(intb=-1;b<=2;b+=2) { for(intc=-1;c<=2;c+=2) { for(intd=-1;d<=2;d+=2) { if(123+a*45+b*67+c*8+d*9==100) Console.WriteLine("a="+a+",b="+b+",c="+c+",d="+d); } } } } Console.ReadKey(); }
//eg.11某侦查队接到一项紧急任务,要求在A.B.C,D,E,F六名队员中尽可能多的挑选若干人。A和B两人必须去一人。A和D不能同时去。A,E,F三人必须两人去。B和C都
//去或都不去。C和D两人中去一人。若D不去,E也不去。问应叫哪几个人去?(灵活运用1与0)
staticvoidMainj(string[]args) { for(inta=0;a<=1;a++) { for(intb=0;b<=1;b++) { for(intc=0;c<=1;c++) { for(intd=0;d<=1;d++) { for(inte=0;e<=1;e++) { for(intf=0;f<=1;f++) { if((a+b>=1)&&(a+d<=1)&&(a+e+f==2)&&(b+c!=1)&&(c+d==1)&&(d-e>=0)) { Console.WriteLine("A="+a+"B="+b+"C="+c+"D="+d+"E="+e+"F="+f); } } } } } } } } //老师版 staticvoidMainj1(string[]args) { inta,b,c,d,e,f; for(a=0;a<2;a++) { for(b=0;b<2;b++) { for(c=0;c<2;c++) { for(d=0;d<2;d++) { for(e=0;e<2;e++) { for(f=0;f<2;f++) { if((a+b>=1)&&(a+d<=1)&&(a+e+f==2)&&(b+c!=1)&&(c+d==1)&&((d+e==0)||d==1)) { Console.WriteLine("A="+a+"B="+b+"C="+c+"D="+d+"E="+e+"F="+f); } } } } } } } Console.ReadKey(); }
b.迭代法:有一定规律。每次循环都是从上次运算结果中获得数据,本次运算的结果都是要为下次运算做准备。
eg1兔生兔问题
有一对幼兔,幼兔一个月后成长为小兔,小兔一个月后成长为成兔并生下一对幼兔,问几年后有多少对兔子,其中幼兔,小兔,成兔分别是多少?
//eg.2兔生兔问题
//方法一 staticvoidMaink3(string[]args) { intsyt=1,byt=0; intsxt=0,bxt=0; intsct=0,bct=0; Console.WriteLine("请输入月数:"); intmonth=Convert.ToInt32(Console.ReadLine()); intsum; for(inti=1;i<=month;i++) { //赋值顺序不能变,必须按照兔子生长规律来,先有的bct才会有byt bct=sxt+sct; bxt=syt; byt=sxt+sct; //bct=sxt+sct;这样写,必须注意他的顺序 //bxt=syt; //byt=bct; //byt=bct;//错误的 //bxt=syt; //bct=sxt+sct; syt=byt; sxt=bxt; sct=bct; //sum=byt+bxt+bct; } sum=byt+bxt+bct; Console.WriteLine("过了{0}个月后,幼兔个数为{1}对,小兔个数为{2}对,成兔个数为{3}对,总共有{4}对。",month.ToString(),byt,bxt,bct,sum); } //方法二 staticvoidMaink4(string[]args) { intn=Convert.ToInt32(Console.ReadLine()); inttu=0;//要求那个月的总数 inttu1=1,tu2=1;//倒数第一个为tu1,倒数第二个为tu2 for(inti=3;i<n;i++) { tu=tu1+tu2; tu2=tu1; tu1=tu; } Console.WriteLine(tu); } //方法三 staticvoidMaink5(string[]args) { Console.Write("请输入月数:"); intm=int.Parse(Console.ReadLine()); intct=0;//成兔的对数 intxt=0;//小兔的对数 intyt=1;// intzt=1;// for(inti=1;i<=m;i++) { if(i==1) { ct=0; xt=0; yt=1; } else { ct=xt+ct; xt=yt; yt=ct; } zt=yt+xt+ct; Console.WriteLine(i.ToString()+"个月后成兔的对数是:"+ct.ToString()); Console.WriteLine(i.ToString()+"个月后小兔的对数是:"+xt.ToString()); Console.WriteLine(i.ToString()+"个月后幼兔的对数是:"+yt.ToString()); Console.WriteLine(i.ToString()+"个月后兔子的总对数是:"+zt.ToString()); } Console.ReadLine(); }
eg2 100以内的所有数的和。
eg3.求阶乘。
eg4.求年龄。
eg5.折纸。
eg6.棋盘放粮食。
eg7.猴子吃桃子。
staticvoidMaink(string[]args) { intsum=1; for(inti=0;i<6;i++) { intt=(sum+1)*2; sum=t; } Console.WriteLine("桃子一共有:"+sum+"个。"); }
eg8.落球问题。一个球从10米高度落下,每次弹起2/3的高度,问第五次弹起后的高度?
四、while循环。一般用在一些死循环当中。
五、trycatch。保护程序,避免程序出错时无法运行。
格式:
try//快捷方式:双击tab键 { } catch(Exception) { throw; } finally { }
以上所述就是本文的全部内容了,希望大家能够喜欢。