|
|
第7章章习题
1.以下类型中,属于对象类型的是 ACDE ;属于函数类型的是 B 。
A.char B.main函数 C._Bool
D.signed int E.指针
2.若* E是合法的表达式,则该表达式的结果不可能是 A 。
A.值 B.左值 C.代表一个对象
D.代表E(的值)所指向的那个对象
3.在表达式& E中,E必须是 B ,如果E的类型是int,则& E的结果类型是 C 。
A.值 B.左值或者函数指示符
C.指向int的指针 D.int
3.fsum函数的返回类型为void,它有两个形参n和s。形参n的类型是指向unsigned char的指针,形参s的类型是指向int的指针。fsum函数的作用是从形参n所指向的对象的值开始,一直累加到1000,并将累加结果存入形参s所指向的对象。
(1)请给出fsum函数的定义,也就是编写这个函数。
仅供参考:
# include <stdio.h>
void fsum (unsigned char * n, int * s)
{
for (int x = * n; x <= 1000; x ++)
* s += x; //或者 * s = * s + x;
}
(2)写一个完整的程序来测试fsum函数。
仅供参考:
# include <stdio.h>
void fsum (unsigned char * n, int * s)
{
for (int x = * n; x <= 1000; x ++)
* s += x;
}
int main (void)
{
unsigned char c = 1;
int sum = 0;
fsum (& c, & sum);
printf ("%d\n", sum);
}
5.fpmax函数的返回类型是void,它有三个形参p、a和b且它们的类型都是指向int的指针。该函数的作用是:比较形参a和b所指向的对象,看哪个对象的值较大,然后用形参p所指向的对象去指向那个值较大的对象。
(1)请给出fpmax函数的定义,也就是编写这个函数。要求编写两个版本,一个不使用条件表达式,一个使用条件表达式;
参考答案:
void fpmax (int * a, int * b, int * * p)
{
if (* a > * b) * p = a;
else * p = b;
}
void fpmax (int * a, int * b, int * * p)
{
* p = * a > * b ? a : b;
}
(2)写一个完整的程序来测试fpmax函数。
参考答案:
# include <stdio.h>
void fpmax (int * a, int * b, int * * p)
{
if (* a > * b) * p = a;
else * p = b;
}
int main (void)
{
int m = 10086, n = 65533, * pm = & m;
fpmax (& m, & n, & pm);
printf ("%d,%d,%d\n", m, n, * pm);
}
|
|