黑马程序员技术交流社区

标题: for循环练习题(附源码,居然没人来看) [打印本页]

作者: 正在输入中...    时间: 2015-11-8 18:38
标题: for循环练习题(附源码,居然没人来看)
本帖最后由 正在输入中... 于 2015-11-23 23:48 编辑

今天有个同学问我说,虽然听懂了上课讲的东西,但是自己写就是不会应该怎么办?for循环这就有点蒙了。。我说这东西没啥办法,就是需要练习,然后我就给他除了几个题,让他做了一下,做完之后他感觉果然熟悉了很多,今天发出来大家也看一下,希望对大家有所帮助。
刚才谢谢那位朋友给我指出有些空格没有打出来 现在贴上照片会好一些:


这几个例子联系完了,对for循环的使用就差不多啦。其实不仅仅是for循环,所有的程序都是敲出来练出来的,只有多多联系,才能有所进步。希望大家都能学习顺利,有问题我们大家一起交流学习。

刚才发现了这个帖子已经火了,为了回报大家的支持,现在开始更新代码:
1、第一题
思路:这个题很简单,因为每行都是三个,所以这有两种写法。这就有了一个规律,每行都一样,所以可以使用一层循环。

  1. #include <stdio.h>

  2. int main(){
  3.         int i = 0;
  4.     for (i = 0; i < 3; i++) {
  5.         printf("***\n");
  6.     }
  7.         return 0;
  8. }
复制代码

还有一种就是用两种循环:
  1. #include <stdio.h>

  2. int main(){
  3.     for (int i = 0; i < 3; i++) {//一共三行
  4.         for (int j = 0; j < 3; j++) {//每行三个
  5.             printf("*");
  6.         }
  7.         printf("\n");//打印完三个*之后,换行
  8.     }
  9.         return 0;
  10. }
复制代码

2、第二题思路:第二个题其实是在第一个题基础上的升级,做这个需要观察规律,每一行“*”的个数,就是行号(如果行号在1开始)。但是我们的数组,或者程序员相关的一起,都是从0开始的,所以每行“*”的个数,就是行号+1.
  1. #include <stdio.h>

  2. int main(){
  3.     for (int i = 0; i < 3; i++) {//一共三行
  4.         for (int j = 0; j < i + 1; j++) {//每行的个数比i多一个
  5.             printf("*");
  6.         }
  7.         printf("\n");//打印完三个*之后,换行
  8.     }
  9.         return 0;
  10. }
复制代码

3、第三题
思路:这个题也是在第二题上增加了一点点难度,不是只是简简单单的两层循环,还是要观察每行“*”的个数和行号的关系,每行最多是3个,那么每行“*”的个数等于 3 减去行号,所以程序如下:
  1. #include <stdio.h>

  2. int main(){
  3.     for (int i = 0; i < 3; i++) {//一共三行
  4.         for (int j = 0; j < 3 - i; j++) {//每行的个数比i多一个
  5.             printf("*");
  6.         }
  7.         printf("\n");//打印完三个*之后,换行
  8.     }
  9.         return 0;
  10. }
复制代码

4、第四题
思路:每个题都是循循渐进的。但是这个题还是需要有一点点的算法思想,那就是分治法。首先观察一下题目,题目由空格和*组成。所以我们可以采用分治的思想,就是打印空格 和 打印“*”。那么下面的话,就是每行打印多少个空格和多少个“*”。
a)打印*号,只看个数的话,这个就和2题是一样的。
b)打印空格,只看个数的话,其实和第3题是差不多的,只是每行比第三题少一个。
所以最后,就是打印位置的为题,先打印空格、然后在打印“*”。所以程序就比较容易啦:
  1. #include <stdio.h>

  2. int main(){
  3.     for (int i = 0; i < 3; i++) {//一共三行
  4.         for (int j = 0; j < 3 - i - 1; j++) {//先打印空格
  5.             printf(" ");
  6.         }
  7.         for (int j = 0; j < i + 1; j++) {//然后在打印*号
  8.             printf("*");
  9.         }
  10.         printf("\n");//打印完之后,换行
  11.     }
  12.         return 0;
  13. }
