C语言-填空题

本文提供了多个C语言填空题,涉及排序算法、字符串长度、链表操作、内存布局、位运算、指针和数组等内容,并给出了参考答案,帮助读者巩固C语言基础知识。
摘要由CSDN通过智能技术生成
C语言填空题

1、完善以下升序插入排序的代码:

插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

void insertSort(int *a, int n)

{

int tmp = 0, p = 0;

for (int i = 1; i < n; i++)

{

​ tmp = a[i];

​ p = i - 1;

​ while (p >= 0 && tmp < a[p])

​ {

​ a[p + 1] = a[p];

​ p–;

​ }

​ a[p + 1] = tmp;

}

}

2、以下代码的输出结果是__10__,12

char str[] = “https://\r\n\0”;

int a = strlen(str);

int b = sizeof(str);

printf("%d,%d", a, b);

3、已知单链表Link,找出相同结点并删除。

​ struct Link

​ {

​ char data;

​ struct Link *next;

​ };

​ struct Link *delerep(struct Link *link)

​ {

​ struct Link *p, *f, *r;

​ p = link;

​ while (p != NULL)

​ {

​ r = p;

​ f = r->next;

​ while (f != NULL)

​ {

​ if (p->data == f->data)

​ {

​ r->next = f->next;

​ }

​ else

​ {

​ r = f ;

​ }

​ f = f->next;

​ }

​ p = p->next;

​ }

​ return link;

​ }

4、以下程序在64位系统下的输出结果是 32 16

typedef union {

long i;

int j[3];

char k;

} AA;

struct BB

{

char w[2];

char x;

AA y;

double z;

} bb;

void main(void)

{

AA aa;

printf("%ld %ld", sizeof(struct BB) , sizeof(aa));

}


1、以下代码的输出结果是________(易)

int main(int argc, char* argv[])

{

int x=1,a=0,b=0;

switch(x)

{

​ case 0: b++;

​ case 1: a++;

​ case 2: a++;b++;

}

printf(“a=%d,b=%d\n”,a,b);

return 0;

}

*参考答案********:*

*a=2,b=1*

2、通常将c程序的内存布局分为:文本段、初始化数据段、未初始化数据段、堆和栈,那么动态内存分配将使用哪部分空间:,函数内部定义的有初值static变量使用那个空间:; (易)

参考答案:

堆,初始化数据段

3、以下程序运行后的输出结果是________ (中)

char str[] = “abcdef”;

char str2[10] = “abcdef”;

unsigned int str_len = sizeof(str) ;

unsigned int str2_len = sizeof(str2);

printf(“%u, %u”, str_len,str2_len) ;

参考答案:

7,10

4、函数binary的作用是应用折半查找法从按升序保存10个整数的a数组中对关键字m进行查找,若找到,返回其下标值,反之返回-1。请填写函数binary中缺少的两条语句(填在横线处)。(中)

int binary(int a[10], int m)

{

int low = 0, high = 9, mid;

while(low <= high)

{

mid = (low + high)/2;

if(m < a[mid])

​ ;

else if(m > a[mid])

​ ;

else

return (mid);

}

return (-1);

}

*参考答案********😗

*(1)high = mid - 1(2)low = mid + 1。*


\1. 请写出下列函数错误__****没有给定义的字符型指针变量pTmp分配内存,就直接使用pTmp,使用了空指针****__________

void func1(void)

{

char *pTmp;

strcpy(pTmp, “hello world!”);

return;

}

*考察点:********编程规范再三强调空指针和野指针问题 ,程序会出现异常。*

2、如果CPU为big endian,*p的值为_____0x21________; 如果CPU为little endian,*p的值为______0x12_________

struct {

unsigned char a:4;

unsigned char b:4;

}s;

unsigned char p = (unsigned char)&s;

s.a = 2; s.b = 1;

考察点:

big endian为大(端)字节序(或者叫网络字节序),little endian为小(端)字节序。

记住big endia是人易读的方式,跟我们手写数据的顺序一致。

知识点:字节序(byte order)和位序(bit order)

3、下列程序的运行结果是__2, 5__

void main()

{

int a[5] = {1,2,3,4,5};

int *ptr = (int *)(&a+1);

printf("%d,%d", *(a+1), *(ptr-1));

}

考察点:指针加减

4、32位操作系统下:sizeof(a) 和 sizeof§ 分别是多少__7,4__

char a[] = “12345\n”;

char *p = “12345\n”;

考察点:sizeof

5、下面程序的运行结果是__ 死循环 ____

#include <stdio.h>

int main()

{

unsigned char ucCycle;

​ unsigned char ucMax = 9;

int iSum = 0;

for( ucCycle = ucMax; ucCycle >0 ; ucCycle = ucCycle-2)

{

​ iSum = iSum + ucCycle;

}

printf(“Sum is %d\n”,iSum);

}

*考察点:减法越界导致死循环*


1.以下程序运行后的输出结果是:

#include <stdio.h>

int fun()

{

static int x=1;

x=x*2;

return x;

}

void main()

{

int i,s=1;

for(i=1;i<=3;i++)

{

s=fun();

}

printf("%d\n",s);

}

答案:8 。

static int x=1 定义的是静态变量,存储区域是数据段中,函数返回后数据保留。

2.int main(void)

{

​ int * p1=(int *)0x0500;

int * p2=(int *)0x0518;

int value=p2-p1;

printf("%d",value);

}

输出为:______

答案:6。

考察指针加减。

3.x86_64模式下下列代码的输出是_____

#include <stdio.h>

void example(char characHello[])

{

printf("%d\n", sizeof(characHello));

return;

}

int main(void)

{

char acHello[] = “hello,bit”;

example(acHello);

return 0;

}

【答案】8。

参数对于数组来说传递的是首元素的地址。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值