跟siki老师学C#第九天(满满的都是练习)
2016-01-26 21:06
591 查看
第一阶段的C#学习已经结束了,接下来就是一大堆的练习题,慢慢做吧。
1,将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
这又是一段非常奇妙的代码,我这麻瓜脑袋就是想不出来,一个for和一个while搭配,就完成了这样的一个功能。
首先for循环是找出数字的因子i,从2开始一个一个找,找到2,判断2是不是它的因子,如果不是就往下3,5,7…依次找;如果2是因子,则得出商,商用while循环再判断2是不是商的因子,如果是,再判断2是不是商的因子,直到把所有的2找出来才判断3有一个,然后5有几个,7有几个……
利用while循环巧妙地找出相同因子的个数。当因子和商相同时,那么这就是最后一个因子了。
2.输入两个正整数m和n,求其最大公约数和最小公倍数。
这个练习没什么好说的,仔细想想之间的关系就好了。
3.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
4.求1+2!+3!+…+20!的和;
定义了一个专门计算阶乘的方法,用for循环调用该方法,在循环体中求和。
5.利用递归方法求5!。 f(n)=n*f(n-1)
上一题中,我们使用for循环求得阶乘,现在用递归求阶乘。
6.编一个程序,输入一个正数,对该数进行四舍五入到个位数的运算。例如,实数12.56经过四舍五入运算,得到结果13;而12.46经过四舍五入运算,得到结果12
这里要注意的就是如何把一个小数的整数部分和小数部分分开:先将该数字转换成int类型,去掉了小数部分,再用原数减去整数部分得到了小数部分。
这里要注意的一点是:num=integer+1;和num=integer++;是不一样的。实际上好像没有num=integer++;这种写法,一般都是integer++;这种写法,而没有某一个数等于另一个数的加加。虽然++等价于+1.但是好像这种写法就是错误的,尽管编译器不报错。
7.有关系式1*1+2*2+3*3+…+k*k<2000,编一个程序,求出满足此关系式的k的最大值
8.编一个程序,解决百钱买百鸡问题。某人有100元钱,要买100只鸡。公鸡5元钱一只,母鸡3元钱一只,小鸡一元钱3只。问可买到公鸡,母鸡,小鸡各为多少只。把所有的可能性打印出来。
![](https://img-blog.csdn.net/20160126210401801)
这就是最终的运算结果,这里的for循环为什么不是都是1-100?就是因为100块钱买鸡,鸡的数量是有范围的,为了尽可能减少运算时间,我们把三种鸡的数量进行了限制,从而提高了效率。
今天的练习就到这里了,欢迎大家的批评指正!感激不尽!!
1,将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
static void Main(string[] args) { Console.WriteLine("请输入正整数:"); int num = Convert.ToInt32( Console.ReadLine()); Console.Write("{0}=",num); int num1 = num; for (int i = 2; i < num1; i++) { while (i <= num) //除数肯定是小于等于被除数的 { if (i == num) { Console.Write("{0}", i); break; } if (num % i == 0) { num = num / i; Console.Write("{0}*",i); } else { break; //如果当前i不是它的素因子,就判断i+1是不是它的素因子 } } } Console.ReadKey(); }
这又是一段非常奇妙的代码,我这麻瓜脑袋就是想不出来,一个for和一个while搭配,就完成了这样的一个功能。
首先for循环是找出数字的因子i,从2开始一个一个找,找到2,判断2是不是它的因子,如果不是就往下3,5,7…依次找;如果2是因子,则得出商,商用while循环再判断2是不是商的因子,如果是,再判断2是不是商的因子,直到把所有的2找出来才判断3有一个,然后5有几个,7有几个……
利用while循环巧妙地找出相同因子的个数。当因子和商相同时,那么这就是最后一个因子了。
2.输入两个正整数m和n,求其最大公约数和最小公倍数。
Console.WriteLine("请输入正整数m:"); int m = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入正整数n:"); int n = Convert.ToInt32(Console.ReadLine()); //求得最大公约数 for (int i = m; i > 0; i--) { if (m % i == 0) { if (n % i == 0) { Console.WriteLine("{0}和{1}的最大公约数是{2}!",m,n,i break; } else { continue; } } else { continue; } } //求得最小公倍数 for (int i = 1; ; i++) { int num = i * m; if (num % n == 0) { Console.WriteLine("{0}和{1}的最小公倍数是{2}!",m,n,num); break; } else { continue; } }
这个练习没什么好说的,仔细想想之间的关系就好了。
3.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
double distance = 100; double height = 100; for (int i = 1; i <= 10; i++) { height = height / 2; distance = distance + height; if (i == 10) { Console.WriteLine("第10次反弹的高度为{0}", height); } } Console.WriteLine("它在第10次落地时,共经过{0}米",distance);
4.求1+2!+3!+…+20!的和;
static int GetFactorial(int num) { int res = 1; for (int i = 1; i <= num; i++) { res = res * i; } return res; } static void Main(string[] args) { int sum = 0; for (int i = 1; i <= 20; i++) { sum += GetFactorial(i); } Console.WriteLine(sum);
定义了一个专门计算阶乘的方法,用for循环调用该方法,在循环体中求和。
5.利用递归方法求5!。 f(n)=n*f(n-1)
上一题中,我们使用for循环求得阶乘,现在用递归求阶乘。
static int GetFactorial(int num) 『 if (num == 1) { return 1; } return num*GetFactorial(num-1); //阶乘的公式为f(n)=n*f(n-1); } Console.WriteLine(GetFactorial(3));
6.编一个程序,输入一个正数,对该数进行四舍五入到个位数的运算。例如,实数12.56经过四舍五入运算,得到结果13;而12.46经过四舍五入运算,得到结果12
Console.WriteLine("请输入一个整数:"); double num = Convert.ToDouble(Console.ReadLine()); int integer = (int)num; float decimals = float.Parse( (num - integer).ToString()); if (decimals < 0.5) { Console.WriteLine(integer); } else { integer++; //这里还可以写成num=integer+1; num = integer; } Console.WriteLine(num);
这里要注意的就是如何把一个小数的整数部分和小数部分分开:先将该数字转换成int类型,去掉了小数部分,再用原数减去整数部分得到了小数部分。
这里要注意的一点是:num=integer+1;和num=integer++;是不一样的。实际上好像没有num=integer++;这种写法,一般都是integer++;这种写法,而没有某一个数等于另一个数的加加。虽然++等价于+1.但是好像这种写法就是错误的,尽管编译器不报错。
7.有关系式1*1+2*2+3*3+…+k*k<2000,编一个程序,求出满足此关系式的k的最大值
int sum = 0; int max; for (int i = 1; ; i++) { sum += i * i; if (sum >= 2000) //一旦最终的和大于等于2000,就停止循环并获得最大值 { max = i - 1; break; } } Console.WriteLine(max);
8.编一个程序,解决百钱买百鸡问题。某人有100元钱,要买100只鸡。公鸡5元钱一只,母鸡3元钱一只,小鸡一元钱3只。问可买到公鸡,母鸡,小鸡各为多少只。把所有的可能性打印出来。
for (int i = 1; i <= 20; i++) //循环出公鸡的数量 { for (int j = 1; j <= 34; j++) //循环出母鸡的数量 { for (int k = 3; k <= 100; k += 3) //循环出小鸡的数量 { if (i + j + k == 100 && 5 * i + 3 * j + k / 3 == 100) { Console.WriteLine("{0}只公鸡,{1}只母鸡,{2}只小鸡", i, j, k); } } } }
这就是最终的运算结果,这里的for循环为什么不是都是1-100?就是因为100块钱买鸡,鸡的数量是有范围的,为了尽可能减少运算时间,我们把三种鸡的数量进行了限制,从而提高了效率。
今天的练习就到这里了,欢迎大家的批评指正!感激不尽!!
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程