admin 管理员组文章数量: 887021
2024年2月18日发(作者:sql存储过程查询)
单选题
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()函数,下列描述中正确的是( )
()函数可以向任何地方输出数据
()只向控制台输出数据
()只能输入英文字母和数字
()函数可以识别输入的空格
答案:B
解析:printf()是向控制台输出的函数
4、在C语言中,内部函数需要添加的关键字是( )
D。auto
答案:B
解析:在定义内部函数时,需要在函数的返回值类型前面添加static关键字(又称为静态函数).
5、当调用时,会调用内部函数
A。当调用时,会调用内部函数
B。当调用时,会调用外部函数
C。当调用时,会调用两次,先调用内部函数再调用外部函数
D。都不调用,会报错
答案:A
解析:当内部函数与外部函数重名时,会优先调用内部函数
6、在C语言中,声明外部函数需要添加的关键字是( )
A。extern
C。this
D。auto
答案: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。程序行
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输入数据,正确的输入语句是( )。
x,y,z;
("%d%d%d",&x,&y,&z);
C。scanf("%d%d%d",x,y,z);
("%d%d%d”,&x,&y,&z);
答案:B
解析:读取键盘输入的数据要用scanf()函数,scanf()中的参数要传入变量的地址
16、若变量已正确说明为float类型,要通过语句 scanf(”%f %f %f”,&a,&b,&c); 给a赋予10.0,b赋予22。0,c赋予33.0,不正确的输入形式是( )。
A。10 22 33
B。10.0,22.0,33.0
C。10。0 22。0 33。0
D。10; 22; 33
答案:B
解析:用scanf()读取从键盘输入的数据时,中间不能加逗号,要用空格隔开
17、若有定义:int x,y; char a,b,c; 并有以下输入数据(此处u代表空格):1u2uAuBuC,那么能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是( )。
A。scanf("x=%d y=%d",&x,&y);a=getchar();b=getchar();c=getchar();
B。scanf("%d %d”,&x,&y);a=getchar();b=getchar();c=getchar();
(”%d%d%c%c%c,&x,&y,&a,&b,&c);
D。scanf("%d%d%c%c%c%c%c%c",&x,&y,&a,&a,&b,&b,&c,&c);
答案:D
解析:空格也会作为一个字符赋给字符变量.
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("%dn",fib(3));
}
该程序的输出结果是( ).
A.2
B。4
C.6
D.8
答案: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(”%ldn", 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语言中,函数的隐含存储类别是( ).
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(”%dn”,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
er
C。auto
答案:D
解析:static修饰全局变量时,表示该变量仅在本文件中可使用。
28、下列程序的输出结果是( )。
int b=2;
int func(int *a)
{
b += *a;
return b;
}
void main()
{
int a=2, res=2;
res += func(&a);
printf(”%dn",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,%dn",a,b,c);
a+=c;
printf(”Second:%d,%d,%dn",a,b,c);
}
printf("third:%d,%d,%dn",a,b,c);
}
该程序的输出是( )
A。first: 12,4,12 Second: 26,4,12 third: 4,3,6
: 14,4,12 Second: 26,12,12 third: 26,3,4
C。first: 14,4,12 Second: 26,4,12 third: 26,3,6
: 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++;
printf("%d",d);
}
int main()
{
int a=3;
fun(a);
d+=a++;
printf(”%dn",d);
}
A。84
B。99
C。95
D。44
答案:A
解析:fun()函数调用时代入局部变量a的值,fun()函数体内局部变量d自增3,输出d的值,即8,fun()函数返回8,此时全局变量d的值不变。d+=a++后,全局变量d自增3,此时全局变量d的值是4,输出全局变量d的值。
31、以下程序的输出结果是( )。
int a, b;
void fun()
{
a=100; b=200;
}
void main()
{
int a=5, b=7;
fun();
printf("%d%d n",a,b);
}
A。100200
B。57
C.200100
D。75
答案:B
解析:fun()函数改变的是全局变量的值,printf()函数输出的是局部变量的值,fun()函数不会改变局部变量a、b的值。
多选题
1、在调用外部函数时,下列描述中正确的是( )(多选)
A。只要有函数名,就能调用外部函数
B。调用外部函数要包含外部函数所在的头文件
C。外部函数与调用者定义在同一个源文件下
D。在声明外部函数时,外部函数与原函数定义的返回值类型、函数名称和参数列表必须一致
答案:B,D
解析:外部函数调用时要包含其所在的头文件,当调用者声明了外部函数的原型,也可以不用包含头文件
判断题
1、局部变量就是在函数内部声明的变量.
答案:true
解析:局部变量就是在函数内部声明的变量。
2、局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用.
答案:true
解析:局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用。
3、局部变量就是在函数内部声明的变量,它只在本函数内有效。
答案:true
解析:局部变量就是在函数内部声明的变量,它只在本函数内有效,也就是说,只能在本函数内使用它。
4、局部变量只有当它所在的函数被调用时才会被使用,当函数调用结束时局部变量还会一直存在。
答案:false
解析:局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用.
简答题
1、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
void func(int a, int b)
{
printf(” %d",a + b);
}
void main()
{
func(3,2);
printf(”n");
}
答案:5
解析:fun()是一个实现两个数相加的函数,在主函数中调用并传入值,得到两个数的和
2、请阅读下面的程序,在空白处填写正确的代码,将函数的结果返回给调用者.
int func(int a, int b)
{
int sum = 0;
sum = a + b;
;
}
void main()
{
int sum = 0;
= func(3,2);
printf("两个数相加的结果为%d”,sum);
}
答案:return sum;
sum ;
解析:return sum;return 将函数结果返回
sum ;主函数中sum接收函数返回的值
3、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果.
void main()
{
int num = 100;
printf(“%d, %o, %xn”,num,num,num);
}
答案:100 144 64
解析:printf()函数将十进制数100分别以十进制,八进制,十六进制形式输出。
4、请阅读下面的程序,当用户从键盘输入hello world时,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
void main()
{
char str[256];
scanf(“%s”,str);
printf(“%sn”,str);
}
答案:hello
解析:输入hello world时,中间的空格对scanf()函数来说是终止符,后面的内容无法读取。
5、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。
用户从键盘输入两个整型数据,将两个数据相加输出。
void main()
{
int a,b;
;
printf(“%dn”, );
}
答案:scanf(“%d%d”,&a,&b);
a + b;
解析:键盘输入数据,用scanf()函数;
输入两个数据的和a + b;
6、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
int func2(int a, int b)
{
int c;
c = a * b % 3;
}
return c;
int func1(int a, int b)
{
int c;
a += a;
b += b;
c = func2(a, b);
return c * c;
}
void main()
{
int x = 11, y = 19;
printf("the final result is:%dn”, func1(x, y));
}
答案:4
解析:x = 11,y = 19传入func1()函数,在func1()函数中经过运算变为22,38,然后传入给func2()函数,返回运算结果2,func1()函数收到返回值2以后再经过运算返回给主调用函数结果为4。
7、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
void func2(int a, int b)
{
a = a + 10;
b = a + 10;
}
void func(int a, int b)
{
a = func2();
b = func2();
}
void main()
{
int x = 1, y = 10;
func1(x,y);
printf("x = %d, y = %dn”,x, y);
}
答案:x = 1, y = 10;
解析:将实参传递给形参,只是复制了一份给x,y的值,参数在被调用函数内部改变,不影响其在调用函数中的值。
8、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。
用户从键盘输入四个数,比较得出四个数中的最大值并输出。
int max2(int a, int b)
{
if (a 〉 b){
return a;
}
else
{
return b;
}
}
int max4(int a, int b, int c, int d)
{
int res;
res = max2(a, b);
res = ;
res = max2(res, d);
;
}
void main()
{
int a, b, c, d, max;
printf(”请输入四个整数:");
;
max = max4(a, b, c, d);
printf(”max=%d n", max);
}
答案:max2(res,c);
return res;
scanf(“%d%d%d%d",&a,&b,&c,&d);
解析:在max4()函数中,res = max2(a,b)返回的是a,b中的最大值,这个最大值再与c进行比较,所以res = max2(res,c),返回的较大的值再与d作比较,再将比较得出的较大的值返回给主调用函数,这个较大的值就是四个数中的最大值。
9、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
int add(int n)
{
}
if (n == 1)
return 1;
else
return n + add(n - 1);
void main()
{
int n = 5;
int sum = add(5);
printf(“结果为:%dn”,sum);
}
答案:15
解析:add()函数进行递归调用,传入的参数5,会一直递减相加直到递减至1。
10、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
void fun(int n)
{
if (n〉0)
{
printf(”%dt”, n);
fun(——n);
}
}
void main()
{
int a = 5;
fun(a);
}
答案:5 4 3 2 1
解析:fun()函数递归调用,每打印一次就自减再调用一次自己.
11、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。
用递归方法求出n!.
int fac(int n)
{
int t;
if( )
return 1;
else
{
t = ;
return t;
}
}
void main()
{
int m, y;
printf("Enter m : n");
scanf("%d", &m);
if (m〈0)
printf("Input data Error!n”);
else
{
y = fac(m);
printf(”n%d!= %d n”, m, y);
}
}
答案:(n == 1) || (n == 0)
n*fac(n — 1)
解析:实现n的阶乘,当n =0或者n=1时,阶乘没有意义,当n>1时,实现阶乘,则为n*fun(n-1);
12、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
int x = 5;
static void cude()
{
x = x*x*x;
}
void main()
{
}
cude();
printf(”x = %dn", x);
答案:125
解析:全局变量x,当调用cude()内部函数时,并没有传入参数,没有复制,所以x值的变化直接改变了x本身的值
13、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
first.c文件
int func(int a, int b)
{
return a + b;
}
second.c文件
static int func(int a, int b)
{
return a – b;
}
void main()
{
int x = 5, y = 2;
printf(“%dn”,func(5, 2));
}
答案:3
解析:当内部函数与外部函数重名时,会优先调用内部函数
14、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
first。c源文件
int func(int a, int b)
{
return a + b;
}
second.c源文件
extern int func(int a, int b);
void main()
{
int x = 5, y = 2;
printf(“%dn",func(5, 2));
}
答案:7
解析:在second.c中声明了int func(int a, int b);函数原型,可以调用first.c中的函数.
15、请阅读下面的程序,在空白处填写正确的代码,实现下列功能。
有一个外部函数,用户输入一个数字,可以实现奇偶数的判断。实现在主函数中调用这个外部函数。
first。c源文件
void func(int num)
{
if(num %2 == 0)
printf(“这是一个偶数!n”);
}
second。c源文件
;
void main()
{
int num;
scanf(“%d”,&num);
func(num);
}
答案:extern void func(int num);
解析:调用外部函数,可以包含函数所在的头文件,也可以在本文件中声明函数原型。
16、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果.
void show()
{
int x = 0;
}
void main()
{
printf(”x的值为:%dn”, x);
}
答案:不能运行
解析:变量x为函数show()的局部变量,只在show()函数范围内有效,在main()中无法调用.
17、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果.
int show()
{
int x = 0;
return x;
}
void main()
{
int x = 10;
show();
printf("x的值为:%dn", x);
}
答案:x的值为:10
解析:main()函数中的x是局部变量,不受show()函数调用的影响.
18、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
int x = 10;
void main()
{
int x = 100;
printf(“%d",x);
}
答案:100
解析:当全局变量与局部变量重名时,全局变量会被屏蔽掉。
19、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
int x = 2;
void func(int x)
{
x = x * x * x;
}
void main()
{
func(x);
printf(”%dn", x);
}
答案:2
解析:全局变量作为实参传递给函数,在函数中的运算并不改变其原来的值。
20、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
int x=10;
void show()
{
int x=20;
printf("show()函数中x的值为:%dn",x);
}
void main()
{
int x=30;
printf("main()函数中x的值为:%dn”,x);
show();
}
答案:main()函数中x的值为:30
show()函数中x的值为:20
解析:局部变量只在它所在的函数内部有效,且当全局变量与局部变量重名时,局部变量会屏蔽掉全局变量
21、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果.
int a, b;
void func()
{
a = 100;
b = 200;
}
void main()
{
int a = 5, b = 7;
func();
printf(”a = %d, b = %dn", a, b);
}
答案:a = 5, b = 7
解析:全局变量与局部变量重名时,局部变量会屏蔽掉全局变量
22、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:用函数求x的绝对值。
void main()
{
int x,y;
scanf(”%d",&x);
_______
printf("y=%dn",y);
}
int abs(int a)
{
int b;
if (a〉=0)
b=a;
else
_______
_______
}
答案:y=abs(x); b=-a; return b;
解析:abs()函数是求绝对值的函数。
23、以下check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse的值相等,则显示“WELL DONE!!”,否则显示计算后的值。请填空。
void check(int ponse, float value)
{
int val;
val = _______;
print(”计算后的值:%d", val);
if (_______)
printf("n WELL DONE!!n");
else
printf("nSorry the correct answer is %dn",val);
}
答案:(int)((value*10 + 5)/10) val == ponse
解析:第一个填空处利用float型转int型的规则实现四舍五入的计算;第二个填空处判断是否计算后的值与ponse的值相等。
24、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:求整数num1和num2的最大公约数,并返回该值。
int gongyue(int num1, int num2)
{
int temp;
while (_______)
{
temp = num1 % num2;
num1 = num2;
num2 = temp;
}
return _______;
}
答案:num2!=0 num1
解析:循环条件是num2!=0,因为被模数不能为0;num1在对num2取模的过程中一直在改变,最后返回num1的值。
25、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:根据对x的输入,求1到x的累加和.
int fun(int n)
{
int i,c;
c=0;
for (i=1;i<=n;i++)
c=c+i;
_______
}
void main()
{
int x;
scanf(”%d”, _______);
printf(”%dn”,fun(x));
}
答案:return c; &x
解析:函数fun()中求总和,c是总和变量,最后返回c;
从键盘输入x,则要对scanf()函数传入变量x的地址.
26、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:先输入10个数据到数组a中,再输入x,然后在a数组中查找与x值相同的元素的所在位置。
void main()
{
int a[11],x,i;
printf("Enter 10 integers:n”);
for (i=1; _______;i++)
scanf(”%d",a+i);
printf(”Enter x:");
_______
*a=x;i=10;
while (x!=*(a+i))
_______
if (i〉0)
printf("%5d's position is:%4dn”,x,i);
else
printf(”%d Not been found!n",x);
}
答案:i〈=10 scanf("%d”,&x); break;
27、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:输入10个整数存入数组x中,然后计算各元素的和,并将和存入S中。
void main()
{
}
int x[10],i,s;
for (i=0;i<10;i++)
_______
s=0;
for (i=1; i<10; i++)
_______
printf(”%d",s);
答案:scanf("%d",&x[i]); s+=i;
解析:第一个空格从键盘输入元素的值;
第二个空格将元素存入变量s中;
28、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:读入一个两位的正整数,按字符型形式输出。
void main()
{
int n;
scanf(_______);
printf(_______);
}
答案:”%d”,&n ”%c",n
29、请阅读下面的程序,分析代码是否能够编译通过,如果能编译通过,请列出运行的结果,否则请说明编译失败的原因。
#include〈stdio.h>
int sum(int a)
{
int c=0;
static int b=3;
c+=1;
b+=2;
return a+b+c;
}
void main()
{
int i;
int a=2;
}
for (i=0; i〈5; i++)
printf(”%d,”, sum(a));
答案:8,10,12,14,16,
解析:sum()函数体中的静态局部变量b会一直存在,其值不随函数调用结束而销毁。
30、编写一个函数,判断一个数是奇数还是偶数,并在主函数中调用。
答案:#include 〈stdio。h〉
void func(int num)
{
if(num %2 == 0)
printf(“该数是偶数");
else
printf(“该数是奇数”);
}
int main()
{
int num;
scanf(“%d",&num);
func(num);
return 0;
}
解析:func()函数对传入进来的参数num进行奇偶判断;
主函数中调用func()函数,传入参数得到判断结果。
31、编写一个函数,实现1-100的相加和,并在主函数中调用。
答案:#include
int func()
{
int num, sum = 1;
for(num = 1; num <= 100; num++)
{
sum += num;
}
return sum;
}
int main()
{
int sum = 0;
sum = func();
printf(“sum = %d",sum);
return 0;
}
解析:func()函数实现1-100的相加和,并将结果返回给调用者。
主函数中的sum接收调用func函数的返回值,并将其打印
32、请编写一个程序,用户从键盘输入英文字母,如果是大写,将其转换成小写输出;如果是小写,将其转换成大写输出.
提示:英文字母在计算机中以ASCII码表形式存在。
答案:#include 〈stdio。h>
int main()
{
char ch;
printf(”请输入英文字母:n");
scanf("%c", &ch);
if (ch >= ’A' && ch 〈= 'Z')
printf("%cn", ch + 32);
else if (ch 〉= 'a' && ch <= 'z')
printf("%cn”, ch - 32);
return 0;
}
解析:英文字母对应的ASCII码值,大写比对应小写小32
33、请编写一个程序, 用户输入一个十进制整数,分别输出其十进制、八进制、十六进制对应的数值。
答案:#include 〈stdio.h>
int main()
{
int num;
scanf(“%d”,&num);
printf(“十进制为:%dn八进制为:%on十六进制为:%xn",num,num,num);
return 0;
}
解析:十进制输入格式符为%d,八进制输出格式符为%o,十六进制输出格式符为%x。
34、请编写一个程序,实现两个数的求和,并打印出来。
答案:#include 〈stdio.h〉
void show(int s)
{
printf(”两个数的和为:%d”, s);
return;
}
void add(int a, int b)
{
int s = a + b;
show(s);
return;
}
int main()
{
int s = a + b;
show(s);
return 0;
}
解析:add()函数实现两个数相加,show()函数将两个数相加的结果打印出来。
35、请编写一个程序,用户从键盘随机输入四个数,比较这个四个数得出其中最大值并输出。
提示:
1)编写一个两个数值比较的函数
2)编写一个四个数值比较的函数,调用这个函数,在该函数中调用两个数值比较的函数
答案:#include
int max2(int a, int b)
{
if (a 〉 b){
return a;
}
else
{
return b;
}
}
int max4(int a, int b, int c, int d)
{
int res;
}
res = max2(a, b);
res =max2(res,c);
res = max2(res, d);
return res;
int main()
{
int a, b, c, d, max;
printf("请输入四个整数:");
scanf(“%d%d%d%d”,&a,&b,&c,&d);
max = max4(a, b, c, d);
printf(”max=%d n", max);
return 0;
}
解析:输入四个数,调用max4()函数,在max4()函数中又调用max2()函数进行两两比较,最后得出最大值,返回给调用函数。
36、请编写一个程序,计算s = 2^2! + 3^2!;
提示:
1)编写一个函数计算平方值
2)编写一个函数计算阶乘
答案:#include 〈stdio。h〉
long f1(int p){
int k;
long r;
long f2(int);
k = p*p;
r = f2(k);
return r;
}
long f2(int q){
long c = 1;
}
int i;
for (i = 1; i 〈= q; i++)
c = c*i;
return c;
int main()
{
int i;
long s = 0;
for (i = 2; i <= 3; i++)
s = s + f1(i);
printf("ns=%ldn", s);
return 0;
}
解析:函数f1()实现了计算数值的平方,函数f2()实现了阶乘计算,在f1()中调用f2()实现了计算表达式的值。
37、请编写一个程序,用递归方法实现n!。
提示:
1) 递归调用是函数自身调用自身的过程
2) 每递归调用一次n就要自减一次
答案:#include 〈stdio.h〉
int add(int n)
{
if (n == 1)
return 1;
else
return n + add(n — 1);
}
int main()
{
int n ;
scanf(“%d",&n);
int sum = add(n);
printf(“结果为:%dn”,sum);
return 0;
}
解析:add()函数实现递归,每调用一次n要减1.
38、请编写一个程序,求出m的n次方.
提示:编写递归函数求解.
答案:#include
int func(int m, int n)
{
if (n == 1)
return m;
else
return m*func(m, n - 1);
}
int main()
{
int m, n,sum;
scanf("%d%d”, &m, &n);
sum = func(m, n);
printf("%dn", sum);
return 0;
}
解析:func()实现递归调用,每乘上一个m,再用n—1调用函数,实现m的n次方。
39、假设有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都存活,问一年之后(第13个月)月兔子总数为多少对?
提示:兔子的规律为数列1,1,2,3,5,8,13,…
答案:#include 〈stdio。h〉
int get_count(int month)
{
if (month == 1)
{
return 1;
}
else if (month == 2)
{
return 1;
}
else
{
return get_count(month — 1) + get_count(month - 2);
}
}
int main()
{
int month = 13;
printf("第 %d 个月兔子总数为 %d 对。n”, month, get_count(month));
return 0;
}
解析:斐波那契数列是典型的递归实现问题,兔子每月的增长有一定的规律,本月出生的兔子等于上一个月与上上一个月兔子的总和。
40、定义一个内部函数,求出1—100的和.
答案:#include 〈stdio.h>
static int func(int n)
{
int i, sum = 0;
for(i = 0; i〈=n; i++)
{
sum += i;
}
return sum;
}
int main()
{
int sum = func(100);
printf(“sum = %dn”,sum);
return 0;
}
解析:内部函数是与调用者在同一个文件夹下;求和可以用循环来实现。
41编写一个内部函数,用户从键盘输入一个数,分别打印出其每一位上的数字.
答案:#include 〈stdio。h〉
static void func(int num)
{
while (num != 0)
{
printf(”%dt", num % 10);
num = num / 10;
}
}
int main()
{
int num;
scanf("%d”, &num);
func(num);
return 0;
}
解析:内部函数与调用者定义在同一个文件下;
本题打印出数字的结果是倒序排列的,如果要正序排列,待接下学习数组后,同学们可以用数组实现.
42、定义一个外部函数,判断一个数是否是素数,在主函数中调用该函数。
答案:first.h
int func(int num);
first。c
#include 〈math。h〉
int func(int num)
{
int i;
if (num < 2)
return 0;
for (i = 2; i 〈 sqrt(num); i++)
{
if (num % i == 0)
return 0;
else
return 1;
}
}
second.c
#include #include “first。h〉 int main() { int x, num; scanf("%d", &num); x = func(num); if (x == 1) printf("是素数n”); else printf(”非素数n”); return 0; } 解析:调用外部函数时要包含外部函数所在的头文件 43、定义一个外部函数,打印出1—100之间3与4的所有公倍数,并在主函数中调用。 答案:irst.c #include 〈stdio。h> int func() { int i; for (i = 1; i 〈= 100; i++) { if (i % 3 == 0 && i % 4 == 0) printf(”%dn”, i); } } second。c extern int func(); int main() { func(); return 0; } 解析:extern int func();声明为外部函数,可以调用其他源文件中的函数; 3和4的公倍数要对3与4取模要同时为0 44、编写一个两个函数,对定义好的两个变量分别实现相加、相乘,并在主函数中调用两个函数并输出结果。 答案:int a = 3, b = 5; int add() { return a + b; } int mul() { return a * b; } int main() { printf(”a + b = %dn”, add()); printf("a * b = %dn”, mul()); return 0; } 解析:可以让多个函数调用的变量,定义为全局变量
版权声明:本文标题:C语言程序设计教程第四章练习题解析(1) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1708216607h517008.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论