版主
最后登录1970-1-1
在线时间 小时
注册时间2013-5-3
|
本帖最后由 玄来玄去 于 2013-7-28 20:55 编辑
问题1. 不能使用分号,编写一个“Hello World”程序。
问题2. 如何用C语言打印“ I am print %”?
问题3. 不能使用">、<、>=、<=“等关系运算符,找到3个整数a ,b ,c中的最小的数。
问题4. 程序中不使用“+”法运算,实现整数加法运算。
参考程序:
1. 这是一个比较有趣的问题,但是答案往往十分简单,所采用的是最基本的语句,参考程序如下:
[code=cpp]#include <stdio.h>
void main()
{
if(printf("Hello World!\n")){} //可以换成while等
}[/code]
2. 对于初学者来说,有不少人不知道如何打印百分号这种类型的符号,其实也很简单,无非是在前面加个百分号而已。
[code=cpp]#include <stdio.h>
int main()
{
printf("I am print %%!");
}[/code]
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
|
参考程序:
[code=cpp]#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(a,b));
}[/code]
4. 不能使用"+"法运算,自然想到当初学的计算机组成原理的二进制相加的知识,采用位运算来实现相加:
[code=cpp]
#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;
} [/code] 以上便是C语言的几个有趣的问题,希望学习C语言的童鞋们会喜欢,以上代码均在CodeBlocks上运行无误。第一次发帖子,求各位大神轻喷!小弟先谢过了!
|
|