搜档网
当前位置:搜档网 › c语言中static 用法总结

c语言中static 用法总结

c语言中static 用法总结
c语言中static 用法总结

c语言中static 用法总结

1. 全局静态变量

在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。

1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)

2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

看下面关于作用域的程序:

//teststatic1.c

void display();

extern int n;

int main()

{

n = 20;

printf("%d\n",n);

display();

return 0;

}

//teststatic2.c

static int n; //定义全局静态变量,自动初始化为0,仅在本文件中可见

void display()

{

n++;

printf("%d\n",n);

}

文件分别编译通过,但link的时候teststatic1.c中的变量n找不到定义,产生错误。

定义全局静态变量的好处:

<1>不会被其他文件所访问,修改

<2>其他文件中可以使用相同名字的变量,不会发生冲突。

2. 局部静态变量

在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。

1)内存中的位置:静态存储区

2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。

当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。

3. 静态函数

在函数的返回类型前加上关键字static,函数就被定义成为静态函数。

函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。

例如:

//teststatic1.c

void display();

static void staticdis();

int main()

{

display();

staticdis();

renturn 0;

}

//teststatic2.c

void display()

{

printf("display() has been called \n");

}

static void staticdis()

{

printf("staticDis() has been called\n");

}

文件分别编译通过,但是连接的时候找不到函数staticdis()的定义,产生错误。

定义静态函数的好处:

<1> 其他文件中可以定义相同名字的函数,不会发生冲突

<2> 静态函数不能被其他文件所用。

存储说明符auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。

auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。

关键字extern和static用来说明具有静态存储期的变量和函数。用static声明的局部变量具有静态存储持续期(static storage duration),或静态范围(static extent)。虽然他的值在函数调用之间保持有效,但是其名字的可视性仍限制在其局部域内。静态局部对象在程序执行到该对象的声明处时被首次初始化。

由于static变量的以上特性,可实现一些特定功能。

1.统计次数功能

声明函数的一个局部变量,并设为static类型,作为一个计数器,这样函数每次被调用的时候就可以进行计数。这是统计函数被调用次数的最好的办法,因为这个变量是和函数息息相关的,而函数可能在多个不同的地方被调用,所以从调用者的角度来统计比较困难。代码如下:

void count();

int main()

{

int i;

for (i = 1; i <= 3; i++)

count();

return 0;

}

{

static num = 0;

num++;

printf(" I have been called %d",num,"times\n"); }

输出结果为:

I have been called 1 times.

I have been called 2 times.

I have been called 3 times.

C语言特殊符号意义

C语言中像%D &%f符号的作用说一下 最佳答案 C语言中的符号 运算符的种类C语言的运算符可分为以下几类: 1.算术运算符 用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(–)共七种。 2.关系运算符 用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。 3.逻辑运算符 用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 4.位操作运算符 参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。 5.赋值运算符 用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。 6.条件运算符 这是一个三目运算符,用于条件求值(?:)。 7.逗号运算符 用于把若干表达式组合成一个表达式(,)。 8.指针运算符 用于取内容(*)和取地址(&)二种运算。 9.求字节数运算符 用于计算数据类型所占的字节数(sizeof)。 10.特殊运算符 有括号(),下标[],成员(→,.)等几种。 1.C的数据类型 基本类型,构造类型,指针类型,空类型 2.基本类型的分类及特点 类型说明符字节数值范围 字符型char 1 C字符集 基本整型int 2 -32768~32767 短整型short int 2 -32768~32767 长整型 long int 4 -214783648~214783647 无符号型 unsigned 2 0~65535

c语言数组习题优选稿

c语言数组习题 集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)

