【例6.1】对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。
cpp
#include <stdio.h>
int main()
{
int i, a[10];
for (i = 0; i <= 9; i++)
{
a[i] = i;
}
for (i = 9; i >= 0; i--)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
【例6.2】用数组来处理求Fibonacci数列问题。
cpp
#include <stdio.h>
int main()
{
int i;
int f[20] = { 1,1 };
for (i = 2; i < 20; i++)
{
f[i] = f[i - 2] + f[i - 1];
}
for (i = 0; i < 20; i++)
{
if (i % 5 == 0)
printf("\n");
printf("%12d", f[i]);
}
printf("\n");
return 0;
}
【例6.3】有10个地区的面积,要求对它们按由小到大的顺序排序。
cpp
#include <stdio.h>
int main()
{
int a[10];
int i, j, t;
printf("input 10 numbers:\n");
for (i = 0; i < 10; i++)
scanf_s("%d", &a[i]);
printf("\n");
for (j = 0; j < 9; j++)
{
for (i = 0; i < 9 - j; i++)
{
if (a[i] > a[i + 1])
{
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
printf("the sorted numbers:\n");
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
【例6.4】将一个二维数组行和列的元素互换,存到另一个二维数组中。例如:
a = [ 1 2 3 b = [ 1 4
4 5 6 ] 2 5
3 6 ]
cpp
#include <stdio.h>
int main()
{
int a[2][3] = { {1,2,3},{4,5,6} };
int b[3][2], i, j;
printf("array a:\n");
for (i = 0; i <= 1; i++)
{
for (j = 0; j <= 2; j++)
{
printf("%5d", a[i][j]);
b[j][i] = a[i][j];
}
printf("\n");
}
printf("array b:\n");
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 1; j++)
{
printf("%5d", b[i][j]);
}
printf("\n");
}
}
【例6.5】 有一个3X4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
cpp
#include <stdio.h>
int main()
{
int i, j, row = 0, column = 0, max;
int a[3][4] = { {1,2,3,4},{9,8,7,6},{-10,10,-5,2} };
max = a[0][0];
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 3; j++)
{
if (a[i][j] > max)
{
max = a[i][j];
row = i;
column = j;
}
}
}
printf("max=%d\nrow=%d\ncolumn=%d\n",max,row,column);
return 0;
}
【例6.6】输出一个已知的字符串。
cpp
#include <stdio.h>
int main()
{
char c[15] = {'I',' ','a','m',' ','s','t','u','d','e','n','t','.'};
int i;
for (i = 0; i < 15; i++)
{
printf("%c", c[i]);
}
printf("\n");
return 0;
}
【例6.7】输出一个菱形图。
cpp
#include <stdio.h>
int main()
{
char diamond[][5] = { {' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},
{' ','*',' ','*'},{' ',' ','*'}};
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
printf("%c", diamond[i][j]);
}
printf("\n");
}
return 0;
}
【例6.8】输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
cpp
#include <stdio.h>
int main()
{
char string[81];
int i, num = 0, word = 0;
char c;
gets_s(string);
for (i = 0; (c = string[i]) != '\0'; i++)
{
if (c == ' ')
word = 0;
else if (word == 0)
{
word = 1;
num++;
}
}
printf("There are %d words in this line.\n", num);
return 0;
}
【例6.9】有3个字符串,要求找出其中最大值。
cpp
#include <stdio.h>
#include <string.h>
int main()
{
char str[3][20];
char string[20];
int i;
for (i = 0; i < 3; i++)
gets_s(str[i]);
if (strcmp(str[0], str[1]) > 0)
strcpy_s(string, str[0]);
else
strcpy_s(string, str[1]);
if (strcmp(str[2], string) > 0)
strcpy_s(string, str[2]);
printf("\nthe largest string is:\n%s\n",string);
return 0;
}
习题
- 用筛选法求100之内的素数。
cpp
#include <stdio.h>
#include <math.h>
int main()
{
int i, j, n, a[101];
for (i = 1; i <= 100; i++)
a[i] = i;
a[1] = 0;
for (i = 2; i < sqrt(100); i++)
{
for (j = i + 1; j <= 100; j++)
{
if (a[i] != 0 && a[j] != 0)
if (a[j] % a[i] == 0)
a[j] = 0;
}
}
printf("\n");
for(j = 2, n = 0; j <= 100; j++)
{
if (a[j] != 0)
{
printf("%5d", a[j]);
n++;
}
if (n == 10)
{
printf("\n");
n = 0;
}
}
printf("\0");
return 0;
}
- 用选择法对10个整数排序。
cpp
#include <stdio.h>
void selectionSort(int arr[], int n)
{
int i, j, min_idx, temp;
for (i = 0; i < n - 1; i++)
{
min_idx = i;
for (j = i + 1; j < n; j++)
{
if (arr[j] < arr[min_idx])
{
min_idx = j;
}
}
if (min_idx != i)
{
temp = arr[i];
arr[i] = arr[min_idx];
arr[min_idx] = temp;
}
}
}
void printArrsy(int arr[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[10];
int i;
printf("please input 10 numbers:");
for (i = 0; i < 10; i++)
{
scanf_s("%d", &arr[i]);
}
selectionSort(arr, 10);
printf("array after sort:");
printArrsy(arr, 10);
return 0;
}
- 求一个3X3的整形矩阵对角线元素之和。
cpp
#include <stdio.h>
int main()
{
int matrix[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};
int diagonalSum = 0;
for (int i = 0; i < 3; i++)
{
diagonalSum += matrix[i][i];
}
printf("3X3 diagonalSum is: %d\n", diagonalSum);
return 0;
}
- 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
cpp
#include <stdio.h>
void insertIntoSortedArray(int arr[], int* n, int num)
{
int i;
int isAscending = (arr[0] <= arr[*n -1]);
if (isAscending)
{
for (i = *n - 1; (i >= 0 && arr[i] > num); i--)
{
arr[i + 1] = arr[i];
}
}
else
{
for (i = *n - 1; (i >= 0 && arr[i] < num); i--)
{
arr[i + 1] = arr[i];
}
}
arr[i + 1] = num;
(*n)++;
}
void printArray(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[100] = {1, 3, 5, 7, 9};
int n = 5;
int num;
printf("please input number: ");
scanf_s("%d", &num);
insertIntoSortedArray(arr, &n, num);
printf("array after sort is: ");
printArray(arr, n);
return 0;
}
- 将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。
cpp
#include <stdio.h>
void reverseArray(int arr[], int n)
{
int start = 0;
int end = n - 1;
int temp;
while (start < end)
{
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
void printArray(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = { 8, 6, 5, 4, 1 };
int n = sizeof(arr) / sizeof(arr[0]);
printf("initial array is:");
printArray(arr, n);
reverseArray(arr, n);
printf("array after sort:");
printArray(arr, n);
}
- 输出以下的杨辉三角形(要求输出10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
cpp
#include <stdio.h>
#define N 10
int main()
{
int triangle[N][N];
for (int i = 0; i < N; i++)
{
triangle[i][0] = 1;
triangle[i][i] = 1;
for (int j = 1; j < i; j++)
{
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
}
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j <= i; j++)
{
printf("%d ", triangle[i][j]);
}
printf("\n");
}
}
- 输出"魔方阵"。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为
8 1 6
3 5 7
4 9 2
要求输出1~n2的自然数构成的魔方阵。