Skip to content

Commit ad6f992

Browse files
committed
chapter 8 exercises
1 parent 85527aa commit ad6f992

21 files changed

+856
-0
lines changed

Diff for: ex.8.10.c

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include <stdio.h>
2+
#include <stdbool.h>
3+
4+
float absoluteValue (float n)
5+
{
6+
if ( n < 0 )
7+
n = -n;
8+
9+
return n;
10+
}
11+
12+
float squareRoot (float n)
13+
{
14+
float guess = 1.0;
15+
float epsilon = .0001;
16+
17+
while ( absoluteValue ((guess * guess / n) - 1) > epsilon )
18+
guess = (guess + n / guess) / 2.0;
19+
20+
return guess;
21+
}
22+
23+
int prime (n)
24+
{
25+
if ( n == 2 ) {
26+
return 1;
27+
} else if ( n > 2 ) {
28+
bool isPrime = true;
29+
int i;
30+
31+
for ( i = 2; i <= squareRoot ((float) n); i += (i > 2) ? 2 : 1 )
32+
if ( n % i == 0 )
33+
return 0;
34+
35+
return 1;
36+
} else {
37+
return 0;
38+
}
39+
}
40+
41+
int main (void)
42+
{
43+
int n;
44+
printf ("Which number do you want to check for prime? ");
45+
scanf ("%i", &n);
46+
47+
if ( prime (n) )
48+
printf ("%i is prime\n", n);
49+
else
50+
printf ("%i is not prime\n", n);
51+
52+
return 0;
53+
}

Diff for: ex.8.11.c

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// sum the elements in an array of integers
2+
#include <stdio.h>
3+
4+
int arraySum (int array[], int length)
5+
{
6+
int i, sum = 0;
7+
8+
for ( i = 0; i < length; ++i )
9+
sum += array[i];
10+
11+
return sum;
12+
}
13+
14+
int main (void)
15+
{
16+
int i, length = 8;
17+
int array[length];
18+
19+
for ( i = 0; i < length; ++i )
20+
array[i] = i;
21+
22+
printf ("The array:\n");
23+
for ( i = 0; i < length - 1; ++i )
24+
printf ("%i, ", array[i]);
25+
printf ("%i\n", array[length - 1]);
26+
27+
printf ("sums to %i\n", arraySum (array, length));
28+
29+
return 0;
30+
}

Diff for: ex.8.12A.c

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#include <stdio.h>
2+
3+
void transposeMatrix (int matrix1[4][5], int matrix2[5][4])
4+
{
5+
int i, j;
6+
7+
for ( i = 0; i < 4; ++i )
8+
for ( j = 0; j < 5; ++j )
9+
matrix2[j][i] = matrix1[i][j];
10+
}
11+
12+
int main (void)
13+
{
14+
int i, j;
15+
int matrix1[4][5] = {
16+
{ 11, 12, 13, 14, 15 },
17+
{ 21, 22, 23, 24, 25 },
18+
{ 31, 32, 33, 34, 35 },
19+
{ 41, 42, 43, 44, 45 },
20+
};
21+
int matrix2[5][4] = { 0 };
22+
23+
printf ("matrix1:\n");
24+
for ( i = 0; i < 4; ++i ) {
25+
for ( j = 0; j < 5; ++j )
26+
printf ("%3i", matrix1[i][j]);
27+
printf ("\n");
28+
}
29+
30+
transposeMatrix (matrix1, matrix2);
31+
32+
printf ("...transposed to matrix2:\n");
33+
for ( i = 0; i < 5; ++i ) {
34+
for ( j = 0; j < 4; ++j )
35+
printf ("%3i", matrix2[i][j]);
36+
printf ("\n");
37+
}
38+
39+
return 0;
40+
}

