问题:1.以下程序的正确运行结果是( )。(鲁科安全)
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);
}
- 777 B. 7 10 13 C. 7 9 11 D. 7 8 9
答案:D
分析:b为局部变量,c为静态局部变量,每次循环b不变,c++
问题:2.在一个被调用函数中,关于return语句使用的描述,( )是错误的 (软通动力)
A. 被调用函数中可以不用return语句
B. 被调用函数中可以使用多个return语句
C. 被调用函数中,如果有返回值,就一定要有return语句
D. 被调用函数中,一个return语句可以返回多个值给调用函数
答案:D
分析:一个return语句只能返回一个值
问题:3.以下程序的运行结果为( ) (鲁科安全)
#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;
}
- 8 B. 4 C. 3 D. 5
答案:C
分析:
问题:4.请问运行Test函数会有什么样的结果?(华辰泰尔)
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
答案:
分析:str为空指针,
问题:5.分析以下程序,写出运行结果并写出过程 (广域科技)
#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;
}
答案:
分析:
问题:6.下列程序的输出结果是________。(富士安全)
fun(int a, int b, int c)
{
c = a*b;
}
void main()
{
int c = 10;
fun(2,3,++c);
printf("%d\n", c);
}
答案:7
分析:fun(2, 3, c) :c=++6=7
问题:7.找错题,说明那里错了(恩易物联1,深圳元征信息科技)
void test1()
{
char string[10];
char *str1 = "0123456789";
strcpy( string, str1 );
}
答案:strint[10]长度只有10,而str1加上\0长度是11,所以运行结果是‘已放弃’
问题:8.下面的代码片段会输出__________ (飞音时代)
void test(void)
{
char *p = NULL;
strcpy(p, "hello");
printf("%s", p);
}
答案:没有输出,p是空指针,装不下hello
问题:9.sizeof(str); 的值是多少? (21年中航安为)
void Func(char str[100])
{
sizeof(str);
}
答案:有问题,会输出str地址的size
问题:10.递归函数最终会结束,那么这个函数一定( );(北京信果科技)
A. 使用了局部变量
B. 有一个分支不调用自身
C. 使用了全局变量或者使用了一个或多个参数
答案:B
分析:别的只会影响结果,只有不调用自身的分支能跳出递归
问题:11.程序如下,程序执行后的输出结果是: (中科四平)
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
问题:12.请判断下面程序输出的值是多少? (信雅达)
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));
}
答案:7 15
分析:func(1) = 1, func(2) = 3, func(3) = 6, func(4) = 10, func(5) = 15
问题:13.这段程序的输出是(________) (青岛汉泰)
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; 3
*p = q; 5
q = tmp; 3
}
void f2(int *p, int q)
{
int tmp;
tmp = *p;
*p = q;
q = tmp;
}
- 5 5 5 5 B. 3 5 3 5 C. 5 3 5 3 D. 3 3 3 3
答案:C
分析:f1f2都是交换函数
问题:14.有以下程序段, 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
分析:递归函数,fun(2)=2-3=-1, fun(3)=3-3=0, fun(4)=4-(-1)=5, fun(5)=5-0=5, fun(6)=6-5=1, fun(7)=7-5=2
问题:15.有以下函数,该函数的返回值是:( ) (山东信通电子)
char *fun(char *p)
{
return p;
}
A. 无确切的值 B. 形参 p 中存放的地址值
C. 一个临时存储单元的地址 D. 形参 p 自身的地址值
答案: A
分析:函数指针返回的是指向形参*p的地址,但是形参不占内存,是违法访问
问题:16.编写strcpy函数 (山东山大电力技有限公司)
已知strcpy 函数的原型是
char *strcpy(char *strDest,const char *strSrc);其中 strDest 是目的字符串,strSrc 是源字符串。
(1)、不调用 C 的字符串库函数,请编写函数 strcpy。
(2)、strcpy 能把 strSr 的内容复制到 strDest,为什么还有 char"类型的返回值?
(3)、strcpy 和 memcpy 的区别。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *my_strcpy(char *strDest,const char *strSrc, int len);
int main(int argc, const char *argv[])
{
char a[100], b[100];
printf("输入两个字符串:");
scanf("%s%s", a, b);
int len=strlen(b);
my_strcpy(a,b,len);
printf("%s\n", my_strcpy(a, b, len));
return 0;
}
char *my_strcpy(char *strDest,const char *strSrc, int len){
for(int i=0; i<len; i++){
if(*(strSrc+i)!='\0'){
*(strDest+i)=*(strSrc+i);
}
}
// puts(strDest);
return strDest;
}
问题:17.请实现一个函数,输入一个整数,输出该数二进制表示中的1的个数。例如:把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。(矩阵软件)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int count_1(int x, int y);
int main(int argc, const char *argv[])
{
int a;
int n=0;
printf("输入一个数:");
scanf("%d", &a);
printf("1的个数为:%d\n", count_1(a, n));
return 0;
}
int count_1(int x, int y){
// int x, y;
// while(a/2!=0){
// if(a%2==1){
// }
// }
if(x%2==1){
y++;
}
x=x/2;
if(x!=1){
count_1(x, y);
}else{
return y;
}
printf("%d %d\n", x, y);
}
问题:18.请用编写递归算法计算fibinacci数列第1000位的值。斐波拉契数列为1,1,2,3,5,8,13,21,…… (北京凝思软件)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
double fibonacci(int n){
if(n==1 || n==2){
return 1;
}else{ //第三项开始
return fibonacci(n-1)+fibonacci(n-2);
}
}
int main(int argc, const char *argv[])
{
int t;
printf("输入数列项数");
scanf("%d", &t);
printf("斐波那契数列第%d项为:", t);
// for(int i=1; i<t+1; i++){
// printf("%6d", fibonacci(i));
// if(i%5==0) printf("\n");
// }
printf("%.2lf\n", fibonacci(t));
return 0;
}
问题:19.用 C 语言写一个递归算法求 N!(华辰泰尔)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
double N_multi(int a);
int main(int argc, const char *argv[])
{
int a;
printf("输入一个数:");
scanf("%d", &a);
double r = N_multi(a);
printf("%d的阶乘为:%.2lf", a, r);
return 0;
}
double N_multi(int a){
if(a<=0) return 1;
return a*N_multi(a-1);
}