C语言的几个有趣问题
问题1. 不能使用分号,编写一个“Hello World”程序。
问题2. 如何用C语言打印“ I am print %”?
问题3. 不能使用">、<、>=、<=“等关系运算符,找到3个整数a ,b ,c中的最小的数。
问题4. 程序中不使用“+”法运算,实现整数加法运算。
参考程序:
1. 这是一个比较有趣的问题,但是答案往往十分简单,所采用的是最基本的语句,参考程序如下:
#include <stdio.h> void main() { if(printf("Hello World!\n")){} //可以换成while等 }
2. 对于初学者来说,有不少人不知道如何打印百分号这种类型的符号,其实也很简单,无非是在前面加个百分号而已。
#include <stdio.h> int main() { printf("I am print %%!"); }
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
|
参考程序:
#include <stdio.h> #define min(a,b) (((a)-(b)) >> 31 ? (a) : (b)) int main() { int a , b , c; a = -30; b = 59; c = 56; printf("min = %d",min(min(a,b),c)); }
4. 不能使用"+"法运算,自然想到当初学的计算机组成原理的二进制相加的知识,采用位运算来实现相加:
#include<stdio.h> #include<stdlib.h> int main() { int x,y; //输入的两个数 int inBit = 0x0000; int tailBit = 0x0001; int result = 0,Rbit; int XlastBit,YlastBit; int inBitREP; printf("please input two numbers :"); scanf("%d%d",&x,&y); while(tailBit) { XlastBit = x&tailBit; YlastBit = y&tailBit; Rbit = XlastBit^YlastBit^inBit; inBitREP = 0; if( (XlastBit == tailBit && YlastBit == tailBit) || ( XlastBit == tailBit && inBit == tailBit) || (YlastBit == tailBit && inBit == tailBit)) //超过两个1,则进位为1 { inBitREP = tailBit<<1; } inBit = inBitREP; result = result|Rbit; tailBit = tailBit<<1; } printf("The result is %d\n",result); system("pause"); return 0; }
以上便是C语言的几个有趣的问题,希望学习C语言的童鞋们会喜欢,以上代码均在CodeBlocks上运行无误。第一次发帖子,求各位大神轻喷!小弟先谢过了!
作者:大卫david
原创作品,如需转载,请与作者联系。否则将追究法律责任。