C语言程序设计教程第四章练习题解析(1)
c语言第四章练习题答案

c语言第四章练习题答案习题四4.5编程判断输入整数的正负性和奇偶性。
流程图如图4-1。
#includemain(){int m;scanf("%d", &m); /*输入一个整数*/if (m >= 0) /*是否为正数*/{if (m%2 == 0) /*是正数,且能被2整除,是正偶数*/{printf("%d is a positive even\n", m);}else /*不能被2整除,是正奇数*/{printf("%d is a positive odd\n", m);}}/*if(m>=0)结束*/else{if (m % 2 == 0){printf("%d is a negative even\n", m); /*是负偶数*/}else{printf("%d is a negative odd\n", m); /*是负奇数*/}} }程序运行结果如下:第一次运行:6↙6 is a positive even第二次运行:-7↙6 is a negative odd4.6编程计算分段函数:1x x e y e -??=??-?000x x x >=<,输入x ,打印出y 值。
流程图如图4-2。
#include#includemain(){int x;double y;scanf("%d", &x); /* 输入一个整数*/if (x > 0){y = exp(-x); /*如果大于0,计算y=exp(-x)的值 */else if (x == 0){y = 1; /*x=0,则y=1*/}else{y = -exp(x); /*x<0,则y=-exp(x)*/` }printf("y=%f\n", y);}程序运行结果如下:第一次运行:4↙y=0.018316第二次运行:0↙y=1.000000第三次运行:-4↙y=-0.0183164.7输入三角形的三条边a,b,c ,判断它们能否构成三角形,若能则指出是何种三角形:等腰三角形、直角三角形、一般三角形。
《C语言程序设计》第4章习题答案

1、选择题(1)C(2)D(3)B(4)D(5)C(6)B(7)B(8)C(9)A(10)C(11)C(12)B 2、填空题(1)①int men[10] ;②float step[4]={1.9,-2.33,0,20.6};③_int grid[4][10] ;(2)①int m[10]={9,4,7,49,32,-5};②0 9③scanf("%d",m[1]);④m[0] =39;⑤m[0] =a[3]+a[5];(3)①3 ②5 ③8 ④8 ⑤9 ⑥12 ⑦9(4)①int a[10]={9,4,12,8,2,10,7,5,1,3}; ②0 9 ③8 8(5)103、程序填空题(1)array[20]20&array[i ]20max=array[i];min=array[i];sum+array[i];sum/20(2)-5.77000021(3)ABCDEFGHIJKLEFGHIJKLABFDEFGHIJKLABFDEFGHI4、程序设计题(1)#define SIZE 100#include<stdio.h>void main(){int a[SIZE+1],i,j;for(i=2;i<=100;i++)a[i]=i;for(i=2;i<=100;i++)for(j=i+1;j<=100;j++)if(a[i]!=0&&a[j]%a[i]==0)a[j]=0;printf("\n");j=0;for(i=2;i<=100;i++){if(a[i]!=0){printf("%-4d",a[i]);j++;}if(j==10){j=0;printf("\n");}}}(2)#define S 14#include"stdio.h"void main(){int a[S][S],i,j,n;printf("please enter n:");scanf("%d",&n);for(i=1;i<=n;i++){a[i][i]=1;a[i][1]=1;}for(i=3;i<=n;i++)for(j=2;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i<=n;i++){for(j=1;j<=n-i;j++)printf(" ");for(j=1;j<=i;j++)printf(" %3d",a[i][j]);printf("\n");}}(3)#define SIZE 80#include<stdio.h>void main(){char str1[SIZE+SIZE],str2[SIZE];int i,j;puts("Please enter 2 string:");scanf("%s",str1);scanf("%s",str2);i=0;while(str1[i]!='\0')i++;j=0;while(str2[j]!='\0'){str1[i]=str2[j];i++;j++;}str1[i]='\0';printf("%s\n",str1);}(4)#define SIZE 80#include<stdio.h>#include<string.h>void main(){char string[SIZE];int len,i,j,flag;long number;puts("Please enter a digital string:");scanf("%s",string);len=strlen(string);if(string[0]=='-'){flag=-1;i=1;}else{flag=1;i=0;}number=string[i]-'0';for(i++;i<len;i++)number=number*10+(string[i]-'0');number=flag*number;printf("%d\n",number);}(5)#define SIZE 40#include<stdio.h>void main(){int m,n,i,j;float price[SIZE],sum;printf("\nPlease input M and N:");scanf("%d%d",&m,&n);m=m-n;printf("Please input %d price :",n);sum=0;for(i=0;i<n;i++){scanf("%f",&price[i]);sum=sum+price[i];}printf("Aver are %10.2f.",sum/n);while(m>0){for(i=0;i<n-1;i++)price[i]=price[i+1];printf("\nPlease input one price:"); scanf("%f",&price[n-1]);m--;sum=0;for(i=0;i<n;i++){sum=sum+price[i];}printf("Aber are %10.2f",sum/n);}}。
C语言第四章习题及答案(课余练习-不用提交)

