数据类型

基本数据类型

类型名称说明char字符类型存放字符的ASCII码int整型存放有符号整数short短整型存放有符号整数long长整型存放有符号整数long long存放有符号整数float单精度浮点型存放精度不高的小数double双精度浮点型存放精度较高的小数

  • 除了这些基本数据类型之外,还有一些复合类型,后面会慢慢讲到.
  • 表格中最常用到的四种类型是 char int float 和double.

类型介绍

根据存放类型的不同,可以大致分为字符型,整型和浮点型

  1. 整型
  • 存放整数的类型 比如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
  1. 字符类型
  • 字符类型是一种比较特殊的整型,本质上存放的仍然是整数,因此可以和整数一样参与各种计算

类型大小范围说明char1-128~1270~127每个数字代表一个字符,但是不是所有的字符都是可打印字符

  • ASCII码表,字符类型不需要记这个表格,需要的时候可以查表

  1. 浮点型/实型
  • 浮点型指的是小数类型,为什么叫浮点型,参考浮点数二进制计算时候小数点的移动

类型大小范围说明float4-3.4e38~3.4e38单精度浮点型,精确到小数点6~7位double8-1.7e308~1.7e308双精度浮点型,精确到小数点后面16~17位

  • float内存占用更小,运算速度更高.double类型占用内存大,运算较慢,但是精度更高

变量定义和命名规范

  1. 变量和常量
  • C语言中将在代码中不能变的量称之为变量,不可变的量称之为常量
  • 比如圆周率这种就是常量,关注人数就是变量
  1. 定义变量
  • 类型规定了数据存放和使用的方式,现在有一个数据如果要存放的话,就需要用到变量
     //定义变量的格式 类型 变量名;
int a;
  • 上面代码定义了一个int类型的变量a 这个变量可以在后面赋值,计算,或者显示到屏幕上
  1. 命名规范
  • 只能由数字,下划线,字母,美元符号组成
  • 不可以是数字开头
  • 不可以和关键字冲突

有一些名字拿去做其他作用,比如int 代表整型,这些就称之为关键字

  • 命名方式 驼峰命名法

每个变量名由若干个单词组成,除了第一个单词之外,其余单词首字母全部大写.单词可以是缩写。比如 mciSendString

基本输入输出

  1. 输入输出函数
  • printf用于将指定的内容以特定格式输出到屏幕
  • scanf用于获取用户输入的内容
  1. 格式说明

格式占位符作用%d有符号10进制整型%c字符类型%f单精度浮点型%lf双精度浮点型%s字符数组类型%o无符号8进制整型%x无符号16进制整型

  1. 输出格式
  • printf("格式占位符",变量);
  1. 输入格式
  • scanf("格式占位符",&变量);

分支

分支语句

C语言的分支结构主要有if和switch

  1. if
  • 基本格式
 if(条件) {
//语句1
}
else {
//语句2;
}
//如果条件满足 执行语句1,如果条件不满足 执行语句2
  • 需要注意的事情
  1. 条件可以用一个数字作为条件,判断真假按照 0为假以非0为真的规则
  2. 写条件的时候注意=和==是不同的运算符 不要弄混
  3. 如果条件比较复杂 建议拆成多句,if里面的条件不宜太长,方便阅读
  4. 在if后面不要加分号
  5. else部分如果不需要可以不写
  6. 如果是if-else嵌套,比如
 if(条件1){
语句1;
}
else if(条件2) {
语句2;
}

else {
语句n;
}
    • 当第一个条件不成立的时候才判断条件2
    • if后面的{}中如果只有一个语句(用分号结尾的语句或者其他if语句都可以),那么可以省略掉{},else并不是必要的,如果else的{}中没有内容 可以不要else
  1. switch
  • 基本格式
 switch(变量)
{
case 情况1:
语句1;
break
case 情况2:
语句2;
break;
//...
default:
break;
}
  • 注意事项
  1. sw itch的case后面只能接整型或者字符型的常量表达式,不可以是小数或者字符
  2. sw itch每个case后面都有一个break
  3. default语句如果不需要可以不要
  1. 对比
  • if适应于任何分支情况,三目运算符适合一些比较简单的分支,switch适合可以一一列举所有可能情况的时候
  • 如果是一个范围的话用if比较容易表示,但是如果是单个单个能列举的值,用switch比较简介,比如游戏操作的wasd方向键,菜单的几个功能都可以用switch