数组练习解答 1 定义一个名为a的单精度实型一维数组,长度为4,所有元素的初值均为0的数定义语句是___________ 【分析】按照一般数据定义语句的格式,可以直接写出方法一(参看答案);考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二(参看答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参看答案);考虑到选用静态型,不赋初值所有元素也自动赋予。空值(对数值型数组来说,初值为0),可以写出方法四(参看答案)。 【答案】方法一:float a[4]={0.0,0.0,0.0,0.0}; 方法二:float a[]={ 0.0,0.0,0.0,0.0}; 方法三:float a[4]= {0.0}; 方法四: static float [4]; 2 下列数组定义语句中,错误的是() ① char x[1]='a'; ②auto char x[1]={0}; ③ static char x[l]; ④ char x[l]; 【分析】显然答案①中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住),所以备选答案①是符合题意的答案。 【答案】① 3 用"冒泡排序法"对n个数据排序,需要进行n一1 步。其中第k步的任务是:自下而上,相邻两数比较,小者调上;该操作反复执行n-k次。现在假设有4个数

据:4、l、3、2要排序,假定4为上、2为下,则利用"冒泡排序法"执行第2步后的结果是_________________。 【分析】开始排序前的排列执行第1步后的排列执行第2步后的排列 4 1 1 1 4 2 3 2 4 2 3 3 【答案】 l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是 ______________________。 【分析】开始排序前的排列为: 4 1 3 2 执行第1步后的排列为: 1 4 3 2 执行第2步后的排列为: 1 2 3 4 【答案】1、2、3、4 5 下列数组定义语句中,正确的是() ① int a[][]={1,2,3,4,5,6}; ② char a[2]「3]='a','b'; ③ int a[][3]= {1,2,3,4,5,6}; ④ static int a[][]={{1,2,3},{4,5,6}};

C语言总结

C语言 标识符的命名规则 变量名可以由字母、数字和_(下划线)组合而成 变量名不能包含除_ 以外的任何特殊字符,如:%、# 、逗号、空格等 变量名必须以字母或_(下划线)开头 变量名不能包含空白字符(换行符、空格和制表符称为空白字符) C 语言中的某些词(例如int 和float 等)称为保留字,具有特殊意义,不能用作变量名 C 语言区分大小写,因此变量price 与变量PRICE 是两个不同的变量 C语言的基本元素:常量 常量的特点: 1.在程序中保持不变 2.在程序中,常量可以不经说明而直接使用 常量的分类: 1.直接常量:对应数据类型的常量 整形常量:12U、0L、-3 实型常量:4.6F、-1.23 字符常量:…a?、‘b? 等 字符串常量“Hello!” 2.标识符:用来标识变量名、符号常量名、函数名、数组名、文件名的有 效字符序列。 有时常量定义成宏的形式:#define 标识符常量 单精度float 和双精度double 1.float为单精度实数,double为双精度实数 2.在一般计算机中,为float类型的变量分配4个字节的存储单元,为double类型变量分配8个字节的存储单元 3.float数值范围约在-10e38~10e38,并提供6~7位有效数字位,绝对值小于10e38的数被处理成零值(MAC提供7位有效数字) 4.double数值范围约在-10e308~10e308,并提供15~16位有效数字,绝对值小于10e308的数被处理成零值(MAC提供15位有效数字) %m.nf m表示最小字符宽度,当实际字符显示,小于该值时,自动补空格,正数时数字右对齐,负数时,左对齐 例如%3d 对应 1 的话,就是##1 %-3d 对应 1 的话,就是1## 当实际的显示大于m,那就按实际输出,也就是m无意义了

c语言关键字的用法详解

1. Static用法 1.1 static声明的变量在C语言中有两方面的特征: 1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 1.2 特点 A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度; B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题; D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数) E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static 的局部变量的地址作为返回值,若为auto类型,则返回为错指针。 函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。 扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。 1.3 关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:

C语言:数组的应用实验报告

课程名称:结构化程序设计与C语言开课实验室:年月日 一、实验目的 用C语言编写和调试数组的程序,包括一维数组和二维数组。从而对数组的程序设计有比较深入的了解。 二、内容及结果 1、程序二选择排序法 1)题目:用选择法对10个整数排序。 2)代码: #include int main() { int a[10]; int i,j,t; printf("input 10 numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j++) for(i=0;i<9-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("the sorted numbers:\n");