第四章习题答案一、选择题1)以下是if语句的基本形式:if(表达式) 语句其中"表达式"A)必须是逻辑表达式B)必须是关系表达式C)必须是逻辑表达式或关系表达式D)可以是任意合法的表达式2)以下选项中,值为1的表达式是()。
A)1-'0' B)1-'\0' C)'1'-0 D)'\0'-'0'3)若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是:A)1 B)0 C)2 D)不知道a的值,不能确定4)若变量已正确定义,在if (W)printf(“%d\n”,k);中,以下不可替代W的是A)a<>b+c B)ch=getchar()C)a==b+c D)a++5)设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是A)if(x++); B)if(x>y&&y!=0);C)if(x>y) x- - D)if(y<0) {;}else y++; else x++;6) 以下选项中,当x为大于1的奇数时,值为0的表达式A)x%2==1 B)x%2 C)x%2!=0 D)x%2==07) 设有条件表达式:(EXP)?i++;j--,则以下表达式中(EXP)完全等价的是A)(EXP= =0) B)(EXP!=0)C)(EXP= =1)D)(EXP!=1)8) 在以下给出的表达式中,与while(E)中的(E)不等价的表达式是A)(!E=0) B) (E>0||E<0) C) (E==0) D) (E!=0)9)若有定义int x,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++):(y++)中的条件表达式(x-y)等价的是()。
A)(x-y>0) B)(x-y<0) C)(x-y<0||x-y>0) D)(x-y==0)10) 若有表达式(w)?(--x):(++y),则其中与w等价的表达式是 ( )A)w==1 B) w==0 C) w! =1 D) w! =011) 设有定义: int a=1,b=2,c=3;,以下语句中执行效果与其它三个不同的是A)if(a>b) c=a,a=b,b=c; B)if(a>b){c=a,a=b,b=c;}C)if(a>b) c=a;a=b;b=c; D)if(a>b){c=a;a=b;b=c;}12) 已知字母A的ASCⅡ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是A)kk>='A'&&kk<='Z' B)!(kk>='A'‖kk<='Z')C)(kk+32)>='a'&&(kk+32)<='z' D)isalpha(kk)&&(kk<91)isalpha(c) 判断参数c是否为英文字母头文件:ctype.hisupper(c) 判断参数c是否为大写英文字母是返回非零值,否则返回零islower(c ) 检查参数c是否为小写英文字母13)已有定义:char c; ,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是A)isupper(c) B)’A’<=c<=’Z’C)’A’<=c&&c<=’Z’D)c<=(‘z’-32)&&(‘a’-32)<=c14) 当变量c的值不为2、4、6时,值也为“真”的表达式是A)(c==2)‖(c==4)‖(c==6) B)(c>=2&&c<=6)‖(c!=3)‖(c!=5)C)(c>=2&&c<=6)&&!(c%2) D)(c>=2&&c<=6)&&(c%2!=1)15) 若变量已正确定义,有以下程序段int a=3,b=5,c=7;if(a>b) a=b; c=a;if(c!=a) c=b;printf("%d,%d,%d\n",a,b,c);其输出结果是A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7 16)有以下程序#includemain(){int a=1,b=0;if(!a) b++;else if(a==0) if(a) b+=2;else b+=3;printf("%d\n",b); }程序运行后的输出结果是A)0 B)1 C)2 D)317)在嵌套使用if语句时,C语言规定else总是()。
C程序设计(第五版)-第4章选择结构程序设计课后习题答案