Diff for: ex.8.12B.c

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include <stdio.h>
2+
3+
void transposeMatrix (int nRows, int nCols,
4+
int matrix1[nRows][nCols], int matrix2[nCols][nRows])
5+
{
6+
int i, j;
7+
8+
for ( i = 0; i < nRows; ++i )
9+
for ( j = 0; j < nCols; ++j )
10+
matrix2[j][i] = matrix1[i][j];
11+
}
12+
13+
int main (void)
14+
{
15+
int i, j;
16+
int matrix1[4][5] = {
17+
{ 11, 12, 13, 14, 15 },
18+
{ 21, 22, 23, 24, 25 },
19+
{ 31, 32, 33, 34, 35 },
20+
{ 41, 42, 43, 44, 45 },
21+
};
22+
int matrix2[5][4] = { 0 };
23+
24+
printf ("matrix1:\n");
25+
for ( i = 0; i < 4; ++i ) {
26+
for ( j = 0; j < 5; ++j )
27+
printf ("%3i", matrix1[i][j]);
28+
printf ("\n");
29+
}
30+
31+
transposeMatrix (4, 5, matrix1, matrix2);
32+
33+
printf ("...transposed to matrix2:\n");
34+
for ( i = 0; i < 5; ++i ) {
35+
for ( j = 0; j < 4; ++j )
36+
printf ("%3i", matrix2[i][j]);
37+
printf ("\n");
38+
}
39+
40+
return 0;
41+
}

Diff for: ex.8.13.c

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Program to sort an array of integers into ascending order
2+
3+
#include <stdio.h>
4+
5+
void sort (int a[], int n, int ascending)
6+
{
7+
int i, j, temp;
8+
9+
for ( i = 0; i < n - 1; ++i )
10+
for ( j = i + 1; j < n; ++j )
11+
if ( (ascending && a[i] > a[j]) || (!ascending && a[i] < a[j]) ) {
12+
temp = a[i];
13+
a[i] = a[j];
14+
a[j] = temp;
15+
}
16+
}
17+
18+
int main (void)
19+
{
20+
int i;
21+
int array[16] = { 34, -5, 6, 0, 12, 100, 56, 22,
22+
44, -3, -9, 12, 17, 22, 6, 11 };
23+
void sort (int a[], int n, int ascending);
24+
25+
printf ("The array before the sort:\n");
26+
27+
for ( i = 0; i < 16; ++i )
28+
printf ("%i ", array[i]);
29+
30+
sort (array, 16, 1);
31+
printf ("\n\nThe array after the ascending sort:\n");
32+
for ( i = 0; i < 16; ++i )
33+
printf ("%i ", array[i]);
34+
35+
sort (array, 16, 0);
36+
printf ("\n\nThe array after the descending sort:\n");
37+
for ( i = 0; i < 16; ++i )
38+
printf ("%i ", array[i]);
39+
printf ("\n");
40+
41+
return 0;
42+
}

Diff for: ex.8.14A.c

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#include <stdio.h>
2+
#include <stdbool.h>
3+
4+
int n;
5+
float guess = 1.0;
6+
7+
float absoluteValue (void)
8+
{
9+
float value = (guess * guess / (float) n) - 1.0;
10+
11+
if ( value < 0 )
12+
value = -value;
13+
14+
return value;
15+
}
16+
17+
float squareRoot (void)
18+
{
19+
float epsilon = .0001;
20+
21+
while ( absoluteValue () > epsilon )
22+
guess = (guess + (float) n / guess) / 2.0;
23+
24+
return guess;
25+
}
26+
27+
int prime (void)
28+
{
29+
if ( n == 2 ) {
30+
return 1;
31+
} else if ( n > 2 ) {
32+
bool isPrime = true;
33+
int i;
34+
35+
for ( i = 2; i <= squareRoot (); i += (i > 2) ? 2 : 1 )
36+
if ( n % i == 0 )
37+
return 0;
38+
39+
return 1;
40+
} else {
41+
return 0;
42+
}
43+
}
44+
45+
int main (void)
46+
{
47+
printf ("Which number do you want to check for prime? ");
48+
scanf ("%i", &n);
49+
50+
if ( prime () )
51+
printf ("%i is prime\n", n);
52+
else
53+
printf ("%i is not prime\n", n);
54+
55+
return 0;
56+
}