for(i=0;i<10;i++) printf("%d",a[i]); printf("\n"); return 0; } 3)运行截图: 2、程序二将一个数组中的值按逆序重新存放。 1)题目:将一个数组中的值按逆序重新存放。 2)代码: # include int main () { int a[5]={8,6,5,4,1}; int i,t; for(i=0;i<=2;i++) { t=a[i]; a[i]=a[4-i]; a[4-i]=t;

} for(i=0;i<=4;i++) printf("%d ",a[i]); return 0; } 3)运行截图: 3、程序三输出杨辉三角形(10行) 1)题目:输出杨辉三角形(10行) 2)代码: #include int main() { int yh[10][10]={0}; int i,j; for(i=0;i<10;i++) yh[i][0]=1; for(i=1;i<10;i++) for(j=1;j<10;j++) yh[i][j]=yh[i-1][j-1]+yh[i-1][j]; for(i=0;i<10;i++) { for(j=0;j

c语言实验报告总结

篇一:《C语言上机实验心得》 C语言上机实验心得 在科技高度发展的今天,计算机在人们之中的作用越来越突出。而C语言作为一种计算机的语言,学习它将有助于我们更好的了解计算机,与计算机进行交流,因此,我们一定要学好C语言,这对我们以后的发展是十分重要的。 说到这,上机实验当然就是一个必不可少的环节了,C语言灵活、简洁的特点,只有通过编程实践才能真正了解,真正说懂。为了更好地学习语法规定、掌握程序设计方法、提高程序开发能力,我们必须实际上机、编写程序。 通过实验我也发现了自己不少的问题,这都是只看书上的程序而没有自己亲身上机编写程序而无法得知的,假如我们只因看熟书上的程序就以为自己已经掌握了C语言那就大错特错了。 我主要存在以下的这些缺点 1、学习耐心与细心不足,如scanf(“%d”,&n);中的“&”有时候会忘了。而在最后

输出时又错写成printf(“%d”,&n);从而错误得输出了地址而不是我原来想要的答案。 2、编程思想不够发散,看着题目有时想不出解答的方法,更不用说编写程序来解 题了。 3、 4、基本功不够,有些函数的表达不太精通,需要看书来核实,以致耗时较多。知识不够广,有些内容没有学好,不能要用到时及时反映出来,认识程度不够 深刻。 5、 6、有时候不够精简,有一点用处不大或者说没有也可以的文字存在。英语水平较差,对错误的地方虽然电脑有说,但由于是英文,理解上还是存在

一点问题。 为了能更好地学好C语言,在今后学习中我要更多的动脑,综合运用所学,多看相关东西,多上机练习,提高电脑水平,增强自学能力,把已会的东西掌握好。 实验中我深刻意识到完成程序的编写,决不意味着万事大吉。认为万无一失的程序,实际上机运行时可能会出现很多意想不到的问题。有时编译程序检测出一大堆错误,有时程序能够顺利运行,但是运行结果并不是你预期中想要的。因为开发环境所提供的编译系统无法发现程序逻辑错误,或者是你原来所设计时的理论错误,这就只能靠自己的上机经验来分析判断错误的所在了。所以程序的调试是一个技巧性很强的工作,它可能比编一个程序耗时更 多。由此可看出上机实践的重要性。 通过本次C语言上机实验,我对这个介于人类与非人类之间的计算机编程语言有了一定的体验。编程的时候有因为顺利编出程序而开心过、有因为做得比人家慢而郁闷过、有因为不知从何入手而无奈过、有因为不知错出在哪而彷徨过但随着练习的增多,我对C语言比以前熟了很多,不再只是纸上谈兵,我都有能力独立做出一些程序,可能对于一些“高手来说这不算什么,或者他们早就会了,但我依然觉得很开心,因为我跟我自己比是进步了。

C语言中auto,register,static,const,volatile的区别