复制代码

今天先更新到这里,下面的题,大家可以根据我的思路,先写一下,贴出来咱们进行交流。明天继续更新。。谢谢大家的支持。


作者: 打滚的橘子    时间: 2015-11-8 18:57
有些空格没出来
作者: 正在输入中...    时间: 2015-11-8 19:36
打滚的橘子 发表于 2015-11-8 18:57
有些空格没出来

感谢提供问题,现在已经修复。
作者: 打滚的橘子    时间: 2015-11-8 20:11
正在输入中... 发表于 2015-11-8 19:36
感谢提供问题,现在已经修复。

这几个都还好,视频里讲了。我看到一个打印空心菱形的,还在想怎么写......
作者: 正在输入中...    时间: 2015-11-8 22:11
打滚的橘子 发表于 2015-11-8 20:11
这几个都还好,视频里讲了。我看到一个打印空心菱形的,还在想怎么写...... ...

用给你提供一个思路吗?其实思路都一样,大的问题分解成小的问题,然后在解决小的问题就可以啦!
作者: arhui    时间: 2015-11-8 22:16
for循环用得很66666
作者: PlatoTu    时间: 2015-11-8 23:38
for循环感觉so easy!!!
作者: 打滚的橘子    时间: 2015-11-9 23:58
正在输入中... 发表于 2015-11-8 22:11
用给你提供一个思路吗?其实思路都一样,大的问题分解成小的问题,然后在解决小的问题就可以啦! ...

写出来了,前面还能先思考,调试了3次之后脑袋dang掉了,然后调试N次,根据调试结果慢慢改循环条件,是调试出来的,不是想出来的了.......下面是代码,用的c++写的,不要在意细节......
  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.   int i=0,j=0,a=0,k=0,n=0,m=0;
  6.   cout<<"请输入一个数作为菱形的边长:";cin>>a;
  7.   cout<<"菱形的边长为:"<<a<<endl;

  8.   //打印上半部分
  9.   for(i=1;i<=a;i++){
  10.   //打印第一条斜线
  11.           for(j=0;j<a-i;j++)  { cout<<' ';}    //输出空格
  12.           cout<<'*';                          // 输出*号
  13.   //打印第二条斜线
  14.           if(i>1){
  15.             for(k=2;k<2*i-1;k++)  {cout<<' ';}
  16.             cout<<'*';
  17.           }
  18.         cout<<endl;      //换行
  19.   }
  20.   //打印下半部分
  21.   for(i=1;i<a;i++){
  22.   //打印第三条斜线
  23.       for(n=0;n<i;n++)   { cout<<' ';}
  24.           cout<<'*';
  25.   //打印第四条斜线
  26.           if(i!=a-1){
  27.           for(m=2;m<2*(a-i)-1;m++)  {cout<<' ';}
  28.           cout<<'*';
  29.           }
  30.    cout<<endl;            //换行
  31.   }
  32.   return 0;
  33. }  
复制代码

作者: 尖锐湿疣丶陈赫    时间: 2015-11-10 22:39
可以的!!!!!!!!
作者: duanwenkang    时间: 2015-11-10 23:19
支持一下,不过有好几处错别字,做程序是需要认真滴
作者: 正在输入中...    时间: 2015-11-10 23:45
arhui 发表于 2015-11-8 22:16
for循环用得很66666

用的很溜就好,主要是给那些刚学程序,不知道如何练手的人准备的。。。大神请无视我 哈哈
作者: 正在输入中...    时间: 2015-11-10 23:46
PlatoTu 发表于 2015-11-8 23:38
for循环感觉so easy!!!

果然还是由很大大的,以后还请多多指教呢。。。。
作者: 正在输入中...    时间: 2015-11-10 23:47
尖锐湿疣丶陈赫 发表于 2015-11-10 22:39
可以的!!!!!!!!

可以说明没问题啦,有时间我总结个指针的,到时候欢迎来戳。。。
作者: 正在输入中...    时间: 2015-11-10 23:49
duanwenkang 发表于 2015-11-10 23:19
支持一下,不过有好几处错别字,做程序是需要认真滴

