【例6.1】对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。
#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数列问题。
#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个地区的面积,要求对它们按由小到大的顺序排序。
#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 ]
#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的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
#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】输出一个已知的字符串。
#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】输出一个菱形图。
#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】输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
#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个字符串,要求找出其中最大值。
#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]);elsestrcpy_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;
}
习题
1. 用筛选法求100之内的素数。
#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;
}
2. 用选择法对10个整数排序。
#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;
}
3. 求一个3X3的整形矩阵对角线元素之和。
#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;
}
4. 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
#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;
}
5. 将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。
#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);
}
6. 输出以下的杨辉三角形(要求输出10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
#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");}
}
7. 输出"魔方阵"。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为
8 1 6
3 5 7
4 9 2
要求输出1~n2的自然数构成的魔方阵。