循环

循环作用

  • 多次执行的语句就可以使用循环

比如游戏的操作和贴图,这些都是要多次执行的,就会用到循环

  • 分支只会执行一次,但是循环可能会执行多次(会搭配使用)

三大循环语句

  • while循环
  1. 基本格式
 while(条件) {
语句; //循环{}中语句称之为循环体
}
//执行顺序 先判断条件 条件满足执行循环体,不满足直接退出
  1. 说明

当条件满足的时候执行循环体,执行之后再去判断条件,条件不满足的时候退出

     //打印ASCII码表中的所有字符
int i=0;
while(i<128) {
printf("%c\t",i++);
}
//同一个代码可以有多种不同的写法 熟练使用其中一个循环就好了
  1. 注意事项
  • w hile循环不要加分号
  • w hile循环体只有一句的时候可以省略{} 但是不要省略
  • 如果条件满足则会一直进行循环,不满足就会退出循环,所以w hile可能一次都不执行
  • for循环
  1. 基本格式
 for(初始化1;条件2;自增自减3) {
循环体4;
}
//为了描述方便 给每个语句都加了一个编号
//执行顺序 先执行初始化语句1,然后判断条件2,条件成立执行循环体4,不成立跳出循环.
//循环体执行完毕之后,执行自增语句3 然后判断条件 开始下一轮循环
//简记 1243 243 243
  1. 说明

for循环类似w hile循环 同样是先判断然后执行循环体的,不过for的语法比较简单并且相对于w hile更不易写错,所以可以先从for循环开始熟悉

  1. 注意事项
  • for循环中的两个分号必不可少,其余的部分都可以不要,但是分号必不可少
  • for循环外面不要加分号!!!! 画重点 if w hile for一般都不要加分号
  • do while循环
  1. 基本格式
 do {
//循环体;
}while(条件); //;不能少
//do while循环的特点是先执行循环体然后判断条件,如果条件成立进行下一轮循环
//do while的循环体必定会执行一次
  1. 说明

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是跳出当前的函数.可以跳出多层循环

  • 说明
  1. break,continue这样的跳转语句一般和if搭配使用,满足特定条件才会退出循环或者跳过这次循环
  2. return后面要不要加一个返回值这个根据函数确定,留到函数部分再具体讲解
  3. 以上的都是关键字,不需要加头文件,也不可以用作函数或者变量名
  • 跳转函数 exit的说明

exit作用 跳出整个程序,是stdlib.h里面的函数,使用的时候需要加上

常用写法

	exit(0); //里面的数字0表示正常退出,其余数字表示异常退出,不影响代码

在任意地方使用均会跳出整个程序

数组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dzN3NXey-1570415333052)(D:\微信公众号\Typora\素材\潭州vip\数组.png)]

数组

  • 数组作用

存放多个相同类型的元素,如果有多个相同类型的元素需要存放,那么可以使用数组。

	//存放3个成绩
//方式1 单独定义变量
int grade1,grade2,grade3;
//方式2 使用数组
int grade[3];
  • 数组定义和使用方式
  1. 数组定义格式 类型 数组名[数组大小];
	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
  1. 数组元素使用方式 数组名[下标]
	//定义数组之后 相当于同时定义了多个变量,如果要使用这些变量,就用数组名加下标的形式去单独访问其中的元素