好吧,错别字、、、、、我以后肯定好好改,程序肯定不会出错别字。。。。T_T
作者: 不带走一片唇印    时间: 2015-11-11 00:11
感觉像C 的 for
作者: HI耀玮    时间: 2015-11-11 00:38
没有学会怎么办呢
作者: 李凯666    时间: 2015-11-11 08:31
好棒啊!!!!!!!!!
作者: 许本亮    时间: 2015-11-11 09:22
for循环用的很多,会越来越熟的
作者: hei军    时间: 2015-11-11 19:15
觉得也是,多敲敲自然就会了,感谢分享
作者: we7765604    时间: 2015-11-11 20:13
for循环可以有很多组合,嵌套循环,或者在加上判断语句都可以的。
作者: 能不能行    时间: 2015-11-11 20:42
感谢分享!!!!
作者: 心程变    时间: 2015-11-11 20:54
的确,for循环多练习练习就好
作者: 萧海枫凌    时间: 2015-11-11 21:10
学习受用了!
作者: 海贼    时间: 2015-11-11 21:18
还没讲到,先保留以后留着练习。
作者: knight_zfh1288    时间: 2015-11-11 23:06
就是需要多练习
作者: daitoudainaoali    时间: 2015-11-11 23:18
赞.厉害,加油!
作者: 熊德玺    时间: 2015-11-12 01:02
打滚的橘子 发表于 2015-11-9 23:58
写出来了,前面还能先思考,调试了3次之后脑袋dang掉了,然后调试N次,根据调试结果慢慢改循环条件,是调 ...

大兄弟啊   你可以用数组啊  不用这么累吧  全用位运算......
作者: 正在输入中...    时间: 2015-11-12 23:24
we7765604 发表于 2015-11-11 20:13
for循环可以有很多组合,嵌套循环,或者在加上判断语句都可以的。

最后的那个其实就是for循环和选择语句结合使用的嘛。。。。。
作者: 正在输入中...    时间: 2015-11-12 23:27
hei军 发表于 2015-11-11 19:15
觉得也是,多敲敲自然就会了,感谢分享

恩恩,多多的练习,多多的找指尖上的感觉,很多时候都是听课都能听明白,就是写的时候模糊,最好的方式就是找两个人或者去网上找些题做做,这样就能锻炼思路。。。
作者: 正在输入中...    时间: 2015-11-12 23:28
HI耀玮 发表于 2015-11-11 00:38
没有学会怎么办呢

哪个没学会?我给你写个列程,不会的我们多交流,争取都能学会。
作者: 正在输入中...    时间: 2015-11-12 23:29
不带走一片唇印 发表于 2015-11-11 00:11
感觉像C 的 for

对,主要就是为了让大家联系一个for循环的使用,就是多多联系一下。。
作者: 正在输入中...    时间: 2015-11-12 23:32
李凯666 发表于 2015-11-11 08:31
好棒啊!!!!!!!!!

都是为了让大家能多多熟悉,多多联系,搞技术的都是一家人。
作者: springD    时间: 2015-11-13 00:09
赞一个,熟能生巧,务必多敲,感谢分享。
作者: 打滚的橘子    时间: 2015-11-14 06:24
熊德玺 发表于 2015-11-12 01:02
大兄弟啊   你可以用数组啊  不用这么累吧  全用位运算......

今天才学到数组。用数组怎么弄?
作者: lixiang73033    时间: 2015-11-14 12:41
赞同,代码就是多敲
作者: toveyloves    时间: 2015-11-14 20:38
顶!!希望楼主能继续给一些练习题
作者: 1170191405    时间: 2015-11-14 21:25
which支持!
作者: cube川    时间: 2015-11-14 22:21
多用就6666了
作者: 正在输入中...    时间: 2015-11-14 23:36
toveyloves 发表于 2015-11-14 20:38
顶!!希望楼主能继续给一些练习题

