c语言一作
1.c语言的基本概念
2.第一个c语言代码
3.main函数和printf以及库函数
4.关键字和数据类型以及变量等内容介绍
5.字符以及ASCII编码
6.字符串和\0(转义字符)
7.语句分类
8.注释以及注释的作用
文章目录
一、c语言的基本概念
1.什么是c语言
c语言是一种计算机语言,起源于1972年由贝尔实验室的计算机科学家丹尼斯·里奇开发的,经过多次变革至今仍是计算机语言的主流
2关于编译器
采用的编译器这里推荐vs序列主要是2019或者2022。vs序列是一种集成开发环境,
集成开发环境(IDE)用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、测试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能等一体化开发软件服务套。
二、第一个c语言代码
1.你好世界
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
对于我这样的新手肯定充满了疑问,经过一段时间的学习自己也有一些了解,在这里想做一些总结方便日后的复习,如有错误恳请大家给予一些指点鄙人一定虚心学习。
三、main函数和printf以及库函数
1.main函数是一个c语言程序的入口,vs编译器编译所写代码只会从main进入
注意点
- main函数有且只能有一个
- 在多个.c文件中也只能有一个main函数
- main函数的位置可以在任意位置,但是如果在主函数之中调用了哪些函数,必须在main函数前对其所调用函数进行生命或包含其被调用函数的头文件
2. printf以及库函数
例如
printf("hello worid\n")
- printf 将想表达的意思打印在屏幕上,是一种vs规定的语法给操作者去使用,这种语法又称库函数
- 库函数:为了提高程序员的工作效率以及方便人员的学习,c语言标准规定了一组函数,由不同的编译器厂商根据标准提供给人们使用,这些函数组成了函数库又称库函数或者标准库,但是有一些函数在不同的编译器中不一定可以使用一定要注意
- 库函数参考网站:
库函数参考网站
四、关键字和数据类型以及变量等内容介绍
例如:
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
这里main 前⾯的 int 表⽰ main 函数执⾏结束的时候返回⼀个整型类
型的值。所以在 main 函数的最后写 return 0; 正好前后呼应,其实这里对int和整形就有一些疑问了,来康康笔者的一些见解吧
关键字介绍
- 其实c语言中规定一些保留符号的字符例如:int、char、break、continue等等,这些符号称为保留字或者关键字
- 关键字不能自己创建
- 自己所创建的标识符名称也不能和关键字重复
- 每个关键字都有自己的意义是c语言所使用和规定的
- c语言关键字共有32个
- 关键字参考网站
数据类型介绍
C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。并且数据类型分为内置类型和自定义类型两大类
这里只对内置类型进行介绍
6. char(字符类型)char可以定义单个字符变量,也可以定义一个整数例如:
#include <stdio.h>
int main()
{
char c;
c = 'd';
char a;
a = 0;
printf("c=%c\n",c);
printf("a=%d\n",a);
return 0;
}
输出结果为
c=d
a=0
c接收d字符所以打印出来d
a接收整数0所以打印出来0 其实提到接收不得不想到操作符例如
目前介绍3类操作符
1. 算数操作符
C语⾔中为了⽅便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。分别是: + - * \ % ,都是双⽬操作符也称运算符
单目就是这个运算符对一个变量进行操作
双目就是这个运算符对两个变量进行操作
三目就是这个运算符对三个变量进行操作
下面用代码的形式展现
加法
#imclude <stdio.h>
int main()
{
int a = 1;
int b = 1;
int sum = a+b;
printf("sum = %d\n",sum);
return 0;
}
结果
sum = 2
其实就像算数加法一样只不过加上了c语言的边框和法则
减法
#imclude <stdio.h>
int main()
{
int a = 2;
int b = 1;
int sum = a - b;
printf("sum = %d\n", sum);
return 0;
}
结果
sum = 1
与加法同理
乘法
#include <stdio.h>
int main()
{
int a = 2;
int b = 1;
int sum = a * b;
printf("sum = %d\n", sum);
return 0;
}
结果
sum = 2
同理
除法
#include <stdio.h>
int main()
{
int x = 5 / 2;
printf("x = %d\n", x);
return 0;
}
结果
x = 2
答案不应该是2.5吗,是不是吧int换成float(浮点型)后面会提到,那么把int改成float看看
#include <stdio.h>
int main()
{
float x = 5 / 2;
printf("x = %f\n", x);
return 0;
}
结果
x = 2.000000
结果仍然是2,其实在除法的运算符法则规定要得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法
例如
#include <stdio.h>
int main()
{
float x = 5.0 / 2;
printf("%f\n", x);
return 0;
}
结果
x = 2.500000
其他情况不在举例
取模(取余)
运算符 % 表⽰求模运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点数
#include <stdio.h>
int main()
{
int x = 5 % 2;
printf("x = %d\n", x);
return 0;
}
结果
x = 2
按照字面意思取余数
不过负数也可以取余,负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定
#include <stdio.h>
int main()
{
printf("%d\n", 5 % 2);
printf("%d\n", -5 % 2);
printf("%d\n", -5 % -2);
return 0;
}
结果
1
-1
-1 只由第一个变量的符号决定
2 赋值操作符:=和复合赋值
在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值例如
//}
#include <stdio.h>
int main()
{
int a = 10;//初始值
a = 11;//赋值
printf("a = %d\n", a);
return 0;
}
结果为a = 11
有赋值一次就有连续赋值例如
#include <stdio.h>
int main()
{
int a = 1;//初始值
int b = 2;//赋值
int c = 3;
c = b = a + 1;//连续赋值,从右向左依次赋值
printf("c = %d\n", c);
return 0;
}
结果c = 2
不过一般不建议使用连续赋值,当代码比较复杂的时侯比较难看
建议改成这样
#include <stdio.h>
int main()
{
int a = 1;//初始值
int b = 2;//赋值
int c = 3;
b = a + 1;
c = b; //连续赋值,从右向左依次赋值
printf("c = %d\n", c);
return 0;
}
结果c = 2
除了单一的赋值符以外还有复合赋值符例如一个变量自增或者自减的时候
#include <stdio.h>
int main()
{
int a = 1;
a = a + 1; 可以写成 a+=1
printf("a = %d\n", a);
return 0;
}
结果a = 2
3.单目操作符++、–、+(正)、-(负)
举例:++是⼀种⾃增的操作符,⼜分为前置++和后置++,–是⼀种⾃减的操作符,也分为前置–和后置–.前置++和前置–、后置++和后置–的语法其实是一样的可以简单的理解为前置:先进行自身的加减运算再进行赋值例如
#include <stdio.h>
int main()
{
int a = 1;
int d = 1;
int b = 0;
int c = 0;
b = ++a;
c = d++;
printf("a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
return 0;
}
结果
a = 2
b = 2
c = 1
d = 2
其实只要是进行++或者--它的本身是一定会进行+或者-的运算,--的运算和++一样就不再举例
7.int(整形 其实就是整数 )整形又分成四种依次为短整形、整形、长整形、长长整形如下图
短整形
short [int]
signed short [int]
[unsigned] short [int]//带括号的表示可以省略
整形
int
[signed] int
unsigned int
长整形
long [int]
[signed] long [int]
unsigned long [int]
长长整形//c99引入
long long [int]
[signed] long long [int]
unsigned long long [int]
8 浮点型(其实也就是带小数)有以下几种
float(单精度)
double(双精度)
long double(长双精度)
9.布尔类型
C 语⾔原来并没有为布尔值单独设置⼀个类型,⽽是使⽤整数 0 表⽰假,⾮零值表⽰真。
在 C99 中也引⼊了 布尔类型 ,是专⻔表⽰真假的,例如
布尔类型的使⽤得包含头⽂件 <stdbool.h>
布尔类型变量的取值是:true或者false
#include <stdio.h>
#include <stdbool.h>
int main()
{
_Bool flag = true;
if (flag)
printf("爱你\n");
else
printf("hehe\n");
return 0;
}
结果
爱你//其实就像是非0即1
10.刚才介绍数据类型时出现了signed和unsigned,这里我们简单说说他们的区别
- C 语⾔使⽤ signed 和 unsigned 关键字修饰字符型和整型类型的。
signed 关键字,表⽰⼀个类型带有正负号,包含负值;
unsigned 关键字,表⽰该类型不带有正负号,只包含非负整数;
int 中signed可以省略 但unsigned必须标注 - 整数变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。
⽐如,16位的 signed short int 的取值范围是:-32768~32767,最⼤是32767;⽽
unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65,535。 - 注意,C 语⾔规定 char 类型默认是否带有正负号,由当前系统决定。
这就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是
unsigned char 。
这⼀点与 int 不同, int 就是等同于 signed int
11.数据类型的取值范围
其实刚才提到了unsigned可以使同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。
那么内存的概念又是怎样的呢
上述的数据类型很多,尤其数整型类型就有short、int、long、long long 四种,为什么呢?
其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间,有了丰富的类型,我们就可以在适当的场景下去选择适合的类型。如果要查看当前系统上不同数据类型的极限值
limits.h 这个头⽂件中说明了整型类型的取值范围。
float.h 这个头⽂件中说明浮点型类型的取值范围。
所占字节如下
#include <stdio.h>
int main()
{
printf("%zd\n", sizeof(char)); 结果 1
printf("%zd\n", sizeof(short)); 2
printf("%zd\n", sizeof(int)); 4
printf("%zd\n", sizeof(long)); 4
printf("%zd\n", sizeof(long long)); 8
printf("%zd\n", sizeof(float)); 4
printf("%zd\n", sizeof(double)); 8
printf("%zd\n", sizeof(unsigned int)); 4
printf("%zd\n", sizeof(unsigned long)); 4
printf("%zd\n", sizeof(unsigned long long)); 8
printf("%zd\n", sizeof(unsigned short)); 2
printf("%zd\n", sizeof(unsigned char)); 1
return 0;
}
关于字符形和整形的取值范围 unsigned只修饰整形和字符形
了解清楚了类型,我们使⽤类型做什么呢?类型是⽤来创建变量的。
什么是变量呢?C语⾔中把经常变化的值称为变量,不变的值称为常量
12 变量
变量的语法:根据各种数据类型给出一个相应的变量 如果这个变量给了一个初始值即称初始化例如
#include <stdio.h>
int main()
{ int age;
char ch;
float height;
int age = 10;//称为初始化
char ch = 'a';
float height = 188;
printf("%d\n",age);
printf("%c\n",ch);
printf("%f\n",height);
return 0;
}
结果
10
a
188.000000
变量的类型
- 全局变量:在⼤括号外部定义的变量就是全局变量 全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的
- 局部变量:在⼤括号内部定义的变量就是局部变量 局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的
- 这里要知道局部变量优先 例如
#include <stdio.h>
int a = 10;
int main()
{
int a = 1;
printf("a = %d\n", a);
return 0;
}
结果
a = 1
关于全局变量和局部变量的存储位置
五、字符以及ASCII编码
1.字符:我们键盘上可以敲出各种字符,如:a,q,b,z等,这些符号都被称为字符,C语⾔中字符是⽤单引号括起来的,如:‘a’,‘b’。asdjdja像这样的称为字符串,用双引号括起来。
2. 我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆进制存储的呢?如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准ASCII 编码,C语⾔中的字符就遵循了 ASCII 编码的⽅式。
3.
4. 注意点:字符A~Z的ASCII码值从65 ~ 90
字符a ~ z的ASCII码值从97~122
对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
数字字符0 ~ 9的ASCII码值从48~57
换⾏ \n 的ASCII值是:10
在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察
六、字符串和\0(转义字符)
刚才也提到了字符串和字符,其实我认为他们最大的区别是字符的结尾没有\0,1.那么\0有什么用? 2.转义字符有哪些和它们有什么用?
1\0其实表示字符串的结束,字符串本身是有\0的并不用自己加,但是如果是字符是需要自己手动写上一个\0 例如
#include <stdio.h>
int main()
{
char arr1[] = { 'a','b','c' };
char arr2[] = { "abc" };
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
结果
abc烫烫?$wH利
abc
结果出现了乱码就是因为字符本身没有\0所以在所以时要加上\0
例如
#include <stdio.h>
int main()
{
char arr1[] = { 'a','b','c','\0'};
char arr2[] = { "abc" };
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
结果
abc
abc
2.转义字符有哪些和它们的作用
也许在前⾯的代码中你看到 \n , \0 很纳闷时啥。其实在字符中有⼀组特殊的字符是转义字符,转义字符顾名思义:转变原来的意思的字符
这里介绍两个比较重要的
\ddd :d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X
\xdd :d d表⽰1~2个⼗六进制数字。 如: \x30 表⽰字符0(对应ASCll码表)
转义字符参考网站
#include <stdio.h>
int main()
{
printf("%c\n", '\131');
printf("%c\n", '\x35');
return 0;
}
结果
Y
5//对应ASCll码表
七、语句和语句分类
C语⾔的代码是由⼀条⼀条的语句构成的,C语⾔中的语句可为以下五类:
1.空语句
2.表达式语句
3.函数调⽤语句
4.复合语句
5控制语句
空语句
其实一条;就是空语句
#include <stdio.h>
int main()
{
;//空语句
return 0;
}
表达式语句
其实就是一种赋值的形式,在表达式的后边加上分号。
#include <stdio.h>
int main()
{
int a = 2;
int b = 1;
int sum = a * b;
printf("sum = %d\n", sum);
return 0;
}
函数调用语句
要引入函数,并在后面加上;
#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
printf("hello\n");//函数调⽤语句
int ret = Add(3, 3);//函数调⽤语句
return 0;
}
复合语句
复合语句其实就是代码块,成对括号中的代码就构成⼀个代码块,也被称为复合语句。
for循环就是一个复合语句
int main()
{
int i = 1;
for (i = 1;i <= 10; i++)
{
printf("%d\n", i);
}
return 0;
}
控制语句
控制语句即用来实现对程序流程的选择、循环、转向和返回等进行控制。C语言中共有9种控制语句,包括32个关键字,可以分为”选择语句“,”循环语句“,”转向语句“,”返回语句“四类
它们由特定的语句定义符组成。C语言有九种控制语句。 可分成以下三类:
(1). 条件判断语句
if语句、switch语句;
(2) .循环执行语句
do while语句、while语句、for语句;
(3). 转向语句
break语句、continue语句、return语句、goto语句(此语句尽量少用,因为这不利结构化程序设计,滥用它会使程序流程无规律、可读性差)
八、注释以及注释的作用
1.注释是对代码的说明编译器会自动忽略
2.写注释方便别人查看和自己查看
3.注释可以帮我们更好的理解代码,但是也不要过度注释,不要写没有必要的注释
4.请写注释可以养成良好的编译代码习惯
添加注释的两种方法
第⼀种⽅法是将注释放在/* */之间,但是这种方法不可以嵌套,找到第一个结束就不再注释下面的
例如
/*int main()
{
int i = 1;
for (i = 1;i <= 10; i++)
{
printf("%d\n", i);
*/ 第一个下面并没有注释掉
}
return 0;
}
*/
所以推荐第二种,这种是c++中的常用注释方法//,但是只能注释一行,但是我们的编译器中含有注释选项自己框选也很便捷
//int Add(int x, int y)
//{
// return x + y;
//}
//int main()
//{
//
// printf("hello\n");//函数调⽤语句
// int ret = Add(2, 3);//函数调⽤语句
// return 0;
//
//}