您的位置:首页 > 编程语言 > C语言/C++

测试(一)

2016-12-14 12:28 141 查看
一.简答题.

1. 请描述什么是嵌入式?嵌入式开发的优点有哪些?

答:嵌入式即为在已有的硬件平台上移植操作系统。

优点:

①开发人员无需了解硬件的工作原理

②提高软件代码的可移植性,从而提高开发效率, 降低开发成本

③操作系统是个资源库,有很多开源的软件和工具

嵌入式开发中为什么选择C语言作为开发语言,C语言有哪些缺点?

答:C语言的优点:

①出色的可移植性,可在多种不同体系结构的软/硬件平台上运行

②可直接访问硬件

③很高的运行效率

C语言的缺点: 维护性差、扩展性差、复用性差

将一个 .C 文件到可执行文件需要经历哪几步? 每一步的作用是什么?

答:①预处理:头文件展开,宏替换,条件编译等

②编译:源文件编程目标文件(.O .obj)

③汇编:.O–>.S

④链接:将 .S =>可执行文件

头文件#include< > 和#include “” 中的 < > 和 “ ” 有什么区别?

答: < > 表示在系统头文件目录下搜索,议案包括系统自带的头文件

“ ” 表示现在当前目录下搜素,找不到再去系统头文件目录下搜索

Makefile的功能是什么?分为哪几类?请描述一下每类的基本功能。

答:三类Makefile文件:

①总控Makefile: 1. 进入各个子目录(功能子目录)里执行make 命令

2. 将所有的.o文件链接生成最终可执行文件

②功能子目录Makefile: 将src目录下的.c文件编译生成.o文件

③scripts目录的Makefile:定义许多变量(相当于C语言中的头文件)

二.变量定义声明解读

1. float ( ( e[ 10 ] ) ( int * ) )[ 5 ]

答:函数指针数组,指向的函数形参为int *,返回值为一个数组指针,指向的数组包含5个float型数据 .

int * ( * ( * f ) (int )) [ 10 ]

答:函数指针变量,该函数形参为int, 返回值为数组指针,该指针指向一个10个元素的整型指针数组 .

void * ( * c)( char, int (*) ( ) )

答:函数指针变量,该函数形参为char, 和函数指针( 形参为空,返回值为int), 返回值为void * .

三.程序阅读题 .(4+6+6)

1.

void num_add(int num)
{
num++;
printf(“%d\n”,num);
}

int main()
{
int num = 1;
int i = 0;
for(i = 0; i < 2;i++)
{
num_add(num);
}
printf(“%d\n”,num);
}


请写出此程序的输出结果是什么,并简述判断过程

输出结果为2 2 1

因为函数传参时没有传变量地址,调用函数中修改变量对主函数中的变量并没有影响

2.

int main()
{
int num1,num2;

printf(“please input number1:\n”);
scanf(“%d”,num1);

printf(“please input number2:\n”);
scanf(“%d”,num2);

if(num1 = num2)
{
printf(“the two number is equal\n”);
}
else if(num1 > num2)
{
printf(“num1 is bigger than num2\n”);
}
else
{
printf(“num2 is bigger than num1\n”);
}
return 0;
}


请问此程序是否有问题,能否通过编译,若不能,请简述理由

答:

有问题,不能通过编译,因为scanf少了一个&,而且if中的=要用== 否则结果出错

3.

int function(int array[10])
{
int i;
int max = array[0];
for(i = 1;i < 10;i += 1);
{
if(array[i] > max)
{
max = array[i];
}
}
return max;
}


请问此函数想要实现什么功能,此函数有无问题,若有,错在哪里,请简单说明

答:

目的是实现比较出数组中最大的一个元素。

程序中的问题

①在for循环中规定了循环次数,容易出现数组越界

②for循环后面不能加 ;

四.编程题

1. 完全数是指其因数的和等于自身,如6是完全数,其因数为1, 2, 3,1+2+3 = 6。如28是完全数,其因数为1, 2, 4, 7, 14, 1+2+4+7+14 = 28。请编程输出1000以内的完全数.

#include <stdio.h>

int main()
{
int n;
int i;
for(n = 0; n < 1000; i++)
{
for(i = 0; i < n; i++)
{
if(n % i == 0)
{
sum += i;
}
}
if(n == sum)
{
printf("%d ", n);
}
}
return 0;
}


n个小伙伴围坐一圈,按1, 2, 3报数,报到3的人出局,请问最后留在圈中的人是最初n个人中的第几个?用C语言实现。

#include <stdio.h>

int main()
{
int a[100];
int n;
int i;

int count = 0;

printf("please input n:\n");
scanf("%d",&n);
for(i = 0; i < n; i++)
{
a[i] = i + 1;
}
int temp = n;

while(n > 0)
{
if(a[i] > 0)
{
count++;
i++;
}
if(count == 3)
{
count = 0;
a[i] = 0;
n--;
}
i++;
if(i == temp)
{
i = 0;
}
}
for(i = 0; i < n; i++)
{
if(a[i] > 0)
{
printf("the last is %d \n",i);
break;
}
}

}


如何将形如 “this is a string”的字符串变成 “string a is this” ?请编程实现. ( 20 )

#include <stdio.h>
void reseve_str(char *str,int slen)
{
int i;
char temp;
for(i = 0; i < slen / 2;i++)
{
temp = a[i];
a[i] = a[slen - 1 - i]
a[slen - 1 - i] = temp;
}
}

void reseve_ch(char *str)
{
char *pstr = str;
int i;
int count = 0;
while(*pstr != '\0')
{
if(*pstr == ' ')
{
reseve_str(pstr - count,count);
count = 0;
}
else
{
count++;
}
pstr++;
}
reseve_string(src - count,count);
}

int main()
{
char str[MAX_SIZE];
printf("please input this is a string:\n");
gets(str);

reseve_str(str,strlen(str));
reseve_ch(str);

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

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息