函数的形参是回调函数改变全局变量量,可以在程序的所有函数中访问,为什么是错的?

{for(k=0;k&3;k++);printf(&%d&,a[;printf(&\n&);;6)运行以下程序时,若输入:;#include&stdio.h&;voidmain();{inta[4][4],i,j;;for(i=1;i&4;i++);for(j=1;j&4
for(k=0;k&3;k++)
printf(&%d &,a[m][k]); }
printf(&\n&);
6)运行以下程序时,若输入:1 2 3 3 2 1 2 1 3。
#include &stdio.h&
void main()
a[4][4],i,j;
for (i=1;i&4;i++)
for (j=1;j&4;j++)
scanf(&%d&,&a[i][j]);
for (i=1;i&4;i++)
for (j=1;j&4;j++)
a[i][j]=a[(a[i][j]+1)%3+1][(a[j][i]+2)%3+1];
for (i=1;i&4;i++)
printf(&a[%d,%d]=%d
&,i,i,a[i][i]);
7)下面程序的功能是检查一个二维数组是否对称(即a[i][j]==a[j][i]),请填空。
void main()
int a[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,4,7};
int i,j,found=1;
for(i=0;i&4&&i++)
if(a[i][j]!=a[j][i]) {
else printf(&YES&);
8)已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列
void main()
int a[10]={0,12,17,20,25,28,30};
/*a[0]为工作单元,从a[1]开始存放数据*/
int x,i,j=6;
/*j为元素个数*/
printf(&Enter a number: &);
scanf(&%d&,&x);
/*从最后一个单元开始*/
while(a[i]&x)
/*将比x大的数往后移动一个位置*/
/*插入x后元素总个数增加*/
for(i=1;i&=j;i++) printf(&%8d&,a[i]);
printf(&\n&);
9)以下程序运行的结果是:。
void main()
{char a[][6]={&ABCD&,&EFGH&,&IJKL&,&MNOP&,&QRST&,&UVW&}
for(i=0;i&4;i++)
printf(“%s”,a[i]);
printf(“\n”);}
10)编写一个程序,求1~9之间的随机整数构成的4×5矩阵每一行与每一列之和。
11)假定在一个包含16个元素的数组中,每一个元素都是不超过两位的正整数,试编程统计该数组全部元素中数字0,1,2,……,9各出现多少次。
第3部分 函数和预处理命令
1、单项选择题
1)对于C程序的函数,
A、C语言程序的函数中必须有return语句
B、C程序中,函数的类型必须进行显式说明
C、函数中,return语句必须放在函数体的最后
D、return语句中表达式的类型应该与函数的类型一致
2)设有宏定义#define A(m) 5*m,则表达式A(2+3)/3的值为
3)对于C程序的参数,会发生“类型不匹配”的错误。
A、实参和形参均为实型
B、实参为字符型而形参为整型
C、实参为整型而形参为字符型
D、实参为整型而形参为实型
4)一个函数返回值的类型是由决定的。
A、return语句中表达式的类型
B、在调用函数时临时指定
C、定义函数时指定的函数类型
D、调用该函数的主调函数的类型
5)以下叙述中正确的是
A、构成C程序的基本单位是函数
B、可以在一个函数中定义另一个函数
C、void main()函数必须放在其它函数前
D、所有被调用函数一定要在调用之前定义
6)以下程序的输出结果是
#include &stdio.h&
power(int x,int y);
void main()
float a=2.6,b=3.4;
p=power((int)a,(int)b);
printf(&%d\n&,p);
power(int x,int y)
for(i=y;i&0;i--)
7)以下是一个自定义函数的头部,其中正确的是。
A、int fun(int a,b)
B、int fun(int a,int b)
C、int fun(int a,int b);
D、int fun(int b)
8)以下程序执行时输出结果是:。
int f(int x,int y)
return x/y+x%y;
void main()
float a=1.5,b=3.0,c=f(a,b);
printf(&%.2f&,c);
9)有如下程序
int func(int a,int b)
return(a+b);
void main()
int x=2,y=5,z=8,r;
r=func(func(x,y),z);
printf(&%\d\n&,r);
该程序的输出的结果是:
10)有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是:
D、 有语法错
11)C提供的编译预处理功能包括:
A、文件包含、宏定义和条件编译
B、构造工程文件
C、语句注释
D、包含以上各功能
12)以下叙述中正确的是
A、全局变量的作用域一定比局部变量的作用域范围大
B、静态(static)类别变量的生存期贯穿于整个程序的运行期间
C、函数的形参都属于全局变量
D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值
13)以下所列的各函数首部中,正确的是。
A、void play(int a,b);
B、void play(int a,b)
C、void play(int a,int b)
D、void play(int b)
14)在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是。
A、地址传递
B、单向值传递
C、由实参传给形参,再由形参传回实参
D、传递方式由用户指定
15)若有以下程序,则以下叙述中不正确的是
#include &stdio.h&
void f(int n);
void main()
{ void f(int n);
void f(int n)
{ printf(&%d\n&,n); }
A、若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
B、若在主函数前对函数f进行说明,则在主函数和其后其它函数中都能调用函数f
C、对于以上程序,编译时系统会提示出错信息:提示对f函数重复说明
D、函数f无返回值,所以可用void将其类型定义为无值型
16)C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是
17)若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是
A、函数调用可以作为独立的语句存在
B、函数调用可以作为一个函数的实参
C、函数调用可以出现在表达式中
D、函数调用可以作为一个函数的形参
18)有以下函数定义:
void fun(int n, double x) { …… }
若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是
A、fun(int y,double m);
B、k=fun(10,12.5);
C、fun(x,n);
D、void fun(n,x);
19)对于C程序的函数,的叙述是正确的。
A、函数不能嵌套定义,但可以嵌套调用
B、函数可以嵌套定义,但不能嵌套调用
C、函数的定义和调用均不能嵌套
D、函数的定义和调用均可以嵌套
20)以下叙述中不正确的是
A、一个变量的作用域完全取决于变量说明语句的位置
B、外部变量可以在函数以外的任何位置定义
C、内部变量的生存期只限于本次函数调用,无法将内部变量的值保存至函数的下一次调用
D、用static说明一个外部变量是为了限制其他编译单位的引用
21)若有以下变量和函数说明,以下合法的函数调用语句是。
int a=4,b=6,c,k;
char ch='*';
float x,y,z;
sub(int x,int y,char ch,float *z)
{switch(ch)
{case '+':*z=x+y;
case '-':*z=x-y;
case '*':*z=x*y;
case '/':*z=x/y;}
A、sub(10,20,ch,y);
B、sub(1.2+3,2*2, '+',&z);
C、sub(sub(1,2, '+',&y),sub(3,4, '+',&x), '-',&y);
D、sub(a,b,&x,ch);
22)以下叙述中不正确的是:。
A、在函数中通过return语句传回函数值
B、在函数中可以有多条return语句
C、主函数main后的一对圆括号中也可以带有形参
D、调用函数必需在一条独立的语句中完成
23)以下叙述中不正确的是
A、在不同的函数中可以使用相同名字的变量
B、函数中的形式参数是局部变量
C、在一个函数内定义的变量只在本函数范围内有效
D、在一个函数内的复合语句中定义的变量在本函数范围内有效
24)以下对C语言函数的有关描述中,正确的是
A、调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B、C函数既可以嵌套定义又可以递归调用
C、函数必须有返回值,否则不能使用函数
D、C程序中有调用关系的所有函数必须放在同一个源程序文件中
25)以下是一个自定义函数的头部,其中正确的是。
A、int fun(int a[],b)
B、int fun(int a[],int a)
C、int fun(int a,int b)
D、int fun(char a[][],int b)
1)static型变量是在时赋初值。
2)假设有宏定义:#define MA(x) x*(x-2),则表达式MA(2+3+1)的值为
3)以下函数调用语句中,含有的实参个数是。
fun(a+b,(y=10,y),fun(n,k,d));
4)C语言中,形参与实参之间的数据传递方式是,可以按递。
5)在同一个源文件中,外部变量与局部变量同名,起作用。
6)假设有宏定义,则表达式Z(4)的值为
#define X 5
#define Y X+1
#define Z(m) Y*X/m
7)下面程序执行后,x、y、z的结果分别是:、、
void main()
int x,y,z;
三亿文库包含各类专业文献、生活休闲娱乐、外语学习资料、幼儿教育、小学教育、行业资料、中学教育、高等教育、93C程序设计习题部分等内容。 
 2013C语言编程部分复习题(答案)_工学_高等教育_教育专区。.在考生文件夹下,要求程序 PROG.C 的功能是: 将字符串中所有的大写字母转换为小写,其它字符不变(不...  C语言程序设计习题 函数部分_理学_高等教育_教育专区。C语言程序设计习题。函数部分 1:设计一个子函数,实现将两个整数交换,并在主函数中调用此函数。 2:设计一个...  2013C语言编程部分复习题_IT认证_资格考试/认证_教育专区。1.在考生文件夹下,要求程序 PROG.C 的功能是: 将字符串中所有的大写字母转换为小写,其它字符不变(不...  C语言编程部分复习题_计算机软件及应用_IT/计算机_专业资料。c语言复习题 1.在考生文件夹下,要求程序 PROG.C 的功能是: 将字符串中所有的大写字母转换为小写,...  C语言程序设计(第二版)习题... 90页 5财富值 C语言程序设计部分习题 3页 ...程序设计题:编程解决下列问题 1.求出 10 至 1000 之内能同时被 2、3、7 ...  C 程序设计语言练习题第二部分 44.数组定义为 int a[3][2]={1,2,3,4,5,6},值为 6 的数组元素是___ A) a[3][2] B) a[2][1] C) a[1]...  大一C语言编程题部分汇总_IT认证_资格考试/认证_教育专区 暂无评价|0人阅读|0次下载|举报文档 大一C语言编程题部分汇总_IT认证_资格考试/认证_教育专区。输出众数...  C语言程序设计练习题及答案 详细版_IT认证_资格考试/认证_教育专区。第1章一、...5、 C 语言具有哪些特点? 6、 C 语言程序具有哪些基本组成部分? 7、 C ...  《C语言程序设计》课后习题答案(第四版)谭浩强_工学_高等教育_教育专区。《C...(i); printf(&%d 的平方根的整数部分是:%d\n&,i,k); return 0; } 4...京ICP证号&&
京网文[3号&&
Copyright (C) 2017 BaiduC语言局部变量和全局变量_C语言中文网
&&/&&&&/&&&&/&&
在《》中提到,形参变量要等到函数被调用时才分配内存,调用结束后立即释放内存。这说明形参变量的作用域非常有限,只能在函数内部使用,离开该函数就无效了。所谓作用域(Scope),就是变量的有效范围。
不仅对于形参变量,C语言中所有的变量都有自己的作用域。决定变量作用域的是变量的定义位置。
定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。例如:
int f1(int a){
//a,b,c仅在函数f1()内有效
return a+b+c;
int main(){
//m,n仅在函数main()内有效
几点说明:
1) 在 main 函数中定义的变量也是局部变量,只能在 main 函数中使用;同时,main 函数中也不能使用其它函数中定义的变量。main 函数也是一个函数,与其它函数地位平等。
2) 形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。
3) 可以在不同的函数中使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会发生混淆。
4) 在语句块中也可定义变量,它的作用域只限于当前语句块。
在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件。例如:
//全局变量
void func1(){
float x,y;
//全局变量
int func2(){
int main(){
a、b、x、y 都是在函数外部定义的全局变量。C语言代码是从前往后依次执行的,由于 x、y 定义在函数 func1() 之后,所以在 func1() 内无效;而 a、b 定义在源程序的开头,所以在 func1()、func2() 和 main() 内都有效。
局部变量和全局变量的综合示例
【示例1】输出变量的值:
#include &stdio.h&
int n = 10;
//全局变量
void func1(){
int n = 20;
//局部变量
printf(&func1 n: %d\n&, n);
void func2(int n){
printf(&func2 n: %d\n&, n);
void func3(){
printf(&func3 n: %d\n&, n);
int main(){
int n = 30;
//局部变量
//代码块由{}包围
int n = 40;
//局部变量
printf(&block n: %d\n&, n);
printf(&main n: %d\n&, n);
运行结果:
func1 n: 20
func2 n: 30
func3 n: 10
block n: 40
main n: 30
代码中虽然定义了多个同名变量 n,但它们的作用域不同,在内存中的位置(地址)也不同,所以是相互独立的变量,互不影响,不会产生重复定义(Redefinition)错误。
1) 对于 func1(),输出结果为 20,显然使用的是函数内部的 n,而不是外部的 n;func2() 也是相同的情况。
当全局变量和局部变量同名时,在局部范围内全局变量被&屏蔽&,不再起作用。或者说,变量的使用遵循就近原则,如果在当前作用域中存在同名变量,就不会向更大的作用域中去寻找变量。
2) func3() 输出 10,使用的是全局变量,因为在 func3() 函数中不存在局部变量 n,所以编译器只能到函数外部,也就是全局作用域中去寻找变量 n。
3) 由{ }包围的代码块也拥有独立的作用域,printf() 使用它自己内部的变量 n,输出 40。
3) C语言规定,只能从小的作用域向大的作用域中去寻找变量,而不能反过来,使用更小的作用域中的变量。对于 main() 函数,即使代码块中的 n 离输出语句更近,但它仍然会使用 main() 函数开头定义的 n,所以输出结果是 30。
【示例2】根据长方体的长宽高求它的体积以及三个面的面积。
#include &stdio.h&
int s1, s2, s3;
int vs(int a, int b, int c){
v = a * b *
int main(){
int v, length, width,
printf(&Input length, width and height: &);
scanf(&%d %d %d&, &length, &width, &height);
v = vs(length, width, height);
printf(&v=%d, s1=%d, s2=%d, s3=%d\n&, v, s1, s2, s3);
运行结果:
Input length, width and height: 10 20 30↙
v=6000, s1=200, s2=600, s3=300
根据题意,我们希望借助一个函数得到三个值:体积 v 以及三个面的面积 s1、s2、s3。遗憾的是,C语言中的函数只能有一个返回值,我们只能将其中的一份数据,也就是体积 v 放到返回值中,而将面积 s1、s2、s3 设置为全局变量。全局变量的作用域是整个程序,在函数 vs() 中修改 s1、s2、s3 的值,能够影响到包括 main() 在内的其它函数。
编程帮,一个分享编程知识的公众号。跟着一起学习,每天都有进步。
通俗易懂,深入浅出,一篇文章只讲一个知识点。
文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。
文章不涉及代码,不烧脑细胞,人人都可以学习。
当你决定关注「编程帮」,你已然超越了90%的程序员!
微信扫描二维码关注
7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8

我要回帖

更多关于 js函数给全局变量赋值 的文章

 

随机推荐