编写到第三章结束

This commit is contained in:
HelixCopex 2025-04-27 11:44:14 +08:00
parent c112cd200a
commit a8ecaae14b
22 changed files with 411 additions and 0 deletions

53
.gitignore vendored Normal file
View File

@ -0,0 +1,53 @@
# .gitignore for C
# Prerequisites
*.d
# Object files
*.o
*.ko
*.obj
*.elf
# Linker output
*.ilk
*.map
*.exp
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
*.idb
*.pdb
# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf

20
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,20 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(Windows) 启动",
"type": "cppvsdbg",
"request": "launch",
"program": "输入程序名称,例如 ${workspaceFolder}/a.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"console": "externalTerminal"
}
]
}

36
Chapter_2/2_1_1_details.c Normal file
View File

@ -0,0 +1,36 @@
#include <stdio.h> //C语言并不默认内置输入/输出包
//这里是函数头哦
int main(void) //void main()是不标准写法
{
/* 函数必须全部声明才能使用
*/
int doors; //变量名应清楚表达自己的用途
int dogs; //变量可以使用大小写、数字和下划线
//名称的第一个字符只能是字母或者下划线
//如果是数字,会报错,不信试试
//int 3b1b;
int DOGS; //C语言是区分大小写的
doors = 5;
dogs = 3;
DOGS = 5;
dogs = DOGS; //赋值语句
printf("We have %d dogs.\n", dogs);
//函数有实际参数和形式参数
//除了 %d 以外的是实参,%d 是形参
/* 新标准下怎么放声明都无所谓,但是这样有可能
*/
int windows;
windows = 404;
int cats;
cats = 114514;
return 0;//有返回值的C函数要有这句
//int 表示 main() 函数返回一个整数
//程序运行到最后时默认会返回0所以
//这句在这个情况下写不写区别不大
//但是保留这一句是个好习惯
}//花括号括起来的全部是函数体

15
Chapter_2/2_2_fathm_ft.c Normal file
View File

@ -0,0 +1,15 @@
//把 2 音寻转换为英寸
#include <stdio.h>
int main(void)
{
int feet, fathoms;
fathoms = 2;
feet = 6 * fathoms;
printf("There are %d feet in %d fathoms!\n", feet, fathoms);
printf("Yes, I said %d feet!\n", 6*fathoms);
//给定的传入值不一定要是个变量
//所以可以有一个传入时计算的语句
return 0;
}

20
Chapter_2/2_3_two_func.c Normal file
View File

@ -0,0 +1,20 @@
/* 一个文件中包含两个函数 */
#include <stdio.h>
void butler(void);//函数原型(声明)
//这个是现代写法,早期写法长这样:
//void butler();
//不推荐上面的写法
int main(void)
{
printf("I will summon the butler function.\n");
butler();
printf("Yes. Bring me some tea and writeable DVDs.\n");
return 0;
}
void butler(void) //函数定义
{
printf("You rang, sir?\n");
}//这种写法有利于厘清程序逻辑

19
Chapter_2/2_4_good.c Normal file
View File

@ -0,0 +1,19 @@
/* 这段程序无错误 */
#include <stdio.h>
int main(void)
{
int n, n2, n3;//修正语法错误
n = 5;
n2 = n * n;
n3 = n2 * n;//修正语义错误
printf("n = %d, n squared = %d, n cubed = %d\n", n, n2, n3);//修正语法错误
return 0;
}
/* 附上不能用来做变量名的关键字
auto break case char const continue default
do double else enum extern float for goto
if inline int long register restrict return
short signed sizeof static struct switch typedef
union unsigned void volatile _Bool _Complex _Generic
_Imaginary _Noreturn _Static_assert _Thread_local*/

14
Chapter_2/2_4_nogood.c Normal file
View File

