第5章 函数
【练习5-1】使用函数求1到n之和:输入一个正整数 n,输出1~n之和。要求自定义和调用函数sum(n)求 1~n 之和。若要计算 m~n(m<n)之和,又该如何定义函数?试编写相应程序。
解答:
#include <stdio.h>
int sum(int n);
int main(void)
{
int n;
int sum;
printf("Enter n:")
scanf("%d", &n);
printf("sum = %d\n", sum(n));
return 0;
}
int sum(int n)
{
int result, i;
result = 0;
for(i = 1; i <= n; i++)
result = result + i;
return result;
}
若要计算 m~n(m<n)之和,则需要在 main()中定义 2 个变量 m 和 n:
scanf("%d%d", &m, &n);
printf("sum = %d\n", sum(m, n));
同时在函数定义时需设置 2 个形参:
int sum(int m, int n)
{
int result, i;
result = 0;
for(i = m; i <= n; i++)
result = result + i;
return result;
}
【练习5-2】使用函数最大值: 输入2个数,输出其中较大的数。要求定义和调用函数 max(a, b)出并返回 a、b 中较大的数。试编写相应程序。
解答:
#include <stdio.h>
double max(double a, double b);
int main(void)
{
int a, b;
printf(“Input a and b:”);
scanf("%lf%lf",&a, &b);
printf("max= %lf\n", max(a, b));
return 0;
}
double max(double a, double b)
{
if(a > b)
return a;
else
return b;
}
【练习5-3】数字金字塔:输入一个正整数 n,输出n行数字金字塔。试编写相应程序。
解答:
#include <stdio.h>
int main(void)
{
int n,i,j;
printf(“Enter n:”);
scanf("%d", &n);
for(i = 1; i <= n; i++){
for(j = 1; j <= n - i; j++)
printf(" ");
for(j = 1; j <= i; j++)
printf("%d ", i);
putchar('\n');
}
return 0;
}
【练习5-4】 思考:若把例 5-9 中静态变量 f 定义成普通局部变量,还能实现计算 n!吗?请上机检验。若把 f 换成全局变量又会如何?
解答:
若把例 5-9 中静态变量 f 定义成普通局部变量,无法实现计算 n!,因为函数返回后 f 单元被系统回收,不再保存原有数据。若把 f 换成全局变量,则能实现计算 n!,因为 f 的作用范围和生命周期一直存在。
习题5
一、选择题
1.在 C 语言程序中,若对函数类型未加显式说明,则函数的隐含类型为 D 。
A.void B.double C.char D.int
2.下列程序的输出结果是 D 。
fun(int a, int b, int c)
{ c = a * b; }
int main(void)
{ int c;
fun(2, 3, c);
printf(”%d\n”, c);
return 0;
}
A.0 B.1 C.6 D.无法确定
3.建立自定义函数的目的之一是 B(优先)、C 。
A.提高程序的执行效率 B.提高程序的可读性
C.减少程序的篇幅 D.减少程序文件所占内存
4.以下正确的函数定义形式是 A 。
A.double fun(int x, int y) B.double fun(int x; int y)
C.double fun(int x, int y); D.double fun(int x, y)
5.以下不正确的说法是 C 。
A.实参可以是常量、变量或表达式
C.形参可以是常量、变量或表达式
B.实参可以是任何类型
D.形参应与对应的实参类型一致
6.以下正确的说法是 D 。
A.实参与其对应的形参共同占用一个存储单元
B.实参与其对应的形参各占用独立的存储单元
C.只有当实参与其对应的形参同名时才占用一个共同的存储单元
D.形参是虚拟的,不占用内存单元
二、填空题
1.下列程序的输出结果为 2357 。
#include <stdio.h>
int fun3(int m);
int main(void)
{ int n;
for (n = 1; n < 10; n++)
if (fun3(n) == 1) printf("%d ", n);
return 0;
}
int fun3(int m)
{ int i;
if (m == 2 || m == 3) return 1;
if (m < 2 | |m % 2 == 0) return 0;
for (i = 3; i < m; i = i + 2)
if (m % i == 0) return 0;
return 1;
}
2.输入若干个正整数,判断每个数从高位到低位各位数字是否按值从小到大排列,请根据题意,将程序补充完整。
#include <stdio.h>
int fun1( int m );
int main(void)
{ int n;
scanf("%d", &n);
while (n > 0) {
if(fun1(n))
printf("%d 中各位数字按从小到大排列\n", n);
scanf("%d", &n);
}
}
int fun1( int m )
{ int k;
k = m % 10;
while(m)
if( m / 10 % 10 > k)
return 0;
else { m = m/10 ; k = m % 10; }
return 1;
}
调用printf函数s3.下列函数输出一行字符:先输出 kb 个空格,再输出 n 个指定字符(由实参指定)。请根据题意,将程序补充完整。
#include <stdio.h>
void print( int kb, int n, char zf )
{ int i;
for(i = 1; i <= kb; i++)
printf(“ ”);
for (i = 1; i <= n; i++ )
printf(“%c”, zf);
}
三、程序设计题
1.使用函数计算分段函数的值:输入 x,计算并输出下列分段函数 f(x) 的值。要求定义和调用函数 sign(x) 实现该分段函数。试编写相应程序。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论