实验五选择循环结构程序设计实验目的1.掌握switch语句的用法2.掌握for、while和do-while语句的嵌套的基本用法3.掌握break,continue,goto语句的用法4.掌握使用循环语句解决常见的循环问题5.了解C#在程序运行过程中发生异常的情况实验要求:1.本次试验主要分为两部分:一部分验证相关选择语句的语法、功能,可根据试验内容及步骤,在控制台程序下完成。重点理解实验中的选择结构的实现,验证输出结果。另一部分是设计型实验,给出所要完成的功能描述,要求学生根据描述,分析程序的输入和输出,并选择合适的选择语句实现相应功能。2.在实验的过程中理解for语句,while语句及do-while语句的应用,并理解循环嵌套时的处理问题。实验步骤1)switch语句:switch语句的常见用法如下:switch(表达式){case常量表达式1:语句组1break;case常量表达式2:语句组2break;.......default:语句组0}例1:根据用户输入的内容,显示不同的信息。分析:这个程序可以使用if语句编写,但是使用switch更为直观测试程序:1能够将程序中choice的数据类型改为浮点数类型,如double或float?为什么?答:不能,因为控制表达式所允许的数据类型只有整数类型,字符类型,字符串类型或者枚举类型。2将default分支放在case1分支之前,程序能否运行?测试功能是否变化答:能,功能没有变化。练习1:根据考试等级输出百分制分数段:(用switch结构)A级:90-100分B级:80-89分C级:70-79分D级:60-69分E级:0-59分usingSystem;classWelcome{staticvoidMain(string[]args){charchoice;//用户输入Console.WriteLine(您好,欢迎光临极度无聊文字信息服务台。);Console.WriteLine(如果您);Console.WriteLine(无聊请按1);Console.WriteLine(很无聊请按2);Console.WriteLine(极度无聊请按3);choice=(char)Console.Read();switch(choice){case'1':Console.WriteLine(你无聊,看看书吧。《C#语言学习》);break;case'2':Console.WriteLine(噢,你很无聊,来看个电视。《流星花园》);break;case'3':Console.WriteLine(天哪,你极度无聊,我们去飚车!);break;default:Console.WriteLine(你到底想干什么啊。懒得理你);break;}}}2)for语句:例2:计算sum=1+2+3+...+100注意:上述程序并不完整,请首先补充完整通过加入断点和单步运行,观察for语句的运行顺序尝试加入适当的语句,在循环体中输出sum的值观察下面的程序,分析运行结果:usingSystem;classWelcome{staticvoidMain(string[]args){charchoice;Console.WriteLine(您好,请输入您考试等级。(A,B,C,D,E));choice=char.Parse(Console.ReadLine());switch(choice){case'A':Console.WriteLine(90-100分);break;case'B':Console.WriteLine(80-89分);break;case'C':Console.WriteLine(70-79分);break;case'D':Console.WriteLine(60-69分);breakcase'E':Console.WriteLine(0-59);break;default:Console.WriteLine(抱歉,您输入的等级无T效。);break;}}}usingSystem;classWelcome{staticvoidMain(string[]args){intsum=0,i;for(i=1;i=100;i++){sum=sum+i;Console.WriteLine(“第一次循环:{0}”,sum);}Console.WriteLine(sum);}}答:把10以内的不能被2整除且能被3整除的整数相加后输出。练习2:利用for循环显示1000以内所有能被37整除的自然数(提示:在循环中应用if)usingSystem;classWelcome{staticvoidMain(string[]args){inti;Console.WriteLine(能被37整除的数有:);for(i=37;i=1000;i++)if(i%37==0)Console.WriteLine({0},i);}}3)while语句:例3:设有一张厚为0.2mm,面积足够大的纸,将它不断地对折。试问对折多少次后,其厚度可达珠穆朗玛峰的高度(8844.43m)例4:重复计算n=(7*n+2)%13,会得到一个介于0到12之间的整数序列。(一些随机数发生器使用类似的公式生成伪随机数)比如,将n初始化为0,依次施行上述赋值运算,可以得到以下序列:0,2,3,10,7,12,......下面的程序是按照上例中的计算公式,输出这个序列在变为5之前的所有值:usingSystem;classWelcome{staticvoidMain(string[]args){intn=0;while(n!=5){Console.WriteLine(未满足条件时:n={0},n);n=(7*n+2)%13;}Console.WriteLine(已满足条件:n={0},n);}}usingSystem;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){intn=0;doubleh=0.2;while(h8844430){n=n+1;h=2*h;}Console.WriteLine(n={0}h={1},n,h);}}}观察上面程序的输出结果。未满足条件时:n=0;未满足条件时:n=2;未满足条件时:n=3;未满足条件时:n=10;未满足条件时:n=7;未满足条件时:n=12;未满足条件时:n=8;未满足条件时:n=6;已满足条件:n=5;如果要求序列在n≤7的时候继续输出,应该使用什么循环条件?答:while(n=7)如果要求序列在n10的时候停止输出,应该使用什么循环条件?答:while(n10)练习3:编程找出这个序列中第一个能被5整除的自然数(注意:自然数不包括0)usingSystem;classWelcome{staticvoidMain(string[]args){intn=0,i;while(n!=5){Console.WriteLine(未满足条件时:n={0},n);n=(7*n+2)%13;if(n%5==0)break;}Console.WriteLine(已满足条件(一个被5整除的n或n!=5):n={0},n);}}4)do-while语句例:比较以下两个程序的结果,结果相同吗?如果不同,为什么?答:结果不相同。do-while循环计算了n等式后再判断条件的符合,而while一开始就判断条件的符合。所以它们所得到的结果不一样。练习4:分别用while和do…while语句,求1+2+3+…+50的值。while:usingSystem;classProgram{staticvoidMain(string[]args){intn=0,s=0;while(n50){usingSystem;classProgram{staticvoidMain(string[]args){intn=0;while(n!=0){Console.WriteLine(n={0},n);n=(7*n+2)%13;}}}usingSystem;classProgram{staticvoidMain(string[]args){intn=0;do{Console.WriteLine(n={0},n);n=(7*n+2)%13;}while(n!=0);}}n=n+1;s=s+n;}Console.WriteLine(s={0},n={1},s,n);}}do-while:usingSystem;classProgram{staticvoidMain(string[]args){intn=0,s=0;do{n=n+1;s=s+n;}while(n50);Console.WriteLine(s={0},n={1},s,n);}}5)循环的嵌套例:用嵌套的while语句输出九九乘法表试调试运行这个程序中的两重循环,观察相关循环变量的变化情况。练习5:参考上面的代码,用嵌套的for语句输出九九乘法表usingSystem;classProgram{staticvoidMain(string[]args){inti=1;while(i=9)//乘数需要由1增到9{intj=1;//初始化乘数while(j=i)//被乘数需要由1增到乘数i{Console.Write({0}*{1}={2}\t,i,j,i*j);++j;//乘数加1}++i;//被乘数加1Console.WriteLine();//不同被乘数间用新行间隔}}}usingSystem;classProgram{staticvoidMain(string[]args){inti,j,s;for(i=1;i=9;i++){for(j=1;j=i;j++)Console.Write({0}*{1}={2}\t,i,j,i*j);Console.WriteLine();}}}练习6:参考九九乘法表的代码,输出以下图案(第n行,输出连续的2n个*)代码如下:usingSystem;classprogram{staticvoidMain(string[]args){inti,j,s;Console.WriteLine(pleaseinputn=);j=int.Parse(Console.ReadLine());for(i=1;i=j;i++)******************************************************************************************{for(s=1;s=i*2;s++)Console.Write(*);Console.WriteLine();}}}一般地,我们都会使用for进行确定的计数循环,用while/do-while进行循环次数不确定的标记循环。6)continue语句和break语句:例:分析以上程序的输出结果是什么?注明执行流程。答:usingSystem;classProgram{staticvoidMain(string[]args){inti=1;for(i=1;i=15;i++){Console.WriteLine(刚进入循环体时,i={0},i);if(i%3==0){Console.WriteLine(执行continue时,i={0},i);continue;}if(i==10){Console.WriteLine(执行break时,i={0},i);break;}}Console.WriteLine(循环退出后,i={0},i);}}练习7:分析以下程序输出结果是什么,并注明执行流程?usingSystem;classProgram{staticvoidMain(string[]args){inti,sum=0;for(i=0;i=15;i=i+3){if(i%2==0){sum=sum+i;continue;}if(i13)break;}Consol