C语言中auto,register,static,const,volatile的区别 (1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。 (2)register 这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。 (3)static 常见的两种用途: 1>统计函数被调用的次数; 2>减少局部数组建立和赋值的开销.变量的建立和赋值是需要一定的处理器开销的,特别是数组等含有较多元素的存储类型。在一些含有较多的变量并且被经常调用的函数中,可以将一些数组声明为static类型,以减少建立或者初始化这些变量的开销. 详细说明: 1>、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与栈变量和堆变量的区别。 2>、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 3>当static用来修饰全局变量时,它就改变了全局变量的作用域,使其不能被别的程序extern,限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。 使用注意: 1>若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度; 2>若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; 3>设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题(只要输入数据相同就应产生相同的输出)。 (4)const 被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。它可以修饰函数的参数、返回值,甚至函数的定义体。 作用: 1>修饰输入参数 a.对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。例如将void Func(A a) 改为void Func(const A &a)。 b.对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void Func(int x) 不应该改为void Func(const int &x)。 2>用const修饰函数的返回值 a.如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类型指针。 如对于:const char * GetString(void); 如下语句将出现编译错误: char *str = GetString();//cannot convert from 'const char *' to 'char *'; 正确的用法是:

C语言字符数组总结

字符数组总结 字符数组不仅可以存储字符还可以存储字符串,而且存储字符串时必须包含…\0?,因为此字符是字符串的结束标志。因此,对字符数组的初始化、输入输出与一般数组又有不同。现总结如下: 数组的赋值(其中前两种赋值后不能以字符串进行处理) 1. 逐个元素赋值 char a[5]; a[0]=…C?; a[1]=…H?; a[2]=…I?; a[3]=…N?; a[4]=…A?; 2. 一般整体赋值 char a[5]={…C?, …H?, …I?,?N?,?A?}; char a[ ]={…C?, …H?, …I?, …N?, …A?} 3. 字符串整体赋值 char a[ ]={“abc”}; char a[ ]=“abc”; char a[4]={…a?,…b?,…c?,…\0?}; 字符串的输入(已知:char str[ 10 ]; int i;) 1. 逐个元素输入(必须输入9个) for(i=0;i<9;i++) scanf(“%c”,&str[i]); //此句也可以用str[i]=getchar();代替 str[9]=…\0?; 注意:?\0?只能直接赋值,不能从外部输入,外部输入的\0是\和0两个字符 2. 整个字符串输入(以空格,回车或TAB键结束) scanf(“%s”,str); 注意:此语句执行后自动会在str后添加一个?\0?,如:运行时输入:abc回车键,则str 中将有4个字符,依次为:?a?,?b?,?c?,?\0?,其中?\0?是自动添加上的。 3. 整个字符串输入(只以回车键结束) gets(str); 注意:此语句执行后自动会在str后添加一个?\0?,如:运行时输入:abc回车键,则str 中将有4个字符,依次为:?a?,?b?,?c?,?\0?,其中?\0?是自动添加上的。 字符串的输出(已知:char str[ 10 ]; int i;) 1. 逐个字符输出(注意此时for语句表示从第一个字符一直到?\0?) for(i=0;a[i]!=…\0?;i++) //此句中的a[i]!=…\0?;也可以用i

static变量三个作用

static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。 (1)先来介绍它的第一条也是最重要的一条:隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。 下面是a.c的内容 char a = 'A'; // global variable void msg() { printf("Hello\n"); } 下面是main.c的内容 int main(void) { extern char a; // extern variable must be declared before use printf("%c ", a); (void)msg(); return 0; } 程序的运行结果是: A Hello 你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a

是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。 如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。 (2)static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。虽然这种用法不常见,但我还是举一个例子。 #include int fun(void){ static int count = 10; // 事实上此赋值语句从来没有执行过 return count--; } int count = 1; int main(void) { printf("global\t\tlocal static\n"); for(; count <= 10; ++count) printf("%d\t\t%d\n", count, fun()); return 0; }

c语言实习报告

实习报告 实习性质: C语言课程实习 学生姓名:谢辉 专业班级:信安141 指导教师:郑晓蓉、杨娟 实习时间:2014年12月22日- 2014年12月26日 实习地点:1203 重庆工程职业技术学院 学生实习考核表 三号黑体行距:固定

目录 1实习目的..................................................... 2 实习概况..................................................... 2.1 实习要求 ............................................... 2.2 实习时间 ............................................... 2.3 实习环境 ............................................... 2.4 开发环境 ............................................... 3 实习内容..................................................... 3.1 系统需求分析 ........................................... 3.2 程序设计 ............................................... 3.2.1程序的初始界面..................................... 3.2.2成绩的输入......................................... 3.2.3成绩的查询......................................... 3.2.4各科成绩的排序..................................... 3.4.5总成绩排序.........................................

C语言关键字static

C语言关键字-static 用法1:在一个函数体内使用static定义一个变量,保证该变量只进行一次初始化 例:#include "stdio.h" int test(void) { static int i=0; //对应 int i=0 结果为i=1 i=1 i=1 i=1 i=1 i++; return i; } int main( ) { for(int j=0;j<5;j++) printf("test=%d\n",test()); return 0; } 输出结果:i=1 i=2 i=3 i=4 i=5 用法2:在模块内,函数体外声明的static变量,只能 被模块内函数调用,而模块是无效的(其中模块即:一个.c文件和一个.h文件的结合,其中在STM32单片机

C设计中经常使用)。同样的一个在模块内被声明为static的函数也只能在模块内被其它函数调用,而模块外是无权调用的。一句话总结就是保护一些不能被其它文件访问的全局变量和函数;防止了不同人定义的文件变量名和函数名的重复引起的错误 例://file1.cpp int VarA=0; static int VarB=0; extern void FunB(void) //其中函数前面加extern表示定义为外部函数,其实可以省略,因为C语言默认省略为外部可 //调用 { ; } static int FunA (void) //加了static为静态函数,只能在本模块使用 { int i=0; i++; return i; } //file2.cpp

