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 ...
随机推荐
-
虚拟机下安装ubuntu后root密码设置
ctrl+alt+t:调出命令行. 问题描述: 在虚拟机下安装了ubuntu中要输入用户名,一般情况下大家都会输入一个自己的网名或绰号之类的,密码也在这时设置过了. 但是当安装成功之后,使用命令#su ...
-
(三)WebRTC手记之本地视频采集
转自:http://www.cnblogs.com/fangkm/p/4374610.html 前面两篇文章介绍WebRTC的运行流程和使用框架接口,接下来就开始分析本地音视频的采集流程.由于篇幅较大 ...
-
find-all-anagrams-in-a-string
https://leetcode.com/problems/find-all-anagrams-in-a-string/ package com.company; import java.util.A ...
- Xcode no visible @interface for xxx declares the selector errors
-
百度网盘免费扩容 免费扩容到2048G
您可以用手机端扩容 http://yun.baidu.com/1t 免费扩容到2048G
-
对 dotweb 框架进行统一的自定义错误处理
助移动端的增长,如今 RESTful 风格的 API 已经十分流行, 用各种语言去写后端 API 都有很成熟方便的方案,用 golang 写后端 API 更是生产力的代表, 你可以用不输 python ...
-
十九. 想快速开发app,需要找外包吗?
健生干货分享:第19篇 摘要:最近和两位准备开发app的创业者聊天,他们之前没有移动互联网的相关经验,有的是想法和资金.他们在纠结:想快速开发app,需要找外包吗? 最近和两位想开发app的创业者聊天 ...
-
node.js中使用 http-proxy 创建代理服务器
代理,也称网络代理,是一种特殊网络服务,允许一个终端通过代理服务与另一个终端进行非直接的连接,这样利于安全和防止被攻击. 代理服务器,就是代理网络用户去获取网络信息,就是信息的中转,负责转发. 代理又 ...
-
.NET MVC中的ActionResult
一 摘要 本文介绍了ASP.NET MVC中的ActionResult,本节主要介绍 EmptyResult / Content Result /JavaScriptResult /JsonResu ...
-
java中final,finally,finalize三个关键字的区别
final 可以作为修饰符修饰变量.方法和类. 被final修饰的变量必须在初始化时给定初值,以后在使用时只能被引用而不能被修改. 被final修饰的方法不能够在子类中被重写(override): 被 ...