c语言编程基础入门必备知识
数据类型
基本数据类型
类型名称说明char字符类型存放字符的ASCII码int整型存放有符号整数short短整型存放有符号整数long长整型存放有符号整数long long存放有符号整数float单精度浮点型存放精度不高的小数double双精度浮点型存放精度较高的小数
- 除了这些基本数据类型之外,还有一些复合类型,后面会慢慢讲到.
- 表格中最常用到的四种类型是 char int float 和double.
类型介绍
根据存放类型的不同,可以大致分为字符型,整型和浮点型
- 整型
- 存放整数的类型 比如0 1 2 3 4这种自然数或者负数都可以用整型存放
类型大小范围说明
int4-2^31~2^31-1
short2-2^15~2^15
short(int) 短整型
long4-2^31~2^31-1long (int) 长整型,规定范围不得低于int
long long8-2^63~2^63-1不低于long类型
- 整型数据需要注意的是 整型数据之间的运算只会得到整型,也就是类似3除以4这种操作得到的不是0.75,而是0
- 字符类型
- 字符类型是一种比较特殊的整型,本质上存放的仍然是整数,因此可以和整数一样参与各种计算
类型大小范围说明char1-128~1270~127每个数字代表一个字符,但是不是所有的字符都是可打印字符
- ASCII码表,字符类型不需要记这个表格,需要的时候可以查表
- 浮点型/实型
- 浮点型指的是小数类型,为什么叫浮点型,参考浮点数二进制计算时候小数点的移动
类型大小范围说明float4-3.4e38~3.4e38单精度浮点型,精确到小数点6~7位double8-1.7e308~1.7e308双精度浮点型,精确到小数点后面16~17位
- float内存占用更小,运算速度更高.double类型占用内存大,运算较慢,但是精度更高
变量定义和命名规范
- 变量和常量
- C语言中将在代码中不能变的量称之为变量,不可变的量称之为常量
- 比如圆周率这种就是常量,关注人数就是变量
- 定义变量
- 类型规定了数据存放和使用的方式,现在有一个数据如果要存放的话,就需要用到变量
//定义变量的格式 类型 变量名;
int a;
- 上面代码定义了一个int类型的变量a 这个变量可以在后面赋值,计算,或者显示到屏幕上
- 命名规范
- 只能由数字,下划线,字母,美元符号组成
- 不可以是数字开头
- 不可以和关键字冲突
有一些名字拿去做其他作用,比如int 代表整型,这些就称之为关键字
- 命名方式 驼峰命名法
每个变量名由若干个单词组成,除了第一个单词之外,其余单词首字母全部大写.单词可以是缩写。比如 mciSendString
基本输入输出
- 输入输出函数
- printf用于将指定的内容以特定格式输出到屏幕
- scanf用于获取用户输入的内容
- 格式说明
格式占位符作用%d有符号10进制整型%c字符类型%f单精度浮点型%lf双精度浮点型%s字符数组类型%o无符号8进制整型%x无符号16进制整型
- 输出格式
- printf("格式占位符",变量);
- 输入格式
- scanf("格式占位符",&变量);
分支
分支语句
C语言的分支结构主要有if和switch
- if
- 基本格式
if(条件) {
//语句1
}
else {
//语句2;
}
//如果条件满足 执行语句1,如果条件不满足 执行语句2
- 需要注意的事情
- 条件可以用一个数字作为条件,判断真假按照 0为假以非0为真的规则
- 写条件的时候注意=和==是不同的运算符 不要弄混
- 如果条件比较复杂 建议拆成多句,if里面的条件不宜太长,方便阅读
- 在if后面不要加分号
- else部分如果不需要可以不写
- 如果是if-else嵌套,比如
if(条件1){
语句1;
}
else if(条件2) {
语句2;
}
…
else {
语句n;
}
- 当第一个条件不成立的时候才判断条件2
- if后面的{}中如果只有一个语句(用分号结尾的语句或者其他if语句都可以),那么可以省略掉{},else并不是必要的,如果else的{}中没有内容 可以不要else
- switch
- 基本格式
switch(变量)
{
case 情况1:
语句1;
break
case 情况2:
语句2;
break;
//...
default:
break;
}
- 注意事项
- sw itch的case后面只能接整型或者字符型的常量表达式,不可以是小数或者字符
- sw itch每个case后面都有一个break
- default语句如果不需要可以不要
- 对比
- if适应于任何分支情况,三目运算符适合一些比较简单的分支,switch适合可以一一列举所有可能情况的时候
- 如果是一个范围的话用if比较容易表示,但是如果是单个单个能列举的值,用switch比较简介,比如游戏操作的wasd方向键,菜单的几个功能都可以用switch
循环
循环作用
- 多次执行的语句就可以使用循环
比如游戏的操作和贴图,这些都是要多次执行的,就会用到循环
- 分支只会执行一次,但是循环可能会执行多次(会搭配使用)
三大循环语句
- while循环
- 基本格式
while(条件) {
语句; //循环{}中语句称之为循环体
}
//执行顺序 先判断条件 条件满足执行循环体,不满足直接退出
- 说明
当条件满足的时候执行循环体,执行之后再去判断条件,条件不满足的时候退出
//打印ASCII码表中的所有字符
int i=0;
while(i<128) {
printf("%c\t",i++);
}
//同一个代码可以有多种不同的写法 熟练使用其中一个循环就好了
- 注意事项
- w hile循环不要加分号
- w hile循环体只有一句的时候可以省略{} 但是不要省略
- 如果条件满足则会一直进行循环,不满足就会退出循环,所以w hile可能一次都不执行
- for循环
- 基本格式
for(初始化1;条件2;自增自减3) {
循环体4;
}
//为了描述方便 给每个语句都加了一个编号
//执行顺序 先执行初始化语句1,然后判断条件2,条件成立执行循环体4,不成立跳出循环.
//循环体执行完毕之后,执行自增语句3 然后判断条件 开始下一轮循环
//简记 1243 243 243
- 说明
for循环类似w hile循环 同样是先判断然后执行循环体的,不过for的语法比较简单并且相对于w hile更不易写错,所以可以先从for循环开始熟悉
- 注意事项
- for循环中的两个分号必不可少,其余的部分都可以不要,但是分号必不可少
- for循环外面不要加分号!!!! 画重点 if w hile for一般都不要加分号
- do while循环
- 基本格式
do {
//循环体;
}while(条件); //;不能少
//do while循环的特点是先执行循环体然后判断条件,如果条件成立进行下一轮循环
//do while的循环体必定会执行一次
- 说明
do w hile循环条件放在后面,先执行然后判断,如果条件不成立会退出,不然会继续循环
- 特别说明
- 条件一直为真的循环称之为死循环,常用的有w hile(1) 或者for(;;)
- for和w hile之间可以相互转换,但是和do w hile不一定可以
跳转语句
跳转语句使用方式作用说明goto跳转到程序的任意位置使用不当会造成代码的可读性差,可维护性差,基本上不用breakbreak;跳出最近的一个循环或者switch如果是循环中的sw itch中的break只能跳出sw itch,如果是多层循环只能跳出最近的一个循环continuecontinue;跳过当前的一轮循环,进入下一轮循环只能和在循环中使用.跳过当前循环,进入下一轮循环returnreturn 返回值;或者return;跳出当前函数主函数中的return会跳出主函数(跳出主函数也就意味着程序结束),其余函数的return是跳出当前的函数.可以跳出多层循环
- 说明
- break,continue这样的跳转语句一般和if搭配使用,满足特定条件才会退出循环或者跳过这次循环
- return后面要不要加一个返回值这个根据函数确定,留到函数部分再具体讲解
- 以上的都是关键字,不需要加头文件,也不可以用作函数或者变量名
- 跳转函数 exit的说明
exit作用 跳出整个程序,是stdlib.h里面的函数,使用的时候需要加上
常用写法
exit(0); //里面的数字0表示正常退出,其余数字表示异常退出,不影响代码
在任意地方使用均会跳出整个程序
数组
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dzN3NXey-1570415333052)(D:\微信公众号\Typora\素材\潭州vip\数组.png)]
数组
- 数组作用
存放多个相同类型的元素,如果有多个相同类型的元素需要存放,那么可以使用数组。
//存放3个成绩
//方式1 单独定义变量
int grade1,grade2,grade3;
//方式2 使用数组
int grade[3];
- 数组定义和使用方式
- 数组定义格式 类型 数组名[数组大小];
int arr[16];//定义一个数组 数组中可以存放16个int类型数据
如果你想要定义的时候就给里面的元素赋值的话,可以定义的时候直接用=
int arr[16]={1,2,33,2,4,5,6,1,6,7,7,7,8};
//定义的时候给数组元素赋值
//数组元素个数是16,但是后面只有13个值,那么多余的就用0赋值
//如果定义的时候给数组元素赋值,可以省略掉数组大小,用后面赋值的个数作为数组的大小
//int arr[]={1,2,3,4,5}; //此处数组大小是5
- 数组元素使用方式 数组名[下标]
//定义数组之后 相当于同时定义了多个变量,如果要使用这些变量,就用数组名加下标的形式去单独访问其中的元素
// [ ] 下标运算符
arr[2]=12; //表示给数组中第二个元素赋值(下标从0开始计算)
- 注意
- 定义的时候int arr[16]表示对定义数组,除了定义之外的[]全部是下标运算符的意思,所以arr[16]不是数组的意思 而是数组中的一个元素
- 下标从0开始算,所以注意下数组的下标不可以超过数组的最大元素个数
- 下标可以使用变量,所以数组可以和循环搭配使用
for(int i=0;i<16;++i) { printf("%d\t",arr[i]); }
二维数组和多维数组
- 二维数组定义和使用
如果要定义几组数据就要用到二维数组,比如说地图,比如说一个学校有20个班级,每个班级40个学生,这种用一维数组也可以存,不过用二维数组更加方便
定义格式 类型 数组名[ 行 ] [ 列 ] 使用方式 数组名i (使用时候注意,行列都是从0开始的)
//一维数组元素地址打印测试
int arr[12]={1,2,3,4};
for(int i=0;i<12;++i)
{
printf("%p\t",&arr[i]);
}
- 二维数组的初始化
和一维数组类似,二维数组初始化可以直接在定义的时候赋值
int douArr1[3][4]={{1,2,3,4},{2,2,3,4}}; //每一行单独赋值
int douArr2[3][4]={1,2,3,4}; //先存第一行,然后第二行 以此类推
int douArr3[][4]={1,2,3,4}; //省略行 根据后面赋值判断有多少行
如果是定义的时候赋值,二维数组定义的时候可以省略掉行(不推荐省略)
- 二维数组本质(只做了解)
//一维数组元素地址打印测试
int arr[12]={1,2,3,4};
for(int i=0;i<12;++i)
{
printf("%p\t",&arr[i]);
}
//二维数组元素地址打印测试
int douArr[3][4]={1,2,3,4};
for(int i=0;i<3;++i)
{
for(int j=0;j<4;++j)
{
printf("%p\t",&douArr[i][j]);//打印地址
}
printf("\n");
}
//%p用于打印地址的格式占位符 打印的是16进制形式
分析打印结果,发现这些元素地址都是相邻的. 类似一维数组,实质上二维数组的元素存放方式也是一个个相邻存放的,一行存完之后存下一行,从内存角度看,多维数组和一维数组其实没有什么太大的区别,使用的话,可以用如下方式
for(int i=0;i<12;++i)
{
printf("%d\t",douArr[0][i]);
}
基本上二维数组以上的多维数组就用的很少了,规则和二维数组类似,所以掌握了二维数组,多维数组也是一样操作.
字符数组和函数
- 字符数组和字符串
用双引号括起来的一串内容是字符串,字符串一般用字符数组存储
char str[20]="hello w orld";//定义字符数组存放一个字符串
字符串末尾都有一个'\0',表示的字符串的结尾,因此在进行和字符串相关的操作,都会用到'\0'
- 由于字符串末尾有'\0',用字符数组存放字符串需要注意几个事项:
- 因为数组只有在定义的时候才可以用=赋值,其余情况下不可以直接用=赋值
- 字符数组可以用循环赋值,但是末尾需要记得加上一个\0
- 考虑到\0 数组大小不可以太小
- 字符串有一些常用函数,但凡是字符串(用\0结尾)都可以用这些函数
- 字符串可以用的一些函数
- 字符串比较函数 strcmp
- 字符串拷贝函数 strcpy
- 字符串链接 strcat
- 测量字符串长度 strlen
- 判断一个字符串是否是另外一个字符串的子串 strstr
- 判断字符串中是否包含一个字符 strch
- 字符串的输入输出 scanf printf
- 字符串的输入输出 gets puts
函数
对于一些经常会使用到的(多次 重复使用)的代码可以将它封装成一个函数,C语言程序的基本组成单位就是函数.
函数1
- 函数使用方式
调用方式 函数名(参数)
- 调用函数需要先知道函数名,比如getchar scanf这种
- 如果函数没有参数,那么直接加()即可调用 比如getchar()
- 如果函数有参数,那么需要在()里面写上参数,比如printf("Hello w orld")
- 一般函数都是为了执行某项功能,一些经常用到的功能可以写成函数以供调用,调用函数不需要知道函数具体的实现方式(知道他的功能就行)
- 返回值
- 对于一些函数会返回一个结果,比如printf他返回打印的元素个数
- 不同函数的返回值有不同的作用
- 函数定义方式
- 函数定义需要包含所有函数的组成部分
- 需要确定函数作用,参数和返回值,定义函数之后方能使用
- 函数体根据函数作用书写 写函数的时候需要先设计,最好写注释
- 函数声明
- 在调用函数之前定义函数的话就没用任何问题,但是一般情况会将函数定义放在调用函数的后面,这种情况就需要写函数声明
- 函数声明的作用是告诉编译器去后面找这个函数的定义,也就是他只是刷一下存在感
- 函数声明需要函数返回值类型 函数名和参数类型,也就是说参数的名字可以省略
int fun(int ,int); //函数声明
int main()
{
fun(3,4); //函数调用
getchar();
return 0;
}
int fun(int x,int y) //函数定义
{
return x>y?x:y;
}
- 形参和实参
- 形参意义
- 形参指的是调用函数的时候需要从外部引入的参数
- 其他函数中的值可以通过传参的方式传给被调用的函数
- 形参说明了被调用函数中需要哪些外部变量
- 实参意义
- 实参是调用函数的时候传递的参数,实参传递给形参,就是从函数中传递值给被调用的函数
- 实参必须是有一个确切的值才能传递给其他函数
- 归纳总结
- 函数声明和定义时候的参数称之为函数的形参
- 函数调用时候的参数称之为实参
- 调用就是用实参给形参赋值然后执行函数体
int fun(int ,int); //函数声明 形参
int main()
{
fun(3,4); //函数调用 实参
getchar();
return 0;
}
int fun(int x,int y) //函数定义 形参
{
return x>y?x:y;
}
函数2
- 作用域
变量要先定义然后才能使用,但是 变量定义位置会影响到使用的范围
- 局部变量
在函数或者{}里面定义的变量,出了{}就不能继续使用
- 全局变量
在函数外部定义的变量,定义之后整个程序中都可以使用
变量的作用域不一样的话,名字可以相同,使用的时候依据就近原则(最近定义的那个变量).
- 函数传参
问题1 如果要传递一个数组进去,那么形参和实参要怎么写 问题2 如果想要在函数里面修改实参的值 能不能做到
函数实参实参写法函数形参备注int xxint x基本数据类型直接写就行int arr[128]arrint arr[]一维数组传参的时候数组大小是不写的,需要另外传递进去int douArr[3] [4]douArrint douArr[] [4]二维数组传递参数实参直接写数组名,形参省略行号,但是列不能省略
形参名和实参名可以不一样,这里只是作为示例,不是意味着需要名字相同
- 递归(偏难)
函数直接或者间接调用自己叫做递归,循环都可以用递归实现
递归只是一种解决问题的方式,关键在于找到递归公式
//示例 求阶乘
//思考 n!=1*2*3*4*.....*(n-1)*n
//可以得到递归公式 n!=n*(n-1)
//当n==1的时候 n!=1
int Fn(int n) //求n的阶乘
{
if(n>1)
{
return Fn(n-1)*n;
}
else
{
return 1;
}
}
C语言表白程序这样写,99.9%能成功!
http://www.makeru.com.cn/live/5413_2373.html?s=45051
C语言编程基础
http://www.makeru.com.cn/live/1758_311.html?s=45051
C语言
http://www.makeru.com.cn/course/details/2233?s=45051
提升C编程能力
http://www.makeru.com.cn/live/1392_1166.html?s=45051
夯实C语言,从小白到大牛的进阶之路!
http://www.makeru.com.cn/live/5413_1980.html?s=45051
c语言编程基础入门必备知识的更多相关文章
- Python基础入门必备知识
1 标识符标识符是编程时使用的名字,用于给变量.函数.语句块等命名,Python 中标识符由字母.数字.下划线组成,不能以数字开头,区分大小写. 以下划线开头的标识符有特殊含义,单下划线开头的标识符, ...
- 零基础学习C语言入门必备知识
今天跟大家一起从零学C语言: 1. C语言简介 1.1 C语言发展史 C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计.C语言的发展历程大致如图1-1所示 ...
- 零基础入门必备的Linux命令和C语言基础
文件和目录(底部有视频资料) cd /home 进入 '/ home' 目录' cd - 返回上一级目录 cd -/- 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 c ...
- LINUX下C语言编程基础
实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...
- C语言零基础入门难发愁,那就快来看看这篇基础整理资料吧
C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成.格式.以及良好的书写风格,使小伙伴对c语言有个初步认识. 例1:计算两个整数之和的c程序: #include main() { in ...
- Linux基础与Linux下C语言编程基础
Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...
- 【转】Linux基础与Linux下C语言编程基础
原文:https://www.cnblogs.com/huyufeng/p/4841232.html ------------------------------------------------- ...
- C语言编程基础有网盘资料哦
刚开始看STM32的库函数,会有很多疑惑,例如指针怎么用,结构体跟指针怎么配合,例如函数的参数有什么要求,如何实时更新IO口的数据等.如果重新进行C语言的学习,那么要学很久才能够系统地认识.本文则将比 ...
- 20191310李烨龙Linux C语言编程基础
Linux C语言编程基础 任务详情 0. 基于Ubuntu或OpenEuler完成下面的任务(OpenEuler有加分) 1. 选择教材第二章的一节进行编程基础练习(2.10,2.11,2.12,2 ...
随机推荐
- 前端框架VUE——安装及初始化
本篇文章适合,想要学习 vue,但对 vue 又没有接触过的同学阅读,是非常基础的内容.告诉大家使用 vue 时的安装方式,及如何创建实例,展示内容. 一.安装方式 vue 是一种前端框架,所以使用前 ...
- go的database/sql库中db.Exce()
db.Exec(query string, args ...interface{}) Db.Exec(`CREATE TABLE IF NOT EXISTS STU(ID int(8) PRIMARY ...
- MAC地址知识
1. 全球唯一无法保障. 软件工具可以修改网卡的MAC地址 2.不需要全球唯一. 只要保障局域网内不重复就行. 路由器 保证 数据在不同局域网内跳转. 如果局域网内使用集线器,那么可以设置相 ...
- jquery监听动态添加的input的change事件
使用下面方法在监听普通的input的change事件正常 $('#pp').on('change', 'input.videos_poster_input', function () { consol ...
- linux重启mysql
一. 启动1.使用 service 启动:service mysql start2.使用 mysqld 脚本启动:/etc/inint.d/mysql start3.使用 safe_mysqld 启动 ...
- centos7.6,nginx1.18,php-7.4.6,mysql-5.7.30 安装
#1.下载,来自各官网 nginx-1.18.0.tar.gz php-7.4.6.tar.gz mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz #下载到本地再传 ...
- Feign超时不生效问题
使用Feign作为RPC调用组件,可以配置连接超时和读取超时两个参数 使用Feign配置超时需要注意:Feign内部使用了负载均衡组件Ribbon,而Ribbon本身也有连接超时和读取超时相关配置一. ...
- ATR吊灯止损策略 (含有tbquant源码)
ATR吊灯止损策略定义: 做多,止损放在最高价之下N个ATR. 做空,止损放在最低价之上N个ATR. 该策略生成的止损点就像是从市场最高价的"天花板"上悬挂下来的吊灯.所以命名为A ...
- 三款超实用,好用的Python开发IDE推荐,看完总会有一款合适你的
@ 目录 前言 IDE介绍 Sublime Pycharm(推荐使用社区版免费版) visualstudio 倒底怎么选择 前言 一款好的代码编辑工具,让你学习事半功能,那今天就来看看我们学Pytho ...
- Kettle学习笔记(四)— 总结
目录 Kettle学习笔记(一)- 环境部署及运行 Kettle学习笔记(二)- 基本操作 kettle学习笔记(三)- 定时任务的脚本执行 Kettle学习笔记(四)- 总结 Kettle中设置编码 ...