extern int VarA; //可以 extern int VarB;//错误,为静态变量 extern int FunB;//可以 extern int FunA;//错误,为静态函数 总结:众所周知局部变量在存储方式上可以分为auto (默认的,可省略) static register这3种其中auto 是分配在栈上,占用动态存储空间,在函数调用结束后自动释放;static 分配在静态存储空间,两者的作用域相同,但是生存周期不同,static在所处模块初期初始化一次,其后不再进行初始化,同时如果没有初始化则默认是0或者空字符,但是auto的无初始化的值是随机的数;其中针对C++系统不管是否有static修饰都会调用默认构造函数进行初始化。

c语言课程设计总结报告

附表2 C++(或C)语言课程设计总结报告

源代码: /* 学生通讯录管理系统,能够实现对通讯录的内容进行创建、显示、查询、删除以及修改等功能*/ # include # include # include

# include # define N 100 void myprint(); void mycreate(char num[N][12],char name[N][12],char tel[N][15],int *n); void mydisplay(char num[N][12],char name[N][12],char tel[N][15],int n); void mysearch(char num[N][12],char name[N][12],char tel[N][15],int n); void mydelete(char num[N][12],char name[N][12],char tel[N][15],int *n); void mymodify(char num[N][12],char name[N][12],char tel[N][15],int n); /* 主函数*/ void main() { char choose,yes_no,num[N][12],name[N][12],tel[N][15]; int n=0; do{ myprint(); choose=getch(); switch(choose) { case '1':mycreate(num,name,tel,&n); break; case '2':if(n==0) { printf("\n 无记录,请创建通讯录!\n"); break; } mydisplay(num,name,tel,n); break; case '3':if(n==0) { printf("\n 无记录,请创建通讯录!\n"); break; } mysearch(num,name,tel,n); break; case '4':if(n==0) { printf("\n 无记录,请创建通讯录!\n"); break; } mydelete(num,name,tel,&n);

C语言数组知识点总结

C语言数组知识点总结 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

