从0开始的C语言学习记录
自我介绍
我很喜欢玩游戏,不管是以前的经典游戏,还是近年来的3A级大作,每每在体验到它们优秀的可玩性或者让人难以忘怀的故事情节时,让我常常想,自己也能做一款这样令人满意的游戏, 这就是我想学好编程的动力。
目标
要想成为一名合格的程序员。首先要学好最基础的C语言,再系统的、全面的学习,其他应该要熟练掌握的编程知识,打好坚实的基础,培养出优秀的能力。
如何学好编程
学好编程,不仅仅是学会一门计算机高级语言如C/C++/JAVA,还要熟练掌握如算法、数据结构、操作系统、数据库等等身为程序员所应该掌握的基础知识。
除应该掌握的基础知识以外,还要注重的问题:
-
一直不断去学习的能力。因为计算机技术更新很快,新技术新知识层出不穷,稍不注意可能就跟不上技术发展的趋势。
-
培养自己解决问题的能力。在学习中出现的大部分问题都被解决过,所以代码出现BUG,首先自己要勤于调试代码,找到问题所在,思考问题出现的根源,如果解决不了再去网页查找,最后网页查找还是解决不了,再去向大神或者老师提问。
-
提高自己的表达能力。谁也不是你的知音,不可能知道你的所有想法,该表达你的所想时,先组织好语句,让他人清晰、明确你所述的想法。
这就是我现在所理解也要去完成的,如何学好编程所要做的事情。
开始学习C的第一个程序
主函数
也就是main函数
在一个程序中主函数有且仅有一个
在C89/C99/C11标准文档中提供了两种main函数的写法
//第一种写法
int main(void)
{
return 0;
}
//形参为void,表明它在调用的时候不能传入任何参数,
//那么它也就不能获取命令行参数了。
///
//第二种写法
int main(int argc, char* argv[])
{
return 0;
}
//第一个入参为命令行参数个数,第二个入参为命令行参数数组。
//通常用于实现需要从命令行获取参数的功能。
int main(void) 和 int main()的区别
int main(void)
指此函数的参数为空,不能传入参数,若输入参数则会出错,但必须要有返回值,如return 0;。
int main()
可以传入参数,程序需要返回值。
过时的代码
在一些书中常常看到这样的主函数
void main()
{
}
这是已经过时的写法,如果那一本书还能看到,证明这本书已经过时了,尽早换书吧!
Hello World
按照某个不成文的传统,开始第一个程序“Hello World”
#include<stdio.h>//stdio—标准输入输出
//int —整型 —整数的类型
//main函数 — 也就是主函数 它是程序的入口
int main()
{
printf("Hello World\n");//库函数—打印函数—输出函数
return 0;
}
数据类型
为什么写代码?
为了使生活更加便利,所以有了我们常用的微信,京东等等一系列应用软件。
假如我买一件东西它的价格为100元,这个数在数学中表示为整数。
在C语言是叫做整型,分为:
字符数据类型(char);
短整型(short);
整型(int)
长整形(long)
更长的整型(long long)。
假如我的体重为45.5公斤,这个数在数学中表示为小数。在C语言中叫做浮点数分为:
单精度浮点数(float);
双精度浮点数(double)。
数据类型的使用和大小
- 为什么要存在这么多类型?
int main()
{
short age = 18;
int price = 20000;
float weight = 55.5;
return 0;
}
因为每个数据类型大小各不相同,所以为了避免空间浪费,要用合适的类型表达。
- 如何计算一个类型创建的变量所占空间的大小呢?
用sizeof计算,如图:
int main()
{
printf("%d\n", sizeof(char));//1字节
printf("%d\n", sizeof(short));//2字节
printf("%d\n", sizeof(int));//4字节
printf("%d\n", sizeof(long));//4字节
printf("%d\n", sizeof(long long));//8字节
printf("%d\n", sizeof(float));//4字节
printf("%d\n", sizeof(double));//8字节
return 0;
}
计算机中的单位
单位 | 大小 |
---|---|
Bit | 1 |
1 Byte(字节) | 8 Bit |
1 KB | 1024 Byte |
1 MB | 1024 KB |
1 GB | 1024 MB |
1 TB | 1024 GB |
1 PB | 1024 TB |
char的取值范围 -128 ~ +127 (1 Byte)
short的取值范围 -32767 ~ + 32768 (2 Bytes)
unsigned short的取值范 0 ~ 65536 (2 Bytes)
int 的取值范围-2147483648 ~ +2147483647 (4 Bytes)
unsigned int 的取值范围0 ~ 4294967295 (4 Bytes)
具体如何计算它的取值范围,以后再学习。
- 为什么sizeof(long)和sizeof(int)相同
因为c语言规定 sizeof(long)>= sizeof(int) ,所以在不同计算机sizeof(long)可能是8,也可能是4。
ASCII码表
ASCII码表有什么用?
如图:
int main()
{
char ch = 'e';
printf("%c\n", ch);//结果为e
printf("%d\n", ch);//结果为101
return 0;
}
为什么%d输出后结果为101?
因为根据ASCII码表,字符e所对应的10进制数为101。
变量和常量
生活中有些值是不变的(比如:圆周率,身份证号,血型等等)
这样的值就叫做常量。因此可以变换的值就叫做变量。
例如:
int main()
{
//age是变量
short age =10;
age = 11;
printf("%d\n", age);//11
return 0;
}
变量的分类
- 变量分为局部变量和全局变量
如图:
int g = 100;//全局变量
int test()
{
int b = 1000;//局部变量
}
int main()
{
int a = 10;//局部变量
return 0;
}
- 如果全局变量名和局部变量名相同时,变量的值是全局变量的值还是局部变量值?
int a = 100;
int main()
{
int a = 10;
//局部变量和全局变量的名字可以相同,
//相同时,局部优先,但不建议相同
printf("%d\n", a);//结果是10
return 0;
}
变量的使用
- 变量如何使用?
int main()
{
int num1 = 0;//创建第一个变量,赋值为0。
int num2 = 0;//创建第二个变量,赋值为0。
scanf("%d%d", &num1, &num2);//输入两个数
int sum = num1 + num2;//两个数相加,相加的值赋给sum
printf("%d\n", sum);//输出sum的值
return 0;
}
- 在使用scanf时所要注意的事项
由于VS编译器由于认为scanf函数不安全,会编译不过去,有两种解决办法,第一种方法:用scanf_s函数,缺陷是其他编译器不认。第二种方法:在代码行第一行写 #define _CRT_SECURE_NO_WARNINGS 1
输入时注意的问题
scanf("%d%d", &num1, &num2);
在写代码时,如果2个%d之间或者前面亦或者后面,加入了任意字符或者数字,在输入数据时,加上你所输入的字符或者数字。