注册 登录
查看: 670|回复: 1

C语言的几个有趣问题

[复制链接]
发表于 2013-7-28 20:52:28 | 显示全部楼层 |阅读模式
本帖最后由 玄来玄去 于 2013-7-28 20:55 编辑

问题1. 不能使用分号,编写一个“Hello World”程序。

问题2. 如何用C语言打印“ I am print %”?

问题3. 不能使用">、<、>=、<=“等关系运算符,找到3个整数a ,b ,c中的最小的数。

问题4. 程序中不使用“+”法运算,实现整数加法运算。


参考程序:

1. 这是一个比较有趣的问题,但是答案往往十分简单,所采用的是最基本的语句,参考程序如下:

  1. #include <stdio.h>
  2. void main()
  3. {
  4.     if(printf("Hello World!\n")){}  //可以换成while等
  5. }

2. 对于初学者来说,有不少人不知道如何打印百分号这种类型的符号,其实也很简单,无非是在前面加个百分号而已。

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     printf("I am print %%!");
  5. }

3. 第3个问题有一定的挑战性,而且答案不止一个,此外,关系运算符有:

C语言提供6种关系运算符,如表所示:

运算符
名称
示例
功能
缩写
<
小于
a<b
a小于b时返回真;否则返回假
LT
<=
小于等于
a<=b
a小于等于b时返回真;否则返回假
LE
>
大于
a>b
a大于b时返回真;否则返回假
GT
>=
大于等于
a>=b
a大于等于b时返回真;否则返回假
GE
==
等于
a==b
a等于b时返回真;否则返回假
EQ
!=
不等于
a!=b
a不等于b时返回真;否则返回假
NE



参考程序:
  1. #include <stdio.h>
  2. #define min(a,b) (((a)-(b)) >> 31 ? (a) : (b))
  3. int main()
  4. {
  5.     int a , b , c;
  6.     a = -30;
  7.     b = 59;
  8.     c = 56;
  9.     printf("min = %d",min(a,b));
  10. }


4. 不能使用"+"法运算,自然想到当初学的计算机组成原理的二进制相加的知识,采用位运算来实现相加:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main()
  4. {
  5.     int x,y;   //输入的两个数
  6.     int inBit = 0x0000;
  7.     int tailBit = 0x0001;
  8.     int result = 0,Rbit;
  9.     int XlastBit,YlastBit;
  10.     int inBitREP;
  11.     printf("please input two numbers :");
  12.     scanf("%d%d",&x,&y);
  13.     while(tailBit)
  14.     {
  15.         XlastBit = x&tailBit;
  16.         YlastBit = y&tailBit;
  17.         Rbit = XlastBit^YlastBit^inBit;
  18.         inBitREP = 0;
  19.         if( (XlastBit == tailBit && YlastBit == tailBit) || ( XlastBit == tailBit && inBit == tailBit) || (YlastBit == tailBit && inBit == tailBit))  //超过两个1,则进位为1
  20.         {
  21.             inBitREP = tailBit<<1;
  22.         }
  23.         inBit = inBitREP;
  24.         result = result|Rbit;
  25.         tailBit = tailBit<<1;
  26.     }
  27.     printf("The result is %d\n",result);
  28.     system("pause");
  29.     return 0;
  30. }
   以上便是C语言的几个有趣的问题,希望学习C语言的童鞋们会喜欢,以上代码均在CodeBlocks上运行无误。第一次发帖子,求各位大神轻喷!小弟先谢过了!






回复

使用道具 举报

发表于 2016-9-21 19:36:58 | 显示全部楼层
(((a)-(b))&nbsp;>>&nbsp;31&nbsp;?&nbsp;(a)&nbsp;:&nbsp;(b)) 这是什么意思。求解
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部