// [ ] 下标运算符
arr[2]=12; //表示给数组中第二个元素赋值(下标从0开始计算)
  • 注意
  1. 定义的时候int arr[16]表示对定义数组,除了定义之外的[]全部是下标运算符的意思,所以arr[16]不是数组的意思 而是数组中的一个元素
  2. 下标从0开始算,所以注意下数组的下标不可以超过数组的最大元素个数
  3. 下标可以使用变量,所以数组可以和循环搭配使用

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',用字符数组存放字符串需要注意几个事项:
  1. 因为数组只有在定义的时候才可以用=赋值,其余情况下不可以直接用=赋值
  2. 字符数组可以用循环赋值,但是末尾需要记得加上一个\0
  3. 考虑到\0 数组大小不可以太小
  4. 字符串有一些常用函数,但凡是字符串(用\0结尾)都可以用这些函数
  • 字符串可以用的一些函数
  1. 字符串比较函数 strcmp
  2. 字符串拷贝函数 strcpy
  3. 字符串链接 strcat
  4. 测量字符串长度 strlen
  5. 判断一个字符串是否是另外一个字符串的子串 strstr
  6. 判断字符串中是否包含一个字符 strch
  7. 字符串的输入输出 scanf printf
  8. 字符串的输入输出 gets puts

函数

对于一些经常会使用到的(多次 重复使用)的代码可以将它封装成一个函数,C语言程序的基本组成单位就是函数.

函数1

  • 函数使用方式

调用方式 函数名(参数)

  1. 调用函数需要先知道函数名,比如getchar scanf这种
  2. 如果函数没有参数,那么直接加()即可调用 比如getchar()
  3. 如果函数有参数,那么需要在()里面写上参数,比如printf("Hello w orld")
  4. 一般函数都是为了执行某项功能,一些经常用到的功能可以写成函数以供调用,调用函数不需要知道函数具体的实现方式(知道他的功能就行)
  • 返回值
  1. 对于一些函数会返回一个结果,比如printf他返回打印的元素个数
  2. 不同函数的返回值有不同的作用
  • 函数定义方式
  1. 函数定义需要包含所有函数的组成部分
  2. 需要确定函数作用,参数和返回值,定义函数之后方能使用
  3. 函数体根据函数作用书写 写函数的时候需要先设计,最好写注释
  • 函数声明
  1. 在调用函数之前定义函数的话就没用任何问题,但是一般情况会将函数定义放在调用函数的后面,这种情况就需要写函数声明
  2. 函数声明的作用是告诉编译器去后面找这个函数的定义,也就是他只是刷一下存在感
  3. 函数声明需要函数返回值类型 函数名和参数类型,也就是说参数的名字可以省略
int fun(int ,int); //函数声明
int main()
{
fun(3,4); //函数调用
getchar();
return 0;
}
int fun(int x,int y) //函数定义
{
return x>y?x:y;
}
  • 形参和实参
  • 形参意义
  1. 形参指的是调用函数的时候需要从外部引入的参数
  2. 其他函数中的值可以通过传参的方式传给被调用的函数
  3. 形参说明了被调用函数中需要哪些外部变量
  • 实参意义
  1. 实参是调用函数的时候传递的参数,实参传递给形参,就是从函数中传递值给被调用的函数
  2. 实参必须是有一个确切的值才能传递给其他函数
  • 归纳总结
  1. 函数声明和定义时候的参数称之为函数的形参
  2. 函数调用时候的参数称之为实参
  3. 调用就是用实参给形参赋值然后执行函数体
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. 局部变量

在函数或者{}里面定义的变量,出了{}就不能继续使用

  1. 全局变量

在函数外部定义的变量,定义之后整个程序中都可以使用

变量的作用域不一样的话,名字可以相同,使用的时候依据就近原则(最近定义的那个变量).

  • 函数传参

