1-29作业

麦穗科技驱动笔试题

选择题((1)~(5)每小题4分,共 20分)

1.请选出以下程序的输出结果B

#include <stdio.h>

sub(int x, int y, int *z)

{

*z=y-x;

}

Main{}(

int a,b,C:

sub(10,5,&a); sub(7,a,&b); sub(a,b,&C);

printf("%d,%d,%d\n",a,b,C);

}

A)5,2,3

  1. -5,-12,-7
  2. -5,-12,-17
  3. 5,-2,-7

2.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是A

A)pb=&xx;B)pb=x;C)*pb=&x;D)*pb=*x

3.若要用下面的程序片段使指针变量 p 指向一个存储整型变量的动态存储单元

int*p;

p=          malloc(sizeof(im)):

则应填入    D      

A)int B)intC(int)D)(int*)

4.若有以下定义和语句:

int a[]={1,2,3,4,5,6,7,8,9,10},*p=a

则值为3的表达式是A

  1. p+=2,*(p++)

B)p+=2,*++P

C)p+=3,*p++

D)p+=2,++*p

5.设有以下语句,其中不是对a 数组元素的正确引用的是:(其中0≤i≤10)

D

int a[10]={0,1,2,3,4,5,6,7,8,9,},*p=a;

A)a[p-a]B)(&a[i]) C)p[i])D)*(*(a+i))

二、问答及编程题((1)~(10)每小题8分,共80分)

1.有一浮点型数组A,用C语言写一函数实现对浮点数组A进行降序排序,并输出结果

要求要以数组A作为函数的入口.(建议用冒泡排序法)

void bubble_sort()

{

Float A[10];

Int i,temp,maxnumber;

Printf(“请输入数组A的十个浮点数元素:\n”);

For(i=0;i<10;i++)

{

Scanf(“%d”,&A[i]);

}

For(i=0;i<10;i++)

{

If(A[i]<A[i+1])

{

Temp = A[i];

A[i] = A[i+1];

A[i+1]=temp;

}

}

While(i<10)

{

Printf(“%d”,A[i]);

I++;

}

}

7. 请问以下代码有什么问题:

char*s="AAA":

printf("%s",s);

s[0]=’B’

printf("%s",s);

有什么错?

答:s[0]=’B’错误,s指针指向的是常量,常量不能改变。

  1. void getmemory(char *p)

{

p=(char*)malloc(100);

strcpy(p,“hello world”);

}

int main( )

{

char*str=NULL;

getmemory(str);

printf( “%s/n”,str);

free(str);

return 0;

}会出现什么问题?

答:(1)在主函数中对getmemory函数引用没有加&,且外部封装函数的形参中定义的是一级指针,而对*str的取地址需要二级指针承接,所以形参位置需要改为char **p,故而p=(char*)malloc(100);要改为*p=(char*)malloc(100);strcpy(p,“hello world”);改为strcpy(*p,“hello world”);

出现的问题:间接访问空指针,出现段错误。

  1. int main()

{

char a;

char*str=&a;

strcpy(str,"hello");

printf(str);

return 0;

}会出现什么问题?

答:指针str指向一个字符a,而hello有六个字符,存储时发生越界。

10. void GetMemory2(char **p, int num)

{

*p=(char*)malloc(num);

printf("*p=%p\n”*p)://-----------------地址1

}

void Test(void)

{

char*str = NULL;

GetMemory(&str, 100);

printf("str=%p\n”str);//-----------------地址2==地址1

strcpy(str, "hello");

printf(str);

}

请问运行 Test函数会有什么样的结果?

答:打印hello以及打印堆地址,即地址1,第二个输出也是打印的堆地址。代码忘记释放堆空间,最后在printf后面应该加上free(str);。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值