Diff for: ex.8.14B.c

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// sum the elements in an array of integers
2+
#include <stdio.h>
3+
4+
#define length 8
5+
6+
int array[length];
7+
8+
int arraySum (void)
9+
{
10+
int i, sum = 0;
11+
12+
for ( i = 0; i < length; ++i )
13+
sum += array[i];
14+
15+
return sum;
16+
}
17+
18+
int main (void)
19+
{
20+
int i;
21+
22+
for ( i = 0; i < length; ++i )
23+
array[i] = i;
24+
25+
printf ("The array:\n");
26+
for ( i = 0; i < length - 1; ++i )
27+
printf ("%i, ", array[i]);
28+
printf ("%i\n", array[length - 1]);
29+
30+
printf ("sums to %i\n", arraySum ());
31+
32+
return 0;
33+
}

Diff for: ex.8.14C.c

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include <stdio.h>
2+
3+
int matrix1[4][5] = {
4+
{ 11, 12, 13, 14, 15 },
5+
{ 21, 22, 23, 24, 25 },
6+
{ 31, 32, 33, 34, 35 },
7+
{ 41, 42, 43, 44, 45 },
8+
};
9+
int matrix2[5][4] = { 0 };
10+
11+
void transposeMatrix (void)
12+
{
13+
int i, j;
14+
15+
for ( i = 0; i < 4; ++i )
16+
for ( j = 0; j < 5; ++j )
17+
matrix2[j][i] = matrix1[i][j];
18+
}
19+
20+
int main (void)
21+
{
22+
int i, j;
23+
24+
printf ("matrix1:\n");
25+
for ( i = 0; i < 4; ++i ) {
26+
for ( j = 0; j < 5; ++j )
27+
printf ("%3i", matrix1[i][j]);
28+
printf ("\n");
29+
}
30+
31+
transposeMatrix ();
32+
33+
printf ("...transposed to matrix2:\n");
34+
for ( i = 0; i < 5; ++i ) {
35+
for ( j = 0; j < 4; ++j )
36+
printf ("%3i", matrix2[i][j]);
37+
printf ("\n");
38+
}
39+
40+
return 0;
41+
}

Diff for: ex.8.14D.c

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#include <stdio.h>
2+
3+
#define nRows 4
4+
#define nCols 5
5+
6+
int matrix1[nRows][nCols] = {
7+
{ 11, 12, 13, 14, 15 },
8+
{ 21, 22, 23, 24, 25 },
9+
{ 31, 32, 33, 34, 35 },
10+
{ 41, 42, 43, 44, 45 },
11+
};
12+
int matrix2[nCols][nRows] = { 0 };
13+
14+
void transposeMatrix (void)
15+
{
16+
int i, j;
17+
18+
for ( i = 0; i < nRows; ++i )
19+
for ( j = 0; j < nCols; ++j )
20+
matrix2[j][i] = matrix1[i][j];
21+
}
22+
23+
int main (void)
24+
{
25+
int i, j;
26+
27+
printf ("matrix1:\n");
28+
for ( i = 0; i < 4; ++i ) {
29+
for ( j = 0; j < 5; ++j )
30+
printf ("%3i", matrix1[i][j]);
31+
printf ("\n");
32+
}
33+
34+
transposeMatrix ();
35+
36+
printf ("...transposed to matrix2:\n");
37+
for ( i = 0; i < 5; ++i ) {
38+
for ( j = 0; j < 4; ++j )
39+
printf ("%3i", matrix2[i][j]);
40+
printf ("\n");
41+
}
42+
43+
return 0;
44+
}

0 commit comments

Comments
 (0)