printf函数讲解
?
printf函數(shù)講解
#include <stdio.h>/*輾轉(zhuǎn)相除法求最大公約數(shù)*/ int gcd(int m, int n); int factrial(int a); int main(void){int m, n, t;scanf_s("%d %d", &m, &n);if (m < n){t = m;m = n;n = t;}//n = gcd(m, n);//printf("%d", n);printf("%d\n", factrial(3));while (true){}return 0; } int gcd(int m, int n){int r;r = m % n;if (r == 0){return n;}else{gcd(n, r);//855 225 //855%225=3。。。。180 //225%180=1。。。。45 //180%45=4} }//printf函數(shù) 講解int factrial(int a) { //傳入?yún)?shù)a=3 遞歸調(diào)用你們說,怎么輸出int product = 1;if (a == 1) {return product;}else {printf("a=%d\n", a);int p = factrial(a - 1);//a=2,f(1)=0,printf("p=%d\n", p);product = a * p;printf("product=%d\n", product);} }看到這個(gè)輸出是不是很意外,為何p會(huì)等于10, product會(huì)等于30
else沒有寫return 語句,為啥不報(bào)錯(cuò)呢 ? 大家思考一下,我經(jīng)過多番折騰,找大佬來幫忙看了下,才知道
這里就是這個(gè)printf函數(shù)作怪,因?yàn)閜rintf函數(shù)和java的System.out.println是有很大區(qū)別的,在java里System.out.println只是在控制臺(tái)打印輸出,沒有返回值。而c里面這么printf是有返回值的,返回整個(gè)字符串的長度,
我們來一步步分解printf函數(shù),看看為啥會(huì)輸出這個(gè)結(jié)果。
程序中的print函數(shù)是這樣寫的:printf("%d\n",printf("%d",printf("%d",i)));
一共有三個(gè)printf函數(shù),我們可以使用一些代號(hào)來簡化這個(gè)printf函數(shù),如下:
代號(hào)A: printf("%d",printf("%d",i));
代號(hào)B: printf("%d",i)
則程序代碼可以簡化為:printf("%d\n",A); 那么我們就先來求A。
而A,又可以簡化為:printf("%d",B);那么我們就先來求B。
B是 printf("%d",i),打印出“123”,即在運(yùn)行結(jié)果中,你最先看到的是123。printf函數(shù)的返回值是printf實(shí)際控制輸出的字符數(shù),那么打印的123 就是3個(gè)字符,因此printf("%d",i)返回的就是3,也就是B是3,那么,A就可以寫為printf("%d",printf("%d",3));打印出3,即在運(yùn)行結(jié)果中,你緊接著會(huì)看到3。而打印出的3是1個(gè)字符,因此A就是1,那么printf("%d\n",A); 實(shí)際上就是printf("%d\n",1); 打印出1,即在運(yùn)行結(jié)果中,你最后看到的就是1.
看了我的講解應(yīng)該懂了吧
?
?
總結(jié)
以上是生活随笔為你收集整理的printf函数讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年中国大学生学习与发展白皮书
- 下一篇: Altium Designer -- P