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上運行無誤。第一次發帖子,求各位大神輕噴!小弟先謝過了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM