我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

C语言上机实验九函数 c语言上机实验九答案

4、设计一个函数,当给定一个整数后,能得到该数的补码(应考虑该整数是正数或负数)。

实验一 C语言程序初步

创新互联公司是专业的敖汉网站建设公司,敖汉接单;提供网站设计制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行敖汉网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

[实验目的和要求]

1、 熟悉C语言运行环境。

2、 掌握C语言程序的书写格式和C语言程序的结构。

3、 掌握C语言上机步骤,了解运行一个C程序的方法。

4、 本实验可在学习完教材第一章后进行。

[实验内容和步骤]

1、输入一个简单的C语言程序:输入矩形的两条边,求矩形的面积。

[分析与讨论]

1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因。

2、总结C程序的结构和书写规则。

实验二 数据类型、运算符和表达式

[实验目的]

1.熟练表达式的表示方法

2.了解表达式的运行结果

3.了解C语言中数据类型的意义

[实验内容和步骤]

1. 用printf函数来输入表达式运行结果

2. 程序试图计算由键盘输入的任意两个整数的平均值:

[问题讨论]

1.“=”和“==”有什么区别?

2.“”和“”、“|”和“||”有什么区别?

3. 如何正确地选用数据类型?

实验三 选择结构

[实验目的]

1、了解条件与程序流程的关系

2、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。

[实验内容和步骤]

1、题目

有如下程序段:

{……

if (a1b= =0) x=x/a;

if(a==2||x1) x=x+1;

}

为了更容易明白程序的逻辑结构,要求用流程图来加以描述。

要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。

[分析讨论]

(1) 用哪一组数据就可使程序中的每个处理语句都执行一次?为了找出程序中各条处理语句中的错误,应该使用什么样的数据对程序进行测试?请上机验证自己的结论。

(2) 用哪两组数据就可以使程序段中的每个分支都运行一次?这种情形与上面的讨论有何不同?如果为了找出程序中积压分支中的错误,应该使用什么样的数据对程序进行测试?请上机验证自己的结论。

(3)用哪两组数据就可以把判定框中的每个条件运算都进行一次?如果为了测试出判定条件中的错误,应使用哪些数据对程序进行测试?请上机验证自己的结论。

(4)用哪四组数据才可以把各种条件的组合都检测一遍? 如果为了测试各种条件的组合的情形,应该使用什么样的测试数据?请上机验证自己的结论。

(5)用哪四组数据才可以把起始到终止的各条路径都覆盖一次?如果为了测试出程序在不同路径下的错误,应该使用什么样的测试数据?请上机验证自己的结论。

实验四 循环结构(1)

[目的和要求]

1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。

2、了解条件型循环结构的基本测试方法。

[实验内容与步骤]

1、下面是一个计算e的近似值(使误差小于给定的δ)的程序。

main()

{double e=1.0,x=1.0,y,detax;

int i=1;

printf(“\n please input enter a error:”);

scanf(“%lf”,detax);

y=1/x;

while(y=detax)

{

x=x*I;

y=1/x;

e=e+y;

++i;

}

printf(“%12.10lf”,e);

}

[分析讨论]

(1)、阅读上面的程序,写出程序所依据的计算公式。

(2)、当输入的detax各是什么值时,能分别使程序按下面的要求运行:

.不进入循环;

.只循环一次;

.只循环两次;

.进入死循环(程序将永远循环下去)。

为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?

(3)、原程序中while语句中的y=detax,分别换成ydetax,y=detax,ydetax,y=detax,观察程序运行将会有什么变化。

假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的detax来测试出while语句的循环条件写错了。

(4)、把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。

假如不知道机器内的程序实际上是怎么写的,输入什么样的detax就能测试出少了上述这条语句。

(5)、若把原程序中的++i换成i++,观察程序的运行发生了什么变化?

假如不知道这条语句到底是怎么写的,输入什么样的detax就能测试出这条语句写错了.

(6)、把原程序中的while结构改写成do—while结构,再分别按上述的(2)、(3)两步进行实验。

实验五 循环结构(2)

[ 目的和要求]

1、 掌握如何正确地控制计数型循环结构的次数

2、 了解对计数型循环结构进行测试的基本方法

3、 了解在嵌套循环结构中,提高程序效率的方法

4、 本实验应在学习了教材第3.3.4进行

[实验内容与步骤]

实验题目:下面是一个循环结构 的C程序。

main()

{

int i ,j;

long sum=0;

for(i=1,i=20,i++)

for(j=1;j=3;j++)

sum=sum+(i+1)*(i+1)*(j+2)

printf(“sum is :%d\n”,sum);

}

[ 分析讨论]

(1) 将上述程序中的和分别做什么样修改,能使程序按如下要求运行:

.不循环;

.外循环1次,不进入内循环;

.外循环,内循环各1次;

.外循环1次,内循环2次;

.外循环 2次, 内循环1次;

.外循环19次,内循环3次;

.外循环20次,内循环2次;

.外循环21次,内循环3次。

(2) 试修改程序,以便能知道控制表达式

i=1;j=20;i++

j=1;j3;j+=

各执行了多少次?

(3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观

察对换后的外循环与内循环控制表达式执行的总次数有无变化?

(4)将(3)中程序写为

main()

{

int i,j,k;

long sum=0;

for (j=1.j=3.j++)

{

k=j+2;

for(i=1;i=20;i++)

sum=sum+(i+1)*(i+1)**k;

}

printf(“sum is :%d\n”,sum);

}

观察程序的执行结果有无变化?

(5)将(3)中程序改写为

main()

{

int I,j,m,n;

long sum=0;

for(j=1;j=3;j++)

{

m=j+2;

for(I=1;j=20;I++)

{

n=I+1;

sum=sum+m*m*k;

}

}

printf(“sum is :%d\n”,sum);

}

观察程序的执行结果有无变化?

(1)

实验六 函数(1)

[实验目的]

1.理解和掌握多模块的程序设计与调试的方法。

2.掌握函数的定义和调用的方法。

3.学会使用递归方法进行程序设计。

[实验内容和步骤]

1. 编写一个函数,判断一个数是不是素数。在主函数中输入一个整数,输出是否是素数的信息。

实验步骤与要求:

(1) 编写一个函数prime(n),返回给定整数n是否为素数。

(2) 编写一个主函数,输入一个整数,调用(1)中的函数,判断此整数是否为素数,并输出结果。

(3) 对于属于多函数程序,可以采用每个函数分别进行编辑、编译的方法,然后再连接、运行。如果编译有错时,可分别修改,这样便于调试。实验2和实验3也可以使用这样的调试方法。

2. 用梯形法求函数的定积分。

实验步骤与要求:

(1) 编制一个函数sab(a,b,n),其功能是求函数f(x)在[a,b]上的定积分,其中n为区间[a,b]的等分数。要求该函数在一个独立的文件中。

(2) 编制一个主函数以及计算被积函数值的函数f(x),在主函数中调用(1)中的函数计算并输出下列积分值。要求主函数与函数f(x)在同一个文件中。

(3) 编制另一个主函数以及计算被积函数值的函数f(x),在主函数中调用(1)中的函数计算并输出下列积分值。要求主函数与函数f(x)在同一个文件中。

说明:

用梯形法求定积分,梯形公式为

s=h[f(a)+f(b)]/2+hf(a+kh)其中,h=(b-a)/n

3. 用递归方法编写程序,求n阶勒让德多项式的值,递归公式为

1 (n=0)

pn(x)=x (n=1)

((2n-1)xpn-1(x)-(n-1)pn-2(x))/n (n1)

[ 分析讨论]

1. 小结函数的定义及调用方法。

2. 小结函数中形参和实参的结合规则。

实验七 函数(2)

[目的与要求]

1、 掌握C语言函数定义及调用的规则。

2、 理解参数传递的过程。

[ 实验内容与步骤]

1、 上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。

main()

{

int,y;

printf(“%d\n”,sum(x+y));

int sum(a,b)

{

int a,b;

return(a+b);

}

}

2、 编写并调试一个求(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。

[分析讨论]

1、 针对以上实验内容写出相应的参数传递过程并分析结果。

2、 讨论参数的传递的几种形式。

实验八 数组(1)

[实验目的]

掌握有关数组和字符串的程序设计方法。

[实验内容和步骤]

1 已知一组数据如下:

6,3,42,23,35,71,98,67,56,38

编写程序,把它们按从小到大的次序排列起来。

程序如下:

/*EX3-1*/

# includestdio.h

# define N 10

main()

{

int a[N]={6, 3, 42, 23, 35, 71, 98, 67, 56, 38};

int i, j, t;

printf(“The array before sorted:”);

for(i=0; iN; i++)

printf(“%4d”, a[i]);

for(i=0; i9; i++)

{

for(j=i+1; j10; j++)

{

if(a[i]a[j])

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

}

for(i=0; iN; i++)

printf(“%4d”, a[i]);

return o;

}

[ 分析讨论]

1. 定义数组时下标的用法和注意事项.

2.什么情况下出现下标越界.

 实验九 数组(2)

[目的和要求]

1、掌握数组定义的规则。

2、掌握C语言数组的基本用法。

[实验内容与步骤]

1、编写程序,测试下列数组的定义方式是否正确

(1) main()

{

int n;

scanf(“%d”,n);

int a[n];

……

}

(2) main()

{

const int n=10;

int a[n];

}

(3) #include stdio.h

#define M 10

main()

{

int a[M];

}

(4) main()

{

int a[2+2*4];

}

(5) #include stdio.h

#define M 2

#define N 8

main()

{ int a[M+N];

}

通过这一实验,可以说明什么问题?

2、运行下面的C程序,根据运行结果,可以说明什么?

main( )

{ int num[5]={1,2,3,4,5};

inti i;

for(i=0;i=5;i++)

printf(“%d”,num[i]);

}

3、操作符用以求一个变量的地址,这在函数scanf中已经使用过了。现在要你设计一个程序,返回一个3 * 5 的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。

4、为一个起泡排序程序设计测试用例,并测试之。

[分析讨论]

通过实验,分析定义与引用数组的区别。

实验十 指 针 (1)

[目的和要求]

1. 熟悉指针的正确用法。

[实验内容和步骤]

1、指出下面程序错误的原因。

main( )

{

int x=10,y=5,*px,*py;

px=py;

px=x;

py=y;

printf(“*px=%d,*py=%d,*px,*py);

}

2.下面的程序能获得上述运行结果吗?

main()

{

char *S=”COMPUTER”;

char c;

printf(“which style you want to \n”);

printf(“capital (c) or uncapital(u);”);

c=getchar();

if(c=’c’)

put(s);

else {

s=”computer”;

puts(s);

}

}

分析出错原因。

3.设计一个C程序,用以测试下列各表达式的运算。

(1) y=*px++

(2) y=*++py

(3) y=(*py)++

(4) y=--*ppx++

[分析讨论]

数组与指针的联系。

实验十一 指针(二)

[目的和要求]

1、了解指针参数的特殊性。

2、掌握函数、指针、数组的用法。

[实验内容与步骤]

1、想使指针变量pt1指向a 和b 中的大者,pt2指向小者,以下程序能否实现此目的?

swap(int *p1,int *p2)

{

int *p;

p=p1;p1=p2;p2=p;

}

main()

{

int a,b;

scanf(“%d,%d”,a,b);

pt1=a;pt2=b;

if(ab)swap(pt1.pt2);

printf(“%d,%d\n”,*pt1,*pt2);

}

上机调试此程序。如果不能实现题目要求,指出原因,并修改之。

2、 下面的程序。注意其中的复杂声明语句;

int (*function[4])();

和各标记符的含义,并记录执行结果。

main()

{

int fun1();

int fun2();

int fun3();

int fun4();

int (*function[4])();

int a=10,b=5,i;

function[0]=fun1;

function[1]=fun2;

function[2]=fun3;

function[3]=fun4;

for(I=0;I4;i++)

printf(“fun no.%d-%d\n”,i+1,execute(a,b,function[i]));

}

execute(int x,int y,int *fun())

{

return(*fun)(x,y);}

fun1(int x, int y)

{

return(x+y);}

fun2(int x,int y)

{

return(x-y);}

fun3(int x,int y)

{

return(x*y);}

fun4(int x,int y)

{

return(x/y);}

[分析讨论]

指针、数组、函数的联系。

实验十二 有关文件的程序设计

[实验目的]

1. 掌握文件建立的方法。

2. 掌握包含文件操作的程序设计和调试方法。

[实验内容和步骤 ]

1 建立一个磁盘文件,其内容是0~90°之间每隔5°的正弦值。

程序如下:

//EX8-1

#includeiostream.h

#includefstream.h

#includemath.h

#define PI 3.14159

main()

{

float S[19];

int i, a;

ofstream out(“fsin.bny”);

if(!out)

{

cout”Cannot open file.”endl;

return 1;

}

for(i=0,a=-5; i19; i++)

{

a+=5;

S[i]=sin(a*PI/180.0);

}

out.write((unsigned char*)s, sizeof s);

out.close( );

return 0;

}

[ 分析讨论]

文件操作中各函数的功能,具体使用方法.

实验十三 结构体和共用体

[目的和要求]

1、掌握结构体类型方法以及结构体变量的定义和引用。

2、掌握指向结构体变量的指针变量的应用,特别是链表的应用。

3、掌握运算符”.”和”-”的应用。

4、共用体的概念和应用。

[实验内容和步骤]

1、编写程序:有4名学生,每个学生的数据包括学号、姓名、成绩,要求找出成绩最高者的姓名和成绩,上机运行程序。

2、建立一个链表每个结点包括的成员为:职工号、工资。用malloc打印出来。用一个creat 来建立链表,用list来输出数据。5个职工号为101,103,105,107,109。

3、在上题基础上,新增加一个职工的数据,按职工号的顺序插入链表,新插入的职工号为106。写一函数insert来插入新结点。

4、在上面的基础上,写一函数delete,用来删除一个结点。要求删除职工号为103的结点。打印出删除后的链表.

5、你有无办法测试构造链表时,内存空间的动态分配情形?

[分析讨论]

怎样引用结构体变量成员?

实验十四 位运算

[目的和要求]

1. 掌握位运算的概念和方法。

2. 掌握位运算(,|,^,~)的使用方法。

3. 掌握有关位运算的用法。

[实验内容和步骤]

1. 按习题8.2的要求,编一个程序,将一个整数的高字节和低字节分别输出(用位运算方法)。上机运行。

2. 按习题8.6的要求,编一个程序,使一个整数的低4位翻转。上机运行,用十六进制数输入和输出。

3. 按习题8.10的要求,将一个整数i的各位循环左移4位,设i的值为十六进制数fe13。

4. 按习题8.13的要求,设计一个函数,当给定一个整数后,能得到该数的补码(应考虑该整数是正数或负数)。

[分析讨论]

位运算时应注意什么问题?

实验十五 综合应用举例

[目的与要求]

1、熟悉C语言的端口及硬件控制的方法与原理。

2、了解用C语言实现发声程序所要访问的端口。

[实验内容和步骤]

1、调试课本中例10.8程序,注意调出不同的效果。

2、调试并总结程序中所用的知识点,写出乐谱文件播放的是什么乐谱?

乐谱实例:

6000 h5 1 h3 2 h2 0.5 h3 0.5 h1 4 h2 1 m7 2 m6 0.5 h1 0.5 m5 4 m3 2 m5 1.5

m6 0.5 h1 1.5 h2 0.5 m6 0.5 h1 0.5 m5 1 h5 1.5 h1 0.5 h6 0.5 h5 0.5 h3 0.5

h5 0.5 h2 4 h2 1.5 h3 0.5 m7 1 m6 1 m5 1.5 m6 0.5 h1 1 h2 1 m3 1 h1 1 m6 0

m5 0.5 m6 0.5 h1 0.5 m5 4 h3 1.5 h5 0.5 m7 1 h2 1 m6 0.5 h1 0.5 m5 3 m3 0.

m5 0.5 m3 0.5 m5 0.5 m5 0.5 m6 0.5 m7 0.5 h2 0.5 m6 3 m5 0.5 m6 0.5 h1 1.5

h2 0.5 h5 1 h3 1 h2 1 h3 0.5 h2 0.5 h1 1 m6 0.5 m5 0.5 m3 2 h1 2 m6 0.5 h1

0.5 m6 0.5 m5 0.5 m3 0.5 m5 0.5 m6 0.5 h1 0.5 m5 3 h3 0.5 h5 0.5 h2 0.5 h3

0.5 h2 0.5 h1 0.5 m7 1 m6 1 h5 4##

void play_music(char *filename) /*filename为音乐文件名格式见上*/

{

FILE *fp;

int rate;

char sound_high[3];

float sound_long;

register int i=0,j;

int sign=0;

float str[1000][2];

if ((fp=fopen(filename,"r"))==NULL)

{

printf("Open file music.doc Errors!\n");

exit(1);

}

fscanf(fp,"%d",rate);

while(!feof(fp)!sign)

{

fscanf(fp,"%s%f",sound_high,sound_long);

str[i][1]=rate*sound_long;

switch(sound_high[0])

{

case 'h':

switch(sound_high[1])

{

case '1':

str[i++][0]=1046.5;

break;

case '2':

str[i++][0]=1174.7;

break;

case '3':

str[i++][0]=1318.5;

break;

case '4':

str[i++][0]=1396.9;

break;

case '5':

str[i++][0]=1568;

break;

case '6':

str[i++][0]=1760;

break;

case '7':

str[i++][0]=1975.5;

break;

default: printf("\n Error Music.doc\n");

break;

}

break;

case 'm':

switch(sound_high[1])

{

case '1':

str[i++][0]=523.3;

break;

case '2':

str[i++][0]=587.3;

break;

case '3':

str[i++][0]=659.3;

break;

case '4':

str[i++][0]=698.5;

break;

case '5':

str[i++][0]=784.0;

break;

case '6':

str[i++][0]=880;

break;

case '7':

str[i++][0]=987.8;

break;

default: printf("\n Error music.doc.\n");

break;

}

break;

case 'l':

switch(sound_high[1])

{

case '1':

str[i++][0]=262;

break;

case '2':

str[i++][0]=296;

break;

case '3':

str[i++][0]=329.6;

break;

case '4':

str[i++][0]=349.2;

break;

case '5':

str[i++][0]=392;

break;

case '6':

str[i++][0]=440;

break;

case '7':

str[i++][0]=493.9;

break;

default: printf("\n Error music.doc.\n");

break;

}

break;

case '*':

switch(sound_high[1])

{

case '1':

str[i++][0]=131;

break;

case '2':

str[i++][0]=147;

break;

case '3':

str[i++][0]=165;

break;

case '4':

str[i++][0]=176;

break;

case '5':

str[i++][0]=196;

break;

case '6':

str[i++][0]=220;

break;

case '7':

str[i++][0]=247;

break;

default: printf("\n Error music.doc\n");

break;

}

break;

case '#':

if (sound_high[1]=='#') sign=1;

break;

case 'x':

if (sound_high[1]=='0') str[i++][0]=20;

break;

default:printf("\n ERRor music.doc\n");

exit(1);

}

}

for(j=0;j=i-1;j++)

{

sound(str[j][0]);

delay(str[j][1]);

}

nosound();

}

[分析讨论]

1.c语言怎样对数据库进行管理?

2.分析程序设计过程中怎样对基础知识进行灵活运用。

什么是C语言函数(9)

extern int x,y;   说明x,y为外部整型变量

下面分别介绍以上四种存储类型:

一、自动变量的类型说明符为auto。

这种存储类型是C语言程序中使用最广泛的一种类型。C语言规定, 函数内凡未加存储类型说明的变量均视为自动变量, 也就是说自动变量可省去说明符auto。 在前面各章的程序中所定义的变量凡未加存储类型说明符的都是自动变量。例如:

{ int i,j,k;

char c;

……

}等价于: { auto int i,j,k;

auto char c;

……

}

自动变量具有以下特点:

1. 自动变量的作用域仅限于定义该变量的个体内。在函数中定义的自动变量,只在该函数内有效。在复合语句中定义的自动变量只在该复合语句中有效。 例如:

int kv(int a)

{

auto int x,y;

{ auto char c;

} /*c的作用域*/

……

} /*a,x,y的作用域*/

2. 自动变量属于动态存储方式,只有在使用它,即定义该变量的函数被调用时才给它分配存储单元,开始它的生存期。函数调用结束,释放存储单元,结束生存期。因此函数调用结束之后,自动变量的值不能保留。在复合语句中定义的自动变量,在退出复合语句后也不能再使用,否则将引起错误。例如以下程序:

main()

{ auto int a,s,p;

printf("\ninput a number:\n");

scanf("%d",a);

if(a0){

s=a+a;

p=a*a;

}

printf("s=%d p=%d\n",s,p);

}

{ auto int a;

printf("\ninput a number:\n");

scanf("%d",a);

if(a0){

auto int s,p;

s=a+a;

p=a*a;

}

printf("s=%d p=%d\n",s,p);

}

s,p是在复合语句内定义的自动变量,只能在该复合语句内有效。而程序的第9行却是退出复合语句之后用printf语句输出s,p的值,这显然会引起错误。

3. 由于自动变量的作用域和生存期都局限于定义它的个体内( 函数或复合语句内), 因此不同的个体中允许使用同名的变量而不会混淆。 即使在函数内定义的自动变量也可与该函数内部的复合语句中定义的自动变量同名。例5.14表明了这种情况。

[例5.14]

main()

{

auto int a,s=100,p=100;

printf("\ninput a number:\n");

scanf("%d",a);

if(a0)

{

auto int s,p;

s=a+a;

p=a*a;

printf("s=%d p=%d\n",s,p);

}

printf("s=%d p=%d\n",s,p);

}

本程序在main函数中和复合语句内两次定义了变量s,p为自动变量。按照C语言的规定,在复合语句内,应由复合语句中定义的s,p起作用,故s的值应为a+ a,p的值为a*a。退出复合语句后的s,p 应为main所定义的s,p,其值在初始化时给定,均为100。从输出结果可以分析出两个s和两个p虽变量名相同, 但却是两个不同的变量。

4. 对构造类型的自动变量如数组等,不可作初始化赋值。

二、外部变量外部变量的类型说明符为extern。

在前面介绍全局变量时已介绍过外部变量。这里再补充说明外部变量的几个特点:

1. 外部变量和全局变量是对同一类变量的两种不同角度的提法。全局变是是从它的作用域提出的,外部变量从它的存储方式提出的,表示了它的生存期。

2. 当一个源程序由若干个源文件组成时, 在一个源文件中定义的外部变量在其它的源文件中也有效。例如有一个源程序由源文件F1.C和F2.C组成: F1.C

int a,b; /*外部变量定义*/

char c; /*外部变量定义*/

main()

{

……

}

F2.C

extern int a,b; /*外部变量说明*/

extern char c; /*外部变量说明*/

func (int x,y)

{

……

}

在F1.C和F2.C两个文件中都要使用a,b,c三个变量。在F1.C文件中把a,b,c都定义为外部变量。在F2.C文件中用extern把三个变量说明为外部变量,表示这些变量已在其它文件中定义,并把这些变量的类型和变量名,编译系统不再为它们分配内存空间。 对构造类型的外部变量, 如数组等可以在说明时作初始化赋值,若不赋初值,则系统自动定义它们的初值为0。

三、静态变量

静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 对于自动变量,前面已经介绍它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。

由此看来, 一个变量可由static进行再说明,并改变其原有的存储方式。

1. 静态局部变量

在局部变量的说明前再加上static说明符就构成静态局部变量。

例如:

static int a,b;

static float array[5]={1,2,3,4,5};

静态局部变量属于静态存储方式,它具有以下特点:

(1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。

C语言出警告了,这句是什么意思?

就是说你有个变量定义了,但没有用。警告你是不是忘了,或别的什么的。


本文标题:C语言上机实验九函数 c语言上机实验九答案
网站URL:http://mswzjz.cn/article/hgcjss.html

其他资讯