好的,那我就尽量多花些时间去整理下吧、、希望能帮到大家。。。。
作者: blazehot18    时间: 2015-11-15 00:28
赞一个!继续出新
作者: pt8422068    时间: 2015-11-15 00:37
好溜,大神啊,厉害
作者: 约吗^_^    时间: 2015-11-15 21:36
在OC中有4中循环方式,分别是for,while,for...in..,block最常用的有三种:for,for...in...和block,苹果提倡使用block实现功能,而对于我们来说,block也最为快捷
作者: 陌忆    时间: 2015-11-16 11:20
感觉不怎么会了。。。
作者: 正在输入中...    时间: 2015-11-16 23:27
熊德玺 发表于 2015-11-12 01:02
大兄弟啊   你可以用数组啊  不用这么累吧  全用位运算......

你不会告诉他,要用一个二维数组吧。。。。。。。{:2_32:}
作者: 正在输入中...    时间: 2015-11-16 23:29
约吗^_^ 发表于 2015-11-15 21:36
在OC中有4中循环方式,分别是for,while,for...in..,block最常用的有三种:for,for...in...和block,苹果提倡 ...

其实在oc中几乎不用while,几乎都是for in 、 for 或者block,这几个记得有效率上的区别来着,for最慢、其他两个 那个最快 记不太清啦。。。
作者: 正在输入中...    时间: 2015-11-16 23:40
陌忆 发表于 2015-11-16 11:20
感觉不怎么会了。。。

感觉不会的时候就多敲代码,先思考怎么实现,脑子中构思好了,再去写代码。。。。
作者: 刘耀宗    时间: 2015-11-16 23:48
不错,还是可以的
作者: 流水落花    时间: 2015-11-17 00:53
多敲,多打 积累...
作者: 姚春林    时间: 2015-11-17 09:18
好!!!
作者: 正在输入中...    时间: 2015-11-17 23:38
刘耀宗 发表于 2015-11-16 23:48
不错,还是可以的

不知不觉的已经积累了三页啦。。。有时间多多写帖子
作者: 正在输入中...    时间: 2015-11-17 23:39
姚春林 发表于 2015-11-17 09:18
好!!!

都敲完了没?敲完了 才算数的。。。。。。
作者: love阿木蛋花    时间: 2015-11-17 23:43
不服不行呀  必须得福啊  啊哈哈
作者: 正在输入中...    时间: 2015-11-18 23:22
love阿木蛋花 发表于 2015-11-17 23:43
不服不行呀  必须得福啊  啊哈哈

哈哈,做一只幽默的程序猿很不错、、、、、
作者: 正在输入中...    时间: 2015-11-20 23:07
刚发现,这个帖子已经标记为火啦、、、、谢谢大家的支持。。。。。
作者: 正在输入中...    时间: 2015-11-20 23:44
代码1-4题已经更新。。。大家可以参考。。。。
作者: 一枚小刁民    时间: 2015-11-20 23:46
可以 啊      
作者: mr.late    时间: 2015-11-21 00:42
顶一个
作者: 正在输入中...    时间: 2015-11-21 01:12
mr.late 发表于 2015-11-21 00:42
顶一个

嘿嘿,时间不早了,洗洗睡了,明天继续更新。。。
作者: 正在输入中...    时间: 2015-11-21 12:41
一枚小刁民 发表于 2015-11-20 23:46
可以 啊

今天会继续更新的。。。。。轻继续关注。。。
作者: 正在输入中...    时间: 2015-11-23 23:49
附源码之后,就然没有人看。。。没有动力更下去啦
作者: 超人不会飞啊    时间: 2015-11-24 09:37
是深圳 IOS 二期的童鞋嘛?
作者: 正在输入中...    时间: 2015-11-24 22:44
超人不会飞啊 发表于 2015-11-24 09:37
是深圳 IOS 二期的童鞋嘛?

不是深圳的、、我大帝都。。。。。。
作者: IT-capfer    时间: 2015-11-25 01:34
强烈支持楼主ing
作者: 长厢厮守℡    时间: 2015-11-25 08:19
感谢分享,最近一直在纠结for循环。。
作者: Tactful丶boy    时间: 2015-11-25 18:19
支持下,顶起




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2