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。
参数对于数组来说传递的是首元素的地址。