一、例题
1.10个数组元素0~9,逆序输出
#include<stdio.h> int main() { int i = 9; int a[] = { 0,1,2,3,4,5,6,7,8,9 }; for (i = 9; i >= 0; i--) printf("%d\t", a[i]); return 0; }
2.数组求斐波那契数
#include<stdio.h> int main() { int i; int f[20] = { 1,1 }; for (i = 2; i < 20; i++) f[i] = f[i - 1] + f[i - 2]; for(i=0;i<20;i++) { if (i % 5 == 0) printf("\n"); printf("%12d", f[i]); } return 0; }
3.10个地区的面积,由小到大顺序排序(冒泡法)
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int arr[10]; int i = 0; int j = 0; for (i = 0; i < 10; i++) scanf("%d", &arr[i]);//9 8 7 6 5 4 3 2 1 0 for (i = 0; i < 9; i++) //0 1 2 3 4 5 6 7 8 9 //10个元素9趟冒泡排序 { for (j = 0; j < 9 - i; j++) //一趟进行9次 //8 7 6 5 4 3 2 1 0 9 { if (arr[j] > arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } for (i = 0; i < 10; i++) { printf(" %d", arr[i]); } return 0; }
4.二维数组行列互换
#include<stdio.h> int main() { int i, j; int a[2][3] = { {1,2,3},{4,5,6} }; int b[3][2]; printf("横向数组的序列:\n"); for (i = 0; i < 2; i++)//限制行,共2行 { for (j = 0; j < 3; j++)//限制列,共3列 { printf("%6d", a[i][j]);//输出数组元素值,宽度为6 b[j][i] = a[i][j];//赋值 } printf("\n"); } printf("纵向数组的序列:\n"); for (i = 0; i < 3; i++)//限制行,3行 { for (j = 0; j < 2; j++)//限制列,共2列 { printf("%6d", b[i][j]);//输出数组元素值,宽度为6 } printf("\n"); } return 0; }
5. 3*4矩阵,求最大值
#include<stdio.h> int main() { int i, j, max; int row = 0; int colum = 0; int a[3][4] = { {1,2,3,4},{9,8,7,6},{-10,10,-5,2} }; max = a[0][0]; for (i = 0; i < 3; i++) for (j = 0; j < 4; j++) if (a[i][j] > max) { max = a[i][j]; row = i; colum = j; } printf("max=%d\nrow=%d\ncolum=%d\n", max,row,colum); return 0; }
6.输出已知字符串
#include<stdio.h> int main() { char c[15] = { 'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.' }; int i; for (i = 0; i < 15; i++) printf("%c", c[i]); printf("\n"); return 0; }
7.输出*围成菱形
#include<stdio.h> int main() { char diamond[5][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; }
8.输入一行字符,统计有多少单词
#include <stdio.h> int main() { char string[81]; int i, num = 0, word = 0; char c; gets(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; }
9.3个字符串,找出最大的
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int main() { char str[3][20]; char string[20]; int i; for (i = 0; i < 3; i++) gets(str[i]); if (strcmp(str[0], str[1]) > 0) //(strcmp(字符串1,字符串2)>0)--字符串比较 //字符串1大于字符串2 strcpy(string, str[0]); //strcpy(字符串1,字符串2),字符串2赋值给字符串1 else strcpy(string, str[1]); if (strcmp(str[2], string) > 0) strcpy(string, str[2]); printf("%s\n", string); return 0; }
二、习题
1.用筛选法求100以内的素数
#include<stdio.h> #include<math.h> int main() { int i, j, k = 0, a[100]; for (i = 0; i < 100; i++) { a[i] = i + 1; //将1~100赋值给a[0]~a[99] } a[0] = 0; //先把a[0]赋值为0 for (i = 0; i < 99; i++) { for (j = i + 1; j < 100; j++) { if (a[i] != 0 && a[j] != 0) { if (a[j] % a[i] == 0) { a[j] = 0; //把不是素数的都赋值为0 } } } } printf(" 筛选法求出100以内的素数为:\n"); for (i = 0; i < 100; i++) { if (a[i] != 0) //选出值不为0的数,即素数 { printf("%4d", a[i]); k++; } if (k % 10 == 0) //输出10个数后换行 { printf("\n"); } } printf("\n"); return 0; }
2.选择法10个整数排序
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int a[10]; int i, j, tem; printf("enter 10 data: \n"); for (i = 0; i < 10; i++) { printf("a[%d]=", i); scanf("%d", &a[i]); } printf("The orginal numbers:\n"); for (i = 0; i < 10; i++) { printf("%5d", a[i]); } for (i = 0; i < 10; i++) { for (j = i + 1; j < 10; j++) { if (a[i] > a[j]) { tem = a[i]; a[i] = a[j]; //将小的值赋值给 a[i] a[j] = tem; //通过中间变量将大的值赋值给a[j],实现从左到右依次增大! } } } printf("\nThe sorted numbers: \n"); for (i = 0; i < 10; i++) { printf("%5d", a[i]); } return 0; }
3.求一个3*3矩阵对角线元素之和
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int a[3][3], sum = 0; int i, j; printf("enter data:\n"); for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) scanf("%3d", &a[i][j]); for (i = 0; i < 3; i++) sum = sum + a[i][i]; printf("sum=%6d\n", sum); return 0; }
4.排好序的数组,插入数,进行排序
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int a[11] = { 1,4,6,9,13,16,19,28,40,100 }; int temp1, temp2, number, end, i, j; printf("array a:\n"); for (i = 0; i < 10; i++) printf("%5d", a[i]); printf("\n"); printf("insert data:"); scanf("%d", &number); end = a[9]; if (number > end) a[10] = number; else { for (i = 0; i < 10; i++) { if (a[i] > number) { temp1 = a[i]; a[i] = number; for (j = i + 1; j < 11; j++) { temp2 = a[j]; a[j] = temp1; temp1 = temp2; } break; } } } printf("Now array a:\n"); for (i = 0; i < 11; i++) printf("%5d", a[i]); printf("\n"); return 0; }
5.数组逆排序
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define N 5 int main() { int a[N], i, temp; printf("enter array a:\n"); for (i = 0; i < N; i++) { scanf("%d", &a[i]); } printf("array a:\n"); for (i = 0; i < N; i++) { printf("%4d", a[i]); } for (i = 0; i < N / 2; i++) //将对称的元素的值互换 { temp = a[i]; a[i] = a[N - i - 1]; a[N - i - 1] = temp; } printf("\nNow,array a:\n"); for (i = 0; i < N; i++) { printf("%4d", a[i]); } return 0; }
6.输出10行杨辉三角形
#include <stdio.h> #define N 10 int main() { int i, j, a[N][N]; for (i = 0; i < N; i++) { a[i][i] = 1;//00;11;22;33;44;55;66;77;88;99 a[i][0] = 1;//00;10;20;30;40;50;60;70;80;90 } for (i = 2; i < N; i++) for (j = 1; j <= i - 1; j++) { a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; } for (i = 0; i < N; i++) { for (j = 0; j <= i; j++) { printf("%6d", a[i][j]); } printf("\n"); } return 0; }
7.魔方阵,每行、每列以及主、副对角线上各n个元素之和都相等
3×3的魔方阵:
8 1 6
3 5 7
4 9 2
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int a[15][15], i, j, k, p, n; p = 1; while (p == 1) { printf("enter n(n=1--15):"); scanf("%d", &n); if ((n != 0) && (n <= 15) && (n % 2 != 0)) p = 0; } for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { a[i][j] = 0; } j = n / 2 + 1; a[1][j] = 1; } for (k = 2; k <= n * n; k++) { i = i - 1; j = j + 1; if ((i < 1) && (j > n)) { i = i + 2; j = j - 1; } else { if (i < 1) i = n; if (j > n) j = 1; } if (a[i][j] == 0) a[i][j] = k; else { i = i + 2; j = j - 1; a[i][j] = k; } } for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) printf("%5d", a[i][j]); printf("\n"); } return 0; }
8.二维数组鞍点,行最大,列最小
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define N 4//行 #define M 5//列 int main() { int i, j, k, a[N][M], max, maxj, flag; printf("please input matrix:\n"); for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { scanf("%d", &a[i][j]); } } for (i = 0; i < N; i++) { max = a[i][0]; maxj = 0; for (j = 0; j < M; j++) //找出第i行中的最大数 if (a[i][j] > max) { max = a[i][j]; //将本行的最大数存放在max中 maxj = j; //将最大数所在的列号存放在maxj中 } flag = 1; //先假设是鞍点,以flag为1代表 for (k = 0; k < N; k++) if (max > a[k][maxj]) //将最大数和其同列元素相比 { flag = 0; //如果max不是同列最小,表示不是鞍点令flag1为0 continue; } if (flag) // 如果flag1为1表示是鞍点 { printf("a[%d][%d]=%d\n", i, maxj, max); // 输出鞍点的值和所在行列号 break; } } if (!flag) // 如果flag为0表示鞍点不存在 printf("It is not exist!\n"); return 0; }
9.15个数从小到大排序,折半查找
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define N 15 int main() { int i, number, top, bott, mid, loca, a[N], flag = 1, sign; char c; printf("enter data:\n"); scanf("%d", &a[0]); i = 1; while (i < N) { scanf("%d", &a[i]); if (a[i] >= a[i - 1]) i++; else printf("enter this data again:\n"); } printf("\n"); for (i = 0; i < N; i++) printf("%5d", a[i]); printf("\n"); while (flag) { printf("input number to look for:"); scanf("%d", &number); sign = 0; top = 0; //top是查找区间的起始位置 bott = N - 1; //bott是查找区间的最末位置 if ((number < a[0]) || (number > a[N - 1])) //要查的数不在查找区间内 loca = -1; // 表示找不到 while ((!sign) && (top <= bott)) { mid = (bott + top) / 2; if (number == a[mid]) { loca = mid; printf("Has found %d, its position is %d\n", number, loca + 1); sign = 1; } else if (number < a[mid]) bott = mid - 1; else top = mid + 1; } if (!sign || loca == -1) printf("cannot find %d.\n", number);; printf("continu or not(Y/N)?"); scanf(" %c", &c); if (c == 'N' || c == 'n') flag = 0; } return 0; }
10
#include <stdio.h> int main() { int i, j, upp, low, dig, spa, oth; char text[3][80]; upp = low = dig = spa = oth = 0; for (i = 0; i < 3; i++) { printf("please input line %d:\n", i + 1); gets(text[i]); for (j = 0; j < 80 && text[i][j] != '\0'; j++) { if (text[i][j] >= 'A' && text[i][j] <= 'Z') upp++; else if (text[i][j] >= 'a' && text[i][j] <= 'z') low++; else if (text[i][j] >= '0' && text[i][j] <= '9') dig++; else if (text[i][j] == ' ') spa++; else oth++; } } printf("\nupper case: %d\n", upp); printf("lower case: %d\n", low); printf("digit : %d\n", dig); printf("space : %d\n", spa); printf("other : %d\n", oth); return 0; }
11
#include <stdio.h> int main() { char a[5]={'*','*','*','*','*'}; int i,j,k; char space=' '; for (i=0;i<5;i++) { printf("\n"); printf(" "); for (j=1;j<=i;j++) printf("%c",space); for (k=0;k<5;k++) printf("%c",a[k]); } printf("\n"); return 0; }
12.
#include <stdio.h> int main() { int j, n; char ch[80], tran[80]; printf("input cipher code:"); gets(ch); printf("\ncipher code :%s", ch); j = 0; while (ch[j] != '\0') { if ((ch[j] >= 'A') && (ch[j] <= 'Z')) tran[j] = 155 - ch[j]; else if ((ch[j] >= 'a') && (ch[j] <= 'z')) tran[j] = 219 - ch[j]; else tran[j] = ch[j]; j++; } n = j; printf("\noriginal text:"); for (j = 0; j < n; j++) putchar(tran[j]); printf("\n"); return 0; }
13
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { char s1[80], s2[40]; int i = 0, j = 0; printf("input string1:"); scanf("%s", s1); printf("input string2:"); scanf("%s", s2); while (s1[i] != '\0') i++; while (s2[j] != '\0') s1[i++] = s2[j++]; s1[i] = '\0'; printf("\nThe new string is:%s\n", s1); return 0; }
14
#include <stdio.h> int main() { int i, resu; char s1[100], s2[100]; printf("input string1:"); gets(s1); printf("\ninput string2:"); gets(s2); i = 0; while ((s1[i] == s2[i]) && (s1[i] != '\0'))i++; if (s1[i] == '\0' && s2[i] == '\0') resu = 0; else resu = s1[i] - s2[i]; printf("\nresult:%d.\n", resu); return 0; }
15
#include <stdio.h> #include <string.h> int main() { char s1[80], s2[80]; int i; printf("input s2:"); scanf("%s", s2); for (i = 0; i <= strlen(s2); i++) s1[i] = s2[i]; printf("s1:%s\n", s1); return 0; }