C基础作业9

 1、以下程序的正确运行结果是( )。(鲁科安全)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

答:A

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

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

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

C. 被调用函数中,如果有返回值,就一定要有return语句

D. 被调用函数中,一个return语句可以返回多个值给调用函数

答:D

 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

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

}

答:6

 7、找错题,说明那里错了(恩易物联1,深圳元征信息科技)void test1()

{

char string[10];

char *str1 = "0123456789";

strcpy( string, str1 );

}

答:段错误,str1占11字节,string【10】为长度10字节,会溢出。

 8、下面的代码片段会输出__________ (飞音时代)void test(void)

{

char *p = NULL;

strcpy(p, "hello");

printf("%s", p);

}

答:段错误,指针p指向空

 9、sizeof(str); 的值是多少? (21年中航安为)void Func(char str[100])

{

sizeof(str);

}

答:8字节,str被识别为指针。

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

}

答:-3

 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

答:A

 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

 15、有以下函数,该函数的返回值是:( ) (山东信通电子)

char *fun(char *p)

{

return p;

}

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

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

答:B

16、编写strcpy函数 (山东山大电力技有限公司)

已知strcpy 函数的原型是

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

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *m_strcpy(char *s1,char *s2);//声明

int main(int argc, const char *argv[])
{
    char a[100]="hqyj";//定义两个字符串
    char b[]="66666666\n";
    printf("%s",m_strcpy(a,b));//输出
    return 0;
}

char *m_strcpy(char *s1,char *s2){
      char *p=s1;    //保存s1的首地址
      while(*s2!='\0'){ //循环将s2赋值给s1
          *s1=*s2;
          s1++;
          s2++;
      }
    *s1=='\0';
    return p;
}

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

返回strdest的地址

(3)、strcpy 和 memcpy 的区别。

strcpy和memcpy都是标准C库函数,

strcpys是字符串的复制。即strcpy只用于字符串复制,遇到'\0'停止。memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fun(int a);
int count=0;
int a;    
int main(int argc, const char *argv[])
{
    printf("请输入一个整数:");
    scanf("%d",&a);
    printf("%d的二进制中1的个数为:%d\n",a,fun(a));
    return 0;
}

int fun(int a){
      if(a%2==1){
         count++;
      }if(a==1||a==0){
         return count;
      }else{
         fun(a/2);
      }
}

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fbnq(int n){

        if(n==1||n==2){
           return 1;
        }else {
           return fbnq(n-1)+fbnq(n-2);
                   
        }
}
int main(int argc, const char *argv[])
{
    int a=1000;

//    printf("请输入:");
//    scanf("%d",&a);
    int fbnq(int a);
    printf("%d\n",fbnq(a));

  return 0;
}

19、用 C 语言写一个递归算法求 N!(华辰泰尔

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fun(int n){
    int z=1;
    if(n==1){
      z=1;
      return 1;
    }else{
      z=n*fun(n-1);//递归求出n!
      return z;
    }


}
int main(int argc, const char *argv[] ){
    int a;
//    int fun(int n);
    printf("请输入:");//输入
    scanf(" %d",&a);
    
    int fun(int(a));
    printf("%d!=%d\n",a,fun(a));//输出

    return 0;
}            

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值