以下程序的正确运行结果是( D)
int f(int a);
int main(void)
{
int a = 2,i;
for(i = 0; i < 3; i++)
printf("%4d", f(a));
}
int f(int a)
{
int b = 0;
static int c = 3;
b++;
c++;
return (a+b+c);
}
A. 777 B. 7 10 13 C. 7 9 11 D. 7 8 9
在一个被调用函数中,关于return语句使用的描述,(D )是错误的
A. 被调用函数中可以不用return语句
B. 被调用函数中可以使用多个return语句
C. 被调用函数中,如果有返回值,就一定要有return语句
D. 被调用函数中,一个return语句可以返回多个值给调用函数
以下程序的运行结果为( )
#include <stdio.h>
#include <string.h>
int SubCount(char *dest, int count)
{
strcpy(dest, "555");
count++;
return 0;
}
int main()
{
int count = 3;
char caBuf[8];
SubCount(caBuf, count);
printf("%d\n", count);
return 0;
}
A. 8 B. 4 C. 3 D. 5
答案:C
主函数中传递的参数不是地址,所以在函数中改变值,并不影响main函数中的值
请问运行Test函数会有什么样的结果?
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
答案:NULL
如果函数里面是对指针操作,则返回指针可以将给与的值返回,但函数里面是对数组,也就是对新开辟的空间操作,所以在函数结束后,空间将会清空
分析以下程序,写出运行结果并写出过程
#include <stdio.h>
#include <stdlib.h>
void getalloc(char *p)
{
p = (char *)malloc(100);
strcpy(p, "hello world");
}
int main()
{
char *str = NULL;
getalloc(str);
printf("%s\n",str);
free(str);
return 0;
}
答案:NULL
分析:首先函数没有导入 strcpy() 函数的头文件 string.h,第二,在函数中malloc会分配新的临时空间,当函数结束时,空间就会被自动释放,则str还是指向空
下列程序的输出结果是________
fun(int a, int b, int c)
{
c = a*b;
}
void main()
{
int c = 10;
fun(2,3,++c);
printf("%d\n", c);
}
答案:11
分析:传参C不是传的地址,所以不会再函数中改变C的值,++c结果时11
找错题,说明那里错了
void test1()
{
char string[10];
char *str1 = "0123456789";
strcpy( string, str1 );
}
答案:段错误
分析: string只有十个空间,而str1有十个值加上\0一共十一个空间
下面的代码片段会输出__________
void test(void)
{
char *p = NULL;
strcpy(p, "hello");
printf("%s", p);
}
答案:段错误
分析:p指针没有指向空间,所以对其赋值会符不上,结果时段错误
sizeof(str); 的值是多少?
void Func(char str[100])
{
sizeof(str);
}
答案:8
分析: 因为函数传参数组是传入指针,而指针占8字节
递归函数最终会结束,那么这个函数一定( )
A. 使用了局部变量
B. 有一个分支不调用自身
C. 使用了全局变量或者使用了一个或多个参数
答案:B
分析:在递归函数中,最内层中,是不需要调用自身,只需要返回值,
程序如下,程序执行后的输出结果是:
int f(int x, int y)
{
return (y-x)*x;
}
void main()
{
int a = 3,b=4,c=5,d;
d=f(f(3,4),f(3,5));
printf("%d\n", d);
}
答案:9
分析:f(3,4)=3,f(3,5)=6,f(3,6)=9
请判断下面程序输出的值是多少?
int func(int a)
{
static int b = 0;
b+=a;
return b;
}
int main(void)
{
printf("%d %d\n", func(1)+func(3), func(5));
}
答案:5 9
分析:fun(1)=1,fun(3)=4,fun(5)=9
这段程序的输出是(________)
void f1(int *, int);
void f2(int *, int);
void(*p[2]) (int *, int);
main()
{
int a;
int b;
p[0] = f1;
p[1] = f2;
a=3;
b=5;
p[0](&a, b);
printf("%d\t %d\t", a, b);
p[1](&a, b);
printf("%d\t %d\t", a, b);
}
void f1(int * p, int q)
{
int tmp;
tmp = *p;
*p = q;
q = tmp;
}
void f2(int *p, int q)
{
int tmp;
tmp = *p;
*p = q;
q = tmp;
}
A. 5 5 5 5 B. 3 5 3 5 C. 5 3 5 3 D. 3 3 3 3
答案:A
分析:p是函数指针数组,p[0] 是f1,p[1] 是f2,两个函数都是交换传入参数的值,但p都是指针,也就是函数可以改变p的值,但不能改变b的值,所以调用 p[0] 的时候,a 变成了5,b 没有改变,也就是a和b都是5了,调用 p[1] 时,又交换了一边,但两个值相同,所以结果还是5 5
有以下程序段, x=7执行后的值为 ( ) (杭州快越科技)
int fun(int x) {
int p;
if(x==0||x==1)
return(3);
p=x-fun(x-2);
return p;
}
A. 0 B. 2 C. 5 D. 6
答案:B
分析: 这是递归调用,步长为2,也就是x=7,5,3,1,在x=1时,返回值为3,最终计算方法为:7-5-3-3=2
有以下函数,该函数的返回值是:( ) (山东信通电子)
char *fun(char *p)
{
return p;
}
A. 无确切的值 B. 形参 p 中存放的地址值
C. 一个临时存储单元的地址 D. 形参 p 自身的地址值
答案:D
分析:返回的时传入的地址
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_57461392/article/details/142147127