C基础作业9

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

答案:D
分析:静态变量智慧初始化一次,所以每次静态变量都会加1

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;
}
A. 8 		B. 4 		C. 3 		D. 5
答案:C
分析:因为count是值传递所以函数中的改变不会影响调用函数传入的变量

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

会出现段错误,因为str进入函数时被动态的重新分配了一个空间,和原本不一样的空间,与main函数中的str处于两个空间,因此getalloc函数中的操作不会对main函数中的str有任何影响,所以printf打印的依然是一个指向空的指针

6.下列程序的输出结果是________。(富士安全)
fun(int a, int b, int c)
{
    c = a*b;
}
void main()
{
    int c = 10;
    fun(2,3,++c);
    printf("%d\n", c);
}

结果是11

7.找错题,说明那里错了(恩易物联1,深圳元征信息科技)
void test1()
{
    char string[10];
    char *str1 = "0123456789";
    strcpy( string, str1 );
}

会出现越界,因为string数组容量只有10,而存放str1字符指针中的字符串需要11的大小,因为str1指向的字符串最后面还有一个\0加起来就是11

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,因为程序会将形参中的数组看做指针

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
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。
(2)、strcpy 能把 strSr 的内容复制到 strDest,为什么还有 char"类型的返回值?
(3)、strcpy 和 memcpy 的区别。
  1 #include<stdio.h>
  2 
  3 char* strcpy_v(char *strDest,char *strSr){
  4 
  5         char *p=strDest;
  6         while(*strSr!='\0'){
  7                 *strDest=*strSr;
  8                 strDest++;
  9                 strSr++;
 10         }
 11 
 12         *strDest='\0';
 13         return p;
 14 
 15 }
 16 
 17 int main(int argc,const char *argv[])
 18 {
 19         char a[100]="qweraaa",b[]="12345qw";
 20  
 21         char *c = strcpy_v(a,b);
 22         printf("%s\n",a);
 23  
 24  
 25         return 0;
 26 }

17.请实现一个函数,输入一个整数,输出该数二进制表示中的1的个数。例如:把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。(矩阵软件)
  1 #include<stdio.h>
  2 int cun=0;
  3 
  4 
  5 void ejz(int n){
  6         if(n==0||n==1){
  7                 if(n==1){
  8                         cun++;
  9                 }
 10                 return;
 11         }else{
 12                 if(n%2==1){
 13                         cun++;
 14                 }
 15 
 16                 ejz(n/2);
 17 
 18         }
 19 
 20 
 21 }
 22 
 23 
 24 
 25 int main(int argc,const char *argv[]){
 26         ejz(15);
 27         printf("%d\n",cun);
 28  
 29  
 30  
 31         return 0;
 32 }

19.用 C 语言写一个递归算法求 N!(华辰泰尔)
1 #include<stdio.h>
  2 
  3 
  4 int jc(int n){
  5         if(n==1){
  6                 return 1;
  7         }
  8 
  9         return n*jc(n-1);
 10 
 11 }
 12 
 13 int main(int argc,const char *argv[])
 14 {
 15         printf("%d\n",jc(4)); 
 16         
 17 
 18         return 0;
 19 }
 20 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值