CH9_1
//两处错误,下为改正后函数:
double triangle_area(double base, double height)
{
double product;
product = base * height;
return product / 2;
}
CH9_2
int check(int x, int y, int n)
{
return x >= 0 && x <= n && y >= 0 && y <= n;
}
CH9_3
int gcd(int m, int n)
{
int t;
while (n != 0) {
t = m % n;
m = n;
n = t;
}
return m <= 0 ? -m : m;
}
CH9_4
int day_of_year(int month, int day, int year)
{
int days = day;
int m[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
m[1]++;
}
for (int i = 0; i < month-1; i++) {
days += m[i];
}
return days;
}
CH9_5
int num_digits(int n)
{
int digits = 0;
while (n > 0) {
n /= 10;
digits++;
}
return digits;
}
CH9_6
int digit(int n, int k)
{
int digit = -1;
while (k > 0) {
digit = n % 10;
n /= 10;
k--;
}
return digit;
}
CH9_7
All right
CH9_8
(a)and(b)are valid prototypes
CH9_9
i = 1, j = 2
CH9_10
(a):
int largest(int a[], int n)
{
int i, largest = a[0];
for (i = 1; i < n; i++) {
if (a[i] > largest)
largest = a[i];
}
return largest;
}
(b):
double average(int a[], int n)
{
int i;
double sum = a[0];
for (i = 1; i < n; i++)
sum += a[i];
return sum / n;
}
(c):
int positive_number(int a[], int n)
{
int i, count = 0;
for (i = 0; i < n; i++) {
if (a[i] > 0)
count++;
}
return count;
}
CH9_11
double average(char grades[], int n)
{
int i;
double sum = 0;
for (i = 0; i < n; i++) {
switch (toupper(grades[i])) { //<ctype.h> wanted
case 'A': sum += 4.0;
break;
case 'B': sum += 3.0;
break;
case 'C': sum += 2.0;
break;
case 'D': sum += 1.0;
break;
}
}
return sum / n;
}
CH9_12
double inner_product(double a[], double b[], int n)
{
int i;
double sum = 0;
for (i = 0; i < n; i++) {
sum += a[i] * b[i];
}
return sum;
}
CH9_13
int evaluate_position(char board[8][8])
{
int white = 0, black = 0;
int row, col;
for (row = 0; row < 8; row++) {
for (col = 0; col < 8; col++) {
switch (board[row][col]) {
case 'Q': white += 9;
break;
case 'R': white += 5;
break;
case 'B':
case 'N': white += 3;
break;
case 'P': white += 1;
break;
case 'q': black += 9;
break;
case 'r': black += 5;
break;
case 'b':
case 'n': black += 3;
break;
case 'p': black += 1;
break;
}
}
}
return black - white;
}
CH9_14
bool has_zero(int a[], int n)
{
int i, count = 0;
for (i = 0; i < n; i++) {
if (a[i] == 0) {
count++;
}
}
//怀疑此题翻译有错误,给出条件并非全集,有错误
if (count == 0) {
return true;
}
else if (count == n) {
return false;
}
}
CH9_15
double median(double x, double y, double z)
{
int mid = x;
if ((y - x) * (z - y) >= 0)
mid = y;
else if ((z - y) * (x - z) >= 0)
mid = z;
return mid;
}
CH9_16
int fact(int n)
{
return n <= 1 ? 1 : n * fact(n - 1);
}
CH9_17
int fact(int n)
{
int i, sum = 1;
for (i = 2; i <= n; i++)
sum *= i;
return sum;
}
CH9_18
int gcd(int m, int n)
{
if (n == 0) {
return m <= 0 ? -m : m;
}
else {
gcd(n, m % n);
}
}
CH9_19
//该函数将一个数输出为二进制形式