日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言解逻辑问题的一般步骤,C语言面试题---逻辑短路问题

發布時間:2025/5/22 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言解逻辑问题的一般步骤,C语言面试题---逻辑短路问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

版權聲明:本文轉載于公眾號TeachPlus---C語言面試題---邏輯短路問題

寫出下面程序的輸出

#include?

int main()

{

int a=5,b=6,c=7,d=8,m=2,n=2;

(m=ad);

printf("%d\t%d",m,n);

return 0;

}

本題答案

答案為1,2

本題解析

本題的考察重點在于邏輯運算符的短路問題。

在邏輯判斷中,常常需要判斷多個條件,如:

if A and B;

這時,當A為false時,無論B值是什什么,結果都為false,

所以可以不用判斷B,直接跳過。這種情況稱為邏輯短路路。

邏輯短路有許多應用,如

if(name != NULL && name.equals("admin"))

{

//do somethings

}

這種情況下當name為null時,直接跳過判斷name.equals("admin"),

如果沒有短路路效應,后面是有可能報空指針異常的。

還有,滿足某條件時執行函數

f != null && ff();

這樣的語句,等價于

if? (f != null)

{

f();

}

但是寫法更更為簡練。

所以,對于本題來說,因為使用的是邏輯或運算符,

因此只要兩個條件中有一個為真,則整體為

真,計算的時候先計算m=ad不予計算,故該程序的輸出為1,2

相關知識點

如果對上面的程序作出如下修改:

# include?

int? main()

{

int a=5,b=6,c=7,d=8,m=2,n=2;

(m=a>b)&&(n=c>d);

printf("%d\t%d",m,n);

}

則輸出值為0,2

該題的迷惑性更為大一點,程序首先計算m=a>b的值,

因為a=4,b=6,所以a>b不成立,取值為0,

即m=0,整體表達式為假。因為使用的是邏輯與運算符,

必須兩遍都為真,整體為真,所以當程序

判斷一個條件為假的時候,則進行短路路操作,

第二個表達式不予就算,故該程序的整體輸出為0,2.

接下來可以看一道更更為巧妙的面試題,這是微軟的一道題目:

原題是:求 1 + 2 + 3 + … + n

要求:

不能用乘除法,不能用if if, while, do_while, for, switch, case,

不能用(a < b ? a : b)三目運算符

答案應為

# include?

int? test( int n ,? int *sum)

{

n&& test(n-1,sum);

return *sum += n;

}

int? main()

{

int ret = 0;

test(100,&ret);

printf("%d\n",ret);

return 0;

}

如果沒有那么多的限制的話,這是一道入門級的題目,但是正是因為有那么多的限制,

所以這道題目才變得有意思起來,這道題目主要考察兩個方面,

一個是遞歸的使用,一個就是邏輯短路的使用了。

遞歸的使用是顯而易見的,不再贅述,而對于邏輯短路來說,

用的就比較精妙了,大家可以看一下,作為參考。

總結

以上是生活随笔為你收集整理的c语言解逻辑问题的一般步骤,C语言面试题---逻辑短路问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。