9.11C语言基础练习

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

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作为参数传递给subcount时,传递的是count的副本,函数内部对count的修改不会影响主函数的中的count。所以主函数中的count值再调用subcount后仍是3。

4.请问运行Test函数会有什么样的结果?(华辰泰尔)

char *GetMemory(void)

{

    char p[] = "hello world";

    return p;

}

void Test(void)

{

    char *str = NULL;

    str = GetMemory();

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

}

答案:10

解析:传递给fun函数的值为a=2,b=3,和c=10.在fun函数中赋值不会影响到主程序的c的值所以仍为10。

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

void test1()

{

    char string[10];

    char *str1 = "0123456789";

    strcpy( string, str1 );

}

答案:错误在于string数组的大小为10,但str1的内容长度为10,再加上字符串结束标志‘\0’导致数组越界,需要将string大小至少设置为11。

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

void test(void)

{

    char *p = NULL;

    strcpy(p, "hello");

    printf("%s", p);

}

答案:p为空指针,在没有为其分配内存的情况下使用strcpy将导致其未定义行为。

9.sizeof(str); 的值是多少? (21年中航安为)

void Func(char str[100])

{

sizeof(str);

}

答案:32位系统返回值为4,64位返回值为8。

解析:在函数中,sizeof(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);

}

答案: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。

char *my_strcpy(char *strDest, const char *strSrc) {
    char *p = strDest;
    while ((*strDest++ = *strSrc++) != '\0');  // 复制源字符串到目的字符串
    return p;  // 返回目的字符串的地址
}

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

返回strdest的地址

(3)、strcpy 和 memcpy 的区别。

strcpy是用于复制字符串,遇到空字符\0终止。

memcpy是用于复制指定大小内的内存块,不受空字符影响,需要明确提供复制的大小。

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

int countOnes(int num) {
    int count = 0;
    while (num) {
        count += num & 1;  // 检查最低位是否为 1
        num >>= 1;  // 右移一位
    }
    return count;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[]){
    int number;
	scanf("%d",&number);
    printf(" %d化为二进制有 %d个1\n", number, countOnes(number));
    return 0;
}

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000  // 假设斐波那契数列最大长度为1000
long long fb_cache[MAX] = {0};  // 用来存储已经计算过的斐波那契值

long long fb(int n) {
    if (n <= 1) {
        return n;
    }
    if (fb_cache[n] != 0) {
        return fb_cache[n];  // 如果已经计算过,直接返回
    }
    fb_cache[n] = fb(n - 1) + fb(n - 2);  // 递归计算并存储
    return fb_cache[n];
}

int main(int argc, const char *argv[])
{
    int n = 1000;
    printf("斐波拉契第%d位的值为: %lld\n", n, fb(n));
    return 0;
}

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 递归计算阶乘的函数
long long factorial(int n) {
    if (n == 0 || n == 1) {
        return 1;
    }
    return n * factorial(n - 1);  // 递归调用
}

int main(int argc, const char *argv[])
{
    int n = 10;  // 测试用例:计算 10 的阶乘
    printf("%d! = %lld\n", n, factorial(n));
    return 0;
}

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值