c语言的面试题 - 带答案副本(6)

2019-03-04 13:15

printf(\ printf(\}

void swap(int * a ,int * b) {

int c=*a; *a=*b; *b=c; }

//4 冒泡排序

void maopaoSort(int R[],int n) {

for(int i=0;i

for(int j=0;j

if(R[j]>R[j+1]) //大的往下沉 {

swap(&R[j],&R[j+1]); } } */

for(int j=n-1;j>i;j--) // // 每次需要比较的次数 {

if(R[j]

swap(&R[j],&R[j-1]); } } } }

void main() { int i;

int num[6]={0};

printf(\ for(i=0;i<6;i++)

scanf(\

puts(\ printArr(num,6); maopaoSort(num,6); puts(\ printArr(num,6); }

试题8:再看看下面的一段程序有什么错误: swap( int* p1,int* p2 ) {

int *p; *p = *p1; *p1 = *p2; *p2 = *p; }

在swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。在VC++中DEBUG运行时提示错误“Access Violation”。该程序应该改为: swap( int* p1,int* p2 ) {

int p; p = *p1; *p1 = *p2; *p2 = p;

}

试题1:分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var) 解答:

BOOL型变量:if(!var) int型变量: if(var==0) float型变量:

const float EPSINON = 0.00001;

if ((x >= - EPSINON) && (x <= EPSINON) 指针变量: if(NULL == var)

试题2:以下为Windows NT下的32位C++程序,请计算sizeof的值

void Func ( char str[100] ) {

sizeof( str ) = ? }

void *p = malloc( 100 ); sizeof ( p ) = ?

解答: sizeof( str ) = 4 sizeof ( p ) = 4

剖析:

Func ( char str[100] )函数中数组名作为函数形参时,

在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

数组名的本质如下:

(1)数组名指代一种数据结构,这种数据结构就是数组; 例如: char str[10];

cout << sizeof(str) << endl;

输出结果为10,str指代数据结构char[10]。

(2)数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改;

char str[10];

str++; //编译出错,提示str不是左值

(3)数组名作为函数形参时,沦为普通指针。

Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof( str ) 、sizeof ( p ) 都为4。

3:写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事? least = MIN(*p++, b);

解答:

#define MIN(A,B) ((A) <= (B) ? (A) : (B))

MIN(*p++, b)会产生宏的副作用 剖析:

(1)谨慎地将宏定义中的“参数”和整个宏用用括弧括起来。所以,严格地讲,下述解答: #define MIN(A,B) (A) <= (B) ? (A) : (B) #define MIN(A,B) (A <= B ? A : B )

#define MIN(A,B) ((A) <= (B) ? (A) : (B)); 都应判0分;

(2)防止宏的副作用。

宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是: ((*p++) <= (b) ? (*p++) : (b))

这个表达式会产生副作用,指针p会作2次++自增操作。

//”dfjdosfjkodskf” “dos” 1000 3

4.请编写能直接实现strstr()函数功能的代码。 // strstr(str,substr);在str中找substr,找到后把后面的全部截取返回。 #include using std::cout; using std::endl;

char* my_strstr( char* str1, char* str2 ) {

if (NULL == str1 || NULL == str2) {

throw; }

char *p = NULL; char *q = NULL; const char v = '\\0';

for (int i=0; v != str1[i]; ++i)


c语言的面试题 - 带答案副本(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基于单片机的数字温度计设计(附代码及仿真)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: