9.1
设计一个函数min(x,y),返回较小值,x和y是double类型
#include <stdio.h>
#include <Windows.h>
double min(double x, double y)
{
if (x > y)
return y;
return x;
}
//---------测试---------
int main(void)
{
double x = 1.2;
double y = 1.5;
printf("%lf", min(x, y));
system("pause");
return 0;
}
9.2 & 9.3
设计一个函数chline(ch, i, j),将指定的字符打印 j 行 i 列
#include <stdio.h>
#include <Windows.h>
void chline(char ch, int i, int j)
{
int m;
while (i-- > 0)
{
m = j;
while (m-- > 0)
putchar(ch);
printf("\n");
}
}
//---------测试---------
int main(void)
{
char ch = 'B';
int i = 3, j = 2;
chline(ch, i, j);
system("pause");
return 0;
}
9.4
两数的调和平均数计算方法:先得到两数的倒数,然后计算两个倒数的平均值,最后取计算结果的倒数。编写一个函数,接受两个double类型的参数,返回这两个参数的调和平均值
#include <stdio.h>
#include <Windows.h>
double aver(double x, double y)
{
return 2 / (1 / x + 1 / y);
}
//---------测试---------
int main(void)
{
double x = 1.6;
double y = 1.8;
printf("%lf", aver(x, y));
system("pause");
return 0;
}
9.5
编写并测试一个函数larger_of(),该函数把两个double类型变量的值替换为较大的值
#include <stdio.h>
#include <Windows.h>
void larger_of(double* a, double* b)
{
if (*a > *b)
*b = *a;
else
*a = *b;
}
//---------测试---------
int main(void)
{
double x = 1.6;
double y = 1.8;
double* a = &x, * b = &y;
larger_of(a, b);
printf("%lf\n%lf", x, y);
system("pause");
return 0;
}
9.6
编写并测试一个函数,该函数以3个double变量的地址作参数,把最小值放入第1个变量,中间值放入第2个变量,最大值放入第3个变量
#include <stdio.h>
#include <Windows.h>
void sort(double* a, double* b, double* c)
{
double z;
if (*a > *b)
{
z = *b;
*b = *a;
*a = z;
}
if (*a > *c)
{
z = *c;
*c = *a;
*a = z;
}
if (*b > *c)
{
z = *c;
*c = *b;
*b = z;
}
}
//---------测试---------
int main(void)
{
double n1 = 1.6;
double n2 = 1.8;
double n3 = 0.2;
double* a = &n1, * b = &n2, * c = &n3;
sort(a, b, c);
printf("%lf\n%lf\n%lf", n1, n2, n3);
system("pause");
return 0;
}
9.7
编写一个函数,从便准输入中读取字符,直到遇到文件结尾。程序要报告每个字符是否是字母,如是,报告该字母在字母表中的数值位置
#include <stdio.h>
#include <Windows.h>
void find(char ch)
{
while ((ch=getchar()) != EOF)
{
while (getchar() != '\n')
continue;
if ('a' <= ch && ch <= 'z')
printf("YES\n%d\n\n", (ch - 'a' + 1));
else if ('A' <= ch && ch <= 'Z')
printf("YES\n%d\n\n", (ch - 'A' + 1));
else
printf("NO\n");
}
}
//---------测试---------
int main(void)
{
char ch = 0;
find(ch);
system("pause");
return 0;
}
9.8
double power(double n, int p)
{
double pow = 1;
int i;
for (i = 1; i <= p; i++)
pow *= n;
return pow;
}
power()函数返回一个double类型数的正整数次幂。改进此函数,使其能正确计算负幂。另外,函数要处理0的任何次幂都是0,任何数的0次幂为1(函数应该报告0的0次幂未定义,因此将此值处理为1)。使用一个循环,并在程序中此时该函数
#include <stdio.h>
#include <Windows.h>
double power(double n, int p)
{
double pow = 1;
int i, j = 1;
if (n == 0)
{
if (p == 0)
{
printf("0^0未定义\n");
return 1;
}
else
return 0;
}
else if (p == 0)
return 1;
else
{
if (p < 0)
{
j = -1;
p = -p;
}
for (i = 1; i <= p; i++)
pow *= n;
}
if (j < 0)
pow = 1 / pow;
return pow;
}
//---------测试---------
int main(void)
{
double n = 0;
int i = 0;
while (scanf("%lf %d", &n, &i))
{
printf("%lf\n\n", power(n, i));
}
system("pause");
return 0;
}
9.9
使用递归函数重写9.8
#include <stdio.h>
#include <Windows.h>
double power(double n, int p)
{
double pow = 1;
if (n == 0)
{
if (p == 0)
{
printf("0^0未定义\n");
pow = 1;
}
else
pow = 0;
}
else if (p > 0)
{
pow *= n * power(n, p - 1);
}
else if (p < 0)
{
pow *= (1.0 / n) * power(n, p + 1);
}
return pow;
}
//---------测试---------
int main(void)
{
double n = 0;
int i = 0;
while (scanf("%lf %d", &n, &i))
{
printf("%lf\n\n", power(n, i));
}
system("pause");
return 0;
}
9.10
//以二进制形式打印整数
void to_binaty(unsigned long n)
{
int r;
r = n % 2;
if (n >= 2)
to_binaty(n / 2);
putchar(r == 0 ? '0' : '1');
return;
}
改写上述函数,编写一个to_base_n()的函数接受两个参数,且第二个参数在2~10范围内,然后以第2个参数中指定的进制打印第1个参数的数值。
#include <stdio.h>
#include <Windows.h>
void to_base_n(unsigned int n, int i)
{
int r;
r = n % i;
if (n >= i)
to_base_n((n - r) / i, i);
printf("%d", r);
return;
}
//---------测试---------
int main(void)
{
unsigned int n = 129;
int i = 8;
to_base_n(n, i);
system("pause");
return 0;
}
9.11
编写一个Fibonacci()函数,用循环代替递归计算推斐波那契数列
#include <stdio.h>
#include <Windows.h>
void Fibonacci(int i)
{
int x = 0, y = 1;
int j = 0;
for (j = 0; j < i; j++)
{
y = x + y;
x = y - x;
}
printf("%d\n", x);
}
//---------测试---------
int main(void)
{
Fibonacci(10);
system("pause");
return 0;
}