`
joking0ne
  • 浏览: 9433 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

C puzzle(1)

 
阅读更多

C puzzle原文地址:http://www.gowrikumar.com/c/index.html

1.以下预期输出是数组array[]中各个元素,而实际输出结果为空。 

  #include<stdio.h>
  #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
  int array[] = {23,34,12,17,204,99,16};
  int main()
  {
      for(int d=-1;d <= (TOTAL_ELEMENTS-2);d++)
          printf("%d\n",array[d+1]);
      return 0;
  }

分析:sizeof操作符以字节形式给出了其操作数的存储大小,其中操作数可以是一个表达式或括在括号内的类型名,即sizeof(type)、sizeof(var_name)或sizeof var_name,操作数的存储大小由操作数的类型决定,返回的是unsigned类型,这样TOTAL_ELEMENTS-2就为5。d是int类型,在与无符号数TOTAL_ELEMENTS-2作比较的时候会进行无符号类型保护,转换为unsigned类型,所以for的条件判断为假,跳出循环。根据IEEE的内存结构,有符号正数的最高位为标志位,用来标识正负数,正数的最高位为0,负数的最高位为1,因此二进制比较时,负数永远大于正数。

(#define的用法见http://blog.csdn.net/benny5609/article/details/2314541

修改如下,则可运行。

          int m=TOTAL_ELEMENTS-2;
          for(int d=-1;d <= m;d++)
             printf("%d\n",array[d+1]);

 还是不知道啊!!!纠结T0T。。。

 ========================================================================

2.不能运行:

 

void OS_Solaris_print()
{
        printf("Solaris - Sun Microsystems\n");
}

void OS_Windows_print()
{
        printf("Windows - Microsoft\n");

}
void OS_HP-UX_print()
{
        printf("HP-UX - Hewlett Packard\n");
}

int main()
{
        int num;
        printf("Enter the number (1-3):\n");
        scanf("%d",&num);
        switch(num)
        {
                case 1:
                        OS_Solaris_print();
                        break;
                case 2:
                        OS_Windows_print();
                        break;
                case 3:
                        OS_HP-UX_print();
                        break;
                default:
                        printf("Hmm! only 1-3 :-)\n");
                        break;
        }

        return 0;
}
 原因:变量名由字母、数字和_组成,且第一个字符必须为字母!!

===========================================================================

3.continue用于使用for、while和do-while语句开始下一次循环的执行:在while和do-while语句中,continue意味着立即执行测试部分;在for循环中,则意味着控制转移到递增循环变量部分。continue只用于循环语句,不用于switch语句。

break语句用于从for、while和do-while等循环中提前退出。break能使程序从switch语句或最内层循环中立即跳出。

===========================================================================

4.一下程序输出“hello-out”

 

  #include <stdio.h>
  #include <unistd.h>//VS中无此文件,调用<windows.h>的Sleep()方法
  int main()
  {
          while(1)
          {
                  fprintf(stdout,"hello-out");
                  fprintf(stderr,"hello-err");
                  sleep(100);
          }
          return 0;
  }
 程序连续输出hello-outhello-err,自动转行。

 

stdout -- 标准输出设备 (printf("..")) ;stderr -- 标准错误输出设备。两者默认向屏幕输出。

但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。用法:

fprintf(stderr, "Can't open it!\n");

fprintf(stdout, "Can't open it!\n");

========================================================================

5.以下程序运行结果为12   f(1,2) 

 

  #include <stdio.h>
  #define f(a,b) a##b
  #define g(a)   #a
  #define h(a) g(a)

  int main()
  {
          printf("%s\n",h(f(1,2)));
          printf("%s\n",g(f(1,2)));
          return 0;
  }

        这里要说一下宏的展开次序,如果宏有参数,如f(a,b)中的a和b,我们称之为形参,而宏实际的参数我们称之为实参,如f(1,2)中的1和2。宏的展开是个很复杂的过程,但可以用以下三步来简单描述:

首先用实参替换形参,将实参代入宏文本中;

然后如果实参也是宏,则展开实参;

最后再继续处理宏替换后的宏文本,若宏文本也包含宏则继续展开,否则完成展开。

    但是有个例外,那就是第一步后,将实参代入宏文本后,实参之前如果遇到字符“#”或“##”,即使实参是宏,也不再展开实参,而是当作文本处理a##b表示连接,结果为ab;#a表示加引号,结果为“a”。

===========================================================================

 6.计算某数二进制中1的个数,程序如下:

 

  int CountBits (unsigned int x )
  {
      static unsigned int mask[] = { 0x55555555,
          0x33333333,
          0x0F0F0F0F,
          0x00FF00FF,
          0x0000FFFF
          } ;
          int i ;
          int shift ; /* Number of positions to shift to right*/
          for ( i =0, shift =1; i < 5; i ++, shift *= 2)
                  x = (x & mask[i ])+ ( ( x >> shift) & mask[i]);
          return x;
  }

 二分法。逻辑分析参考http://wjboy49.iteye.com/blog/695395

==========================================================================

7.fun(void)和fun()区别:

   在C++中无区别,均表示函数fun不接受任何参数,fun(a)因无法编译而报错。而在C中,若定义fun(void)则fun(a)因无法编译而报错,而定义fun()则fun(a)可编译运行。

============================================================================

8.以下程序输出为0   1095237632

  int main()
  {
   float a = 12.5;
   printf("%d\n", a);
   printf("%d\n", *(int *)&a);
   return 0;
  }

 原因:%d 按照十进制整数打印;%6d 按照十进制整数打印,至少6个字符宽;%f 按照浮点数打印;%6f 按照浮点数打印,至少6个字符宽;%.2f 按照浮点数打印,小数点后有两位小数;%6.2f 按照浮点数打印,至少6个字符,小数点后有两位小数。

 

 

 

 

分享到:
评论

相关推荐

    the c puzzle book

    从给定的信息来看,标题和描述提及的是一本关于C语言的谜题书籍,即《C Puzzle Book》。虽然描述中的信息较为简短且含糊,但我们可以从书名推测,这本书可能包含了一系列与C语言相关的编程挑战或谜题,旨在帮助读者...

    The C Puzzle Book

    The C Puzzle Book

    15 puzzle C语言IDA* 求解算法

    15 Puzzle,又称15数字谜题,是一种经典的智力游戏,玩家需要通过滑动15个数字方块,使得它们最终按照1到15的顺序排列,空白方块通常位于右下角。这个游戏的挑战在于寻找最短的解决步骤,而这正是IDA*算法大显身手的...

    c语言解惑(the c puzzle book).rar

    以前买过《Java语言解惑》这本书,感觉写得很不错。同时也就有种感觉:这本书应该有“前序”作品铺路。果然,就是这个资源。CSDN中有这个资源,不过2M多,网上搜索率高的都是这个10M多的,不容易下载。...

    8-puzzle(8字拼图)代码

    8字拼图(8-puzzle)是一个经典的数学游戏,它由一个3x3的网格组成,其中8个方块上分别标有数字1到8,还有一个空格。玩家的目标是通过移动这些方块,使得它们按照正确的顺序排列,即1到8依次从左上角到右下角排列。...

    the C puzzle book

    尽管原文内容似乎是随机字符,并没有提供具体的知识点,但基于标题“C Puzzle Book”、描述以及标签,我们可以围绕C语言的一些核心概念和有趣谜题来构建相关的知识点。 ### C Puzzle Book 知识点概览 #### 1. ...

    puzzle c.pdf

    本文档“puzzle c.pdf”主要聚焦于C语言编程中的各种问题与谜题,旨在帮助读者理解并解决C编程过程中遇到的各种难题。文档作者Gowri Kumar分享了一系列有趣的C编程题目,这些问题既包括常见的类型错误,也涵盖了一些...

    用Qt(C++)编写的15puzzle与8puzzle游戏.zip

    用Qt(C++)编写的15puzzle与8puzzle游戏.zip用Qt(C++)编写的15puzzle与8puzzle游戏.zip用Qt(C++)编写的15puzzle与8puzzle游戏.zip用Qt(C++)...puzzle游戏.zip用Qt(C++)编写的15puzzle与8puzzle游戏.zip用Qt(C

    C语言解惑(中文清晰版)The C Puzzle Book.rar

    本书脱胎于作者在C语言的摇篮——贝尔实验室教授C语言的讲稿,几乎涵盖了C语言各个方面的难点,并包含了一些其他书籍很少分析到的问题。在每个谜题后面都有详尽的解题分析,使读者能够清晰地把握C语言的构造与含义,...

    8_Puzzle_-_source.zip_8 puzzle_8 puzzle A*_8-puzzle_visual c

    8 Puzzle 是一个经典的逻辑谜题,也被称为滑块游戏,由9个正方形格子组成,其中8个格子上标有数字1到8,另一个空格可以移动。玩家的目标是通过滑动数字方块,将初始混乱的布局重新排列成预设的正确顺序,通常是1到8...

    C语言单词匹配矩阵- Word Search Puzzle

    1. **字符串处理**:在Word Search Puzzle游戏中,单词是主要的数据元素。C语言中的字符串是字符数组,处理字符串涉及到对字符数组的操作,如复制(strcpy)、比较(strcmp)和查找(strchr)等。在本游戏中,我们...

    C_Eight Puzzle_八数码

    1. **数据结构**:设计合适的数据结构来表示棋盘状态,如二维数组或链表,同时存储g值和h值。 2. **邻接关系**:定义相邻状态的生成函数,模拟棋盘上数字的移动规则。 3. **优先队列**:实现优先队列的数据结构,...

    java puzzle_sun.pdf

    1. **我最喜爱的C语言谜题**:一个包含多层指针的C语言示例,展示了C语言中指针操作的复杂性。 2. **Java编程谜题**: - 短小的程序片段,但行为令人困惑。 - 程序会输出什么?(选择题) - 揭示谜底并解释原因。...

    testC_sum455_puzzle_

    在描述中提到的"C language test 15-puzzle"进一步确认了这是一次涉及C语言的测试,而15拼图游戏通常指的是一个经典的智力游戏,玩家需要通过滑动15个数字方块到正确的位置,其中有一个空格允许其他方块移动。...

    并行15puzzle mpi C程序

    15puzzle_mpi西安电子科技大学 霍老师并行计算程序作业第5题 有些小的BUG,但能看出搜索效果.

    java puzzle

    - (c) Throws exception - (d) None of the above 正确答案是什么? #### Mystery Revealed 这段代码看似简单,但在执行时可能会出现非直观的结果。原因在于`Set&lt;Short&gt;`中存储的是`Short`对象,而我们在移除元素...

    c-puzzle-book-answers:《 The C Puzzle Book》第二版中针对所选问题的讨论答案

    c-puzzle-book-answers 对于第2版​​C拼图书中的选定问题,提供带有评论/讨论的答案。 由Alan R. Feuer()。 (不要将此与混淆,这也是一个值得一提的,但完全不同。) 印刷的编程书籍的数量在20年中几乎没有...

    C puzzle解答

    解答C puzzles 2009/11/26: 对42-45进行了解答 2009/09/16: 对第25题补充了参考材料 完成35~41的回答 2009/09/xx: 修改过n次了:-P 1. sizeof的运算结果大多数情况下是无符号整形(具体与

    Gba-Puzzle-Bobble:具有怪异主题的Puzzle泡泡副本。 使用Notepad ++在CArm组件中制造。 爱好项目:)。 https:www.youtube.comwatch?v = nBaU7Xpso-Q

    本文将深入探讨一个名为“GBA-Puzzle-Bobble”的项目,它是一个基于Game Boy Advance(GBA)平台的Puzzle Bobble风格的自定义游戏,采用Notepad++和C语言进行编程,并涉及了汇编语言的知识。该项目作为一个爱好项目...

    PUZZLE15_dfs_C++求解15拼图问题_bfs_

    在这个游戏中,一个4x4的网格中有一片空位,其余15片数字瓷砖(1到15)被打乱排列。目标是通过移动瓷砖,将它们按顺序排列在网格上。在这个问题中,我们将探讨如何使用深度优先搜索(DFS)、广度优先搜索(BFS)以及...

Global site tag (gtag.js) - Google Analytics