数组定义:数组是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式:类型说明符数组名[常量表达式];例如:inta[10];元素为a[0]----a[9]. 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 inta[10]={0,1,2,3,4,5,6,7,8,9};正确。 inta[10];a[10]={0,1,2,3,4,5,6,7,8,9};错误。 7、可以只给一部分元素赋值。例如: inta[10]={5,8,7,6};后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: inta[10]={0,1,2,3,4,5,6,7,8,9};可以写成inta[]={0,1,2,3,4,5,6,7,8,9}; 但是,既不赋初值,也不指定长度是错误的。例如:inta[];错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: inta[3][4];可以看成是包含3个一维数组,每个一维数组里包含4个元素。一共3*4=12个元素。 所有元素为a[0][0],a[0][1],a[0][2],a[0][3]

a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 2、与一维数组一样元素下标可以是是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正确。 inta[3][4];a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};错误。 4、可以把所有数据写在一个花括号内。例如: inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正确。 5、可以只对部分元素赋值。例如: inta[3][4]={{1},{5},{9}};其余未赋值的元素默认为0。 inta[3][4]={{1},{5,6}};可以看成是inta[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 字符数组 1、定义:chara[10];字符数组a长度为10。每个元素只能存放一个字符。例如: a[0]='h';a[1]='a';a[2]='p';…… 2、初始化: chara[]={'h','a','p','p','y'}; chara[]="happy"; chara[]={"happy"};注意,因为字符串结尾自动加'\0',所以chara[]="happy";长度为6,不是5。

C语言课程设计总结报告1

C语言课程设计总结报告 题目银行排队系统 指导教师 院系工学院 专业 班级网络 【 学号 姓名 成绩 七月八日 "

表1 进度安排表 表2 中期报告表

通客户,vip客户人数。 三、. 四、系统设计 1.程序总体结构 2.界面设计 主菜单: —————————————欢迎光临XX银行————————————— 、 1 顾客到达 2 顾客离开 3 查看业务办理 4 查看排队情况 5 系统查询 6 退出 现在时刻:Sat Jul 07 11:28:04 2018 …

目录 第一章系统功能说明 (1) 第二章程序结构 (1) 2.1程序结构说明 (1) 2.2重要数据说明 (2) 2.3函数清单 (2) 第三章使用说明 (7) 3.1安装手册 (7) 3.2使用手册 (7) 第四章系统设计难点及其解决方法 (10) 4.1顾客的到达和离开 (10) 第五章不足之处 (10)

第一章系统功能说明 本程序可实现银行排队功能,对客户进行排序、业务管理,并能对错误的输入进行提示,对溢出进行判断并提示错误的功能。 为了实现“银行排队系统”的各项功能,首先要设计一个含有多个菜单的主控制菜单子程序,以链接系统的各项子功能,方便客户使用本系统。本系统采用队列存储银行排队中的顾客信息。其中:用数组存放办理业务的窗口;用链式队列存放排队顾客的信息。 系统分成六个功能模块。 一.主菜单。显示五个功能模块。 二.顾客到达。分为VIP客户和普通客户进行拿号排队,普通用户进入逻辑队列。 VIP客户通过VIP认证函数认证后直接到VIP柜台办理业务,跳出该循环。 三.顾客离开。顾客离开时,将顾客从从列队中删除,并提供让客户对银行窗口职员评价的平台。此时时间函数结束,输出其使用时间。然后执行柜台评分函数四.查看业务办理。可以查看每个业务窗口正在给第几个顾客办理业务。 五.查看排队情况。通过逻辑队列查看当前顾客前有多个顾客在排队等待。 六.系统查询。可以查询本系统为多个普通客户和VIP客户办理过业务。 顾客的到达是通过队列实现的。每增加一个顾客就增加一个元素和一个编号,其中设置了一个判断的操作,如果是VIP客户,输入卡号密码就可以直接到VIP柜台办理;如果是普通客户则归入队列。 顾客的离开包含了一个时间函数和评分函数。在顾客离开时,时间函数结束显示顾客办理业务所需时间。配分函数通过IF函数判断输入是否正确,然后用将分数累加再均除得到柜台的平均评分。 业务办理是一个For循环函数,分别将顾客对应柜台,已查看办理情况。 排队情况则是队列中剩余的元素个数。 第二章程序结构 2.1程序结构说明 该银行排队程序大体结构如图2-1所示。

C语言中全局变量,局部变量,静态全局变量,静态局部变量的区别

C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。 从作用域看: 1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。 2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。 3>局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。 4>静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static 关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。 2.从分配内存空间看: 1>全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间 2>全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 1)静态变量会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。2)变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。