问题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语言编程基础入门必备知识的更多相关文章

  1. Python基础入门必备知识

    1 标识符标识符是编程时使用的名字,用于给变量.函数.语句块等命名,Python 中标识符由字母.数字.下划线组成,不能以数字开头,区分大小写. 以下划线开头的标识符有特殊含义,单下划线开头的标识符, ...

  2. 零基础学习C语言入门必备知识

    今天跟大家一起从零学C语言: 1. C语言简介 1.1 C语言发展史 C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计.C语言的发展历程大致如图1-1所示 ...

  3. 零基础入门必备的Linux命令和C语言基础

    文件和目录(底部有视频资料) cd /home 进入 '/ home' 目录' cd - 返回上一级目录 cd -/- 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 c ...

  4. LINUX下C语言编程基础

    实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...

  5. C语言零基础入门难发愁,那就快来看看这篇基础整理资料吧

    C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成.格式.以及良好的书写风格,使小伙伴对c语言有个初步认识. 例1:计算两个整数之和的c程序: #include main() { in ...

  6. Linux基础与Linux下C语言编程基础

    Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...

  7. 【转】Linux基础与Linux下C语言编程基础

    原文:https://www.cnblogs.com/huyufeng/p/4841232.html ------------------------------------------------- ...

  8. C语言编程基础有网盘资料哦

    刚开始看STM32的库函数,会有很多疑惑,例如指针怎么用,结构体跟指针怎么配合,例如函数的参数有什么要求,如何实时更新IO口的数据等.如果重新进行C语言的学习,那么要学很久才能够系统地认识.本文则将比 ...

  9. 20191310李烨龙Linux C语言编程基础

    Linux C语言编程基础 任务详情 0. 基于Ubuntu或OpenEuler完成下面的任务(OpenEuler有加分) 1. 选择教材第二章的一节进行编程基础练习(2.10,2.11,2.12,2 ...

随机推荐

  1. 前端框架VUE——安装及初始化

    本篇文章适合,想要学习 vue,但对 vue 又没有接触过的同学阅读,是非常基础的内容.告诉大家使用 vue 时的安装方式,及如何创建实例,展示内容. 一.安装方式 vue 是一种前端框架,所以使用前 ...

  2. go的database/sql库中db.Exce()

    db.Exec(query string, args ...interface{}) Db.Exec(`CREATE TABLE IF NOT EXISTS STU(ID int(8) PRIMARY ...

  3. MAC地址知识

    1. 全球唯一无法保障. 软件工具可以修改网卡的MAC地址 2.不需要全球唯一. 只要保障局域网内不重复就行.    路由器 保证 数据在不同局域网内跳转.   如果局域网内使用集线器,那么可以设置相 ...

  4. jquery监听动态添加的input的change事件

    使用下面方法在监听普通的input的change事件正常 $('#pp').on('change', 'input.videos_poster_input', function () { consol ...

  5. linux重启mysql

    一. 启动1.使用 service 启动:service mysql start2.使用 mysqld 脚本启动:/etc/inint.d/mysql start3.使用 safe_mysqld 启动 ...

  6. 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 #下载到本地再传 ...

  7. Feign超时不生效问题

    使用Feign作为RPC调用组件,可以配置连接超时和读取超时两个参数 使用Feign配置超时需要注意:Feign内部使用了负载均衡组件Ribbon,而Ribbon本身也有连接超时和读取超时相关配置一. ...

  8. ATR吊灯止损策略 (含有tbquant源码)

    ATR吊灯止损策略定义: 做多,止损放在最高价之下N个ATR. 做空,止损放在最低价之上N个ATR. 该策略生成的止损点就像是从市场最高价的"天花板"上悬挂下来的吊灯.所以命名为A ...

  9. 三款超实用,好用的Python开发IDE推荐,看完总会有一款合适你的

    @ 目录 前言 IDE介绍 Sublime Pycharm(推荐使用社区版免费版) visualstudio 倒底怎么选择 前言 一款好的代码编辑工具,让你学习事半功能,那今天就来看看我们学Pytho ...

  10. Kettle学习笔记(四)— 总结

    目录 Kettle学习笔记(一)- 环境部署及运行 Kettle学习笔记(二)- 基本操作 kettle学习笔记(三)- 定时任务的脚本执行 Kettle学习笔记(四)- 总结 Kettle中设置编码 ...