【问题标题】:C Programming: Write name 15 times without loop?C 编程:在没有循环的情况下写 15 次名称?
【发布时间】:2014-09-07 21:26:20
【问题描述】:

我只是在第二周介绍 C 编程。到目前为止,我们所做的只是 hello world 并了解了数据类型以及每个数据类型中有多少位/字节/等以及简单的输入/输出之类的东西基础数学。

我本周的任务(由我的教授在线发布)是编写一个程序,将我的名字输出到屏幕上 15 次。

根据我到目前为止所学到的知识,除了简单地输入 printf("MyName\MyName\n...etc") 15 次之外,我应该怎么做呢?

感觉这个作业与我们目前所学的内容无关?是不是他给了我们错误的任务?我什至不知道从哪里开始。

请记住,我应该根据他迄今为止教给我们的内容来做这件事

【问题讨论】:

  • 我认为你是正确的,你只需要打印你的名字 15 次。我想你的 next 任务将做同样的事情,但使用循环结构,向你展示循环的好处。
  • 谢谢。第一周我们做了 Hello World 似乎很奇怪,而现在我们第二周仍然在做同样的事情。学习所有关于数据类型的知识很奇怪,但是让我们的作业基于第一周的课程。哦,好吧!
  • @Eric 作业与讲座的时间相差一两周是很常见的。
  • @usar:因为 3 人赞成,1 人反对。
  • 也许偷偷溜过puts("my name to the screen 15 times.");。仅当教授轻松时才有效。

标签: c loops


【解决方案1】:

可以使用宏扩展多次重复文字,但这可能超出了您当前在课堂上的进度范围。

#define REPEAT3(X) X;X;X;
#define REPEAT5(X) X;X;X;X;X;
#define REPEAT15(X) REPEAT5(REPEAT3(X));

int main()
{
  REPEAT15(printf("hello world\r\n");)

  return 0;
}

这里有一些关于宏的附加链接:

Tutorials - C programming tricks @ cprogramming.com
C preprocessor @ wikipedia (this is the thing that does the work of replacing/expanding macros)

【讨论】:

    【解决方案2】:

    递归;

    void myname(int countdown) {
       printf("My name is Eric\n");
       if (--countdown > 0) myname(countdown);
    } 
    int main() {
       myname(15);
    }
    

    【讨论】:

    • @specializt 我不这么认为,因为他/她只学会了显示“Hello World”和类似的东西,我认为这不能回答 OP 的问题
    • 对于普通学校来说可能是这样 - 但在我的国家,有些学校实际上期望达到这些学习水平
    • 如果规则是“使用已经涵盖的东西”,那么如果还没有涵盖循环,我宁愿怀疑递归已经存在。
    【解决方案3】:

    如果您也知道if 语句和标签,这些都是基本的,那么您可以执行以下操作:

    int counting=15;
    evil_01:
    printf("MyName\n");
    if (--counting!=0) goto evil_01;
    

    这不是答案的一部分,但使用这样的标签是不好的做法。

    【讨论】:

      【解决方案4】:

      又一个递归:

      #include <stdio.h>
      
      int main(int argc, char **argv) {
         if (argc <2 || argc > 16 ) return 0;
         printf("My name is %s\n", argv[1] );
         return main(argc+1, argv);
      }
      

      【讨论】:

      • 这太可怕了。我喜欢!
      【解决方案5】:
      #include <stdio.h>
      
      #define x printf("My Name\n")
      
      int main()
      {
        x;x;x;x;x;x;x;x;x;x;x;x;x;x;x;
        return 0;
      }
      

      【讨论】:

        【解决方案6】:

        这是另一种方式:

        #include <stdio.h>
        int main ( void ) {
            return (printf("%s", "\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        MyName\n\
        ") > 0);
        }
        

        【讨论】:

          猜你喜欢
          • 2014-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-31
          • 2015-12-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多