您好,欢迎来到九壹网。
搜索
您的当前位置:首页中科创达C开发2-答案

中科创达C开发2-答案

来源:九壹网


1、 请定义一个宏常量SECONDS_PER_YEAR,表示每年有多少秒(不考虑闰

年)?(8分)

1、#define SECONDS_PER_YEAR 60*60*24*365(UL)

2、 在32位系统的程序中,存在如下结构类型定义?(12分)

Typedef struct _MSG_1_

{

char srcmodule;

char destmodule;

short msglen;

unsigned char body[0];

}MSG_1;

Typedef struct _MSG_2_

{

char srcmodule;

char destmodule;

short msglen;

unsigned char *pbody;

}MSG_2;

设:sizeof(char) =1,sizeof(short) = 2;那么

(1)sizeof(MSG_1) = ? ; sizeof(MSG_2) = ?

(2)请简练地给出解释

2、考察结构体对齐

Sizeof(MSG_1) = 4 sizeof(MSG_2) =

MSG_1的body【0】不占空间,但是必须是结构体的最后成员

MSG_2占空间 结构体变量q = ()malloc ,q->pBody = malloc ...比较麻烦

3、请给出如下问题的一种或多种修改方案(10分)

存在rlc.c和rrc.c两个源代码文件

Rlc.c:其中存在如下代码片段:

Typedef struct _StatisData_

{

Unsigned int successnum;

Unsigned int failurenum;

} StatixData

Static StatixData statixData

此前,类型StatixData及变量statixData只在文件rlc.c中使用,现在需要在文件rrc.c中访问rlc.c中变量statixData的failurenum字段的当前数值,请给出修改方案

3、

1.说明 Static StatisData statisData 只能在当前使用

2.放在一个.h中 ,声明一个类型。

3.定义一个函数,通过函数来访问。

4、程序设计-字符串

编写函数reverse_string,他的原型如下:

Void reverse_string(char *string)

函数把参数字符串中的字符反向排列,请使用指针而不是数组下标,不要使用任何C函数库中用于操作字符串的函数,提示:不需要声明一个局部数组来临时存储参数字符串

4、#include

#include

void swap(char *p,char *q)

{

char tmp = *p;

*p = *q;

*q = tmp;

}

char *reverse_string(char * string)

{

char *left = string;

char *right= string + strlen(string)-1;

while(left < right)

{

swap(left,right);

left++;

right--;

}

return string;

}

int main()

{

char arr[] = \"abcdefghijklmn\";

reverse_string(arr);

printf(\"%s\\n\

return 0;

}

5、程序设计-排序

编写一个名叫sort的函数,它用于对一个任何类型的数组进行排序,为了使函数更为通用,它的其中一个参数必须是一个指向比较回调函数的指针,该回调函数由调用函数提供两个参数,也就是两个指向需要进行比较的值的指针。如果两个值相等,函数返回零;如果第1个值小于第2个,函数返回一个小于零的整数:如果第1个值大于第2个,函数返回一个大于零的整数。

Sort函数的参数将是:

1、一个指向需要排序的数组的第一个值的指针

2、数组中值的个数

3、每个数组元素的长度

4、一个指向比较回调函数的指针

Sort函数没有返回值。

你将不能根据实际类型声明数组参数,因为函数应该可以对不同类型的数组进行排序。如果你把数据当作一个字符数组使用,你可以用第3个参数寻找实际数组中每个元素的起始位置,也可以用它交换两个数组元素(每次一个字节)

5、1.思想

Sort(void *avr ,int num ,int size,int (*cmp)(void *,void*) )

{

Int i,j;

For(i=0;i{

For(j=0; j{

If(cmp ( (char * ) a+j*size , (char * ) a+(j+1)*size ) )

{

}

}

}

}

Void *可以定义,但不能直接使用。

2.答案:

Sort(void *a ,int num ,int size,int (*cmp)(void *,void*) )

{

Int i,j;

For(i=0;i{

For(j=0; j{

If( cmp ( (char * ) a+j*size , (char * ) a+(j+1)*size ) )

{

}

}

}

}

回调函数用户自己实现。

一定要写void * ,因为它考查的是不知道类型的情况下。所以..... 什么时候,调用,什么时候知道类型。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务