C程序设计(第五版)-第4章选择结构程序设计课后习题答案1. 什么是算术运算?什么是关系运算?什么是逻辑运算?【答案解析】算熟运算:算术运算即“四则运算”,是加法、减法、乘法、除法、乘⽅、开⽅等⼏种运算的统称。
其中加减为⼀级运算,乘除为⼆级运算,乘⽅、开⽅为三级运算。
在⼀道算式中,如果有多级运算存在,则应先进⾏⾼级运算,再进⾏低⼀级的运算。
C语⾔中的算熟运算符包括:+、-、*、/、++、--、%等种类。
如果只存在同级运算;则从左⾄右的顺序进⾏;如果算式中有括号,则应先算括号⾥边,再按上述规则进⾏计算。
⽰例:$ (1 + 1)^{2} * 4+5 * 3$解析:1. 先进⾏括号内运算1+1,然后进⾏乘⽅运算得到结果4.2. 接下来与4相乘,得到结果163. 因为乘法优先级⼤于加法,因此先进⾏5*3,得到结果154. 最终相加得到结果31结果:31关系运算:关系的基本运算有两类:⼀类是传统的集合运算(并、差、交等),另⼀类是专门的关系运算(选择、投影、连接、除法、外连接等),⽽在C语⾔中,关系运算通常被认为是⽐较运算,将两个数值进⾏⽐较,判断⽐较结果是否符合给定的条件。
常见的关系运算符包括:<、<=、>、>=、==、!=等种类。
其中,前4种关系运算符(<、<=、>、>= )的优先级别相同,后2种(==、!=)也相同。
⽽前4种⾼于后2种。
例如, >优先于==。
⽽>与<优先级相同。
并且,关系运算符的优先级低于算术运算符,关系运算符的优先级⾼于赋值运算符(=)。
逻辑运算:在逻辑代数中,有与、或、⾮三种基本逻辑运算。
表⽰逻辑运算的⽅法有多种,如语句描述、逻辑代数式、真值表、卡诺图等。
⽽在C语⾔中,逻辑运算通常⽤于使⽤逻辑运算符将关系表达式或其它逻辑量连接起来组成逻辑表达式⽤来测试真假值。
常见的逻辑运算符包括:&&、||、!等种类&&:与是双⽬运算符,要求有两个运算对象,表⽰两个运算对象都成⽴,则结果为真,否则结果为假。
C语言程序设计教程第四章练习题解析

12、C语言程序得基本单位就是( )、
A.程序行
B、语句
C、函数
D、字符
答案:C
解析:函数就是C语言程序得基本单位
13、C语言中决定函数返回值得类型得就是()、
A、return语句中得表达式类型
B、调用函数得主调函数类型
C。调用函数时临时
intd=1;
intfun(intp)
{
staticintd=5;
d+=p;
printf("%d ",d);
return d;
}
voidmain()
{
ﻩint a=3;
ﻩprintf("%d \n",fun(a+fun(d)));
}
A.699
B、66 9
C、61515
D、6 615
答案:C
解析:首先调用fun(d),将全局变量d=1带入,此时fun()函数内得静态局部变量d得值就是1,d+=p后d得值就是6,输出d得值,返回d得值;
A、当调用时,会调用内部函数
B、当调用时,会调用外部函数
C.当调用时,会调用两次,先调用内部函数再调用外部函数
D、都不调用,会报错
答案:A
解析:当内部函数与外部函数重名时,会优先调用内部函数
6、在C语言中,声明外部函数需要添加得关键字就是()
A、extern
B、static
C、this
D.auto
答案:A
{
ﻩintd=5;
ﻩd+=p++;
ﻩprintf(”%d”,d);
}
《C语言程序设计》教材习题答案第4章

