linux 操作 day 11

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);

}

A. 777          B. 7 10 13          C. 7 9 11          D. 7 8 9

 分析:

在  f  函数中:

b 初始化为 0(每次调用都会重新赋值)。

static静态局部变量,编译时赋初值,只赋一次。

2、在一个被调用函数中,关于return语句使用的描述,( )是错误的 

A. 被调用函数中可以不用return语句

B. 被调用函数中可以使用多个return语句

C. 被调用函数中,如果有返回值,就一定要有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;

}

A. 8          B. 4          C. 3          D. 5

分析:在上述代码中,函数部分返回值是return 0,不会改变主函数中count的值,故count还是原来的值3。

4、请问运行Test函数会有什么样的结果?

char *GetMemory(void)       //指针函数,即返回值是字符指针的函数。

{

    char p[] = "hello world";

    return p;

}

void Test(void)           //定义了一个无参数无返回值的函数

{

    char *str = NULL;

    str = GetMemory();

    printf(str);              //printf(“hello world”);

}

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);            输出:6.

}

7、找错题,说明那里错了

void test1()

{

    char string[10];  //没问题,定义一个大小为10的数组。

    char *str1 = "0123456789";//有问题,指针是用来装地址的,而不是装字符串的。

    strcpy( string, str1 );//有问题,string的空间为10,实际可用空间为9。

                                       //而str1是一个字符长度为10的字符串,

                                        //故string无法容纳下str1,会出现溢出。

}

8、下面的代码片段会输出__________ 

void test(void)

{

    char *p = NULL;

    strcpy(p, "hello");

    printf("%s", p);

}

9、sizeof(str); 的值是多少?

void Func(char str[100])

{

sizeof(str);

}

10、递归函数最终会结束,那么这个函数一定( );

A. 使用了局部变量

B. 有一个分支不调用自身

C. 使用了全局变量或者使用了一个或多个参数

分析:递归函数最终会结束的条件是必须有一个分支不调用自身,这样才能确保递归在某个时刻停止。

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

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));

}

答案:5和9

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;

    *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

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

15、有以下函数,该函数的返回值是:( ) 

char *fun(char *p)

{

    return p;

}

A. 无确切的值                                  B. 形参 p 中存放的地址值

C. 一个临时存储单元的地址            D. 形参 p 自身的地址值

16、编写strcpy函数

已知strcpy 函数的原型是

char *strcpy(char *strDest,const char *strSrc);其中 strDest 是目的字符串,strSrc 是源字符串。

(1)、不调用 C 的字符串库函数,请编写函数 strcpy。

 char *my_strcpy(char *str1,char *str2 ){
    char *p;
    p = str1;    //储存str1的地址
    while(str2!= 0){
        str1=str2;
        str2++,str1++;
    }
    *str1= 0;//将更新后的数据内容后添加看门狗,以防数据错误。
    return p;//返回p储存的str1的地址,与定义函数时的返回值类型呼应
}

(2)、strcpy 能把 strSr 的内容复制到 strDest,为什么还有 char"类型的返回值?

返回值是一个指针,储存的是strDest的地址,使用函数结果是时,可通过地址访问。

(3)、strcpy 和 memcpy 的区别。

  • strcpy:用于复制字符串。它会从源字符串复制字符到目标字符串,直到遇到空字符(\0),诺没有空字符,会给目标字符串的末尾添加一个空字符。
  • memcpy:用于复制内存块。它会按照指定的字节数从源地址复制数据到目标地址,不会处理字符串的结束符。

17、请实现一个函数,输入一个整数,输出该数二进制表示中的1的个数。例如:把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。

int p=0,s=0;//p记录余数,s记录1的个数;
int DbB(num)
{
        int p=0,s=0;//p记录余数,s记录1的个数;
		int old_num=num;
		
		while(num=!0){
			    p = num%2;
			    num = num/2;
		    if(p==1){
				s++;
			    return s;
			}
	printf("%d转换成二进制后,二进制数中1的个数:%d",old_num,DbB(num/2));
        return 0;		
}

 

18、请用编写递归算法计算fibinacci数列第1000位的值。斐波拉契数列为1,1,2,3,5,8,13,21,…… 

 

int FBNQ(n)
{  
    if (n <= 0){  
        return 0  
    }else if{n == 1 or n == 2:  
        return 1  
    }else{  
         static int c=4;
         int a=1,b=2;
         int *s;
         *s=a+b;
         a=b;
         b=*s; 
         c++;
        while(c==n+1){
            return c;
        }
    }
}

19、用 C 语言写一个递归算法求 N!

 

long long Fac(int n) {  
    if (n == 0) {  
        return 1; // 0! = 1  
    } else {  
        return n * factorial(n - 1); // n! = n * (n-1)!  
    }  
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值