c语言函数知识点总结(共16篇)由网友“josonzcg”投稿提供,以下是小编帮大家整理后的c语言函数知识点总结,欢迎大家分享。
篇1:c语言函数知识点总结
第一节、对C语言的基础认识
1、C语言编写的程序称为源程序,又称为编译单位。
2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。
3、一个C语言程序有且只有一个main函数,是程序运行的起点。
第二节、熟悉vc++
1、VC是软件,用来运行写的C语言程序。
2、每个C语言程序写完后,都是先编译,后链接,最后运行。(.c—.obj—.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。(常考!)
第三节、标识符
1、标识符(必考内容):
合法的要求是由字母,数字,下划线组成。有其它元素就错了。
并且第一个必须为字母或则是下划线。第一个为数字就错了
2、标识符分为关键字、预定义标识符、用户标识符。
关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。
预定义标识符:背诵define scanf printf include。记住预定义标识符可以做为用户标识符。
用户标识符:基本上每年都考,详细请见书上习题。
第四节:进制的转换
十进制转换成二进制、八进制、十六进制。
二进制、八进制、十六进制转换成十进制。
第五节:整数与实数
1)C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理。(考过两次)
a、C语言中的八进制规定要以0开头。018的数值是非法的,八进制是没有8的,逢8进1。
b、C语言中的十六进制规定要以0x开头。
2)小数的合法写法:C语言小数点两边有一个是零的话,可以不用写。
1.0在C语言中可写成1.
0.1在C语言中可以写成.1。
3)实型数据的合法形式:
a、2.333e-1 就是合法的,且数据是2.333×10-1。
b、考试口诀:e前e后必有数,e后必为整数。请结合书上的例子。
4) 整型一般是4个字节, 字符型是1个字节,双精度一般是8个字节:
long int x; 表示x是长整型。
unsigned int x; 表示x是无符号整型。
第六、七节:算术表达式和赋值表达式
核心:表达式一定有数值!
1、算术表达式:+,-,*,/,%
考试一定要注意:“/” 两边都是整型的话,结果就是一个整型。 3/2的结果就是1.
“/” 如果有一边是小数,那么结果就是小数。 3/2.0的结果就是0.5
“%”符号请一定要注意是余数,考试最容易算成了除号。)%符号两边要求是整数。不是整数就错了。[注意!!!]
2、赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。
1、int x=y=10: 错啦,定义时,不可以连续赋值。
2、int x,y;
x=y=10; 对滴,定义完成后,可以连续赋值。
3、赋值的左边只能是一个变量。
4、int x=7.7;对滴,x就是7
5、float y=7;对滴,x就是7.0
3、复合的`赋值表达式:
int a=2;
a*=2+3;运行完成后,a的值是12。
一定要注意,首先要在2+3的上面打上括号。变成(2+3)再运算。
4、自加表达式:
自加、自减表达式:假设a=5,++a(是为6), a++(为5);
运行的机理:++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,
再放到变量a中。 进行了++a和a++后 在下面的程序中再用到a的话都是变量a中的6了。
考试口诀:++在前先加后用,++在后先用后加。
5、逗号表达式:
优先级别最低。表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
z=(2,3,4)(整个是赋值表达式) 这个时候z的值为4。(有点难度哦!)
z= 2,3,4 (整个是逗号表达式)这个时候z的值为2。
补充:
1、空语句不可以随意执行,会导致逻辑错误。
2、注释是最近几年考试的重点,注释不是C语言,不占运行时间,没有分号。不可以嵌套!
3、强制类型转换:
一定是 (int)a 不是 int(a),注意类型上一定有括号的。
注意(int)(a+b) 和(int)a+b 的区别。 前是把a+b转型,后是把a转型再加b。
4、三种取整丢小数的情况:
1、int a =1.6;
2、(int)a;
3、1/2; 3/2;
第八节、字符
1)字符数据的合法形式::
‘1’ 是字符占一个字节,”1”是字符串占两个字节(含有一个结束符号)。
‘0’ 的ASCII数值表示为48,’a’ 的ASCII数值是97,’A’的ASCII数值是65。
一般考试表示单个字符错误的形式:’65’ “1”
字符是可以进行算术运算的,记住: ‘0’-0=48
大写字母和小写字母转换的方法: ‘A’+32=’a’ 相互之间一般是相差32。
2)转义字符:
转义字符分为一般转义字符、八进制转义字符、十六进制转义字符。
一般转义字符:背诵\0、、’、”、。
八进制转义字符: ‘141’ 是合法的, 前导的0是不能写的。
十六进制转义字符:’x6d’ 才是合法的,前导的0不能写,并且x是小写。
3、字符型和整数是近亲:两个具有很大的相似之处
char a = 65 ;
printf(“%c”, a); 得到的输出结果:a
printf(“%d”, a); 得到的输出结果:65
第九节、位运算
1)位运算的考查:会有一到二题考试题目。
总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。
例1: char a = 6, b;
b = a<<2; 这种题目的计算是先要把a的十进制6化成二进制,再做位运算。
例2: 一定要记住,异或的位运算符号” ^ ”。0 异或 1得到1。
0 异或 0得到0。两个女的生不出来。
考试记忆方法:一男(1)一女(0)才可以生个小孩(1)。
例3: 在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。
篇2:c语言函数知识点总结
第一节:数据输出(一)(二)
1、使用printf和scanf函数时,要在最前面加上#include“stdio.h”
2、printf可以只有一个参数,也可以有两个参数。(选择题考过一次)
3、printf(“ 第一部分 ”,第二部分 );把第二部分的变量、表达式、常量以第一部分的形式展现出来!
4、printf(“a=%d,b=%d”,12, 34) 考试重点!
一定要记住是将12和34以第一部分的形式现在在终端也就是黑色的屏幕上。考试核心为:一模一样。在黑色屏幕上面显示为 a=12,b=34
printf(“a=%d, b=%d”,12, 34)那么输出的结果就是:a=12,
b=34
5、int x=017; 一定要弄清楚为什么是这个结果!过程很重要
printf(“%d”, x); 15
printf(“%o”, x); 17
printf(“%#o”,x); 017
printf(“%x”, x); 11
printf(“%#x”,x); 0x11
6、int x=12,y=34; 注意这种题型
char z=‘a’;
printf(“%d ”,x,y); 一个格式说明,两个输出变量,后面的y不输出
printf(“%c”,z); 结果为:12a
7、一定要背诵的
格式说明 表示内容 格式说明 表示内容
%d 整型 int %c 字符 char
%ld 长整型 long int %s 字符串
%f 浮点型 float %o 八进制
%lf double %#o 带前导的八进制
%% 输出一个百分号 %x 十六进制
%5d %#x 带前导的十六进制
举例说明:
printf(“%2d”,123 ); 第二部分有三位,大于指定的两位,原样输出123
printf(“%5d”,123 ); 第二部分有三位,小于指定的五位,左边补两个空格 123
printf(“%10f”,1.25 ); 小数要求补足6位的,没有六位的补0,。结果为 1.250000
printf(“%5.3f”,125 ); 小数三位,整个五位,结果为1.250(小数点算一位)
printf(“%3.1f”,1.25 );小数一位,整个三位,结果为1.3(要进行四舍五入)
第二节 数据输入
1、scanf(“a=%d,b=%d”,&a,&b) 考试超级重点!
一定要记住是以第一部分的格式在终端输入数据。考试核心为:一模一样。
在黑色屏幕上面输入的为 a=12,b=34才可以把12和34正确给a和b 。有一点不同也不行。
2、scanf(“%d,%d”,x,y);这种写法绝对错误,scanf的第二个部分一定要是地址!
scanf(“%d,%d”,&x,&y);注意写成这样才可以!
3、特别注意指针在scanf的考察
例如: int x=2;int *p=&x;
scanf(“%d”,x); 错误 scanf(“%d”,p);正确
scanf(“%d”,&p); 错误 scanf(“%d”,*p)错误
4、指定输入的长度 (考试重点)
终端输入:1234567
scanf(“%2d%4d%d”,&x,&y,&z);x为12,y为3456,z为7
终端输入:1 234567 由于1和2中间有空格,所以只有1位给x
scanf(“%2d%4d%d”,&x,&y,&z);x为1,y为2345,z为67
5、字符和整型是近亲:
int x=97;
printf(“%d”,x); 结果为97
printf(“%c”,x); 结果为 a
6、输入时候字符和整数的区别(考试超级重点)
scanf(“%d”,&x);这个时候输入1,特别注意表示的是整数1
scanf(“%c”,&x);这个时候输入1,特别注意表示的是字符‘1’ASCII为整数48。
补充说明:
1)scanf函数的格式考察:
注意该函数的第二个部分是&a 这样的地址,不是a;
scanf(“%d%d%*d%d”,&a,&b,&c); 跳过输入的第三个数据。
2)putchar ,getchar 函数的考查:
char a = get) 是没有参数的,从键盘得到你输入的一个字符给变量a。
put‘y’)把字符y输出到屏幕中。
3)如何实现两个变量x ,y中数值的互换(要求背下来)
不可以把 x=y ,y=x; 要用中间变量 t=x;x=y;y=t。
4)如何实现保留三位小数,第四位四舍五入的程序,(要求背下来)
y=(int)(x*100+0.5)/100.0 这个保留两位,对第三位四舍五入
y=(int)(x*1000+0.5)/1000.0 这个保留三位,对第四位四舍五入
y=(int)(x*10000+0.5)/10000.0 这个保留四位,对第五位四舍五入
这个有推广的意义,注意 x = (int)x 这样是把小数部分去掉。
篇3:c语言函数知识点总结
特别要注意:C语言中是用非0表示逻辑真的,用0表示逻辑假的。
C语言有构造类型,没有逻辑类型。
关系运算符号:注意<=的写法,==和=的区别!(考试重点)
if只管后面一个语句,要管多个,请用大括号!
1)关系表达式:
a、表达式的数值只能为1(表示为真),或0(表示假)。
如 9>8这个关系表达式是真的,所以9>8这个表达式的数值就是1。
如 7<6这个关系表达式是假的,所以7<6这个表达式的数值就是0
b、考试最容易错的:就是int x=1,y=0,z=2;
x
篇4:c语言主要知识点总结
c语言主要知识点总结
◆知识点1:交换两个变量值的方法
1)采用第三方变量(最容易想到的方法)
2)采用加减法进行值得交换(面试时常用**)
代码如下:
b = a - b;a = a - b;b = a + b;
3)采用按位异或的位方式
代码如下:
a = a^b;b = a^b; a = a^b;
◆知识点2:取余运算%的结果与被除的符号相同,结果为两个正数取余后前面加符号
◆知识点3:sizeof的使用
sizeof是一种运算符不要想当然理解为函数
sizeof使用时可以不加
sizeof可以加变量、常量、数据类型
跟数据类型是必须加()
◆知识点4:#include编译预处理命令与多文件团队开发
include编译预处理命令可以认为是:将后面的文件内容拷贝到当前的文件中
多文件团队开发:模块分别编译成.o都不能链接成功,合起来链接生成最终程序。
链接:把项目中所有相关联的.o目标文件、C语言函数库合并在一起,生成可执行文件
——函数的定义放.c文件,函数的声明放.h文件
——如果要使用某个.c文件中定义的函数,只需要#include这个.c文件对应的.h文件
——h文件的.作用:被别人拷贝。编译链接的时候不需要管.h文件
◆知识点5:数组的几种初始化方式如下:
int a[3] = {10, 9, 6};int a[3] = {10,9};int a[] = {11, 7, 6};int a[4] = {[1]=11,[0] = 7};(知道有此种初始化方式即可)
◆知识点6:数组的内存分析和注意点
存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)【注:对于以后学习重要】
数组名的作用,查看元素地址
注意数组不要越界
◆知识点7:字符串知识点
“123”其实是由’1’、’2’、’3’、’\0’组成
字符串的输出”%s”,’\0’是不会输出的
◆知识点8 : 字符串处理函数:strlen()
计算的是字符数,不是字数
计算的字符不包括’\0’,一个汉字相当于3个字符
例子:”哈haha“ 字符数为7
从某个地址开始的数字符个数,知道遇到’\0’为止
指针部分在C语言中占据重要地位,所以重点学习与整理了指针的知识:
◆知识点9:指针定义的格式
变量类型 *变量名
如:Int *p
◆知识点10:指针作用
能够根据一个地址值,访问对应的存储空间
例:
Int *p;Int a = 90;P = &a;*p = 10;//把10赋值给p所指的存储空间
◆知识点11:指针使用注意
Int *p只能指向int类型的数据
指针变量只能存储地址
指针变量未经初始化不要拿来间接访问其他存储空间
◆知识点12:指针与数组
遍历数组
int ages[5] = {10, 4, 9, 44, 99};for(int i = 0; i<5; i++){ printf(”%d“, ages[i]);}
使用指针遍历数组:
int *p;// 指针变量P指向了数组的首地址p = &ages[0];// 使用指针遍历数组for(int i = 0; i<5; I++){ printf(”ages[%d] = %d“, i, *(p + i));}
注:指针+ 1取决于指针的类型
注:数组的访问方式
数组名[下标]
指针变量名[下标]
*(p + i)
◆知识点13:指针与字符串
定义字符串的两种方式:
1、利用数组
Char name[] = “Andyzhao”
特点:字符串里的字符可以修改
适用场合:字符串内容需要经常修改
2、利用指针
Char *name = “itcast”
特点:字符串是一个常量,字符串里面的字符不能修改
使用场合:字符串的内容不需要修改,而这个字符串经常使用
◆知识点14:预处理指令(三种):
宏定义
条件编译
文件包含
1、宏定义的配对使用和带参数的宏:
#define ... #undef
带参数的宏:
#define sum(v1,v2) ((v1) + (v2))//括号是必须的
例如:
#define pingfang(a) a*a #define pingfang(a) (a*a)
调用时
pingfang(10)/pingfang(2)//不正确 pingfang(5+5)//不正确 带参数的宏效率比函数高
2、条件编译(一般是判断宏的值)
#if 条件 ... #elif 条件 ... #else ... #endif(非常重要)不然后面的代码全部无效
3、文件包含:
表示系统自带的文件,”“表示自定义文件
不允许循环包含,比如a.h包含b.h,b.h又包含a.h
◆知识点14:typedef 只是给类型起了个别名并不是定义新类型
struct Student{ int age; char *name; }; typedef struct Student Student; 等价于typedef struct Student{ int age; char *name; }Student; 也等价于typedef struct { int age; char *name; }Student;
类似的给枚举类型起名
typedef enum Sex { Man,Women }Sex;
下面这种情况的写法比较特殊
//下面是函数指针类型的自定义数据类型,返回值类型和参数类型要匹配
#includetypedef int (*TypeFuncPointer)(int, int); int add(int a, intb) { return a + b; } int minus(int a, intb) { return a - b; } int main() { TypeFuncPointer p = add;//使用自定义类型 TypeFuncPointer p2 = minus;//使用自定义类型 printf(”add = %d“,p(1, 2)); printf(”minus = %d“,p2(1, 2)); return 0; }
下面是定义结构体的指针类型
typedef struct Student{ int age; char *name; }*PtrStu; //使用方式 Student stu ={18, ”zhangsan“}; PtrStu p = &stu;
宏定义也是可以为类型起名的
#define Integer int 相当于typedef int Integer
注意和typedef的区别
例如:
typedef char * String #define String2char *
◆知识点15:static和 extern区别是能否进行跨文件访问
①.函数
②.变量
1、对函数的作用:
外部函数:定义的函数能被本文件和其他文件访问
内部函数:定义的函数只能被本文件访问
默认情况下,所有函数都是外部函数(相当于带关键字extern),所以可以省略
extern作用:
完整的定义和引用一个外部函数都加extern
引用时也是默认是外部函数所以也省略extern
static作用:定义一个内部函数
使用:static返回类型函数名(参数列表)
不能被其他文件调用
一个项目中,本文件的外部函数名不能和其他文件的外部函数同名(error)
本文件中的内部函数(static)可以和其他文件的函数名同名的
2、对变量的作用:
全局变量分为两种:
外部变量:定义的变量可以被其他文件访问
①.默认情况下所有的全局变量都是外部变量
②.不同文件中的同名外部变量都代表同一个
③.定义一个外部变量不加extern,声明才加extern
同样的声明是没有错误的
内部变量:定义的变量不能被其他文件访问
不同文件的同名内部变量互不影响
篇5:C语言实验报告《函数》
C语言实验报告《函数》 -实习报告
学号:__________ 姓名:__________ 班级:__________ 日期:__________指导教师:__________ 成绩:__________实验四 函数一、 实验目的1、掌握函数定义、调用和声明的方法2、掌握实参和形参之间的'传递方式3、函数的嵌套调用二、 实验内容1、 写一个函数,将两个字符串连接。(习题8.6)2、 编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。(习题8.9)3、 请将实验三中的实验内容三改正后,再改写成函数形式(排序部分)。物理实验报告 ・化学实验报告 ・生物实验报告 ・实验报告格式 ・实验报告模板三、 实验步骤与过程 四、程序调试记录篇6:五、(C语言)函数
概述
在第一章中已经介绍过,C源程序是由函数组成的, 虽然在前面各章的程序中都只有一个主函数main, 但实用程序往往由多个函数组成。函数是C源程序的基本模块, 通过对函数模块的调用实现特定的功能。C语言中的函数相当于其它高级语言的子程序。 C语言不仅提供了极为丰富的库函数(如Turbo C,MS C 都提供了三百多个库函数),还允许用户建立自己定义的函数。用户可把自己的算法编成一个个相对独立的函数模块,然后用调用的方法来使用函数。
可以说C程序的全部工作都是由各式各样的函数完成的, 所以也把C语言称为函数式语言。 由于采用了函数模块式的结构, C语言易于实现结构化程序设计。使程序的层次结构清晰,便于程序的编写、阅读、调试。
在C语言中可从不同的角度对函数分类。
1. 从函数定义的角度看,函数可分为库函数和用户定义函数两种。
(1)库函数
由C系统提供,用户无须定义, 也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用。在前面各章的例题中反复用到printf 、scanf 、getchar 、putchar、gets、puts、strcat等函数均属此类。
(2)用户定义函数
由用户按需要写的函数。对于用户自定义函数, 不仅要在程序中定义函数本身, 而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。
2. C语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。
(1)有返回值函数
此类函数被调用执行完后将向调用者返回一个执行结果, 称为函数返回值。如数学函数即属于此类函数。 由用户定义的这种要返回函数值的函数,必须在函数定义和函数说明中明确返回值的类型。
(2)无返回值函数
此类函数用于完成某项特定的处理任务, 执行完成后不向调用者返回函数值。这类函数类似于其它语言的过程。 由于函数无须返回值,用户在定义此类函数时可指定它的返回为“空类型”, 空类型的说明符为“void”。
3. 从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。
(1)无参函数
函数定义、函数说明及函数调用中均不带参数。 主调函数和被调函数之间不进行参数传送。 此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。
(2)有参函数
也称为带参函数。在函数定义及函数说明时都有参数, 称为形式参数(简称为形参)。在函数调用时也必须给出参数, 称为实际参数(简称为实参)。 进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用。
4. C语言提供了极为丰富的库函数, 这些库函数又可从功能角度作以下分类。
(1)字符类型分类函数
用于对字符按ASCII码分类:字母,数字,控制字符,分隔符,大小写字母等。
(2)转换函数
用于字符或字符串的转换;在字符量和各类数字量 (整型, 实型等)之间进行转换;在大、小写之间进行转换。
(3)目录路径函数
用于文件目录和路径操作。
(4)诊断函数
用于内部错误检测。
(5)图形函数
用于屏幕管理和各种图形功能,
(6)输入输出函数
用于完成输入输出功能。
(7)接口函数
用于与DOS,BIOS和硬件的接口。
(8)字符串函数
用于字符串操作和处理。
(9)内存管理函数
用于内存管理。
(10)数学函数
用于数学函数计算。
(11)日期和时间函数
用于日期,时间转换操作。
(12)进程控制函数
用于进程管理和控制。
(13)其它函数
用于其它各种功能。
以上各类函数不仅数量多,而且有的还需要硬件知识才会使用,因此要想全部掌握则需要一个较长的学习过程。 应首先掌握一些最基本、最常用的函数,再逐步深入。由于篇幅关系,本书只介绍了很少一部分库函数, 其余部分读者可根据需要查阅有关手册。
还应该指出的是,在C语言中,所有的函数定义,包括主函数main在内,都是平行的。也就是说,在一个函数的函数体内, 不能再定义另一个函数, 即不能嵌套定义。但是函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。 函数还可以自己调用自己,称为递归调用。main 函数是主函数,它可以调用其它函数,而不允许被其它函数调用。 因此,C程序的执行总是从main函数开始, 完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。一个C源程序必须有,也只能有一个主函数main。
函数定义的一般形式
1.无参函数的一般形式
类型说明符 函数名()
{
类型说明
语句
}
其中类型说明符和函数名称为函数头。 类型说明符指明了本函数的类型,函数的类型实际上是函数返回值的类型。 该类型说明符与第二章介绍的各种说明符相同。 函数名是由用户定义的标识符,函数名后有一个空括号,其中无参数,但括号不可少。{} 中的内容称为函数体。在函数体中也有类型说明, 这是对函数体内部所用到的变量的类型说明。在很多情况下都不要求无参函数有返回值, 此时函数类型符可以写为void。
我们可以改为一个函数定义:
void Hello()
{
printf (”Hello,world \n“);
}
这里,只把main改为Hello作为函数名,其余不变。Hello 函数是一个无参函数,当被其它函数调用时,输出Hello world字符串。
2.有参函数的一般形式
类型说明符 函数名(形式参数表)
型式参数类型说明
{
类型说明
语句
}
有参函数比无参函数多了两个内容,其一是形式参数表, 其二是形式参数类型说明。在形参表中给出的参数称为形式参数, 它们可以是各种类型的变量, 各参数之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值。 形参既然是变量,当然必须给以类型说明。例如,定义一个函数, 用于求两个数中的大数,可写为:
篇7:c语言函数天天见
总结在学习过程中遇到的c语言函数:
1、相关函数:fstat, lstat, chmod, chown, readlink, utime
头文件:#include定义函数:int stat(const char * file_name, struct stat *buf);
函数说明:stat()用来将参数file_name 所指的文件状态, 复制到参数buf 所指的结构中,成功返回0,失败返回-1. stat结构体内详细信息不再赘述,可以参考其他博客资料。
使用方法:
struct stat sa;
if(stat(filename,&sa)<0)
{
return -1;
}
....
2、memset总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
#include
using namespace std;
void main()
{
char s[20];
cout<<”s大小“<
3、rand(),RAND_MAX
rand()产生随机数的一个随机函数;
RAND_MAX是C中stdlib.h中宏定义的一个字符常量:
#define RAND_MAX Ox7FFF
其值最小为32767,最大为2147483647
通常在产生随机小数时可以使用RAND_MAX,
#include
#include
#include
using namespace std;
int main(void)
{
srand((unsigned int)time(NULL));
double a[10];
int i;
cout<
篇8:c语言重点知识点总结
c语言重点知识点总结
C语言是一门重要的计算机基础课,想要学好c语言首先要知道哪些是知识重点,下面请看c语言重点知识点总结!
c语言重点知识点总结
◆知识点1:交换两个变量值的方法
1)采用第三方变量(最容易想到的方法)
2)采用加减法进行值得交换(面试时常用**)
代码如下:
b = a - b;
a = a - b;
b = a + b;
3)采用按位异或的位方式
代码如下:
a = a^b;
b = a^b;
a = a^b;
◆知识点2:取语言重点知识点总结余运算%的结果与被除的符号相同,结果为两个正数取余后前面加符号
◆知识点3:sizeof的使用
sizeof是一种运算符不要想当然理解为函数
sizeof使用时可以不加
sizeof可以加变量、常量、数据类型
跟数据类型是必须加()
◆知识点4:#include编译预处理命令与多文件团队开发
include编译预处理命令可以认为是:将后面的文件内容拷贝到当前的文件中
多文件团队开发:模块分别编译成.o都不能链接成功,合起来链接生成最终程序。
链接:把项目中所有相关联的.o目标文件、C语言函数库合并在一起,生成可执行文件
——函数的定义放.c文件,函数的声明放.h文件
——如果要使用某个.c文件中定义的函数,只需要#include这个.c文件对应的.h文件
——h文件的作用:被别人拷贝。编译链接的时候不需要管.h文件
◆知识点5:数组的几种初始化方式如下:
int a[3] = {10, 9, 6};
int a[3] = {10,9};
int a[] = {11, 7, 6};
int a[4] = {[1]=11,[0] = 7};(知道有此种初始化方式即可)
◆知识点6:数组的内存分析和注意点
存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)【注:对于以后学习重要】
数组名的作用,查看元素地址
注意数组不要越界
◆知识点7:字符串知识点
”123”其实是由’1’、’2’、’3’、’\0’组成
字符串的输出”%s”,’\0’是不会输出的
◆知识点8 : 字符串处理函数:strlen()
计算的是字符数,不是字数
计算的字符不包括’\0’,一个汉字相当于3个字符
例子:“哈haha” 字符数为7
从某个地址开始的数字符个数,知道遇到’\0’为止
指针部分在C语言中占据重要地位,所以重点学习与整理了指针的知识:
◆知识点9:指针定义的格式
变量类型 *变量名
如:Int *p
◆知识点10:指针作用
能够根据一个地址值,访问对应的存储空间
例:
Int *p;
Int a = 90;
P = &a;
*p = 10;//把10赋值给p所指的存储空间
◆知识点11:指针使用注意
Int *p只能指向int类型的数据
指针变量只能存储地址
指针变量未经初始化不要拿来间接访问其他存储空间
◆知识点12:指针与数组
遍历数组
int ages[5] = {10, 4, 9, 44, 99};
for(int i = 0; i<5; i++)
{
printf(“%d”, ages[i]);
}
使用指针遍历数组:
int *p;
// 指针变量P指向了数组的首地址
p = &ages[0];
// 使用指针遍历数组
for(int i = 0; i<5; I++)
{
printf(“ages[%d] = %d”, i, *(p + i));
}
注:指针+ 1取决于指针的类型
注:数组的访问方式
数组名[下标]
指针变量名[下标]
*(p + i)
◆知识点12:指针与字符串
定义字符串的两种方式:
1、利用数组
Char name[] = “Andyzhao”
特点:字符串里的字符可以修改
适用场合:字符串内容需要经常修改
2、利用指针
Char *name = “itcast”
特点:字符串是一个常量,字符串里面的字符不能修改
使用场合:字符串的内容不需要修改,而这个字符串经常使用
◆知识点13:预处理指令(三种):
宏定义
条件编译
文件包含
1、宏定义的配对使用和带参数的宏:
#define
...
#undef
带参数的宏:
#define sum(v1,v2) ((v1) + (v2))//括号是必须的
例如:
#define pingfang(a) a*a
#define pingfang(a) (a*a)
调用时
pingfang(10)/pingfang(2)//不正确
pingfang(5+5)//不正确
带参数的宏效率比函数高
2、条件编译(一般是判断宏的值)
#if 条件
...
#elif 条件
...
#else
...
#endif(非常重要)不然后面的代码全部无效
3、文件包含:
表示系统自带的文件,“”表示自定义文件
不允许循环包含,比如a.h包含b.h,b.h又包含a.h
◆知识点14:typedef 只是给类型起了个别名并不是定义新类型
struct Student{
int age;
char *name;
};
typedef struct Student Student;
等价于
typedef struct Student{
int age;
char *name;
}Student;
也等价于
typedef struct {
int age;
char *name;
}Student;
类似的给枚举类型起名
typedef enum Sex
{
Man,Women
}Sex;
下面这种情况的写法比较特殊
//下面是函数指针类型的自定义数据类型,返回值类型和参数类型要匹配
#include
typedef int (*TypeFuncPointer)(int, int);
int add(int a, intb)
{
return a + b;
}
int minus(int a, intb)
{
return a - b;
}
int main()
{
TypeFuncPointer p = add;//使用自定义类型
TypeFuncPointer p2 = minus;//使用自定义类型
printf(“add = %d”,p(1, 2));
printf(“minus = %d”,p2(1, 2));
return 0;
}
下面是定义结构体的指针类型
typedef struct Student{
int age;
char *name;
}*PtrStu;
//使用方式
Student stu ={18, “zhangsan”};
PtrStu p = &stu;
宏定义也是可以为类型起名的
#define Integer int
相当于
typedef int Integer
注意和typedef的`区别
例如:
typedef char * String
#define String2char *
◆知识点15:static和 extern区别是能否进行跨文件访问
①.函数
②.变量
1、对函数的作用:
外部函数:定义的函数能被本文件和其他文件访问
内部函数:定义的函数只能被本文件访问
默认情况下,所有函数都是外部函数(相当于带关键字extern),所以可以省略
extern作用:
完整的定义和引用一个外部函数都加extern
引用时也是默认是外部函数所以也省略extern
static作用:定义一个内部函数
使用:static返回类型函数名(参数列表)
不能被其他文件调用
一个项目中,本文件的外部函数名不能和其他文件的外部函数同名(error)
本文件中的内部函数(static)可以和其他文件的函数名同名的
2、对变量的作用:
全局变量分为两种:
外部变量:定义的变量可以被其他文件访问
①.默认情况下所有的全局变量都是外部变量
②.不同文件中的同名外部变量都代表同一个
③.定义一个外部变量不加extern,声明才加extern
同样的声明是没有错误的
内部变量:定义的变量不能被其他文件访问
不同文件的同名内部变量互不影响
篇9:大学c语言知识点总结
大学c语言知识点总结
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。一起来看看大学c语言知识点总结吧!
大学c语言知识点总结
1、编译预处理不是C语言的一部分,不再运行时间。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。
2、每个C语言程序中main函数是有且只有一个。
3、在函数中不可以再定义函数。
4、算法的是一定要有输出的,他可以没有输入。
5、break可用于循环结构和switch语句。
6、逗号运算符的级别最低。
第一章
1)合法的用户标识符考查:
合法的要求是由字母,数字,下划线组成。有其它元素就错了。
并且第一个必须为字母或则是下划线。第一个为数字就错了。
关键字不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。
2)实型数据的合法形式:
2.333e-1 就是合法的,且数据是2.333×10-1。
考试口诀:e前e后必有数,e后必为整数。.
3)字符数据的合法形式::
'1' 是字符占一个字节,“1”是字符串占两个字节(含有一个结束符号)。
'0' 的ASCII数值表示为48,'a' 的ASCII数值是97,'A'的ASCII数值是65。
4) 整型一般是两个字节, 字符型是一个字节,双精度一般是4个字节:
考试时候一般会说,在16位编译系统,或者是32位系统。碰到这种情况,不要去管,一样做题。掌握整型一般是两个字节, 字符型是一个字节,双精度一般是4个字节就可以了。
5)转义字符的考查:
在程序中 int a = 0x6d,是把一个十六进制的数给变量a 注意这里的0x必须存在。
在程序中 int a = 06d, 是一个八进制的形式。
在转义字符中,’x6d’ 才是合法的,0不能写,并且x是小写。
‘141’ 是合法的, 0是不能写的。
‘108’是非法的,因为不可以出现8。
6)算术运算符号的优先级别:
同级别的有的是从左到右,有的是从右到左。
7)强制类型转换:
一定是 (int)a 不是 int(a),注意类型上一定有括号的。
注意(int)(a+b)和(int)a+b 的区别。 前是把a+b转型,后是把a转型再加b。
8)表达式的考查:
是表达式就一定有数值。
赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。
自加、自减表达式:假设a=5,++a(是为6), a++(为5);
运行的机理:++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这
个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,
再放到变量a中。 进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。
考试口诀:++在前先加后用,++在后先用后加。
逗号表达式:优先级别最低 ;表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
9)位运算的考查:
会有一到二题考试题目。
总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。
例1: char a = 6, b;
b = a<<2; 这种题目的计算是先要把a的.十进制6化成二进制,再做位运算。
例2: 一定要记住,
例3: 在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。
10)018的数值是非法的,八进制是没有8的,逢8进1。
11)%符号两边要求是整数。不是整数就错了。
12) 三种取整丢小数的情况:
1、int a =1.6;
2、(int)a
第二章
1)printf函数的格式考查:
%d对应整型;%c对应字符;%f对应单精度等等。宽度的,左对齐等修饰。
%ld对应 long int;%lf 对应double。
2)scanf函数的格式考察:
注意该函数的第二个部分是&a 这样的地址,不是a;
Scanf(“%d%d%*d%d”,&a,&b,&c); 跳过输入的第三个数据。
3)putchar ,getchar 函数的考查:
char a = get) 是没有参数的,从键盘得到你输入的一个字符给变量a。
put‘y’)把字符y输出到屏幕中。
4)如何实现两个变量x ,y中数值的互换(要求背下来)
不可以把 x=y ,y=x; 要用中间变量 t=x;x=y;y=t。
5)如何实现保留三位小数,第四位四舍五入的程序,(要求背下来)
这个有推广的意义,注意 x = (int)x 这样是把小数部分去掉。
第三章
特别要注意:c语言中是用非0表示逻辑真的,用0表示逻辑假的。
1)关系表达式:
表达式的数值只能为1(表示为真),或0(表示假)
当关系的表达是为真的时候得到1。如 9>8这个是真的,所以表达式的数值就是1;
2)逻辑表达式:
只能为1(表示为真),或0(表示假)
a) 共有&& || ! 三种逻辑运算符号。
b) !>&&>|| 优先的级别。
c) 注意短路现象。考试比较喜欢考到。
d) 要表示 x 是比0大,比10小的方法。0
3)if 语句
else 是与最接近的if且没有else的相组合的。
4)条件表达式:
表达式1 ?表达式2 :表达式3
注意是当非0时候是表达式2的数值,当为0是就是表达式2的数值。
考试口诀:真前假后。
5)switch语句:
a)一定要注意 有break 和没有break的差别,书上(34页)的两个例子,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。
b)switch只可以和break一起用,不可以和continue用。
第四章
1)三种循环结构:
a)for() ; while(); do- while()三种。
b)for循环当中必须是两个分号,千万不要忘记。
c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。
d) do-while()循环的最后一个while();的分号一定不能够丢。(当心上机改错)
2) break 和 continue的差别
记忆方法:
break:是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。
continue:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。
3)嵌套循环
就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。
4) while((c=get))!=’’) 和 while(c=get) !=’’)的差别
先看a = 3 != 2 和 (a=3)!=2 的区别:
(!=号的级别高于=号 所以第一个先计算 3!=2) 第一个a的数值是得到的1;第二个a的数值是3。
篇10:二级c语言知识点总结
二级c语言知识点总结
二级c语言知识点总结
1)程序结构是三种: 顺序结构 、选择结构(分支结构)、循环结构。
2)读程序都要从main入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。
3)计算机的数据在电脑中保存是以 二进制的形式. 数据存放的位置就是 他的地址.
4)bit是位 是指为0 或者1。 byte 是指字节, 一个字节 = 八个位.
概念常考到的:
1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。
2、define PI 3.1415926; 这个写法是错误的,一定不能出现分号。
3、每个C语言程序中main函数是有且只有一个。
4、在函数中不可以再定义函数。
5、算法:可以没有输入,但是一定要有输出。
6、break可用于循环结构和switch语句。
7、逗号运算符的级别最低,赋值的级别倒数第二。
第一章 C语言的基础知识
第一节、对C语言的基础认识
1、C语言编写的程序称为源程序,又称为编译单位。
2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。
3、一个C语言程序有且只有一个main函数,是程序运行的起点。
第二节、熟悉vc++
1、VC是软件,用来运行写的C语言程序。
2、每个C语言程序写完后,都是先编译,后链接,最后运行。(.c---à.obj---à.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。(常考!)
第三节、标识符
1、标识符(必考内容):
合法的要求是由字母,数字,下划线组成计算机二级c语言知识点总结20计算机二级c语言知识点总结。有其它元素就错了。
并且第一个必须为字母或则是下划线。第一个为数字就错了
2、标识符分为关键字、预定义标识符、用户标识符。
关键字:不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。
预定义标识符:背诵define scanf printf include。记住预定义标识符可以做为用户标识符。
用户标识符:基本上每年都考,详细请见书上习题。
第四节:进制的转换
十进制转换成二进制、八进制、十六进制
二进制、八进制、十六进制转换成十进制。
第五节:整数与实数
1)C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理。(考过两次)
a、C语言中的八进制规定要以0开头。018的数值是非法的,八进制是没有8的,逢8进1。
b、C语言中的十六进制规定要以0x开头。
2)小数的合法写法:C语言小数点两边有一个是零的话,可以不用写。
1.0在C语言中可写成1.
0.1在C语言中可以写成.1。
3)实型数据的合法形式:
a、2.333e-1 就是合法的,且数据是2.333×10-1。
b、考试口诀:e前e后必有数,e后必为整数。请结合书上的例子。
4) 整型一般是4个字节, 字符型是1个字节,双精度一般是8个字节:
long int x; 表示x是长整型。
unsigned int x; 表示x是无符号整型。
第六、七节:算术表达式和赋值表达式
核心:表达式一定有数值!
1、算术表达式:+,-,*,/,%
考试一定要注意:“/” 两边都是整型的话,结果就是一个整型。 3/2的结果就是1.
“/” 如果有一边是小数,那么结果就是小数。 3/2.0的结果就是0.5
“%”符号请一定要注意是余数,考试最容易算成了除号。)%符号两边要求是整数。不是整数就错了年计算机二级c语言知识点总结计算机等级。[注意!!!]
2、赋值表达式:表达式数值是最左边的'数值,a=b=5;该表达式为5,常量不可以赋值。
1、int x=y=10: 错啦,定义时,不可以连续赋值。
2、int x,y;
x=y=10; 对滴,定义完成后,可以连续赋值。
3、赋值的左边只能是一个变量
WiseMedia
4、int x=7.7;对滴,x就是7
5、float y=7;对滴,x就是7.0
3、复合的赋值表达式:
int a=2;
a*=2+3;运行完成后,a的值是12。
一定要注意,首先要在2+3的上面打上括号。变成(2+3)再运算。
4、自加表达式:
自加、自减表达式:假设a=5,++a(是为6), a++(为5);
运行的机理:++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,
再放到变量a中。 进行了++a和a++后 在下面的程序中再用到a的话都是变量a中的6了。
考试口诀:++在前先加后用,++在后先用后加。
5、逗号表达式:
优先级别最低。表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
z=(2,3,4)(整个是赋值表达式) 这个时候z的值为4。(有点难度哦!)
z= 2,3,4 (整个是逗号表达式)这个时候z的值为2。
补充:
1、空语句不可以随意执行,会导致逻辑错误。
2、注释是最近几年考试的重点,注释不是C语言,不占运行时间,没有分号。不可以嵌套!
3、强制类型转换:
一定是 (int)a 不是 int(a),注意类型上一定有括号的。
注意(int)(a+b) 和(int)a+b 的区别2017年计算机二级c语言知识点总结2017年计算机二级c语言知识点总结。 前是把a+b转型,后是把a转型再加b。
4、三种取整丢小数的情况:
1、int a =1.6;
2、(int)a;
3、1/2; 3/2;
第八节、字符
1)字符数据的合法形式::
'1' 是字符占一个字节,“1”是字符串占两个字节(含有一个结束符号)。
'0' 的ASCII数值表示为48,'a' 的ASCII数值是97,'A'的ASCII数值是65。
一般考试表示单个字符错误的形式:'65' “1”
字符是可以进行算术运算的,记住:'0'-0=48
大写字母和小写字母转换的方法:'A'+32='a' 相互之间一般是相差32。
2)转义字符:
转义字符分为一般转义字符、八进制转义字符、十六进制转义字符。
一般转义字符:背诵\0、、’、”、\
八进制转义字符: ‘141’ 是合法的, 前导的0是不能写的。
十六进制转义字符:’x6d’ 才是合法的,前导的0不能写,并且x是小写。
3、字符型和整数是近亲:两个具有很大的相似之处
char a = 65 ;
printf(“%c”, a); 得到的输出结果:a
printf(“%d”, a);得到的输出结果:65
第九节、位运算
1)位运算的考查:会有一到二题考试题目。
总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。
例1:char a = 6, b;
b = a<<2; 这种题目的计算是先要把a的十进制6化成二进制,再做位运算。
例2:一定要记住,异或的位运算符号” ^ ”。0 异或 1得到1。
0 异或 0得到0。两个女的生不出来2017年计算机二级c语言知识点总结计算机等级
考试记忆方法:一男(1)一女(0)才可以生个小孩(1)。
例3:在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。
篇11:C语言调用Lua函数
记得上学时,初中英文课本中,上网叫做surfing the internet,中文叫网上冲浪,那个时期,人们经常称互联网为赛博空间。如今工作了,大量的零碎时间用于上微博,知乎,QQ,这些碎片化的阅读让人读起来轻松,也能获取些粗浅的信息。然而它们是消耗时间的黑洞,时间就这样一分一秒地飞逝,年末的时候,知乎会告诉你回答了多少问题,阅读了相当于一部《红楼梦》那么多的文字。只是当你静下来一想,这些浅阅读并没给你带来有深度,系统的知识。在你的时间线上,两条相邻信息往往是八竿子也打不着的。而且你还时不时去看看关注者有没有更新,期待让你眼前一亮的信息。结果往往是趁兴而去,败兴而回。屏幕上的信息永无止境地滚动着,是如此的热闹,仿佛每个人都在狂欢,而我的内心却如此的空虚与孤独。
在lua API中,调用一个函数的步骤很简单:1.压入你要调用的函数,使用lua_getglobal。2.压入调用参数。3.使用lua_pcall4.从栈中弹出结果。
举例说明,假设你有这么一个lua函数:function f (x, y)
return (x^2 * math.sin(y))/(1 - x)
end
那么,我们就可以定义个c函数来封装这个调用:/* call a function ‘f‘ defined in Lua */
double f (double x, double y) {
double z;lua_getglobal(L, “f”); lua_pushnumber(L, x); lua_pushnumber(L, y); /* do the call (2 arguments, 1 result) */if (lua_pcall(L, 2, 1, 0) != 0) error(L, “error running function ‘f‘: %s”,lua_tostring(L, -1));
if (!lua_isnumber(L, -1)) error(L, “function ‘f‘ must return a number”);z = lua_tonumber(L, -1);lua_pop(L, 1); return z;}
lua_pcall在压入结果的之前,会将函数,和参数弹出,如果返回多个结果,第一个最先压入,
如果lua_pcall运行出错,那么会返回个非0值。(完)
篇12:C语言总结
C语言总结
1.C语言程序的基本结构1.1添加stdio.h的引用
1.2添加一个main函数
1.3main函数的形式应该是
void main
{
}
2.C语言程序的编译运行过程
2.1编写源代码(CPU是不能直接执行C语言的)
2.2编译:将C语言的源代码翻译为机器语言的源代码
编译完成的结果一般是个exe文件
2.3运行:在DOS命令行中直接写exe文件的名称,就可以直接运行C语言编写的程序(exe)。
3.数据类型
数据类型的定义:存放数据的容器。
基础的数据类型有:
int:整型,一般的会占4个字节,32位
float:浮点类型(单精度),一般的会占4个字节,32位 存储的数据应该是带小数的数据 1.2 13.5 7.0
char:字符类型,一般的会占1个字节,8位,会存储单个字符。A,B,a,b,.,+,-,(,), ’A’,’X’,’\n’ ’\t’
扩展的数据类型:
long:长整型,存储的数据量要多一点 一般的应该是4个字节
short:短整型,一般的应该是2个字节
double:双精度的浮点类型,8个字节。
1.测量数据类型在内存中占多大的空间
使用sizeof运算符来测量
可以接受一个变量,也可以接受一个类型。
2.给变量赋值的时候,某种数据类型的常量
int:1,2,45 %d
long:12l %ld
short:12,23 %d
float:12.3f %f
double:12.3 %lf
char:’A’ %c
4.变量
4.1变量的定义:
定义完一个变量,没有初始化,这个时候变量中的值可能是一堆垃圾。如果要使用这种变量的话,那么必须对变量进行初始化过程:其实就是为变量赋值的过程。
变量的数据类型 变量的名称;
定义完一个变量,立即对这个变量用初始值给其进行初始化。
变量的数据类型 变量的名称=初始值;
定义变量必须在函数一开始。
int x;
x=123;
int y;//放在这个地方时错误的,应该放到和x变量定义一个地方。
4.2变量的使用
对于有累计过程的变量,必须对其进行初始化。
对于累加的变量应该初始化为0
对于累积的变量应该初始化为1
在程序运行的过程中可以对变量进行多次赋值。
变量可以在函数中定义:叫局部变量,只在当前定义的函数中使用,超出这个范围,将不再可用。
变量可以在函数外部定义:叫全局变量,在所有的函数中都可以使用
4.3变量的名称
变量的名称应该有明确的含义。
变量的名称应该采用英文单词的组合。
变量的名称如果采用了多个英文单词,那么第一个单词的首字符要小写,后续的单词的首字母要大写。这种命名方式叫骆驼命名法。
Pascal命名法:每个单词的首字母都必须大写。
Camel命名法:应用在局部变量中。
Pascal命名法:应用在全局变量,函数的名称。
应该类似于:userInput,computerNumber,compareResult
5.标识符:
变量的名称,函数的名称这些都叫标识符。
标识符的规范:
可以使用的字符:字母,数字,下划线。
对于标识符来说,第一个字符不能是数字,可以是字母或下划线。
一个标识符在同一个范围中只能应用在一个变量或一个函数名中。
变量名称的小规范:
i,j,k,m,n可以作为循环变量的名称。
x,y,z可以作为普通的变量使用。
除此之外,尽量不要使用单个字母来做变量的名称。
一般来说,变量的名称应该是一组名词的组合,修饰的词应该在变量名称的最前面。
函数名称:一般应该是动宾结构;动词+名词的形式。
GetUserInput()
GetMonthDays()
EatFood();
DrinkWater();
6.控制结构
总的控制结构有三种。
6.1顺序结构
一句接一句的顺序执行。
写在上面的语言应该先执行。
写在下面的语句应该后执行。
是使用最多的结构,因为顺序结构中没有关键字。
6.2分支结构
if else if
主要做范围匹配
if(条件表达式或者逻辑表达式)
因为条件表达式和逻辑表达式的结构都是真或假
对于if else if结构来说,一次只能匹配一个范围,只要有一个范围匹配成功,那么其他的分支将不会被执行。
分支结构可以嵌套。
switch case
主要做单值匹配
switch :需要匹配的变量的名称
case:单个值
default:啥都不写
break:是结束这个switch
switch后面的变量的数据类型应该是整型或字符类型,浮点类型不可以。
case:表明匹配上这个值应该做的工作。
case后面应该有个块。
在case块的最后,应该是break语句,用来跳出switch。
default:所有的case都没匹配上的时候,应该执行的语句块。default块中也应该有break。
当一个case块中没有任何内容的时候,可以不写break,那么这时候,将会匹配下一个case块中的内容。
switch case结构可以转换为if else if结构。
if else if不一定可以转换为switch case 结构
6.3循环结构
for循环
for(循环变量的初始化;循环执行的条件;循环变量变化的过程)//不能有分号
{
//循环体
//可能会执行多次
//循环执行的次数和for中的三个语句都有关系。
}
循环:
循环的种类:
1.确定次数的循环。
2.次数不确定,但是由程序来决定循环次数。
3.次数不确定,但是由用户来决定循环次数。
4.死循环。
循环的形式:
1.for(循环变量的初始化;循环执行的条件;循环变量变化的过程)
2.循环变量的初始化;while(循环执行的条件){循环变量变化的过程;}
3.循环变量的初始化;do while(循环执行的条件){循环变量变化的过程;}
数组:一组在内存中连续存放的变量的集合。
定义:
1.数组中元素的类型 数组的名称[数组的大小];
int ary[5];
2.数组中元素的类型 数组的名称[数组的大小]={数值1,数值2,.....};
大括号中的数值的个数,不能比数组的大小还多。
int ary[4]={1,2,3,4};
int ary[4]={1,2,3};
//错误的
int ary[4]={1,2,3,4,5};
3.数组中元素的类型 数组的名称[]={数值1,数值2,.....};
数组的大小是大括号中元素的个数。
使用:
1.赋值
数组的名称[数组元素的下标]=值;
数组元素的下标从0开始,到数组的`大小-1结束。
2.取值
变量的名称=数组的名称[数组元素的下标];
算法
1.查找(在数组中查找最大数)
首先假设数组中的第一个元素是最大的;
将数组中的其他元素挨个与最大数进行比较。
2.查找(在数组中查找指定的元素)
返回的结果是指定的元素在数组中的位置(下标或索引)
3.排序(冒泡)
核心思想:大数下沉,小数上浮。
需要用到循环嵌套
外层循环的次数是数组的大小-1轮。
里层循环的次数是数组的大小-1-轮索引
在里层循环中要做比较,比较完成后,需要做两个数的交换。
进制的转换
10-10
应用的算法是碾除法。
核心思想是:每次都取一个数的个位,直到原始数变成零,就结束了。
项目:证明6174。
1.拆分
2.排序
3.组最大数,组最小数
4.用最大数-最小数,查看差值是否是6174
5.如果不是,那么将差值重新作为新的可拆分的数,回到1.
函数:
程序执行过程中的特定功能的块。
printf()//stdio.h
main():必须有,且仅有一个。
自定义的函数:
按返回类型分:
1.没返回值的函数
返回类型一律是void
在调用的时候,不需要一个变量来接受函数的返回值。
2.有返回值的函数
返回类型是除void之外的其他的类型。
int Sum(int x,i 以用一个变量来接受函数的返回值。
按函数的参数来分:
1.有参数的函数
void Sum(int x,int y);
int Sum(int x,int y);
在调用的时候,必须传递参数。
2.无参数的函数
void main();
篇13:C 语言free 函数的原理
今天在网上看到了这样一个问题,“如果malloc 了一块字符串的内存,然后,它改变了这个字符串的大小,问会不会有一部分内存没有被释放掉,”这个问题,以前的确没有仔细想过。
当然,我觉得是肯定会释放掉的,但是一直没有了解过free 的原理,不敢乱说。我看了一下操作系统的内存管理,基本上是这样的,当然各个系统的实现不一样。
操作系统管理内存,维护了一个空闲内存链表,malloc从个链表中选出一个来使用,每个内存块都有一个头部来表示这个内存的基本信息,如内存大小,
所以free 时候 能够记住原来指针所指的内存大小,而不是用内存块中是否有 \0 来临时计算指向内存的大小,不要字符串的计算长度的方法所误导,
还有一点要注意的就是,系统在free 内存的时候,记住的只是 malloc 时候的地址,和 分配内存的大小。
比如 char *p = (char *)malloc(10); 就会产生分配10个 字节。如果 你把指针的地址改变了 p = p + 1; 然后 free 就要出问题了。程序会崩溃。
如果一定要改变指针的值,建议这样做 char *newp = p; 然后 改变 newp = newp + 1 , 最后 free(p);
还有一点要注意,一个长度 为10 的字符串 要占用 11个字节。因为还有一个 '\0', 所以分配内存的时候要分配 lenght + 1 的大小。
篇14:学通C语言:函数型指针
C程序中的函数也都是存放在代码区内的,它们同样也是有地址的,那么如何取得函数的地址呢?在前面也说过函数定义的时候实际上是定义了一个函数变量,那么是否可以将函数变量赋值给其他变量呢?回答这些问题需要涉及另外一个概念:函数型指针。按照已有的指针的知识,顾名思义,函数型指针就是指向函数的指针。如果有一个函数声明为:
int func(const int a, const int b);
那么,此时声明的函数变量add的地址即为这个函数的地址,同时,add的值保存为这个函数的地址,这个特性与数组相似:数组变量与数组变量的地址均为数组的起始地址。而在这个函数声明中,函数类型为int (const int a, const int b)。使用该函数类型来定义一个函数型指针,其方式如下:
int (* fp)(const int a, const int b); /* 其中,参数列表的参数名a和b可省 */
上述语句将变量func定义为指向类型为int (const int a, const int b)的指针操作符和变量名两侧的小括号不可省,否则其含义大不相同。例如:
int * fp(const int a, const int b);
此时,指针操作符与数据类型int结合为int型指针类型,该语句只是声明了一个fp函数,而非定义一个函数指针。为该函数型指针赋值的方式如下:
fp = func;
被赋值的函数变量的类型必须与fp的类型完全一致,包括其返回类型和每一个形参的类型。否则程序将报错。
注意:函数型指针变量赋值时,左值与右值的类型必须完全一致。
使用函数型指针变量调用函数的方法与使用函数变量类似,得到函数地址后再带上参数列表即可。可以使用下面两种方式来调用函数:
fp(5, 6);
或
(*fp)(5, 6);
由于fp被赋值为函数变量func的地址,而func的值又等于其地址,所以*fp可以得到func函数的地址。因此,在调用方式上,可以粗略地将两者视为一致(实际上其后台的处理略有不同)。范例14-7演示了如何使用函数型指针来调用函数。
【范例14-7】使用函数型指针来调用函数,实现方法如示例代码14-7所示。
示例代码14-7
01 #include
02
03 int add(const int a, const int b) { /* 定义add函数 */
04 return a + b;
05 }
06
07 int main(void) {
08 int (*fp) (const int a, const int b); /* 定义函数指针 */
09
10 fp = add; /* 将其赋值为add */
11 printf(“3 + 4 = %d”, fp(3, 4)); /* 使用fp计算+ 4的值 */
12 printf(“3 + 4 = %d”, (*fp)(3, 4)); /* 使用*fp计算+ 4的值 */
13
14 printf(“%p”, add); /* 输出add的值 */
15 printf(“%p”, &add); /* 输出add的地址 */
16 printf(“%p”, fp); /* 输出fp的值 */
17 printf(“%p”, *fp); /* 输出fp指向的值 */
18
19 return 0;
20 }
【运行结果】程序运行后,
【代码解析】本程序定义了一个函数指针,并将其赋值为相应类型的函数变量add。
第11~12行分别使用fp和*fp的方式调用函数,从图14-12的第1~2行中可以看到它们的调用结果是一样的。
第14~17行输出了add的值和地址、fp的值和指向的值,从图14-12的第3~6行中可以看到它们的调用结果都是一样的。
篇15:C语言sprintf与sscanf函数
1、前言
我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来,从给定的字符串中提取相关内容,例如给定一个地址:www.bokeyuan.cn:2345,我们要从地址中提出协议,主机地址和端口号。之前对字符串和数字之间的关系不是很熟悉,工作中经常涉及到这个,如是好好总结一下。C语言提供了一些列的格式化输入输出函数,最基本的是面向控制台标准输出和输入的printf和scanf,其实还有面向字符串的sprint和sscanf,面向文件的流的fprintf和fscanf。今天着重总结一下sprintf和sscanf系列函数,这两个函数类似于scanf和printf ,不同点是从字符串*buffer用于输入输出。
2、sprintf函数
sprintf函数原型为 int sprintf(char *str, const char *format, ...)。作用是格式化字符串,具体功能如下所示:
(1)将数字变量转换为字符串。
(2)得到整型变量的16进制和8进制字符串。
(3)连接多个字符串。
举例如下所示:
1 char str[256] = { 0 };
2 int data = 1024;
3 //将data转换为字符串
4 sprintf(str,“%d”,data);
5 //获取data的十六进制
6 sprintf(str,“0x%X”,data);
7 //获取data的八进制
8 sprintf(str,“0%o”,data);
9 const char *s1 = “Hello”;
10 const char *s2 = “World”;
11 //连接字符串s1和s2
12 sprintf(str,“%s %s”,s1,s2);
3、sscanf函数
sscanf函数原型为int sscanf(const char *str, const char *format, ...)。将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内。具体功能如下:
(1)根据格式从字符串中提取数据。如从字符串中取出整数、浮点数和字符串等。
(2)取指定长度的字符串
(3)取到指定字符为止的字符串
(4)取仅包含指定字符集的字符串
(5)取到指定字符集为止的字符串
sscanf可以支持格式字符%[]:
(1)-: 表示范围,如:%[1-9]表示只读取1-9这几个数字 %[a-z]表示只读取a-z小写字母,类似地 %[A-Z]只读取大写字母
(2)^: 表示不取,如:%[^1]表示读取除'1'以外的所有字符 %[^/]表示除/以外的所有字符
(3),: 范围可以用“,”相连接 如%[1-9,a-z]表示同时取1-9数字和a-z小写字母
(4)原则:从第一个在指定范围内的数字开始读取,到第一个不在范围内的数字结束%s 可以看成%[] 的一个特例 %[^ ](注意^后面有一个空格!)
解析网址的例子如下所示:
1 const char *s = “www.baidu.com:1234”;
2 char protocol[32] = { 0 };
3 char host[128] = { 0 };
4 char port[8] = { 0 };
5 sscanf(s,“%[^:]://%[^:]:%[1-9]”,protocol,host,port);
6
7 printf(“protocol: %s\n”,protocol);
8 printf(“host: %s\n”,host);
9 printf(“port: %s\n”,port);
10
4、snprintf函数
snprintf函数是sprintf函数的更加安全版本,考虑到字符串的字节数,防止了字符串溢出。函数形式为:int snprintf(char *restrict buf, size_t n, const char * restrict format, ...);。最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。
5、测试程序
本次采用ip地址和整型之间的转换,mac地址转换作为测试程序,整个程序如下所示:
1 #include
2 #include
3
4 #define IP_STR_LEN 18
5 #define MAC_STR_LEN 18
6 #define MAC_BIT_LEN 6
7 #define LITTLE_ENDIAN 0
8 #define BIG_ENDIAN 1
9
10 typedef unsigned char uchar;
11 typedef unsigned int uint;
12
13 int big_little_endian
14 {
15 int data = 0x1;
16 if (*((char*)&data) == 0x1)
17 return LITTLE_ENDIAN;
18 return BIG_ENDIAN;
19 }
20
21 uint ipstr2int(const char * ipstr)
22 {
23 assert(ipstr);
24 uint a,b,c,d;
25 uint ip = 0;
26 sscanf(ipstr,“%u.%u.%u.%u”,&a,&b,&c,&d);
27 a = (a << 24) ;
28 b = (b << 16) ;
29 c = (c << 8) ;
30 d = (d << 0) ;
31 ip = a | b | c | d;
32 return ip;
33 }
34
35 char *int2ipstr(const uint ip, char *ipstr, const uint ip_str_len)
36 {
37 assert(ipstr);
38 if (big_little_endian() == LITTLE_ENDIAN)
39 sprintf(ipstr,“%u.%u.%u.%u”,
40 (uchar)*((char*)(&ip)+3),
41 (uchar)*((char*)(&ip)+2),
42 (uchar)*((char*)(&ip)+1),
43 (uchar)*((char*)(&ip)+0));
44 else
45 sprintf(ipstr,“%u.%u.%u.%u”,
46 (uchar)*((char*)(&ip)+0),
47 (uchar)*((char*)(&ip)+1),
48 (uchar)*((char*)(&ip)+2),
49 (uchar)*((char*)(&ip)+3));
50
51 return ipstr;
52 }
53
55 char *mac2str(const unsigned char *mac,char *mac_str,const uint mac_str_len)
56 {
57 assert(mac_str);
58 sprintf(mac_str,“%02X-%02X-%02X-%02X-%02X-%02X”,
59 mac[0],mac[1],mac[2],
60 mac[3],mac[4],mac[5]);
61 }
62
63 int main()
64 {
65 char ip_str[IP_STR_LEN] = {0};
66 char mac_str[MAC_STR_LEN] = {0};
67 unsigned char mac[MAC_BIT_LEN] = {0XEF,0XAD,0XF4,0X4F,0XAA,0X0F};
68 const char *ipstr = “10.0.3.193”;
69 unsigned int ip;
70 int2ipstr(167773121,ip_str,IP_STR_LEN);
篇16:C语言函数教学的论文
关于C语言函数教学的论文
C语言的学习在整个计算机专业甚至非计算机专业的学习中都有举足轻重的作用。函数的学习在C语言的学习中是具有灵魂作用的一章。根据笔者多年的C语言教学经验,发现很多学生在进行函数的学习时,遇到很大的困难。很多学生因为函数没搞清楚,导致整个C语言的水平永远只停留在入门的阶段。分析原因,一是大多课本函数知识的安排很靠后,这样函数在整个C语言的学习中课时较少;二是我认为大多是教学方法不合理,很多教师过分注重C语言语法知识的学习,没有注重编程思想的培养。
一、函数的概念函数是一组语句,这组语句可以完成一个独立的操作,这组语句有一个简短的名字,程序员可以仅仅利用这个名字完成某个操作。函数的使用,使复杂的程序变得简单化、条理化、清晰化。在C语言中函数分为两大类:库函数、用户自定义函数。
1、库函数在编写程序的过程中往往有一些操作需要频繁的使用,并且这些操作的.代码实现又有一定的难度。比如数据的输入、输出。在C语言中是没有输入输出语句的,由于输入输出涉及到多计算机硬件的直接操作,对用户来说较困难。这些操作往往由编译系统的开发商提供给用户。它们都是以独立程序块的模式出现,并且存在于编译系统的某个文件中,这就是库函数。比如printf(),scanf()。它们是由编译程序根据一般用户的需要编制并提供给用户使用的一组程序代码。C语言的库函数极大地方便了用户,同时也补充了C语言本身的不足。事实上,在编写C语言程序时,应当尽可能多地使用库函数,这样既可以提高程序的运行效率,又可以提高编程的质量。
2、用户自定义函数用户自定义函数顾名思义就是用户自己定义的函数。程序的编写过程其实就是一个个函数的定义过程。很多情况下,C语言的编译系统提供给我们的函数并不能满足用户的要求,这就要求用户自己编写函数。函数是由一组语句组成,并给定一个名字。相应的函数的定义一般可分为两大部分:函数头部的定义、函数体的定义。形式如下:函数的类型函数名(函数的参数){函数体;}上面大括号上边的一行成为函数的头部(首部),它给出了函数的表面信息:函数返回值的类型,函数的名字,函数要处理的数据;大括号内的语句描述了函数的内在构造,这组语句完成一个独立的操作,是对函数能够完成功能的具体描述。
3、函数的调用函数是由一组语句组成,并给定一个名字。执行与函数相关的一组语句的行为称为函数的调用。应该说函数定义好之后调用之前是没有什么意义的。函数就像某个具有特殊功能的机器工具。这些机器只有在开关打开之后才能发挥作用。在程序编写过程中,完成“开关机器”这个操作的就是函数调用。函数调用的一般形式:函数名(实际参数);
二、函数的教学C语言函数的教学主要是学习自定义函数以及库函数的使用。
1、库函数的教学库函数的教学主要是引导学生主动积极地去使用库函数。由于大多数课本中库函数仅仅是提及,学生大多只会简单输入输出函数及一些字符串处理函数的使用。其实库函数还有大量的函数提供给我们。但很多学生不会主动去了解,去使用,原因主要是学生不了解库函数有哪些,能干什么。针对这种情况,我们可以在教学中找一些用法简单有趣的库函数来激发学生的学习兴趣。比如可以把图形函数库中的一些函数做一简单介绍,在屏幕上输出一些带有色彩的简单的图案。事实证明色彩的引入能引起很多学生主动使用库函数的兴趣。
2、自定义函数的教学在这个环节的教学中,函数定义的一般形式很多学生能够掌握。但是函数的参数确定以及函数返回值的确定对很多函数初学者来说是难点。我认为,这个地方我们可以引入图示法来理解函数的参数和函数的返回值。函数其实就是对某些数据的处理,我们把函数理解为一个黑匣子,它有一个入口和一个出口。入口进入的数据就是你要处理的数据,也就是函数的参数。出口出去的数据就是数据的处理结果,也就是函数的返回值。
★ 高一数学作文
★ 高一数学说课稿
★ 算法概念课的教案
【c语言函数知识点总结(共16篇)】相关文章:
对数与对数函数教学反思2022-10-08
高一数学必修一公式总结2023-11-25
《二次函数》数学教学反思2022-12-06
高一数学对数函数的教学计划2023-10-13
椭圆题型及方法总结2023-09-01
教学设计的概念2023-08-09
模块化教学高中函数论文2023-11-01
数学必修一知识点总结2022-12-17
人教版高一数学教学计划2023-08-20
高中数学新课程中函数设计思路及其教学2023-10-22