目录
1. 第一个C语言程序
#include<stdio.h>
int main()
{
printf("hello code\n");
return 0;
}
//main函数是程序的入口
//一个工程中main函数有且仅有一个
//<stdio.h>中 std 为标准;i为input(输入),o为output(输出)
//printf是一个库函数,用来打印数据
a.这里写程序的软件不同运行程序的快捷键也不同。ex:VS2019使用:ctrl+F5。而CLion用shift+F10。
b.缩进的快捷键:Tab向右,shift+Tab向左。(但是在写这篇文章中代码时,Tab可以向右,但是shift+Tab还是向右不知道什么情况,编程软件里这么操作是没问题的)
2. 数据类型
char 字符数据类型 打印时通配符:%c
short 短整型 %hd
int 整型 %d
long 长整型 %ld
long long 更长的整型 %lld
float 单精度浮点型 %f
double 双精度浮点型 %lf
a.为什么会出现这么多的数据类型呢?因为C语言只是一门编程语言,一种工具,而在生活中就存在这些类型的数据,引入这么多的数据类型是为了更加丰富,真实的表示生活中的各种值。
b.那么每种类型的大小是多少呢?
#include <stdio.h>
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
printf("%d\n",sizeof(long double)); //12 单位是字节
return 0;
}
sizeof(char)即为char类型的字节大小,C语言中规定sizeof(long)≥sizeof(int)。
c.类型的使用
char ch = 'z';
int height = 175;
int weight = 70;
int,char 实际上是向内存申请空间,而后面的身高体重是名称。
3. 变量、常量
生活中有些值是不变的(例如:性别,身份证号等)这类不变的值在C语言中用常量的概念来表示而有些值是可变的(例如:身高体重肺活量)这类可变的值则用变量来表示。
3.1 定义变量的方法
int age = 23;
float wight = 74.5f;
char ch = 'z';
3.2 变量的分类
分为局部变量与全局变量
#include<stdio.h>
int globalv = 2024; //全局变量,大括号外
int main()
{
int localv = 2023;//局部变量,大括号内
int globalv = 2022; //这时将全局变量定义为2022会出现什么问题呢?
printf("globalv = %d",global);
}
当局部变量和全局变量同名的时侯,局部变量优先使用!建议在日常编程中不要同名。所以上图代码打印出globalv=2022,不会有什么问题。但需要注意的是同一范围内同一变量不可以重复定义。
3.3 变量的使用
#include<stdio.h>
int main()
{
int num1 = 0;
int num2 = 0; //初始化,默认存放随机值
int sum = 0;
printf("输入两个数:");
scanf("%d %d",&num1,&num2); //%d与%d之间为空格,&num1与&num2之间为,&为取地址
sum=num1+num2;
printf("sum=%d\n",sum); //输出一个十进制整数
return 0;
}
这里在VS中scanf好像会出错,它会提示使用scanf_s,但这个函数是VS编译器自己提供的,只有VS认识,所以还是在源文件第一行加#define (_CRT...)系统提示的一串。
3.4 变量的作用域和生命周期
a.作用域:限定某个变量的可用性的代码范围就是这个变量的作用域。局部变量的作用域是变量所在的局部范围,全局变量的作用域是整个工程。
b.生命周期:
局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期束。
全局变量的生命周期是:整个程序的生命周期。
3.5 常量
#include <stdio.h>
enum Sex
{
MALE,
FEMALE,
}; //MALE FEMALE是枚举常量,enum sex不是枚举常量
int main()
{
2024; //字面常量
'z'; //字符
"abcd"; //字符串
const float pai = 3.14f; //pai是const修饰的常变量,本质是变量,具有常量属性。
#define min 1
printf("m=%d\n",min);
printf("%d\n",MALE);
printf("%d\n",FEMALE);
return 0;
}
枚举常量的默认是从0开始,依次向下递增1。上面例子中被const修饰的常变量在语法层面限制了变量pai不能直接被改变,但pai本质上还是一个变量,所以叫常变量。
4. 字符串;转义字符
4.1 字符串
“hello blog\n”双引号引起来的一串字符被称为字符串。字符串的结束标志是一个\0的转义字符。在计算字符串长度时\0是结束标志,不算做字符串内容。
#include<stdio.h>
int main()
{
char arr1[] = "mit";
char arr2[] = {'m','i','t'};
char arr3[] = {'M','I','T','\0'};
printf("%s",arr1);
printf("%s",arr2);
printf("%s",arr3);
return 0;
}
arr[]的方括号里会根据字符串自动确定大小。第一个字符数组arr1中的“mit”后隐藏了一个 \0。第二个数组没有\0,只有3个字符,打印出来不会停,arr3中的\0就是让它停的字符。
%s打印字符串。
int len = strlen("abc");//求一个字符串的长度函数,头文件应该为<string.h>。
4.2 转义字符
假如我们想在屏幕上打印一个目录
"c:\test\628\test.c"
若我们这样写:
#include<stdio.h>
int main()
{
printf(""c:\test\628\test.c"")
return 0;
}
实际并不会按照我们的意愿输出,这时便可引入转义字符了:
转义字符 | 解释 |
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词("??)"变成"]",在问号前加入\可避免这种情况) |
\' | 用于表示字符常量‘ |
\'' | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 换页,将当前位置移到下一页的开头。 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1-3个八进制数字。如\130X,当然八进制是没有8的 |
\xdd | dd表示2个十六进制的数字。如\x30 |
#include<stdio.h>
int main()
{
printf("%c\n",'\''); //在屏幕上打印一个单引号
printf("%c\n","\""); //在屏幕上打印一个双引号
return 0;
}
ex:
#include<string.h>
#include<stdio.h>
int main()
{
printf("%d\n",strlen("abcdef")); 6
printf("%d\n",strlen("c:\test\628\test.c")); 14
return 0;
}
注:\62被解析成一个转义字符。\628不是 \ddd,因为“8”。
5. 注释
作用:梳理思路,对复杂代码进行解释,帮助自己,帮助他人。代码中不需要的代码也可以直接删除,不过我更喜欢注释(虽然只是一些非常简单的代码,但是在一个文件中看到自己手打的代码还是很有成就感的)
注释有两种风格:
C语言风格注释:/*xxxxxxxxxxxxx*/,缺点是不能嵌套注释
C++风格注释://xxxxxxxxxxx,可以注释多行
快捷键VS2019中:ctrl+c+k CLion中ctrl+/
6. 选择语句
#include<stdio.h>
int main()
{
int coding = 0;
printf("我会敲代码吗?(选择1或0)");
scanf("%d",&coding);
if(coding==1);
{
printf("good\n");
}
else
{
printf("jijijijibabayabayabay\n");
}
return 0;
}
7. 循环语句
- while
- for(见分支与循环语句)
- do...while(见分支与循环语句)