c语言小结范文

2022-05-18

总结是记录某个时期的学习或工作情况,通过系统性分析的方式,编写出详细的书面报告,通过这份报告的内容,可让我们更加了解工作情况。那如何写出科学合理的总结呢?以下是小编整理的《c语言小结范文》仅供参考,大家一起来看看吧。

第一篇:c语言小结范文

C语言小结2

 题目: 给定n个数据, 求最小值出现的位置 (如果最小值出现多次,求出第一次出

现的位置即可)。

#include void main( ) {

int a[10], i, *p;

printf("输入10个数: ");

//下标法输入各值:

for(i=0; i<10; i++)

scanf("%d",&a[i]);

//指针法输出各值:

for(p=a; p

printf("%3d", *p); }  题目:编写函数fun,函数的功能是:计算n门课程的平

均值,计算结果作为函数值返回。

例如,若有5门课程的成绩是:92,76,69,58, 88,则函数的值为76.600000。

#include "stdio.h" float fun(int a[],int n) {

/**********Program**********/ int i;

float s=0,t;

for(i=0;i

s=s+a[i];

t=s/n;

return(t);

/********** End **********/

}

void main() { int a[]={92,76,69,58,88}; printf("y=%f ",fun(a,5)); }  题目:编写函数fun,函数的功能是:找出一批正整数中 的最大的偶数。

#include "stdio.h"

int fun(int a[],int n) {

/**********Program**********/

int i,num; num=-1; for(i=0;inum) num=a[i]; return num;

/********** End **********/ }

void main() { int a[]={1,2,9,24,35,18},k; k=fun(a,6); printf("max=%d ",k); }

第二篇:C 语言inline函数小结

//inline(内联)函数:将普通的函数定义为inline函数,可以避免普通函数入栈出栈的开销,它是将函数内的代码直接粘贴到调用处。除此之外,它和普通函数无异。 //要成为inline函数必须具备以下几点: //

1、函数代码很短,通过不超过10行

//

2、函数内不能出现循环、递归、switch...case //

3、需要在编译的时候开启优化选项 -O //否则加上inline修饰,编译器也会视而不见

//强制inline宏

#define __inline

__attribute__((always_inline))

//inline放置的位置只要在函数的返回值的类型前面就可,如果函数又有static修饰,放在static的前后都可

//inline在不同编译器下放置的位置导致的结果是不同的,某些编译器如果将inline放在函数的声明的前面是不被视为inline函数的,但大部分编译器对放在函数声明和函数定义的前面视为一样

内联函数与宏的区别在于:宏是由预处理器来对宏进行替代,没有语法检查、类型检查和安全检查;内联函数是通过编译器的控制来实现的,有语法检查、类型检查和安全检查;内联函数是真正的函数,而且在调用的地方,由编译器负责把内联函数的函数体代码块替换到内联函数被调用的地方,这一点与宏替换很相似;内联函数有参数,有返回值;由于内联函数可以像宏一样被展开,所以调用内联函数的时候,取消了函数参数压栈、出栈所带来的开销,从而减少了函数调用开销;这就是内联函数的优越于宏的地方;

内联函数的声明和内联函数的函数体的定义必须在一起;下面声明内联函数的语句是无效的:inline int Max(int a, int b);

而下面的内联函数的定义是有效的: inline int Max(int a, int b){return ((a > b) ? a : b)}; (c 语言声明)

