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 * ,因为它考查的是不知道类型的情况下。所以..... 什么时候,调用,什么时候知道类型。