C语言程序设计基础知识点概括
C语言程序设计基础知识点概括
C语言程序设计基础知识点
1、函数是C语言的基本构成单位。main函数是C语言程序的唯一入口。
2、C语言程序开发过程。
编译过程:将以.c或.cpp结尾的源程序文件经过编译成计算机能识别的二进制文件目标文件,编译过程中,编译器会检查每条语句的语法错误。
链接过程:连接器将所生成的目标文件链接生成最后可直接运行的的执行文件。
3、算法:解决问题的具体步骤的描述。
算法的特性:
---有穷性:算法必须在有限步骤后结束,而且每一步都在有限时间内完成。
---确定性:每条指令无二义性。相同的输入只能得到相同的输出。
---可行性:算法描述中的操作和功能都可以通过已实现的基本运算执行有限次来实现。
---输入:算法有零个或多个输入。
---输出:算法至少有一个或多个输出。
4、变量命名规则:
大小写字母、数字和下划线组成,可以以字母或下划线开头,不能使C语言的关键字。
5、数据类型:基本数据类型有int,char,float,double,void
整形: int 占4个字节16位。-32768~32767
无符号整形: unsigned int 占4个字节16位。0~65537
短整型: short int 占2个字符8位。
无符号短整型:unsigned short 占2个字节8位。
长整型: long int 占4个字节32位。
无符号长整型:unsigned long int 占4个字字节32位。
float和double类型的异同:
--同:都是C语言的浮点数据类型,带精度的数据类型。
--异:
占用内存不同:单精度浮点型占用4个字节,双精度浮点型占用8个字节。
有效数位不同:float有效数位8个,double有效数位16个。
char类型:内存中以ASCII码存放,在其取值范围内可以与整数一起使用,如:char c = 'A' + 10;则c为K。
常见的字符对应的ASCII码:'0':48,'A':65,'a':97
大小写字母ASCII值相差32。
6、运算符
算术运算符:+ - * / % ++ -- (注:%两边的对象都需要是正数)
赋值运算符:= += -= *= /= %=
关系运算符:> < >= <= == !=
逻辑运算符:&& || !
三元运算符:表达式1 ?表达式2 :表达式3
运算符优先级:
( ): 自左向右结合
! ++ -- sizeof: 自右向左结合
* / %: 自左向右结合
+ - : 自左向右结合
< > <= >=:自左向右结合
== !=: 自左向右结合
&& ||: 自左向右结合
= += -= *= /= %= 自左向右结合
7、类型转换
自动转换:不同数据类型的数据进行运算时,由编译器自动完成。转换规则:由短整型和字符型向整形转换,整形向无符号整形转换,无符号整形向长整型转换,长整型和单精度浮点型向双精度浮点型转换。(字节少的向字节多的转换)
强制类型转换:(类型名)变量名或数值。如果是高向低转换则会丢失多余的精度。低精度向高精度转换,多余的补上0。
8、输入输出
(1)printf函数
常见格式控制字符
%d:将参数按整形输出。
%c:按字符输出。
%s:输出字符串。
%f:带小数点形式输出。
%md:输出数据占m个位宽,数据长度左补空格,超出按原样输出。
%m.nf:n表示小数位数。
(2)putchar( ): 向终端输出一个字符。注意:使用没有换行符。
(3)puts( ): 向终端输出字符串。int puts(const char *string);
(4)scanf( ): 输入。int scanf(const char * restrict format,...); 注:从终端中输入空格,会使scanf获取终端,空格后面的舍弃。
(5)getchar( ):向终端接受一个字符。getc(stdin)
(6) gets( ):向终端接受一个字符串。char *gets(char *string);注意:gets不检测字符串string的大小,容易造成溢出,且LinuxC不支持该函数,可以使用fgets代替。fgets(s, size, stdin)。
9、程序结构设计
(1)程序的三种基本机构:顺序结构,分支结构,循环结构。
(2)分支结构:if if-else switch-case
注意1:if-else语句的二义性,C语言规定else永远与最近的if配对。合理的编程规范,if-else每一个语句块均使用{ }括出。
注意2:switch括号中要求数据类型为整形或字符表达式。注意case后面要有break跳出,不然会一直往下执行,知道找到一个break跳出或者继续往下执行完default。
(3)循环结构:while( ) do-while( ); for( )
(4)continue:只能在循环里面试用,作用:结束该次循环,直接执行下一次循环。
(5)break:结束该层循环。
10、数组
数组的特点:
数组在内存中连续存储多个元素的结构,一个数组存放的元素的地址是连续的。
数组的大小是固定的,所有的元素的数据类型是相同的。
数组的定义和初试化:
定义:数据类型 数组名[数组大小];
一维数组初始化:
int array[10] = {10,9,8,7,6,5,4,3,2,1};
int array[10]={10,9,8,7,6,5,4,3,2,1,0};//越界
数组初试化元素个数小于数组大小,后面默认为0。 二维数组初始化:
int array[2][3]={ {1,2,3}, {4,5,6} };
定义二维数组可以省略第一维的值,但不能省略第二维的值。二维数组的存放顺序是按行存放。
如:int array[][3]={ {1,2,3}, {4,5,6} };//定义2行3列数组
int array[2][]={ {1,2,3}, {4,5,6} };//错误,不能省列值。
数组的使用:数组的索引是从0开始。
一维数组:array[序列号]
二维数组:array[行序列号][列序列号]
11、字符串
(1)字符串是由双引号括起来的存放在连续内存地址的任意字符。
C语言中没有特定的字符串变量,通常使用数组存放字符串。
字符串的定义方式:
char string = "Hello";//使用指针定义一个字符串常量
char string[]="Hello";//使用数组定义一个字符串。
(2)字符数组与字符串的区别:
定义:
字符数组:存储字符的数组。
字符串数组:一种特殊的字符数组,存放以\0结尾。
长度:字符数组大小与字符数相同,字符串数组的大小等于字符数加上结束符'\0'。
(3)字符串处理函数:
拷贝
char *strcpy(char* dest, const char *src):拷贝字符串,注意该函数没有限定大小,容易越界,
char *strncpy(char *dest,char *src,size_t n);拷贝字符串,对strcpy进行优化,限制了拷贝长度,注意如果长度size与dest数组大小相等时,会缺少结束符\0。
int sprintf( char *buffer, const char *format [, argument] … );
建议使用sprintf函数拷贝字符串。
void memcpy(void *dest, const void *src, size_t n); 内存块拷贝,需要注意的是第一第二个参数需要是指针。
strcat:字符串连接。
extern char *strcat(char *dest, const char *src);
strcmp(str1, str2):字符串比较。相同返回0。
strlen( s1[], s2[]):字符串长度。
12、指针
指针也是一个变量,只不过该变量存放的是另外一个对象的内存地址。
声明和初始化:指针变量类型 *指针变量名。使用指针时,需要在定义的同时进行声明,防止出现野指针。指针变量名=NULL;
指针的运算:指针变量 = 地址;
int a[5]; int *p = a;定义数组名为a的数组,将数组的首地址赋值给p。p指向数组的第一个元素。&a[0]表示数组的第一个元素的地址。
数组第1个元素的地址: a,&a[0],p
数组第i+1个元素的地址:a+i, &a[i], p+i, &p[i]
数组的第一个元素的值: a[0], p[0], *a, *p
数组的第i+1个元素的值: a[i], p[i], *(a+i), *(p+i)
++ -- :使用一次递增递减,指针就移动一个单位,一个类型为T的指针的移动。
指针加上或减去某个整数值n:指针将移动n个单位。
13、typedef :typedef 类型名 标识符
typedef只是将已经存在的类型用一个新的名字来代表。typedef可以为各种类型说明一个新名,但不能用来为变量名说明一个新名。
14、枚举:enum 枚举名 {符号1,符号2...}
枚举类型为一组在逻辑上密不可分的整形提供便于记忆的符号。默认情况下第一个枚举符号值为0,往后一个加1。
15、结构
结构是一种构造数据类型,它是由若干数据项组合而成的复杂的数据对象,这些数据项称为结构成员。
定义结构:struct structrename
{
datatype variable1;
datatype variable2;
...
};
声明结构变量:struct 结构名 结构变量名;
表示结构变量成员:变量名.成员名;
16、预处理命令
宏定义:#define 标识符 字符串:在编译时,将用字符串替换程序中出现的所有标识符。如:#define PI 3.14
文件包含处理:
#include“文件名”:系统将先在用户当前目录下查找文件,找不到将在系统目录下找。
#include<文件名>:<>系统只在系统目录中查找该文件。
C语言程序设计基础知识点概括的更多相关文章
- C语言程序设计基础
C语言程序设计基础 目录 C语言 C语言基础 C语言编程注意 C语言 C语言基础 C语言编程注意 0<9<9和0<9&&9<9是不同的 数组的声明和定义 con ...
- C语言程序设计基础-第1周作业-初步
1.安装带有计算机术语的翻译软件 2.在自己电脑上安装C编译器,windows系统建议安装dev-c++,其他系统自行查找. 3.加入课程小组,有任何疑问可以在小组中提问:https://group. ...
- 《C语言程序设计基础1》第二学期第一周学习总结
**<C语言程序设计基础1>第二学期第一周学习总结 一. 本周学习内容总结 一维数组,了解了一维数组的定义(定义一个数组,需要明确数组变量名,数组元素的类型和数组大小,即数组中元素的数量) ...
- 嵌入式LinuxC语言程序设计基础教程
第1章 嵌入式LinxuC语言开发工具 第2章 数据 第3章 数据的输入输出 第4章 运算符和表达式 第5章 程序结构和控制语句 第6章 数组 第7章 指针 第8章 函数 第9章 用户自定义数据类型 ...
- Java语言程序设计基础篇第10版第5章习题答案
5.1 1 public class Demo { public static void main(String[] args) { // 创建一个输入对象 java.util.Scanner inp ...
- 清华大学《C++语言程序设计基础》线上课程笔记03---数据的共享和保护&数组
数据的共享和保护 对象的生存期 static类型的局部变量,生存期在整个程序,局部可见. void example() { static a=1; int b=2 } 当调用完example函数后,b ...
- 清华大学《C++语言程序设计基础》线上课程笔记05---vector对象,对象的复制与移动,string类
vector 对象 C++标准库中的一个类模板 封装任何类型的动态数组,自动创建和删除. 数组下标越界检查. 将动态数组封装成类的知识点中封装的ArrayOfPoints也提供了类似功能,但只适用于一 ...
- 清华大学《C++语言程序设计基础》线上课程笔记04---指针
指针 static int i; static int* ptr = &i; 此处的*表示ptr是指针类型(地址类型),用来存放目标数据的地址 其本身也有地址,所以又指向指针的指针; *前面的 ...
- Python语言程序设计基础(4)—— 程序的控制结构
PM2.5 pm = eval(input()) if pm>=75: print("空气存在污染") else : print("空气没有污染") pr ...
随机推荐
- webpack快速入门——集中拷贝静态资源
工作中会有一些已经存在但在项目中没有引用的图片资源或者其他静态资源(比如设计图.开发文档), 这些静态资源有可能是文档,也有可能是一些额外的图片.项目组长会要求你打包时保留这些静态资源, 直接打包到制 ...
- IdentityServer4登陆中心
1. 使用Vsual Studio Code 终端执行 dotnet new webapi --name IdentityServerSample 命令创建一个webapi 的 IdentitySer ...
- 位域(bit fields)简介
使用位域或位操作移动一个字节中的位 Java中EnumSet代替位域代码详解 关于位域的一些东西 深入理解Java枚举类型(enum) 位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个 ...
- oracle case when 语句的用法详解
1. CASE WHEN 表达式有两种形式 复制代码代码如下: --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他 ...
- Swift Podfile中的 use_frameworks!
use_frameworks! A.用cocoapods 导入swift 框架 到 swift项目和OC项目都必须要 use_frameworks!B.使用 dynamic frameworks,必须 ...
- HTML页面的重绘(repaint)和重流(reflow)
重流(Reflow)是指布局引擎为frame计算图形的过程. frame是一个矩形,拥有宽高和相对父容器的偏移.frame用来显示盒模型(content model), 但一个content mode ...
- mybatis开启二级缓存小记
mybatis开启二级缓存小记 1.开启二级缓存 和一级缓存默认开启不一样,二级缓存需要我们手动开启 首先在全局配置文件 mybatis-configuration.xml 文件中加入如下代码: &l ...
- 《Android应用性能优化》1——代码
1.Java代码优化 1.1 代码执行 通常情况下,不必看应用的字节码.在平台是Android2.2(Froyo)和更高版本的情况下尤其如此,因在Android2.2中引入了实时(JIT)的编译器.D ...
- SQL中存储过程和函数的区别
转:https://www.cnblogs.com/jacketlin/p/7874009.html 本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个. 而函数是可以嵌入在s ...
- OpenGL12-shader(GLSL)着色语言2-(参数传递)(代码以上传)
上一篇中介绍了如何使用shader,用来一个最简单的shader,计算顶点的位置,调用了 OpenGL 顶点着色语言中的内置变量对顶点进行操作,这一例程中,将展示如何将应用层 的数据传递到shader ...