C++类的成员函数也可以被定义为内联函数;比如: class Student {

private:

int nID

int nAge;

float fScore;

public:

void setID(int nid){ nID = nid; } //该成员函数默认自动为内联函数(隐式定义内联函数)

int getID(void){ return nID; }

//该成员函数默认自动为内联函数(隐式定义内联函数)

inline void setAge(int nage) { nAge = nage; }

//显式定义内联函数

inline int getAge(void) { return nAge; }

//显式定义内联函数

void setScore(float fscore);

//类定义体内没有声明为内联函数;

float getScore(void);

//类定义体内没有声明为内联函数; } inline void Student::setScore(float fscore){ fScore = fscore; } //类定义体外实现为内联函数; inline float Student::getScore(void) { return fScore; }

//类定义体外实现为内联函数;

C++中,在类定义体内部定义了函数体的成员函数,被编译器默认为内联函数,而不管这个函数头前面是否有关键字inline,比如:setID()、getID()、setAge()、getAge();也可以把实现在类定义体外部的成员函数定义为内联函数,这个时候在类定义体中只有成员函数头的声明,而其实现是在类定义体外部,比如:setScore()和getScore();

即便是可以把实现在类定义体外部的成员函数定义为内联函数,那该成员函数的实现也必须写在声明类定义体的哪个头文件(.h)中,不能违反规则;即:内联函数的定义和实现都必须在同一个头(.h)文件中;

内联函数的局限性:

1、由于内联函数与宏一样也是实现为代码替换,所以定义为内联函数的函数体不宜过大,如果函数体过大,则某些普通的编译器就会放弃内联方式,而改用调用普通函数的方式,这样就失去了内联函数的意义了;所以,内联函数的函数体代码不宜过大,一般就是3---4行代码即可;

2、由于内联函数是编译器在便宜阶段进行函数体展开的,所以,这就把类的内联函数的定义与实现都必须在声明类的那个头文件中,而不能放在实现类的那个cpp文件中;

第三篇:VB与C语言知识点小结

VB是基于BASIC语言的可视化操作

Dim birthday as string Birthday=inputbox(“输入生日”,”birthday”,”1990-1-3”) Msgbox”您的生日是”&birthday (&是转化成字符串连接输出) 点击确定显示弹窗

窗体文字输出print” ”

窗体事件:单击、双击(空白)、load 窗体方法:print方法 xx.print” ” show方法 cls方法 VB的数据类型:数值型、字符串型、日期型、对象型 Dim a as integer Dim b as integer A=text1.text B=text2.text Msg”您输入的和是&val(a)+val(b) 输入kk则显示实时错误13,类型不匹配 定义常量:const PI as double =3.1415 Select case opt Case “f”

Result=val(a)+val(b) …

End select 一些运算符+ - * / = > < >= <= <>

数学函数:取整函数fix()去掉小数部分,int(a)不大于a的整数 abs(a)绝对值,sqr()求平方根

Sgn()判断正负 log() sin() cos() tan() 字符串函数:删除空格trim() 删除左端空格ltrim 删除右端空格 rtrim

左截取left(s,6) 右截取right(s,6) mid(s,2,6)

测长度:len(a) val()数值转换函数 Lcase() Ucase()大小写转换函数

Instr(a,b)在a中找b,找到了则返回第一次出现的位置,没找到则返回0 随机函数:rand(a) cint(a)把小数的第一位四舍五入 数据类型转换函数:CDBL CLNG CSNG CVAR CSTR Now()所有 date()日期 time()时间 If的三种结构:

1、 if _____then __________ Endif

2、 if____then _________ Else if ____then ______ Else ____ endif

3、 if_____then ______ Else _____ End if Show加载 Visible显示

Select case a Label1.backcolor=RGB(255,0,0)红色 … Case else …

End select RGB(0,255,0)绿色 RGB(0,0,255)蓝色

Do while i<=b S=s+i I=i+1 Loop

For i=a to b step 2 S=s+i Next i 数组

动态数组,静态数组大小固定

与C不同的是,声明数组时规定是是下标上界 dim counter(1) as integer 也可以同时规定上下界 counter(3 to 4) 声明变体数组

Dim intx as integer Dim counterA(5) as integer Dim countB(2) as integer 分别赋值

Dim arrx(2) as variant Arrx(1)=counterA() Arrx(2)=counterB() Msgbox arrx(1)(2) 声明多维数组

Static matrxA(9,9)as double Static matrxA(1 to 10,1 to 10) as double 可推广

声明动态数组

Dim arr1()空的就是动态

变量作用域:过程中定义的仅过程内部有效

通用区域定义的整个工程有效。窗体内部直接调用。其它窗体要标明源窗体。 冒泡排序

For(i=0;i

//N-1趟 {

} For(j=0;j

C语言的基本数据类型:

1、 char 字符型 占用1个字节

2、 int 整型 反映所在机器中的整数的最自然的长度

8、

16、32 限定符:short >=16 long >=32,且short 不得长于int,long不得小于int

3、 float 单精度浮点型

4、 double 双精度浮点型

5、 long double 高精度浮点

这三个的长度都取决于机器。限定符 signed 和unsigned 可以用来限定char 和整型。任何unsigned 类型的数总是正直或者0. „a‟字符常量

“student a”字符串常量 “wangwei””nihao”字符串连接 使用”表示双引号字符

从技术角度看,字符串常量就是字符数组,只是使用了空字符‟�‟作为字符串的结尾,不算在长度里。

枚举常量:枚举是一个常量整型值的列表。 Enum Boolean{NO,YES} 没有显式说明的情况下则值是0,1,2,3,4… 若有部分枚举有值,则其后的值在指定值递增。 相对于#define来说,它的优势就是常量值可以自动生成 Typedef enum {…}def Def a 必须是其中的一个值

由&&和||连接的表达式按从左到右的顺序求值,一旦知道结果真假之后立即停止运算。&&比||的优先级高。

优先级从高到底:关系运算符(> >= < <=)相等性运算符 == != 逻辑运算符 || && 自增运算符,自减运算符。++ --的特殊之处是既可以作为前缀,也可以作为后缀,它们之间不同的地方是,++n代表先增加1,再使用变量的值。n++是先使用变量的值再++。自增自减只能用于变量。

按位运算符:& | 异或^ >> << ~ 其中&用于置0,|用于置1 Break语句用于从for ,while do-while等循环中提前退出,是最内层的循环。

Goto语句,在某些场合goto语句还是用得着的,最常见的用法是终止程序在某些深度嵌套的处理过程,因为break只能跳出最内层的循环。 首先主函数也是函数。

变量:全局变量,在所有函数外部定义的外部变量,具有工程可见性

局部变量,在函数内部定义 函数:内部函数,用static定义 外部函数,即具有工程可见性,对整个源程序可见,应该用extern标注。这是默认的

Static的作用:

1、 隐藏。编译多个文件的时候,未加static前缀的全局变量和函数具有全局可见性(使用时要在头文件中用extern标注)

2、 对于变量有另外的两个作用,保持变量的内容持久,有两种变量存储在静态数据区,一种是外部变量即全局变量,一种是static变量。

3、 默认初始化为0 Static的使用法则:

1、 若是全局变量尽在单个C文件中访问,则可加static标注,以减少模块之间的耦合度。

2、 若全局变量仅由单个函数访问,又想保持其值,可以将其修改为静态局部变量。 其实,static可以不用,限定单个文件,不必要,保持其值,局部静态不如全局变量方便,变量可以直接初始化为0。

对于全局变量和外部函数用在工程中的其它文件,在资源接口和头文件中同意使用extern标注,以免出错。

指针是一种保存变量地址的变量。通常是两个字节或者四个字节。用处广泛,原因之一,指针可能是表达某个计算的唯一途径,通常可以生成更高效更紧凑的代码。指针和goto一样,会导致程序难以理解,容易出错。ANSI C制定了操纵指针的明确规则。 &取对象的地址

*访问指针指向地址的内容

定义指针 int *ip //ip是指向int类型的指针 一般来说指针指向单变量是不太有意义的。

指针与函数:由于C语言是以传值的方式将参数传递给被调用的函数的,被调用的函数不能修改参数的值,得到的只是副本,如下面一个错误的函数定义,交换两个数的值 Void swap (int x,,int y) { Int temp Temp=x X=y Y=temp } 正确的应该是这样的 Void swap(int *x , int *y) { Int temp Temp=*x *x=*y *y=temp } 指针与数组

数组的名称代表的是数组开始的第一个元素的地址。所以a[i]等同于*(a+i),&a[i]等同于a+I 指向数组的指针也可以这么用:pa[i]也就等同于*(pa+i)。总之指向数组的指针与数组的名称用法是一样的。 Int *pa Pa=&a[0] 或者 pa=a Pa++//指向下一个元素

(*pa)++ //将指向的值加1 a=*p++//取值并下移

指针与字符串,其实字符串与数组是一样的,只是有没有结尾符的问题。名字也是指针 字符串也可以通过一个指向其第一个元素的指针访问 Char *pmessage Pmessage= “now is the time ”; 注意与其区别

Char amessage[]=”now is the time” Char aname[][15]={” ”,” ”,…} 两个版本的strcpy函数 Void strcpy(char *s ,char *t) { Int I; I=0; While((s[i]=t[i])!=‟�‟) I++; } Void strcpy(char *s ,char *t) { While((*s=*t)!=‟�‟) { S++; T++; } } 更有经验的程序员更愿意写成 While((*s++=*t++)!=‟�‟) 进一步简化为

While(*s++=*t++) 其它的指针定义:

定义指针数组 Char * lineptr [maxline] Int a[10][20] Int *b[10] A[3][4] b[3][4]都是对象的合法引用,它的一个优点就是每一行的长度可以不同。

(*ptr)[10]定义了一个指向了一个有10个元素数组的指针。即这是一个行指针。 多维数组的初始化: Char daytab[2][3]= {{1,2,3},{4,5,6}}; 二维数组

二维数组以一种晦涩的方式建立在一维数组之上。计算机将二维数组按一维存储(即只有1行)访问时的步长由i和j决定。(i*行长度+j) 二维数组传参:

1、 当成一维处理 Int a[10][10]; Int *b; B=a 那么a[i][j]和b[10*i+j] 声明:f(int *b) 传参:f((int *)a)

2、 二维仍然当成二维,但必须制定步长(即有多少列),一维可省略,当然也可以不省略 Char word[5][10] 声明:Wordsort(char p[ ][10],int rowsize); 传参:Wordsort(word ,5)

3、 利用行指针传参

声明:f(int (*a)[3]) 传参:f(a)

4、我们在编写程序的时候却需要用到各个维数都不固定的二维数组作为参数,这就难办了,编译器不能识别阿,怎么办呢?不要着急,编译器虽然不能识别,但是我们完全可以不把它当作一个二维数组,而是把它当作一个普通的指针,再另外加上两个参数指明各个维数,然后我们为二维数组手工寻址,这样就达到了将二维数组作为函数的参数传递的目的,根据这个思想,我们可以把维数固定的参数变为维数随即的参数,例如:

void Func(int array[3][10]);

void Func(int array[][10]);

变为:

void Func(int **array, int m, int n);

在转变后的函数中,array[i][j]这样的式子是不对的(不信,大家可以试一下),因为编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子手工转变为:

*((int*)array + n*i + j);

在调用这样的函数的时候,需要注意一下,如下面的例子:

int a[3][3] =

{

{1, 1, 1},

{2, 2, 2},

{3, 3, 3}

};

Func(a, 3, 3);

根据不同编译器不同的设置,可能出现warning 或者error,可以进行强制转换如下调用:

Func((int**)a, 3, 3);

其实多维数组和二维数组原理是一样的,大家可以自己扩充的多维数组,这里不再赘述。写到这里,我先向看了这篇文章后悔的人道歉,浪费你的时间了。下面是一个完整的例子程序,这个例子程序的主要功能是求一个图中某个顶点到其他顶点的最短路经,图是以邻接矩阵的形式存放的(也就是一个二维数组),其实这个函数也是挺有用的,但是我们这篇文章的重点在于将二维数组作为函数的参数传递。

结构体是一个或者多个变量的集合,这些变量可能是不同的类型。 Struct相当于生命了一种数据类型。 Struct point { Int x; Int y; } Struct Point a; 结构体的引用

对于变量可以直接用结构名.成员,或者使用指针 Struct point *pp Pp=&a; (*pp).x 或:pp->x 使用typedef类型定义的3种好处

1、 表达方式更加简洁

2、 (专用头文件)提高程序的可移植性

3、 Typedef struct tnode * treeptr 显然更有表达力

输入输出等功能(printf scanf等)并不是C语言本身的组成部分,它们是C语言标准库中的函数提供的功能,无论是window还是linux,这些函数都有标准的格式和相同的功能。 函数声明只是告诉编译器数据类型,并不分配具体空间。

第四篇:《c语言程序设计新视角》第三章 程序语句小结

《c语言程序设计新视角》第三章 程序语句 小结 各种语句格式规则要对应;

三选择四循环语句记分明;

单、双选择用if;多路选择switch灵。 初值、条件与增量,循环要素三并行。

do while做了再说;while判后再执行; for要摆明三要素,耍简约风格数它精。

continue和break,跳越不一般,远近要分清。

第五篇:《c语言程序设计新视角》第九章编译预处理小结

《c语言程序设计新视角》第九章 编译预处理小结 编译是把语句翻译成机器码,

预编译是在译码前进行的处理法,

文件包含把已有的文件为我所用来添加,

宏定义的作用是替换,方便程序编辑的好方法,

条件编译可实现按需编译,方便调试让代码适应性更佳。

上一篇:课程简介5范文下一篇:案例分析范文

本站热搜