麦穗科技驱动笔试题
选择题((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
- -5,-12,-7
- -5,-12,-17
- 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
- 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指针指向的是常量,常量不能改变。
- 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”);
出现的问题:间接访问空指针,出现段错误。
- 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);。