C# for循环
循环:反复执行某段代码。
循环四要素:初始条件,循环条件,循环体,状态改变。
for(初始条件;循环条件;状态改变)
{
循环体
}
break ——中断循环,跳出循环
continue——停止本次循环,进入下次循环
for循环拥有两类:
穷举:
把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况。
迭代:
从初始情况按照规律不断求解中间情况,最终推导出结果。
for循环练习
打印20遍你好
for (int i = 1; i <= 10; i++) { if (i == 6) { continue;//结束本次循环,继续下次循环 } Console.WriteLine("你好!"); }
输入一个整数,计算从1加到这个数的结果
Console.Write("请输入一个正整数:"); int a = int.Parse(Console.ReadLine()); int sum = 0;//0加上任何数都不会变化 for (int i = 1; i <= a; i++) { sum += i;//sum=sum+i; } Console.WriteLine(sum);
输入一个正整数,求这个数的阶乘
Console.Write("请输入一个正整数:"); int a = int.Parse(Console.ReadLine()); int sum = 1; for (int i = 1; i <= a; i++) { sum *= i;//sum=sum*i; } Console.WriteLine(sum);
找出100以内的与7有关的数,打印出来。7的倍数,个位数是7,十位数是7
int a = 0;//标记变量 for (int i = 100; i >= 1; i--) { if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7) { a++; Console.WriteLine(i); } } Console.WriteLine("总共"+a);
一个游戏,前20关是每一关自身的分数,21-30关每一关是10分,31-40关,每一关是20分,41-49关,每一关是30分,50关,是100分。输入你现在闯到的关卡数,求你现在拥有的分数
两种做法:if嵌套for for嵌套if
方法一:
Console.Write("请输入您现在所闯到的关卡数:"); int a = int.Parse(Console.ReadLine()); int sum = 0; if (a >= 1 && a <= 50) { if (a >= 1 && a <= 20) { for (int i = 1; i <= a; i++) { sum += i; } } else if (a >= 21 && a <= 30) { for (int i = 1; i <= 20; i++) { sum += i; } for (int i = 21; i <= a; i++) { sum += 10; } } else if (a >= 31 && a <= 40) { for (int i = 1; i <= 20; i++) { sum += i; } for (int i = 21; i <= 30; i++) { sum += 10; } for (int i = 31; i <= a; i++) { sum += 20; } } else if (a >= 41 && a <= 49) { for (int i = 1; i <= 20; i++) { sum += i; } for (int i = 21; i <= 30; i++) { sum += 10; } for (int i = 31; i <= 40; i++) { sum += 20; } for (int i = 41; i <= a; i++) { sum += 30; } } else { for (int i = 1; i <= 20; i++) { sum += i; } for (int i = 21; i <= 30; i++) { sum += 10; } for (int i = 31; i <= 40; i++) { sum += 20; } for (int i = 41; i <= 49; i++) { sum += 30; } sum += 100; } } else { Console.WriteLine("输入有误!"); } Console.WriteLine("总分为:" + sum);
方法二:
Console.Write("请输入现在闯到的关卡数:"); int a = int.Parse(Console.ReadLine()); int sum = 0; if (a >= 1 && a <= 50) { for (int i = 1; i <= a; i++) { if (i >= 1 && i <= 20) { sum += i; } else if (i >= 21 && i <= 30) { sum += 10; } else if (i >= 31 && i <= 40) { sum += 20; } else if (i >= 41 && i <= 49) { sum += 30; } else { sum += 100; } } } else { Console.WriteLine("输入有误!"); Console.WriteLine(sum);
for嵌套练习
输入一个整数,求1!+2!+...+n!
Console.Write("请输入一个正整数:"); int a = int.Parse(Console.ReadLine()); int sum = 0; for (int i = 1; i <= a; i++) { int sum1 = 1; for (int j = 1; j <= i; j++) { sum1 *= j; } sum += sum1; } Console.WriteLine(sum);
打印三角形
int aa = 0; for (int i = 1; i <= 5; i++) { for (int j = 1; j <=5; j++) { aa++; Console.Write("☆"); } Console.WriteLine(); } Console.WriteLine(aa); Console.ReadLine();
打印直角在右下角的三角形
for (int i = 1; i <= 5; i++) { for (int j = 4; j >= i; j--) { Console.Write(" "); } for (int k = 1; k <= i; k++) { Console.Write("☆"); } Console.WriteLine(); }
输入一个整数,求这个数的和、阶乘
Console.Write("请输入一个正整数:"); int a = int.Parse(Console.ReadLine()); int sum = 1; for (int i = 1; i <= a; i++) { sum *= i; } Console.WriteLine(sum);
99口诀表
for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { Console.Write(j + "*" + i + "=" + (i * j) + "\t"); } Console.WriteLine(); }
Console.Write("请输入一个正整数:"); int a = int.Parse(Console.ReadLine()); for (int i = 1; i <= a; i++) { for (int j = 1; j <= i; j++) { Console.Write("☆"); } Console.WriteLine(); }
for穷举和迭代练习
单位给发了一张150元购物卡,
拿着到超市买三类洗化用品。
洗发水15元,香皂2元,牙刷5元。
求刚好花完150元,有多少种买法,
每种买法都是各买几样?
设洗发水x 150/15==10
牙刷y 150/5==30
香皂z 150/2==75
int biao = 0; int sum = 0; for (int x = 0; x <= 10; x++) { for (int y = 0; y <= 30; y++) { for (int z = 0; z <= 75; z++) { sum++; if (x * 15 + y * 5 + z * 2 == 150) { biao++; Console.WriteLine("这是第"+biao+"种买法:洗发水"+x+"瓶,牙刷"+y+"支,香皂"+z+"块。"); } } } } Console.WriteLine("共有"+biao+"种买法!"); Console.WriteLine(sum);
纸张可以无限次对折,纸张厚度为0.07毫米。
问多少次对折至少可以超过8848?
方法一:
int a = 7;//884800000 int i = 1; for (;; i++;) { a *= 2;//a=a*2; if (a >= 884800000) { Console.WriteLine(i); Console.WriteLine(a); break; } }
方法二:
while(true) { a *= 2; if (a >= 884800000) { Console.WriteLine(i); Console.WriteLine(a); break; } i++; }
兔子生兔子问题,一开始只有1对幼兔
问第几个月的时候有多少对兔子,分别多少对
小兔=上月幼兔
成兔=上月小兔+上月成兔
幼兔=本月成兔
Console.Write("请输入第几个月的时候:"); int yue = int.Parse(Console.ReadLine()); if (yue > 0) { int cheng=0; int xiao=0; int you=0; int zong=0; for (int i = 1; i <= yue; i++) { if (i == 1) { cheng = 0; xiao = 0; you = 1; zong = 1; } else { cheng = xiao + cheng; xiao = you; you = cheng; zong = cheng + xiao + you; } } Console.WriteLine("第"+yue+"个月时,总共有"+zong+"对兔子,成兔"+cheng+"对,小兔"+xiao+"对,幼兔"+you+"对。"); } else { Console.WriteLine("输入有误!"); }
百鸡百钱:公鸡2文钱一只,
母鸡1文钱一只,小鸡半文钱一只,
总共只有100文钱,
如何在凑够100只鸡的情况下刚好花完100文钱?
int a = 0; for (int gong = 0; gong <= 50;gong++ ) { for (int mu = 0; mu <= 100;mu++ ) { for (int xiao = 0; xiao <= 200;xiao++ ) { if((gong*2+mu*1+xiao*0.5==100)&&mu+xiao+gong==100) { a++; Console.WriteLine("第" + a + "种买法" + "公鸡" + gong + "只" + "母鸡" + mu + "只" + "小鸡" + xiao+ "只"); } } } } Console.WriteLine(a);