77范文网 - 专业文章范例文档资料分享平台

C语言程序设计及实验指导练习及习题参考答案(8--10)(8)

来源:网络收集 时间:2019-01-10 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

for(k = 1; k < p->month; k++) p->day = p->day + tab[leap][k]; return p->day; }

6.(选作) 通讯录排序。通讯录的结构记录包括:姓名、生日、电话号码,其中生日又包 括三项:年、月、日。定义一个嵌套的结构类型,输入n(n<10)个联系人的信息,再按他们 的年龄从大到小的顺序依次输出其信息。 输入输出示例 n=3

zhang 1985 04 03 13912345678 wang 1982 10 20 0571-88018448 qian 1984 06 19 13609876543 wang 1982/10/20 0571-88018448 qian 1984/6/19 13609876543 zhang 1985/4/3 13912345678 解答:

#include

struct date{ /* 日期结构 */ int y, m ,d ; };

struct friends_list{

char name[10]; /* 姓名 */ struct date birthday; /* 生日 */ char phone[15]; /* 电话号码 */ };

void sort(struct friends_list s[], int n) /*按生日日期从小到大排序*/ { int i, j, b1, b2;

struct friends_list temp; for(i=1; i

b1 = (s[j].birthday.y*100+ s[j].birthday.m)*100+ s[j].birthday.d;

b2 = (s[j+1].birthday.y*100+ s[j+1].birthday.m)*100+ s[j+1].birthday.d; if( b1 > b2)

{temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; } } }

int main(void) { int i, n;

struct friends_list friends[10]; printf(“n=”); scanf(“%d”, &n);

for(i=0; i

scanf(\&friends[i].birthday.d, friends[i].phone);

/*按年龄从大到小排序*/ sort(friends, n);

for(i=0;i

printf(\friends[i].birthday.m, friends[i].birthday.d, friends[i].phone); return 0; }

10

1 练习参考答案

10-1 若要用递归函数计算sum=1+2+3+…+n(n 为正整数),请写出该递归函数的递归式子

及递归出口。 解答:

递归式子: sum(i) = sum(i-1) + i; i>0 递归出口: sum(i) = 0; i = 0 10-2 请完成下列宏定义: ① MIN(a,b) 求a,b 的最小值

② ISLOWER(c) 判断c 是否为小写字母 ③ ISLEAP(y) 判断y 是否为闰年 ④ CIRFER(r) 计算半径为r 的圆周长 解答:

① MIN(a, b):求a, b 的最小值。 #define MIN(a, b) (a) < (b) ? (a): (b)

② ISLOWER(c):判断c 是否为小写字母。 #define ISLOWER(c) (((c) >= 'a') && ((c) <= 'z') ) ③ ISLEAP(y):判断y 是否为闰年。

#define ISLEAP(y) ((y) % 4 == 0 && (y) % 100 != 0) || ((y) % 400 = = 0) ④ CIRFER(r):计算半径为r 的圆周长。 #define PI 3.14159

#define CIRFER(r) 2*PI*(r)

10-3 分别用函数和带参宏实现从3 个数中找出最大数,请比较两者在形式上和使用上的区 别。 解答:

1) 函数实现

int max( int x, int y, int z ) { int t; if(x>=y)

if (x>=z) t=x; else t=z; else

if (y>=z) t=y; else t=z; return t; }

2) 宏实现

#define MAX( x, y, z ) x>=y? (x>=z? x:z) : (y>=z? y:z)

两者在定义形式上完全不同。使用上函数是在执行时,从主调函数转到函数max(),然 后再返回到主调函数,函数体始终存在;而宏是在编译预处理时,用条件表达式去替换 MAX(int x, int y, int z ),等程序执行时,执行的是条件表达式,而不再存在MAX(int x, int y, int z )的式子。

2 习题参考答案

一、选择题

1.要调用数学函数时,在#include 命令行中应包含 C 。 A.”stdio.h” B.”string.h” C.”math.h” D.”ctype.h” 2.对于以下递归函数f,调用f(4),其返回值为 A 。 int f(int n)

{ if (n) return f(n - 1) + n; else return n; }

A.10 B.4 C.0 D.以上均不是 3.执行下列程序: #define MA(x, y) ( x*y ) i = 5;

i = MA(i, i + 1) – 7; 后变量i 的值应为 B 。 A.30 B.19 C.23 D.1

4.宏定义“#define DIV(a, b) a/b”,经DIV(x + 5, y - 5) 引用,替换展开后是 A 。 A.x + 5 / y - 5 B.x + 5 / y – 5 C.(x + 5) / (y - 5) D.(x + 5) / (y - 5);

5.定义带参数的宏“#define JH(a,b,t) t = a; a = b; b = t”,对两个参数a、b 的值进行交换,下

列表述中哪个是正确的 C 。

A.不定义参数a 和b 将导致编译错误 B.不定义参数a、b、t 将导致编译错误 C.不定义参数t 将导致运行错误 D.不需要定义参数a、b、t 类型 6.执行下面程序,正确的输出是 A 。 int x = 5, y = 7; void swap ( ) { int z ;

z = x ; x = y ; y = z ; }

int main(void) { int x = 3, y = 8; swap ( ) ;

printf ( \return 0 ; }

A.3, 8 B.8, 3 C.5, 7 D.7, 5 7.下面说法中正确的是 A 。

A.若全局变量仅在单个C 文件中访问,则可以将这个变量修改为静态全局变量,以降低模 块间的耦合度

B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低 模块间的耦合度

C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑变量 生命周期问题

D.静态全局变量使用过多,可那会导致动态存储区(堆栈)溢出

二、填空题

1.执行完下列语句段后, i 值为 2 。 int i;

int f(int x)

{ static int k = 0; x += k++; return x; }

i=f(f(1));

2.执行完下列语句段后, i 的值为 5 。 int i;

int f(int x)

{ return ((x>0)? f(x-1)+f(x-2):1); }

i=f(3);

3.下列程序段A 与B 功能等价,请填写程序段B 中相应语句。 程序段A: int f( int n ) { if(n<=1) return n; else

return f(n-1)+f(n-2); }

程序B: int f( int n ) { int t, t0, t1 ; t0=0; t1=1; t=n; while ( n>1 ) { t = t0+t1 ; t0 = t1; t1 = t; n - -;

}

return t ; }

4.下面程序用于计算 f(k , n)=1k+2k+…+nk ,其中power(m , n )求mn。请填写程序中相应 语句。

# include int power(int m , int n) { int i ; int p=1 ;

for( i=1 ; i<=n ; i++) p = p * m ; return p ; }

int f(int k , int n) { int i ; int s=0 ;

for( i=1 ; i<=n ; i++) s = s + power(i, k) ; return s ; }

int main(void) { int k , n ;

scanf(“%d%d”, &k, &n ) ;

printf(“f(%d, %d)=%ld” , k, n, f(k, n)) ; return 0; }

5.下列递归程序的输出结果为 g=4,g=3,k=6 。 #include int fib(int g) { switch(g){ case 0: return 0; case 1:

case 2: return 2; }

printf(\

return fib(g-1) + fib(g-2); }

int main(void) { int k;

k = fib(4);

printf(\return 0; }

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C语言程序设计及实验指导练习及习题参考答案(8--10)(8)在线全文阅读。

C语言程序设计及实验指导练习及习题参考答案(8--10)(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/419153.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: