c語言面試題----printf()的參數

2021-03-02 TeachPlus

原文視頻:https://v.qq.com/x/page/c0508n4lwzm.html
問:下面代碼會輸出什麼?

intmain(void)

{

    int a = 10, b = 20, c = 30;

    printf("\n %d..%d..%d \n", a+b+c,(b = b*2), (c = c*2));

 

    return 0;

}

本題解析

答:輸出結果是:
110..40..60

這道題目來說的話,許多同學感覺無從下手,所以沒法回答。或者是有同學會認為是60..40..60這樣的答案,那麼需要注意的是,對於c語言來說,printf函數輸出雖然是自左向右輸出,但是計算的話,卻是從右向左計算的。
也就是先計算c = c* 2的結果,再計算b = b * 2的結果,最後計算a + b + c 的結果。
但是強烈建議,大家不要再printf函數中像這樣去寫,因為這樣會增加代碼閱讀的困難度,有可能會讓你的同事閱讀你的代碼的時候壓制不住心中打你的衝動。

相關知識點

對於printf函數,考點還是非常多的,比如說浮點數的輸出,或者類型不符的輸出。

浮點數

浮點數輸出:

    如下程序,將會輸出什麼結果?

    #include <stdio.h>

    int main()

    {

        float num = 13.48932f;

        printf("%2.2f\n",num);

        return 0;

    }

    答案:13.49

對于格式化輸出控制字符串來說,%2.2f,小數點後的2代表小數點後保留的位數,需要注意的是,這裡的保留時採用四捨五入的。
小數點前的2代表輸出的總寬度,包含小數點在內,但是如果不能夠將有效的數據完全輸出出來的話,則不起作用的。
在本例中,浮點數13.48932,小數點後保留兩位,是13.49,輸出位共5位,所以小數點前的2是不起作用的。

類型不符的輸出

所謂類型不符的輸出,就是前面的格式化控制字符串中聲明的數據類型,與實參給出的數據類型不匹配的情形。
如:

int a =20;

printf("%s\n",a);

 

對於類型不符的輸出的處理,其實是比較複雜的;
如上例中的輸出如果換做下面的形式:

#include<stdio.h>

int main()

{

    float num = 13.48932f;

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

    return 0;

}

輸出的結果就是:670084616

而且這個值有時候運行起來是不一樣的。
原因在於,printf並不會進行自動類型轉換,printf後邊的變量以棧的方式存儲,而%f、%d等轉換說明符的操作方式是從棧中讀取該符號對應數據類型的字節數,並不關心後邊對應的數據類型具體是什麼。
因為在內存中,浮點數是以指數冪的形式進行存儲的,所以如果直接讀取內存中數據按照十進位顯示出來的話,就會出現這樣的情況。
為了保證正確的輸出,可以在輸出前轉換數據類型,這樣不會有問題!如:

#include<stdio.h>

int main()

{

    float num = 13.48932f;

    printf("%d\n",(int)num);

    return 0;

}

輸出的結果就是:13

總結一下,printf語句一定要注意輸出格式和變量類型的匹配,不然會出現莫名奇妙的錯誤。

相關焦點

  • C語言面試54題
    C語言面試54題大家好,這期呢,我們談一下c語言的面試題。
  • 12個有趣的C語言面試題
  • 學習c語言筆記——C庫函數printf()
    c語言中的printf是什麼來的?」。我答:「它是一個函數,主要用來輸出運算結果。」 ,下面就給大家介紹C庫函數printf()使用方法。下面我們通過一個調用c庫函數的c語言案例來說明printf()函數的使用方法,如c語言1。
  • 來看一道"簡單的"C語言面試題
    今天來看到小題,複習一下。下面的輸出結果是什麼?這是一道非常常見的面試題,很多人一眼看過去就知道問題在哪了,是的,程序運行異常,可能出現Segmentation fault。分析首先第一個問題在於,str的值是沒有變的,也就是說執行getmemory之後,str還是NULL,即不能達到預期,使得str指向一個保存著字符串的內存區域。而這裡主要考察的是對C語言中參數值傳遞的理解。
  • 測試C語言水平的十道題,你敢挑戰嗎?
    作者:薛丁格的coding貓來源:C語言與程序設計各位,今天給大家搜集了10道比較好的面試題,涉及了指針、運算、結構體
  • C語言 printf詳解
    對長整型可以用"%lx"格式輸出。同樣也可以指定欄位寬度用"%mx"格式輸出。④u格式:以無符號十進位形式輸出整數。對長整型可以用"%lu"格式輸出。同樣也可以指定欄位寬度用「%mu」格式輸出。⑤c格式:輸出一個字符。⑥s格式:用來輸出一個串。有幾中用法%s:例如:printf("%s", "CHINA")輸出"CHINA"字符串(不包括雙引號)。
  • C語言程序設計試題1
    ,實際參數與宏定義中的形式參數類型應一致3.設char a='70';則變量a中(   )A.包含1個字符 B.包含2個字符 C.包含3個字符 D.是非法表示4.設long i=65539;,執行語句printf("%d",i);後的輸出結果是(   )
  • C語言 -- printf 的花式操作
    大家好,我是呆博~很開心可以在這裡給接著大家分享我的 C 語言學習筆記~因為微信對於代碼塊的支持並不是很好,所以代碼部分以截圖形式呈現,如果想獲取原始代碼可點擊底部 閱讀原文 獲得。在上一篇文章中,我們使用了 C 語言在屏幕中輸出了"Hello World!",但就printf這個函數而言,它的使用卻不只是這麼簡單。
  • C語言經典100題(13)
    首先給大家看看上一篇文章C語言經典100題(12)中第三部分編程題的答案:#include &
  • C/C++可變參數函數
    c/c++支持可變參數的函數,即函數的參數是不確定的。一、為什麼要使用可變參數的函數?一般我們編程的時候,函數中形式參數的數目通常是確定的,在調用時要依次給出與形式參數對應的所有實際參數。但在某些情況下希望函數的參數個數可以根據需要確定,因此c語言引入可變參數函數。這也是c功能強大的一個方面,其它某些語言,比如fortran就沒有這個功能。典型的可變參數函數的例子有大家熟悉的printf()、scanf()等。二、c/c++如何實現可變參數的函數?
  • C語言經典100題(42)
    首先給大家看看上一篇文章C語言經典100題(41)中第三部分編程題的答案:i=0static_i
  • C語言從入門到放棄(3)
    z=x; x=y; y=z; printf(\n\n輸出互換後的數); printf(\n第一個數是: %d,x); printf(\n第二個數是: %d,y); }    【相關知識】1.頭文件「stdio.h」C語言格式輸入函數
  • c語言——基本語法
    c語言由Dennis MacAlistair Ritchie創始,是普適性最強的一種電腦程式編輯語言,它不僅可以發揮出高級程式語言的功用,還具有彙編語言的優點。本期將簡潔地介紹c的基本語法。目錄1.輸入輸出2.選擇結構3.循環結構4.數組5.結構體6.子函數一、printf輸出格式:printf(格式控制,輸出表列);例如:printf("%d, %c\n", i, c);
  • C語言中可變參數的用法
    我們在C語言編程中會遇到一些參數個數可變的函數,例如printf()這個函數,它的定義是這樣的:   int printf( const char* format, ...);  它除了有一個參數format固定以外,後面跟的參數的個數和類型是可變的,例如我們可以有以下不同的調用方法:   printf("%d",i);   printf("%s",s);   printf("the number is %d ,string is:%s", i, s);   究竟如何寫可變參數的C函數以及這些可變參數的函數編譯器是如何實現的呢
  • 《C語言入門指南》中篇
    image-202010211216267497、C語言==不支持函數重載==,C語言支持==可變參數函數==#include<stdio.h>/* 請編寫一個函數 swap("a=%d,b=%d",a,b); getchar();}函數參數的傳遞方式我們在講解函數注意事項和使用細節時,已經講過C語言傳遞參數可以是==值傳遞(pass by value)==,也可以==傳遞指針(a pointer passed by value)==也叫==傳遞地址==或者 ==引用傳遞==兩種傳遞方式:1、值傳遞2、引用傳遞
  • C語言指針蒙圈?我們逆向把它按在地上摩擦!
    彙編語言中自己要關注堆棧平衡,再一個就是寄存器的保存與恢復,第三個就是調用參數約定。舉例來說,add %edx,%eax ,這個的結果在哪裡?這個都是指令直接就決定的,也就是我們的CPU設計時候,它的這條指令執行完,數據會放在哪裡。
  • C語言中的scanf與printf
    最初學習C語言程序設計時,經常需要通過鍵盤交互方式請用戶輸入內容,並需要將用戶計算的結果在屏幕上輸出。為實現這樣的操作,C語言提供了scanf與printf兩個函數,使用它們之前,一般需要包含stdio.h頭文件。語法是: #include 1. 使用scanf函數的注意事項。
  • 用C語言程序比大小及C語言程序的結構
    a,b");   //輸入變量a和b的值      c=max(a,b);   //調用max函數,將得到的值賦給c      printf("max=%d\n",c);   //輸出c的值      return 0;   //返回函數值為0}   //主題函數結束//求兩個整數中的較大者的max函數int max
  • C語言-輸入與輸出函數
    眾所周知,C語言需要輸入和輸出,那麼今天小編我就帶領大家去學習這個編程必不可少的輸入和輸出函數。一,首先我們先來學習輸出函數(printf)其意義是:按指定的格式輸出值。因此,函數在括號中的參數都由以下兩部分組成:1、 格式控制串:格式控制串是一個字符串,必須用雙引號括起來,它表示了輸入輸出量的數據類型。在printf函數中可以在格式控制串內出現非格式控制字符,這時在顯示屏幕上會顯示源字符串。2、參數表:參數表中給出了輸出的變量。當有多個變量時,用英文逗號(,)分開。
  • 2019級C語言期末考試及答案
    試卷編號:167所屬語言:C語言試卷方案:2019級C語言期末模擬考試試卷總分:100分共有題型:5種你可能還會喜歡:成品  詹姆斯高清圖片 歐文高清圖片  科比高清圖片一、判斷 共10題 (共計10分)第1題 (1.0分) 題號:1173 難度:中 第3章在C程序中