wai1216 发表于 2016-4-17 15:47:06

第九课作业:平方数(goto版本) 以及 简单加密字符

本帖最后由 wai1216 于 2016-4-17 21:52 编辑

看第九课开始的时候,Nisy老师提到了平方数的作业,于是开始用两个for和if加上一个break,实现了一次。
后来看到Nisy老师所讲的goto,于是在看完视频后,开始试着用goto写了一次。其中对于两个for循环有的逻辑没理清,在调试了几次后终于弄清。
在分析哪里出错的时候,感觉就是for循环的一步步然后与goto相对应进行判断分析。
关键是一个goto 循环体内的东西,goto 跳出。以及多个for的时候对于循环初始化的清空

代码如下:main()
{
      int i = 0;
      int j = 0;
      int k = 0;
      int a;

scanf:
      scanf("%d",(a + i));
      i++;
      goto start1;

start1:
      if(i < 10)
      {
                goto scanf;      
      }

      i = 0;/* 将0重新放入i所在的空间内 */

af:
      if(*(a + i) == j * j)
      {
                k++;
                printf("No.%d = %d | ",k,*(a + i));
                i++;
                j = 0;
                goto for_w;                                             /* 注意于else中的goto for_n之间的逻辑区别*/
      }
      else
      {
                j++;
                goto for_n;
      }

for_n:
      if(j <= *(a + i))
      {
                goto af;               
      }
      else
      {
                i++;
                j = 0;                                    /* 将j的空间内的数据重新变为0 */
                goto for_w;
      }

for_w:
      if(i < 10)
      {
                goto for_n;
      }

      printf("\n");
      printf("all:%d",k);
}
---------------------------------------------------------------------
一个简单的取反
代码如下:
void scr1(char *str)
{
      int i = 0;
      for( ; *(str + i) ; i++)
      {
                *(str + i) = ~*(str + i);
      }
      return;
}

void show(char *str)
{
      int i = 0;
      for( ; *(str + i) ; i++)
      {
               printf("%2X",*(str + i));
      }
      printf("\n");
      return;
}

main()
{
      char *str = "Hello,world";
      printf("before:");
      show(str);
      scr1(str);
      printf("now:");
      show(str);
      scr1(str);
      printf("restore:");
      show(str);
}



页: [1]
查看完整版本: 第九课作业:平方数(goto版本) 以及 简单加密字符