C语言数组知识点总结

数组 定义:数组就是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式: 类型说明符数组名[常量表达式];例如: int a[10]; 元素为a[0] a[9] 、 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以就是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 int a[10]={0,1,2,3,4,5,6,7,8,9}; 正确。 int a[10]; a[10]={0,1,2,3,4,5,6,7,8,9}; 错误。 7、可以只给一部分元素赋值。例如: int a[10]={5,8,7,6}; 后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: int a[10]={0,1,2,3,4,5,6,7,8,9}; 可以写成int a[]={0,1,2,3,4,5,6,7,8,9}; 但就是,既不赋初值,也不指定长度就是错误的。例如:int a[]; 错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: int a[3][4]; 可以瞧成就是包含3 个一维数组,每个一维数组里包含4 个元素。一共3*4=12 个元素。所有元素为a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 2、与一维数组一样元素下标可以就是就是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 正确。 int a[3][4]; a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 错误。 4、可以把所有数据写在一个花括号内。例如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 正确。 5、可以只对部分元素赋值。例如: int a[3][4]={{1},{5},{9}}; 其余未赋值的元素默认为0。 int a[3][4]={{1},{5,6}}; 可以瞧成就是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 字符数组

C语言程序设计总结报告

信息工程系 课程设计报告书 所属课程名称:C语言程序设计专业班级: 150311 学生姓名:曾传凤 学号:15031102 长春工业大学人文信息学院2016年9月9日

课程设计成绩评定表

第一部分完成题目 1、简单的数学计算。编写程序,计算任意输入的3个数的和的平均值。 (1)截屏: (2)源代码: //1. 简单的数学计算。编写程序,计算任意输入的3个数的和的平均值。 #include "stdio.h" void main() { int a=0,b=0,c=0,s=0; float v; printf("三个数"); scanf("%d%d%d",&a,&b,&c); printf("三个数的和为,三个数的和的平均值为"); s=a+b+c; v=s/3; printf("三个数的和为%d,三个数的和的平均值为%f",s,v); } 2. 题目:编写程序。a为100,b为50,若a>b成立将a赋予给c,否则将b赋予给c。同时,若ab) { c=a; d=b*b*b;

} else { c=b; d=a; } printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d); 3.题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 (1)截屏: (2)源代码: #include "stdio.h" void main() { int a; printf("请输入学生成绩:\n "); scanf("%d",&a); if(a>=90) { printf("A\n"); } else if(a>60&&a<89) { printf("B\n"); } else { printf("C\n"); } } 4题目:构造一个一元二次方程,方程有两个不相等的实数解,将两个实数解输出出来。 (1)截屏:

static的作用

static像在VB,C,C++,Java中我们可以看到static最为关键字和函数出现,在其他的高级计算机语言如FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、PROLOG、Ada等语 言中也是有出现的,只是有着不同的作用,对于其具体作用,读者有需要的时候是可以具体查阅的鉴 于时间问题今天我就不一一罗列了。 目录 简介 分类 static 函数内部函数和外部函数 当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。 内部函数 (又称静态函数) 如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。 定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示: static 函数类型函数名(函数参数表) {……} 关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。

使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。 外部函数 外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数: [extern] 函数类型函数名(函数参数表) {……} 调用外部函数时,需要对其进行说明: [extern] 函数类型函数名(参数类型表)[,函数名2(参数类型表2)……]; [案例]外部函数应用。 (1)文件mainf.c main() { extern void input(…),process(…),output(…); input(…); process(…); output(…); } (2)文件subf1.c …… extern void input(……) /*定义外部函数*/ {……} (3)文件subf2.c …… extern void process(……) /*定义外部函数*/ {……} (4)文件subf3.c …… extern void output(……) /*定义外部函数*/ {……} C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1 #include void fn(); static int n; //定义静态全局变量

相关主题