if(++n<10) printf("%d\n",n);
else printf("%d\n",--n);
}
3、若a、b、c1、c2、x、y均是整形变量,正确的switch语句是D
switch(a-b)
{default:y=a*b;break;
case 3:
case 10:y=a-b;break;
{
day+=a[ai][i];
}
day+=d;
printf("这是该年的弟%d天\n",day);
}
7、输入一个字符,判断输入字符的种类,即区分空格、回车、数字字符、英文字母和其他字符(要求分别用if…else if和switch语句编写)。
#include<stdio.h>
void main()
{
else x=6;
else x=7;
12、有如下程序段
int a=14,b=15,x;
char c='A';
x=(a&&b)&&(c<'B');
执行该程序段后,x的值为D 1
13、有如下程序段
int score=5;
switch(score)
{
case 5:printf("very good!");
case 4:printf("Good!");
default:printf("data error!");
}
程序输出结果为D Very good! Good! Data error!
C语言程序设计 – 第 04 章课后习题

C语言程序设计– 第四章课后习题一、选择题1. 以下关于运算符优先级的描述中正确的是(C)A. 关系运算符<算术运算符<赋值运算符<逻辑运算符(不含!)B. 逻辑运算符(不含!)<关系运算符<算术运算符<赋值运算符C. 赋值运算符<逻辑运算符(不含!)<关系运算符<算术运算符D. 算术运算符<关系运算符<赋值运算符<逻辑运算符(不含!)2. 能正确表示“当x的取值在[1, 10]或[200, 210]范围为真,否则为假”的表达式是(C)A. (x >= 1) && (x <= 10) & (x >= 200) & (x <= 210)B. (x >= 1) || (x <=10) || (x >= 200) || (x <= 210)C. (x >= 1) && (x <=10) || (x >= 200) && (x <= 210)D. (x >= 1) || (x <=10) && (x >= 200) || (x <= 210)3. 对于以下程序,输出结果为(A)# include <stdio.h>main(){int a, b, c;a =b =c = 0;printf("%d, %d, %d, %d\n", a, b, c, a++ && b++ || c++);}A. 1, 0, 1, 0B. 1, 1, 1, 0C. 1, 0, 1, 1D. 1, 1, 1, 1(解释:在VC++编译环境中,参数的计算是从右向左的,因此先计算右侧的表达式,并且每个参数计算完后相关待更新变量会被更新;对于逻辑与运算符,若左侧值为假,则右侧的值不会被计算(没必要算);对于逻辑或运算符若左侧的值为真,则右侧的值也不会被计算;布尔类型数据转整型时,true=1,false=0。
c语言程序设计第四章习题答案

第四章选择结构1:实现输入一个字符的大小写字母的转换#include<stdio.h>void main(){char x='a';printf("输入x:\n");scanf("%c",&x);if( x>='A' && x<='Z'){x=x+32; /*是大写,转换为小写,至于为什么要+32吗,请看看大小写字母的ASCII码差值*/}elseif( x>='a' && x<='z'){x=x-32; /*是小写,转换为大写*/}/*其它不用理*/printf("%c\n",x);}2:输入一个大写字母实现,输出字母表中的前后字母,但是当时A 或是Z时提示输出的“没有前面的字母”,“没有后面的字母”#include<stdio.h>void main(){char x;printf("输入一个大写字母x:\n");scanf("%c",&x);if (x=='A'){printf("没有前面的字母");}if( x=='Z'){ printf("没有后面的字母");}else// (x>'A'||x<'Z'){printf("%c, %c",x-1,x+1);}}3:实现的是对百分制的评等级#include<stdio.h>void main(){float x;printf("请输入学生的成绩x的值\n");scanf("%f",&x);if(x>=90&&x<=100){printf("等级为A ");}else{if (x>=80&&x>=89){printf("等级为B ");}elseif (x>=70&&x<=79){printf("等级为C ");}elseif (x>=60&&x<=69){printf("等级为D ");}else{printf("等级为E ");}}}4:知道今天的日期,年月日,求出明天的年月日#include <stdio.h>int main(){int year,month,day;int maxdays[]={31,28,31,30,31,30,31,31,30,31,30,31};printf("请输入年月日,中间用空格隔开!\n");scanf("%d %d %d",&year,&month,&day);if(year%400==0 || (year%4==0 && year%100!=0)) maxdays[1]=29;//闰年二月最大值是29if(month>12 || month<1){printf("日期不合法!\n");return 0;}if(day>maxdays[month-1]){printf("日期不合法!\n");return 0;}day++;if(day>maxdays[month-1]){day=1;month++;if(month>12){month=1;year++;}}printf("明天的日期是:%d-%d-%d\n",year,month,day);return 0;}5:输入三角形的三条边的长度,判断能否构成三角形,并且判断三角形的形状。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
B.语句 C.函数 D.字符 答案:C 解析:函数是 C 语言程序的基本单位 13、C 语言中决定函数返回值的类型的是( ) 。 A.return 语句中的表达式类型 B.调用函数的主调函数类型 C.调用函数时临时 D.定义函数时所指定的函数类型 答案:D 解析:函数的返回值取决于定义函数时指定的返回值类型 14、若有函数调用语句:fun(a+b, (x,y), fun(n+k,d,(a,b))); 在此函数调用语句中实参的个数是 ( ) 。 A.3 B.4 C.5 D.6 答案:A 解析:a+b 返回一个值,(x,y)返回一个值,fun(n+k,d,(a,b))返回一个值。 15、x、y、z 被定义为 int 型变量,若从键盘给 x、y、z 输入数据,正确的输入语句是( A.input x,y,z; B.scanf("%d%d%d",&x,&y,&z); C.scanf("%d%d%d",x,y,z); D.read("%d%d%d",&x,&y,&z);
单选题
1、关于 C 语言中的函数,下列描述正确的是( ) A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和函数的嵌套均不可以嵌套 D.函数的定义和函数的调用均不可以嵌套 答案:B 解析:函数的定义不可以嵌套,但函数的调用可以嵌套 2 、定义一个函数:exce((v1, v2), (v3,v4,v5),v6); 在该函数调用时,实参的个数为( A.3 B.4 C.5 D.6 答案:A 解析:(v1, v2), (v3,v4,v5)和 v6 一共三个实参 3、关于 C 语言中 print()函数与 scanf()函数,下列描述中正确的是( A.printf()函数可以向任何地方输出数据 B.printf()只向控制台输出数据 C.scanf()只能输入英文字母和数字 D.scanf()函数可以识别输入的空格 答案:B 解析:printf()是向控制台输出的函数 4、在 C 语言中,内部函数需要添加的关键字是( ) A.extern B.static C.this D.auto
18、对嵌套子程序调用说法正确的是( ) 。 A.外层子程序可以调用所有的内层子程序 B.内层子程序只可以调用包含本身的外层子程序,不可以隔层调用 C.外分程序必须能完全套住内分程序 D.以上说法均不正确 答案:C 19、C 语言中函数能否嵌套调用和递归调用?( ) A.二者均不可 B.前者可,后者不可 C.前者不可,后者可 D.二者均可 答案:D 解析:两者调用都可以 20、C 语言规定,程序中各函数之间( ) 。 A.既允许直接递归调用也允许间接递归调用 B.不允许直接递归调用也不允许间接递归调用 C.允许直接递归调用不允许间接递归调用 D.不允许直接递归调用允许间接递归调用 答案:A 解析:各程序间既可以直接调用也可以间接调用。 21 、有如下程序: long fib(int n) { if (n>2) return fib(n-1)+fib(n-2); else return 2; } void main() { printf("%d\n",fib(3)); } 该程序的输出结果是( A.2 B.4 C.6 D.8 ) 。
)个
)
答案:B 解析:在定义内部函数时,需要在函数的返回值类型前面添加 static 关键字(又称为静态 函数) 。 5、当调用时,会调用内部函部函数 C.当调用时,会调用两次,先调用内部函数再调用外部函数 D.都不调用,会报错 答案:A 解析:当内部函数与外部函数重名时,会优先调用内部函数 6、在 C 语言中,声明外部函数需要添加的关键字是( ) A.extern B.static C.this D.auto
} void main() { int a=2, res=2; res += func(&a); printf("%d\n",res); } A.4 B.6 C.8 D.10 答案:B 解析:func()函数中,对全局变量 b 自增 a 的值,func()函数返回 4;res+=4,res 赋值为 6。 29 、请读程序: void main() { int a=1,b=2,c=3; ++a; c+=++b; { int b=4,c; c=b*3; a+=c; printf("first:%d,%d,%d\n",a,b,c); a+=c; printf("Second:%d,%d,%d\n",a,b,c); } printf("third:%d,%d,%d\n",a,b,c); } 该程序的输出是( ) A.first: 12,4,12 Second: 26,4,12 third: 4,3,6 B.first: 14,4,12 Second: 26,12,12 third: 26,3,4 C.first: 14,4,12 Second: 26,4,12 third: 26,3,6 D.first: 14,4,12 Second: 26,6,12 third: 26,4,6 答案:C 解析:程序运行到第 6 行时,a=2,b=3,c=6;程序运行到第 10 行时,a=14,局部变量 b=4, c=12;程序运行到第 13 行时,a=26,局部变量 b=4,c=12;程序运行到第 15 行时, a=26,b=3,c=6。 30 、以下程序运行后,输出结果是( ) 。 int d=1; int fun(int p) { int d=5; d+=p++;
答案:B 解析:向 fib()函数传入 3 时,返回 fib(1)+fib(2)的值;向 fib()函数传入 1 和 2 时,都返回 2, 所以 fib(3)返回 2+2=4。 22、 以下程序的输出结果是( ) 。 long fun(int n) { long s;
if (n==1 || n==2) s=2; else s=n-fun(n-1); return s; } void main() { printf("%ld\n", fun(3)); } A.1 B.2 C.3 D.4 答案:A 解析: fun()函数传入 3 时, 返回 3-fun(2); fun()函数传入 2 时, 返回 2。 所以 fun(3)返回 3-2=1。 23、在 C 语言中,函数的隐含存储类别是( ) 。 A.auto B.static C.extern D.无存储类别 答案:C 解析:为简化编程,C 语言中允许在定义外部函数时省略关键字 extern。 24、以下叙述中不正确的是( ) 。 A.在不同的函数中可以使用相同名字的变量 B.函数中的形式参数是局部变量 C.在一个函数内定义的变量只在本函数范围内有效 D.在一个函数内的复合语句中定义的变量在本函数范围内有效 答案:D 解析:函数内的复合语句中定义的变量仅仅在该复合语句中有效。 25 、以下程序运行后,输出结果是( ) 。 int func(int a, int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return m; } void main() { int k=4,m=1,p; p=func(k,m); printf("%d,",p); p=func(k,m);
printf("%d\n",p); } A.8,15 B.8,16 C.8,17 D.8,8 答案:C 解析:函数体内的静态局部变量不随函数的调用结束而销毁,而是一直存在。 26 、以下程序的输出结果是( ) 。 int d=1; int fun(int p) { static int d=5; d+=p; printf("%d ",d); return d; } void main() { int a=3; printf("%d \n",fun(a+fun(d))); } A.6 9 9 B.6 6 9 C.6 15 15 D.6 6 15 答案:C 解析: 首先调用 fun(d),将全局变量 d=1 带入,此时 fun()函数内的静态局部变量 d 的值 是 1,d+=p 后 d 的值是 6,输出 d 的值,返回 d 的值; 然后调用 fun(a+6),将局部变量 a=3 带入,此时 fun()函数内的静态局部变量 d 的值是 6, d+=p 后 d 赋值 15,输出 d 的值,返回 d 的值。 27、在 C 语言中,若需一变量只在本文件中所有函数使用,则该变量的存储类别是( ) 。 A.extern B.register C.auto D.static 答案:D 解析:static 修饰全局变量时,表示该变量仅在本文件中可使用。 28 、下列程序的输出结果是( ) 。 int b=2; int func(int *a) { b += *a; return b;
答案:A 解析:声明外部函数的方式是在函数的返回值类型前面添加 extern 关键字 7、关于 C 语言中的局部变量,下列描述中错误的是( ) A.局部变量就是在函数内部声明的变量 B.局部变量只在函数内部有效 C.局部变量只有当它所在的函数被调用时才会被使用 D.局部变量一旦被调用,其生存周期持续到程序结束 答案:D 解析:当函数调用结束时局部变量就会失去作用 8、关于 C 语言中的全局变量,下列描述中正确的是( ) A.全局变量的作用域一定比局部变量的作用域范围大 B.静态类别变量的生存周期贯穿于整个程序的运行期间 C.函数的形参都属于全局变量 D.未在定义语句中赋初值的 auto 变量和 static 变量的初值都是随机值 答案:B 解析: 选项 1 不对:如果程序中只有一个主函数,则在整个程序运行中,局部变量都在 起作用; 选项 3 不对:除了 C++的引用类型参数,所有函数的形参都是局部变量; 选项 4 不对:static 变量定义时就存储地全局区,初始化为 0; 9、当全局变量与局部变量重名时,那么在调用时( ) A.局部变量会被屏蔽 B.全局变量会被屏蔽 C.都不会调用,系统会报错 D.会调用两次,先调用局部变量,再调用全局变量 答案:B 解析:当局部变量与全局变量重名时,全局变量会被屏蔽。 10、在 C 语言中,关于变量的作用域,下列描述中错误的是( ) A.局部变量只在整个函数的运行周期中有效 B.全局变量的作用域为整个程序的运行周期 C.当全局变量与局部变量重名时,局部变量会屏蔽掉全局变量 D.全局变量会覆盖掉所有与它重名的局部变量 答案:D 解析:当全局变量与局部变量重名时,全局变量会被屏蔽掉 11、在 C 语言中,如果在一个函数的复合语句中定义了一个变量,则该变量( ) A.只在该复合语句中有效,在该复合语句外无效 B.在该函数中任何位置都有效 C.在本程序的原文件范围内均有效 D.此定义方法错误,其变量为非法变量 答案:D 解析: 1、2 与 3 错:函数复合语句中定义的变量在该复合语句中引用;但如果函数含有 该变量,则在函数中可以引用该变量 4 对:在 C++中在复合语句中定义变量为合法,但在 C 语言中是非法的 12、C 语言程序的基本单位是( ) 。 A.程序行