@ -0,0 +1,14 @@
/* 这段程序有错误 */
#include <stdio.h>
int main(void)
{
int n, int n2, int n3;
/* 该程序有多处错误
n = 5
n2 = n * n;
n3 = n2 * n2;
printf("n = %d, n squared = %d, n cubed = %d\n", n, n2, n3)
return 0;
}

24
Chapter_2/2_practice.c Normal file
View File

@ -0,0 +1,24 @@
#include <stdio.h>
int main(void)
{
//pr.1
printf("\nPR_1_________\n");
printf("Helix Copex\n");
printf("Helix\nCopex\n");
printf("Helix ");
printf("Copex\n");
//pr.2
printf("\nPR_2_________\n");
printf("Helix Copex, Harbin.\n");
//pr.3
printf("\nPR_3_________\n");
int age = 18;
int lifetime = age*365;
printf("Age:%dy, Lifetime:%dd.", age, lifetime);
return 0;
}

19
Chapter_3/3_10_escape.c Normal file
View File

@ -0,0 +1,19 @@
/* 使用转义序列 */
#include <stdio.h>
int main(void)
{
float salary;
printf("\aEnter your desired monthly salary:");
printf(" $_______\b\b\b\b\b\b\b");
//退格只回退光标,不删除字符
scanf("%f", &salary);
printf("\n\t$%.2f a month is $%.2f a year.", salary, salary * 12.0);
//n新起一行t添加一个制表位的空大小
printf("\rGee!\n");
//r使得光标回到起始处
getchar();
getchar();
return 0;
}

22
Chapter_3/3_1_platinum.c Normal file
View File

@ -0,0 +1,22 @@
/* platinum.c 计算与自身体重等重的白金价值 */
#include <stdio.h>
int main(void)
{
float weight;
float value;
printf("Are you worth your weight in platinum?\n");
printf("Let's check it out.\n");
printf("Please enter your weight in pounds: ");
scanf("%f", &weight);
value = 1700.0 * weight * 14.5833;
printf("your weight in platinum is worth $%.2f.\n", value);
printf("You are easily worth that! If platinum prices drop, \n");
printf("eat more to maintain your value.\n");
getchar();
getchar();
return 0;
}

View File

@ -0,0 +1,11 @@
#include <stdio.h>
int main(void)
{
int i = 2147483647;
unsigned int j = 4294967295;
printf("%d %d %d\n", i, i+1, i+2);//未定义行为
printf("%u %u %u\n", j, j+1, j+2);//未定义行为
return 0;
}

10
Chapter_3/3_3_bases.c Normal file
View File

@ -0,0 +1,10 @@
#include <stdio.h>
int main(void)
{
int x = 100;
printf("dec = %d; octal = %o; hex = %x\n", x, x, x);
printf("dec = %d; octal = %#o; hex = %#x\n", x, x, x);
return 0;
}

16
Chapter_3/3_4_print2.c Normal file
View File

@ -0,0 +1,16 @@
/* 更多 printf() 的特性 */
#include <stdio.h>
int main(void)
{
unsigned int un = 30000000000;
short end = 200;
long big = 65537;
long long verybig = 12345678908642;
printf("un = %u and not %d\n",un,un);
printf("end = %hd and %d\n",end,end);
printf("big = %ld and not %hd\n",big,big);
printf("verybig= %lld and not %ld\n",verybig,verybig);
return 0;
}

11
Chapter_3/3_5_charcode.c Normal file
View File

@ -0,0 +1,11 @@
#include <stdio.h>
int main(void)
{
char ch;
printf("Please enter a character.\n");
scanf("%c", &ch);
printf("The code for %c is %d.\n",ch,ch);
return 0;
}

26
Chapter_3/3_6_altnames.c Normal file
View File

@ -0,0 +1,26 @@
/* 本文件主要讲述可移植类型,这些类型引入了两个头文件以
C
32
int32_t
8使
int_least8_t
C99
intmax_t / uintmax_t
*/
#include <stdio.h>
#include <inttypes.h>
int main(void)
{
int32_t me32;
me32 = 45933945;
printf("First, assume int32_t is int: ");
printf("me32 = %d\n",me32);
printf("Next, let's not make any assumptions.\n");
printf("Instead, use a\"macro\" from inttypes.h: ");
printf("me32 = %"PRId32" \n",me32);
// 等价于下面这条语句:
printf("me32 = %""d"" \n",me32);
return 0;
}

View File

@ -0,0 +1,15 @@
/* 演示浮点数舍入错误 */
#include <stdio.h>
int main(void)
{
float a,b;
b = 2.0e20 + 1.0;
a = b - 2.0e20;
printf("%f \n", a);
return 0;
}
//如果是当前版本 GCC通常结果为 4008175468544.000000
//这个结果表明编译器实现遵循ISO/IEC/IEEE 60559:2011

16
Chapter_3/3_7_showf_pt.c Normal file
View File

@ -0,0 +1,16 @@
/* 以两种方式显示 float 类型的值 */
#include <stdio.h>
int main(void)
{
float aboat = 32000.0;
double abet = 2.14e9;
long double dip = 5.32e-5;
printf("%f can be written %e\n", aboat, aboat);
// 下面的部分要求 C99 支持
printf("And it's %a in hexadecimal, powers of 2 notation\n", aboat);
printf("%f can be written %e\n",abet,abet);
printf("%Lf can be written %Le\n",dip,dip);
return 0;
}

20
Chapter_3/3_8_typesize.c Normal file
View File

@ -0,0 +1,20 @@
/* 打印当前系统类型大小 */
#include <stdio.h>
int main(void)
{
//C99为类型大小提供转换说明
printf("Type int has a size of %zd types.\n",
sizeof(int));
printf("Type char has a size of %zd types.\n",
sizeof(char));
printf("Type long has a size of %zd types.\n",
sizeof(long));
printf("Type long long has a size of %zd types.\n",
sizeof(long long));
printf("Type double has a size of %zd types.\n",
sizeof(double));
printf("Type long double has a size of %zd types.\n",
sizeof(long double));
return 0;
}

17
Chapter_3/3_9_badcount.c Normal file
View File

@ -0,0 +1,17 @@
/* 函数原型规定了一个函数最多能传入多少个参数,但是
*/
#include <stdio.h>
int main(void)
{
int n = 4, m = 5;
float f = 7.0f, g = 8.0f;
printf("%d\n",n,m); //参数太多
printf("%d %d %d\n", n); //参数太少
printf("%d %d\n", f, g); //值的类型不匹配
return 0;
}

19
Chapter_3/README.md Normal file
View File

@ -0,0 +1,19 @@
# 本章介绍的内容
## 关键字
`int` `short` `long` `unsigned` `char` `float` `double` `_Bool` `_Complex` `_Imaginary`
## 运算符
`sizeof()`
## 函数
`scanf()`
## 具体内容
- 整数类型和浮点数类型的区别
- 如何书写整型和浮点型常数,以及如何声明变量
- 如何使用 `printf()``scanf()` 读写不同类型的值

8
Chapter_4/README.md Normal file
View File

@ -0,0 +1,8 @@
# 本章介绍的内容
- 函数:`strlen()`
- 关键字: `const`
- 字符串
- 如何创建、存储字符串
- 如何使用 `strlen()` 函数获取字符串的长度
- 用 C 预处理器指令 `#define` 和 ANSIC 的 `const` 修饰符创建符号常量