从 Python 溜进 C 世界-笔记 1
在学习编程的道路上,我先接触了Python,现在开始学习C语言。这个过程就像重新学习一门语言,需要适应不同的思维方式。这是我的学习笔记,记录我从Python思维转换到C语言的历程。文章里如果有理解不到位的地方,恳请各位前辈和同学们指正,谢谢大家!
ヾ(•ω•`)o

一、C语言的简介
C语言是一中通用的高级语言,最初是为了开发UNIX操作系统编写设计的。C语言最开始是在1972年在 DEC PDP-11 计算机上被首次实现。
UNIX 操作系统,C编译器,和几乎所有的 UNIX 应用程序都是用 C 语言编写的。由于各种原因,C 语言现在已经成为一种广泛使用的专业语言。
二、C语言历史
C语言最开始是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的,一开始汇编语言程序难以在当时的UNIX系统中调试运行。于是汤普森就设计了一种小型的B语言。在1970年争取到了一台PDP-11计算机(在1970年推出的16位迷你计算机)并使用B语言重新编写了部分UNIX代码。到了1971年,B语言已经明显不适合 PDP-11 计算机了,于是 Ritchie 着手开发 B语言的升级版。最初他将新开发的语言命名为 NB语言(New B),但是后来新语言越来越偏离 B语言,于是他将其改名为 C语言。
三、C的程序结构
我是按照Python的基础来学习C语言的,如果有理解偏差的地方,还请各位前辈不吝指教,谢谢!(;´д`)ゞ
先看一段简单的C代码
#include <stdio.h>
int main()
{
/* 这个是打印Hello,World!!的程序*/
printf("Hello,World!! \n");
return 0;
}
这段代码包含:
1、预受理器就是#include <stdio.h>是告诉C编译器在编译的时候要包含stdio.h文件。没有把这个stdio.h文件进来那么编译器就不认识printf等等函数
2、main是C语言唯一的程序入口,回 int 表示向操作系统交回一个整数状态码。
3、{}花括号是函数体,里面是写逻辑的地方可以包含变量声明、表达式、控制语句等
4、/**/是注释是给人看的不是给电脑看的
5、printf是打印函数
6、return 0; 把 0 返回给操作系统,0 代表“正常结束”。非 0 一般表示出错
上面这个是C的格式,利用这个格式我开始编写我在Python练习时候的基础题目:
#include <stdio.h>
int main()
{
int bianl, bianl_2,sum;
scanf("%d,%d",&bianl, &bianl_2);
sum = bianl + bianl_2;
printf("%d\n",sum);
return 0;
}
两数相加,我的理解是include差不多是Python中的import使用写好的C函数。
int bianl, bianl_2,sum;
这一个我自己的理解是Python的中的全局变量告诉给函数他是变量,在C中每一个变量都要添加int或者其他类型才能使用每一个变量。不管是函数还是变量都要添加声明。
在printf中的"%d"我就按照C语言的特色理解,当我们每一次将变量打印出来的时候都要告诉给打印函数知道这个是什么类型不然会报错。除了%d还有%s,%f,%c常用的
| %d | int | 整数类型 |
| %f | float/double | 浮点数类型 |
| %s | char* | 字符串类型 |
| %c | char | 单个字符串类型 |
完成!(´・ᴗ・`)
然后加一下难度:
#include <stdio.h>
int add(int s ,int t);
int main() {
int a, b, sun;
printf("Hello, World!\n");
printf("你好世界!\n");
scanf("%d %d", &a, &b);
sun = add(a,b);
printf("第一个加上第二个的和为:%d\n",sun);
return 0;
}
int add(int s , int t){
return s + t;
}
在这一个代码中我们写新的函数或者变量都要给一个变量声明,其中main为主题函数接口。是输出的主函数。
使用Python理解:
现插入include <stdio.h>,然后现创建主体函数main()。然后再写add计算函数,主要要告诉C这个函数里面都是什么类型int,还有里面的参数也要给声明。构建add函数体里面的逻辑。在主函数中声明三个变量两个作为传入add函数中的参数做准备还有一个是接受add计算完成后的变量存储出来显示。
# Python不需要声明类型
def add(s, t): # 不需要类型声明
return s + t # 自动推断
def main():
a = int(input("请输入第一个数: ")) # 运行时才检查类型
b = int(input("请输入第二个数: "))
sun = add(a, b) # 直接调用
print(f"和为: {sun}")
if __name__ == "__main__":
main()
ai解释:
"在这个C程序中,main函数是程序的入口点。我们首先声明了add函数的原型,然后在main函数中定义了变量a、b和sun。程序先输出问候信息,然后读取用户输入的两个整数,调用add函数计算它们的和,最后输出结果。add函数的实现在main函数之后定义。"
四、数据类型
1、最常用的四种类型:
| 数据类型 | 名称 | 存储大小 |
| 整数类型 | int | 2或4字符 |
| 浮点类型 | float / double(常用double) | 4字符fl / 8字符dou |
| 单字符串类型 | char | 1字符 |
| 字符串类型 | char[] | 元素数量+1 |
这些日常写C都是够的了后面再深入学习
2、转换类型:
C 语言中有两种类型转换:
-
隐式类型转换:隐式类型转换是在表达式中自动发生的,无需进行任何明确的指令或函数调用。它通常是将一种较小的类型自动转换为较大的类型,例如,将int类型转换为long类型或float类型转换为double类型。隐式类型转换也可能会导致数据精度丢失或数据截断。
-
显式类型转换:显式类型转换需要使用强制类型转换运算符(type casting operator),它可以将一个数据类型的值强制转换为另一种数据类型的值。强制类型转换可以使程序员在必要时对数据类型进行更精确的控制,但也可能会导致数据丢失或截断。
上面菜鸟的看到一点小懵,但是我总结出来。
隐式类型转换就是在两个不同变量运行的时候使用新的声明变量接受修改掉类型
int i = 10;
float f = 3.14;
double d = i + f;
显式类型转换就是直接创建新的变量存储然后在想变的变量前面写类型
double d = 3.14159;
int i = (int)d;
这个只是我单纯的理解
五、练习题目(利用AI生成的基础题目)
题目 1 【强制转换】
输入一个带小数的价格(如 19.9),把它变成整数“分”输出(截断小数,输出 1990)。
样例输入:19.9
样例输出:1990
#include <stdio.h>
int main(void) {
float price;
scanf("%f", &price); // 输入 19.9
printf("%d\n", (int)(price * 100));
return 0;
}
题目 2 【四舍五入】
把上题改成真正四舍五入到整数分(19.9 → 20 元 → 输出 2000 分)。
提示:<math.h> 里 round(19.9*100)
#include <stdio.h>
#include <math.h>
int main(void) {
float price;
scanf("%f", &price);
printf("%.0f\n", round(price * 100));
return 0;
}
题目 3 【字符串长度】
输入你的名字(不含空格),输出“Hello, 名字!” 并紧接着输出名字的长度。
样例输入:Bob
样例输出:
Hello, Bob!
3
#include <stdio.h>
#include <string.h>
int main(void) {
char name[50];
scanf("%s", name);
printf("Hello, %s!\n", name);
printf("%zu\n", strlen(name)); // strlen 返回长度
return 0;
}
题目 4 【单位换算】
输入你的身高(cm,int),输出带 1 位小数的“米”(如 175 → 1.8)。
提示:double m = cm / 100.0; 用 %.1f
#include <stdio.h>
int main(void) {
int cm;
scanf("%d", &cm);
double m = cm / 100.0;
printf("%.1f\n", m);
return 0;
}
题目 5 【拼接小数】
输入两个整数 a b,把它们当成“整数部分”和“小数部分”拼成浮点数输出:
输入 3 14 → 输出 3.14
#include <stdio.h>
int main(void) {
int a, b;
scanf("%d %d", &a, &b); // 输入 3 14
double v = a + b / 100.0; // 3 + 0.14 = 3.14
printf("%.2f\n", v);
return 0;
}
更多推荐


所有评论(0)