文章很多處理論,沒辦法寫出來,(linux的一些理論問題,我有時間后,會逐個解決)
文章大多數的理論來字這個鏈接,
C語言快速入門-C語言基礎知識-CSDN博客
一. linux(Ubuntu)
1. 基礎命令(未完成,稍后補)
1.1. vim
vim是一個文本編輯器,挺強的
1.1.1 安裝vim
(1)檢查是否已安裝 Vim:
vim --version
如果顯示版本信息,說明已安裝。
如果提示未安裝,繼續下一步。
(2)安裝完整版 Vim:
sudo apt update && sudo apt install vim
Ubuntu 默認可能安裝的是?
vim-tiny
(精簡版),建議替換為完整版。
1.1.2 Vim 的基本使用
Vim 是一個模態編輯器,分為?普通模式(Normal Mode)、插入模式(Insert Mode)?和?命令行模式(Command-Line Mode)。?
1.1.3 基本操作流程
1. 啟動 Vim(打開/新建文件:)
vim 文件名 # 打開文件(若文件不存在則新建)
?2.進入插入模式
按下?
i
:在光標前進入插入模式。按下?
a
:在光標后進入插入模式。按下?
o
:在下一行插入新行并進入插入模式。3.推出插入模式
按下?
Esc
?鍵返回普通模式。4.保存與退出
:w
:保存文件。
:q
:退出 Vim。
:wq
?或?:x
:保存并退出。
:q!
:強制退出(不保存修改)。
1.2 gdb工具
1.2.1 如何調試
1.2.2 設置斷點(p,n,continue)
1.3 vsc中的調試
二. c語言基礎知識
1 基礎語法
-g:? ? ? ? ? 使用該參數編譯可以執行文件,得到調試表。
gdb ./a.out
list: ?? ??? ?list 1 列出源碼。根據源碼指定 行號設置斷點。
b:? ? ? ? ? ? b 20 在 20 行位置設置斷點。
run/r: ?? ??? ?運行程序
n/next:? ? ? 下一條指令(會越過函數)
s/step:? ? ??下一條指令(會進入函數)
p/print: ? ?p i 查看變量的值。
continue:繼續執行斷點后續指令。
finish:? ? ? 結束當前函數調用。
quit:? ? ? ? 退出 gdb 當前調試。
2 二進制(符號位)(結合數據類型的范圍來講)(從Linux來講)
1.源碼
2.反碼
3.補碼
負整數存的是補碼
3 數據類型
1.數據類型
char?????????? //字符數據類型
short????????? //短整型
int????????????? //整形
long?????????? //長整型
long long?? //更長的整形
float?????????? //單精度浮點數
double?????? //雙精度浮點數
C語言中沒有String字符串類型嗎????
c語言中string用char的數組形式來表示。下方代碼有舉例。
#include <stdio.h>int main() {char a = 'a'; // 字符型變量 achar a1[] = {'h', 'e', 'l', 'l', 'o', '\0'}; // 字符型數組 a1,注意加上結束符 '\0'char str1[] = "Hello"; // 字符數組表示字符串,即java中的stringchar *str2 = "World"; // 字符指針表示字符串short b = 10; // 短整型變量 bint c = 10; // 整型變量 clong d = 10; // 長整型變量 dfloat f = 10.0f; // 單精度浮點數 fdouble g = 10.00000; // 雙精度浮點數 g// 輸出變量的值printf("字符 a: %c\n", a);printf("字符數組 a1: %s\n", a1);printf("%s %s\n", str1, str2); printf("Length of str1: %zu\n", strlen(str1));//輸出str1的長度,即為5printf("短整型 b: %d\n", b);printf("整型 c: %d\n", c);printf("長整型 d: %ld\n", d);printf("單精度浮點數 f: %.2f\n", f);printf("雙精度浮點數 g: %.5f\n", g);return 0;}
2.intger型
int????????????? //整形
#include <stdio.h> // 引入stdio.h頭文件以使用printf函數
#include <limits.h> // 引入limits.h頭文件以獲取取數據類型的范圍
int main()
{/* 數據類型*/int a = 10; // 整數類型 (設置變量默認類型)float b = 3.14f; // 浮點數類型 (設置變量默認類型)char c = 'A'; // 字符類型 (設置變量默認類型)short d = 5; // 短整型 (設置變量默認類型)long e = 100000L; // 長整型 (設置變量默認類型)long long f = 10000000000LL; // 長長整型 (設置變量默認類型)unsigned int g = 20; // 無符號整數類型 (設置變量默認類型)unsigned char h = 'B'; // 無符號字符類型 (設置變量默認類型)unsigned short i = 10; // 無符號短整型 (設置變量默認類型)unsigned long j = 100000UL; // 無符號長整型 (設置變量默認類型)unsigned long long k = 10000000000ULL; // 無符號長長整型 (設置變量默認類型)// 打印變量的值printf("a = %d\n", a); // 注意:%d用于打印整數printf("b = %f\n", b); // 注意:%f用于打印浮點數// 打印數據類型的范圍printf("int 最小 = %d,int 最大 = %d", INT_MIN, INT_MAX); // 打印int類型的最小值printf("\nfloat 最小 = %e,float 最大 = %e", __FLT_MIN__, __FLT_MAX__); // 打印float類型的最小值和最大值printf("\nchar 最小 = %d,char 最大 = %d", CHAR_MIN, CHAR_MAX); // 打印char類型的最小值和最大值printf("\nshort 最小 = %d,short 最大 = %d", SHRT_MIN, SHRT_MAX); // 打印short類型的最小值和最大值printf("\nlong 最小 = %ld,long 最大 = %ld", LONG_MIN, LONG_MAX); // 打印long類型的最小值和最大值printf("\ndouble 最小 = %e,double 最大 = %e", __DBL_MIN__, __DBL_MAX__); // 打印double類型的最小值和最大值printf("\nlong long 最小 = %lld,long long 最大 = %lld", LLONG_MIN, LLONG_MAX); // 打印long long類型的最小值和最大值printf("\nunsigned int 最小 = %u,unsigned int 最大 = %u", 0, UINT_MAX); // 打印unsigned int類型的最小值和最大值printf("\nunsigned char 最小 = %u,unsigned char 最大 = %u", 0, UCHAR_MAX); // 打印unsigned char類型的最小值和最大值printf("\nunsigned short 最小 = %u,unsigned short 最大 = %u", 0, USHRT_MAX); // 打印unsigned short類型的最小值和最大值printf("\nunsigned long 最小 = %lu,unsigned long 最大 = %lu", 0, ULONG_MAX); // 打印unsigned long類型的最小值和最大值printf("\nunsigned long long 最小 = %llu,unsigned long long 最大 = %llu", 0, ULLONG_MAX); // 打印unsigned long long類型的最小值和最大值return 0;
}
3. bool型
非真即假
#include <stdio.h>
int main(int argc, char const *argv[])
{/* bool */// 使用if判斷為真,條件代碼執行,非真,條件代碼不執行if (0){printf("0為假\n");}else{printf("0為真\n");}if (1){printf("1為真\n");}else{printf("1為假\n");}return 0;
}
4. float浮點型
float?????????? //單精度浮點數
#include <stdio.h> // 引入stdio.h頭文件以使用printf函數
#include <limits.h> // 引入limits.h頭文件以獲取取數據類型的范圍
#include <float.h> // 引入float.h頭文件以獲取浮點數類型的范圍int main(int argc, char const *argv[])
{/* 默認實型(浮點型,小數)為浮點型,默認整數為int型*/// float類型// float類型的精度為6位,范圍為-3.4E+38到3.4E+38float a = 3.14f; // 單精度浮點數類型,占位符%f,精確度為6位printf("a = %f\n", a); // 注意:%f用于打印浮點數,默認打印小數點后6位printf("float 最小 = %f,float 最大 = %f", __FLT_MIN__, __FLT_MAX__); // 打印float類型的最小值和最大值printf("\nfloat 精度 = %d", FLT_DIG); // 打印float類型的精度,6位,科學計數法%fprintf("a=%.17f,float類型的字節數為=%lu\n", a, sizeof(float)); // 打印float類型的長度,小數點后六位不精確// double類型// double類型的精度為15位,范圍為-1.7E+308到1.7E+308double b = 3.1455555555555555555; // 雙精度浮點數類型,占位符%lf,精確度為15位,默認打印小數點后6位printf("\nb = %lf\n", b); // 注意:%lf用于打印雙精度浮點數printf("double 最小 = %lf,double 最大 = %lf", __DBL_MIN__, __DBL_MAX__); // 打印double類型的最小值和最大值printf("\ndouble 精度 = %d", DBL_DIG); // 打印double類型的精度,15位,科學計數法%lfprintf("b=%.16lf,double類型的字節數為=%lu\n", b, sizeof(double)); // 打印double類型的長度,小數點后15位不精確// long double類型// long double類型的精度為19位,范圍為-1.1E+4932到1.1E+4932long double c = 3.1455555555555555555555; // 長雙精度浮點數類型,占位符%Lf,精確度為19位,默認打印小數點后6位printf("\nc = %Lf\n", c); // 注意:%Lf用于打印長雙精度浮點數printf("long double 最小 = %Le,long double 最大 = %Le", __LDBL_MIN__, __LDBL_MAX__); // 打印long double類型的最小值和最大值printf("\nlong double 精度 = %d", LDBL_DIG); // 打印long double類型的精度,19位,科學計數法%Lfprintf("c=%.20Lf,long double類型的字節數為=%lu\n", c, sizeof(long double)); // 打印long double類型的長度,小數點后19位不精確//printf("c=%20.10f\n", a); // 打印float類型的長度return 0;
}
5. char (string)型
char? ? ? ? ? ?//字符數據類型
#include <stdio.h>int main()
{/*// 字符charchar c = 'A';printf("%c\n", c); // 輸出字符,終端輸出為A// 字符輸出為ascll碼printf("%d\n", c);// 字符串char str[] = "Hello, World!";printf("%s\n", str);*/// 轉移符// \n 換行printf("Hello\nWorld\n");// \t 制表符printf("Hello\tWorld\n");printf("\173\n"); // 173是八進制表示的123printf("\x41\n"); // 41是十六進制表示的65// \\ 反斜杠printf("反斜杠:""a\\b\n");// \' 單引號printf("單引號:", "a\'b\n");// \" 雙引號printf("雙引號:,""a\"b\n");// \0 字符串結束符char str2[] = "a, b!\0";printf("%s\n", str2);// \b 退格符printf("Hello\bWorld\n");// \r 回車符printf("Hello\rWorld\n");return 0;
}
4 變量/常量
1 變量
1.1 定義變量
簡而言之變量即使可以更改的量,其數值可以被更改。
1.2 變量的分類?
1.全局變量
? (1)即作用于代碼運行全過程的變量
2.局部變量
? (2)即作用于部分代碼塊的變量
#include <stdio.h>
// 全局變量
int globalVar = 10; // 全局變量,作用域為整個文件
void function() {// 局部變量int localVar = 5; // 局部變量,作用域僅限于此函數內printf(" 函數內 局部變量 localVar 的值: %d\n", localVar);printf(" 函數內 全局變量 globalVar 的值: %d\n", globalVar);
}int main() {printf("全局變量 globalVar 的值: %d\n", globalVar); // 可以訪問全局變量function();//調用上方的函數// printf("局部變量 localVar 的值: %d\n", localVar); // 這行代碼會報錯,因為 localVar 作用域僅限于 function 函數return 0;
}
1.3. 變量的使用
使變量等于輸入兩個值,使這兩個變量進行加減乘除,結果取小數點后兩位。
#include <stdio.h>
int main() {// 定義變量float num1, num2; // 用于存儲輸入的兩個數float sum, difference, product, quotient; // 用于存儲運算結果// 提示用戶輸入兩個數,scanf的標準用法,于printf很相似printf("請輸入第一個數: ");scanf("%f", &num1); // 讀取第一個數printf("請輸入第二個數: ");scanf("%f", &num2); // 讀取第二個數// 進行運算sum = num1 + num2; // 加法difference = num1 - num2; // 減法product = num1 * num2; // 乘法quotient = num1 / num2; // 除法(注意:需要確保 num2 不為 0)// 輸出結果,%.2f即為取余,小數點后兩位,%.3f即為小數點后3位,以此類推。printf("加法結果: %.3f\n", sum);printf("減法結果: %.3f\n", difference);printf("乘法結果: %.3f\n", product);// 除法結果的輸出需要檢查除數是否為0if (num2 != 0) {printf("除法結果: %.2f\n", quotient);} else {printf("除法結果: 無法除以零\n");}return 0;
}
輸出:
1.4. 變量的作用域與生命周期?
作用域:
作用域(scope)是程序設計概念,通常來說,一段程序代碼中所用到的名字并不總是可用的
而限定這個名字的可用性的代碼范圍就是這個名字的作用域。
1. 局部變量的作用域是變量所在的局部范圍。
2. 全局變量的作用域是整個代碼運行過程。
生命周期:
變量的生命周期指的是變量的創建到變量的銷毀之間的一個時間段
1. 局部變量的生命周期是:進入作用域生命周期開始,出作用域生命周期結束。
2. 全局變量的生命周期是:整個程序的生命周期,同理。
1.5. 定量 / 常量
1 常量定義
簡而言之,定量即使不變的量。
2 常量類型
1. 字面常量
2. const 修飾的常變量(java中常用)
3. #define 定義的標識符常量
4. 枚舉常量
#include <stdio.h>// 使用 #define 定義標識符常量
#define PI 3.14159 // 圓周率常量// 定義枚舉常量
enum Color {RED, // 默認第一個為0,以此類推。GREEN, // GREEN = 1BLUE // BLUE = 2
};int main() {// 字面常量int a = 10; // 整數字面常量float b = 5.5; // 浮點數字面常量// const 修飾的常量const int MAX_VALUE = 100; // 最大值常量,不能被修改// 輸出各個常量的值printf("字面常量 a: %d\n", a);printf("字面常量 b: %.2f\n", b);printf("標識符常量 PI: %.5f\n", PI);printf("const 常量 MAX_VALUE: %d\n", MAX_VALUE);// 使用枚舉常量enum Color myColor = GREEN; // 賦值為枚舉常量printf("枚舉常量 myColor: %d\n", myColor); // 輸出枚舉常量的整數值return 0;
}
輸出:
?5. 字符串+轉義字符+注釋+格式修飾符
1. 字符串
1. 即Java中的String,用來表示多個字符在一起的樣子。但是C中沒有String的概念,所以字符串用char【】(字符型數組)來表示。
2. 下方的代碼,用了四種方式來表示String,具體看代碼注釋,寫的很清楚。
//可以簡單認為include與java中的import是同一個意思。
#include <stdio.h> // 引入標準輸入輸出庫,提供輸入輸出函數,如printf和scanf
#include <stdlib.h> // 引入標準庫,包含內存分配(如malloc、free)、進程控制和轉換等函數
#include <string.h> // 引入字符串處理庫,提供字符串操作函數,如strcpy、strlen等int main() {// 1. 使用字符數組定義字符串char str1[] = "hello world"; // 字符數組,自動添加'\0'char str11[] ={'0','1','2','3','4','\0'}; // 字符數組,自動添加'\0'<規范>// 2. 使用字符指針定義字符串const char *str2 = "hello world"; // 字符指針指向字符串常量// 3. 動態內存分配,malloc 返回的是 void* 類型的指針,表示它可以指向任何類型的內存。//指針相當于一種特殊類型的變量char *str3 = (char *)malloc(12 * sizeof(char)); // 開辟一個char類型,12長度的內存空間變量為str3這個指針變量if (str3 == NULL) { // 檢查內存是否分配存在printf("內存分配失敗\n");return 1; // 返回1表示異常,并輸出內存分配失敗}strcpy(str3, "hello world"); // // 輸出所有字符串printf("%s\n", str1); // 輸出字符數組printf("%s\n", str11); // 輸出字符數組printf("%s\n", str2); // 輸出字符指針printf("%s\n", str3); // 輸出動態分配的字符串// 釋放動態分配的內存free(str3);return 0; // 返回0表示程序正常結束
}
輸出:
2. 轉義字符
轉義字符 釋義(轉義字符顧名思義就是轉變意思。)
\?? ? ??在書寫連續多個問號時使用,防止他們被解析成三字母詞
\'? ? ?? ? 用于表示字符常量'
\"? ? ? ? 用于表示一個字符串內部的雙引號
\\? ? ? ? 用于表示一個反斜杠,防止它被解釋為一個轉義序列符。
\a? ? ? ?警告字符,蜂鳴
\b? ? ? ?退格符
\f? ? ? ? 進紙符
\n? ? ? ?換行
\r? ? ? ? 回車
\t? ? ? ? 水平制表符
\v? ? ? ?垂直制表符
\ddd? ?ddd表示1~3個八進制的數字。 如: \130 X
\xdd? ?dd表示2個十六進制數字。 如: \x30 0
?舉例:
仔細看注釋。
#include<stdio.h>
#include<string.h>
// strlen - string length - 求字符串長度
int main()
{printf("%d\n", strlen("abcdef"));printf("%d\n", strlen("abcdefg")); // 輸出字符串 "abcdef" 的長度// \62被解析成一個轉義字符printf("%d\n", strlen("c:\test\628\test.c"));//會輸出錯誤,因為系統編譯會把\t認識為轉義符printf("%d\n", strlen("c:\\test\\628\\test.c")); // 使用雙反斜杠表示反斜杠,就沒有問題了。return 0;
}
詳細使用方法:?
#include <stdio.h>int main() {// 1. \? - 表示問號字符 原因: \? 不會被解析為轉義字符,直接輸出問號。 printf("這是一個問號: \?\n"); // 輸出: 這是一個問號: ?// 2. \' - 表示單引號字符 原因: \' 被解析為單引號字符,用于在字符串中包含單引號。printf("這是一個單引號: \'\n"); // 輸出: 這是一個單引號: '// 3. \" - 表示雙引號字符 原因: \" 被解析為雙引號字符,用于在字符串中包含雙引號。printf("這是一個雙引號: \"\n"); // 輸出: 這是一個雙引號: "// 4. \\ - 表示反斜杠字符 原因: \\ 被解析為一個反斜杠字符,用于在字符串中包含反斜杠。printf("這是一個反斜杠: \\\n"); // 輸出: 這是一個反斜杠: \// 5. \a - 表示警告音(響鈴)原因: \a 表示響鈴字符,某些終端或系統可能會發出聲音。printf("這將響鈴: \a\n"); // 可能會發出警告音(依賴于終端設置)// 6. \b - 表示退格符 原因: \b 將光標移動到前一個字符位置,覆蓋該字符。printf("這是一個退格符: Hello\bWorld\n"); // 輸出: HelloWorld(“Hello”中的最后一個字母被刪除)// // 7. \f - 表示換頁符 原因: \f 在某些終端中可能會導致換頁,但在其他終端中可能沒有明顯效果。printf("這是一個換頁符: Hello\fWorld\n"); // 輸出: Hello(在某些終端中可能表現為換頁)// 8. \n - 表示換行符 原因: \n 將光標移動到下一行,輸出內容在新行顯示。printf("這是一個換行符: Hello\nWorld\n"); // 輸出: Hello// // World// 9. \r - 表示回車符 原因: \r 將光標移動到行首,后續字符會覆蓋當前行的內容。printf("這是一個回車符: Hello\rWorld\n"); // 輸出: World(“Hello”被覆蓋)// 10. \t - 表示水平制表符 原因: \t 插入一個水平制表符的空格,增加字符之間的間距。printf("這是一個制表符: Hello\tWorld\n"); // 輸出: Hello World(“Hello”和“World”之間有一個制表符的空格)// 11. \v - 表示垂直制表符 原因: \v 在某些終端中可能表現為換行,但在其他終端中可能沒有明顯效果printf("這是一個垂直制表符: Hello\vWorld\n"); // 輸出: Hello(可能會在某些終端中表現為換行)// 12. \ddd - 表示八進制數對應的字符 原因: 八進制數表示的字符在ASCII表中對應的字符。printf("這是一個八進制字符: \101\n"); // 輸出: A(八進制101對應的字符是'A')// 13. \xdd - 表示十六進制數對應的字符 原因: 十六進制數表示的字符在ASCII表中對應的字符。printf("這是一個十六進制字符: \x41\n"); // 輸出: A(十六進制41對應的字符是'A')return 0;}}}
3. 注釋
1. 代碼中有不需要的代碼可以直接刪除,也可以注釋掉
2. 代碼中有些代碼比較難懂,可以加一下注釋文字
vs Code 分為單行注釋與多行注釋,自己搜索,默認的我也忘了。嘿嘿嘿。
4. 格式說明符
格式說明符:
%d 或 %i? ?解釋:輸出或輸入有符號十進制整數。
%u? ? ? ? ? ? ?解釋:輸出或輸入無符號十進制整數。
%f? ? ? ? ? ? ? 解釋:輸出或輸入十進制浮點數(float)。
%lf? ? ? ? ? ? ?解釋:輸出或輸入雙精度浮點數(double)。
%c? ? ? ? ? ???解釋:輸出或輸入單個字符。
%s? ? ? ? ? ? ?解釋:輸出或輸入字符串(字符數組)。
%p? ? ? ? ? ? ?解釋:輸出指針的地址(內存地址)。
%o? ? ? ? ? ? ?解釋:輸出無符號八進制整數。
%x 或 %X ?解釋:輸出無符號十六進制整數。%x 使用小寫字母,%X 使用大寫字母。
%e 或 %E ?解釋:以科學計數法輸出浮點數。%e 使用小寫字母 e,%E 使用大寫字母 E。
%g 或 %G ?解釋:根據數值的大小自動選擇使用 %f 或 %e 的格式輸出浮點數。%g 使用小寫字母,
%G? ? ? ? ? ? ?解釋:使用大寫字母。
格式說明符代碼解釋 :
#include <stdio.h>
int main() {// 1. %d 或 %i - 輸出或輸入有符號十進制整數 // 原因: %d 用于打印有符號整數,負數會正常顯示。int signedInt = -42;printf("有符號十進制整數: %d\n", signedInt); // 輸出: 有符號十進制整數: -42// 2. %u - 輸出或輸入無符號十進制整數 // 原因: %u 用于打印無符號整數,確保不會顯示負號。unsigned int unsignedInt = 42;printf("無符號十進制整數: %u\n", unsignedInt); // 輸出: 無符號十進制整數: 42// 3. %f - 輸出或輸入十進制浮點數(float) // 原因: %f 默認輸出六位小數,適用于浮點數。float floatNum = 3.14f;printf("十進制浮點數: %f\n", floatNum); // 輸出: 十進制浮點數: 3.140000// 4. %lf - 輸出或輸入雙精度浮點數(double) // 原因: %lf 用于打印雙精度浮點數,默認輸出六位小數。double doubleNum = 3.141592653589793;printf("雙精度浮點數: %lf\n", doubleNum); // 輸出: 雙精度浮點數: 3.141593// 5. %c - 輸出或輸入單個字符 // 原因: %c 用于打印單個字符。char character = 'A';printf("單個字符: %c\n", character); // 輸出: 單個字符: A// 6. %s - 輸出或輸入字符串(字符數組) // 原因: %s 用于打印字符串,直到遇到空字符 '\0'。char str[] = "Hello, World!";printf("字符串: %s\n", str); // 輸出: 字符串: Hello, World!// 7. %p - 輸出指針的地址(內存地址) // 原因: %p 用于打印指針的地址,通常以十六進制格式輸出。int *ptr = &signedInt;printf("指針地址: %p\n", (void *)ptr); // 輸出: 指針地址: 0x7ffeedc3a5b4(地址會因運行而異)// 8. %o - 輸出無符號八進制整數 // 原因: %o 用于打印無符號整數的八進制表示。printf("無符號八進制整數: %o\n", unsignedInt); // 輸出: 無符號八進制整數: 50// 9. %x 或 %X - 輸出無符號十六進制整數 // 原因: %x 用于打印小寫十六進制,%X 用于打印大寫十六進制。printf("無符號十六進制整數 (小寫): %x\n", unsignedInt); // 輸出: 無符號十六進制整數 (小寫): 2aprintf("無符號十六進制整數 (大寫): %X\n", unsignedInt); // 輸出: 無符號十六進制整數 (大寫): 2A// 10. %e 或 %E - 以科學計數法輸出浮點數 // 原因: %e 和 %E 用于以科學計數法格式打印浮點數。printf("科學計數法 (小寫): %e\n", floatNum); // 輸出: 科學計數法 (小寫): 3.140000e+00printf("科學計數法 (大寫): %E\n", floatNum); // 輸出: 科學計數法 (大寫): 3.140000E+00// 11. %g 或 %G - 根據數值的大小自動選擇格式輸出浮點數 // 原因: %g 和 %G 根據數值的大小選擇使用 %f 或 %e 格式輸出。printf("自動選擇格式 (小寫): %g\n", doubleNum); // 輸出: 自動選擇格式 (小寫): 3.14159printf("自動選擇格式 (大寫): %G\n", doubleNum); // 輸出: 自動選擇格式 (大寫): 3.14159return 0;
}