例题
一、输出整数各位数字
求出它是几位数 。
分别打印出每一位数字
按逆序打印出各位数字
int getdigit(int num) //整数有多少位 { int count = 0; while (num) { count++; num /= 10; } return count; } void ReprintNum(int num) //逆序打印所有数字 { while (num) { printf("%d", num % 10); num = num / 10; } } void printNum(int num) //正序打印所有数字 { int i = 0, j = 0; char arr[16]; while (num) { arr[i++] = num % 10; num /= 10; } for (j = i - 1; j >= 0; j--) printf("%d ", arr[j]); }
2.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数
int getdigit(int num) //整数有多少位 { int count = 0; while (num) { count++; num /= 10; } return count; } int fun(int num) { int sum = 0;//要返回的数字 int n = getdigit(num); int base = 1; for (int i = 1; i < n; i++) { base *= 10; } while (num) { int temp = num % 10; //取个位数 sum += temp * base; num /= 10; base /= 10; } return sum; } int main() { for (int i = 1000; i < 9999; i++) { if (i == 4 * fun(i)) { printf("%d", i); break; } } }
3.验证歌德巴赫猜想
验证歌德巴赫猜想。一个充分大的偶数(大于或等于6)可以分解为两个素数之和。试编程序,将 6至50之间全部偶数表示为两个素数之和。
int zhishu(int num) { if (num < 2) return 0; if (num == 2) return 1; //质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 for (int i = 2; i <= sqrt((double)num); i++) //求质数 { if (num % i == 0) { return 0; } } return 1; } int main() { for (int i = 6; i < 51; i = i + 2) { for (int j = 2; j < i; j++) { if (zhishu(j) && zhishu(i - j)) { printf("%d = %d + %d\n", i, j, i - j); break; } } } }
4.转置矩阵:将一个二维数组行列元素互换,即可得到其转置矩阵
int a[2][3] = { 1,2,3,4,5,6 }; int b[3][2], i, j; for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) printf("%5d", a[i][j]); printf("\n"); } for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) b[j][i] = a[i][j]; //转置 for (i = 0; i < 3; i++) { for (j = 0; j < 2; j++) printf("%5d", b[i][j]); printf("\n"); }
4.求矩阵的马鞍点。马鞍点即矩阵元素所在行的最大值,以及所在列的最小值。
#define M 100 #define N 100 int main() { int i, j, k, m, n, flag1, flag2; int a[M][N], max; printf("输入行数 m:"); scanf("%d", &n); printf("\n输入列数 n:"); scanf("%d", &m); printf("输入要测试的矩阵数据:"); for (i = 0; i < m; i++) for (j = 0; j < n; j++) scanf("%d", &a[i][j]); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) printf("%5d ", a[i][j]); printf("\n"); } flag2 = 0; for (i = 0; i < m; i++) { max = a[i][0]; for (j = 1; j < n; j++) if (a[i][j] > max) max = a[i][j]; for (j = 0; j < n; j++) { flag1 = 0; if (a[i][j] == max) { for (k = 0, flag1 = 1; k < m && flag1; k++) if (a[k][j] < max) flag1 = 0; if (flag1) { printf("第%d行, 第%d列的 %d是鞍点\n", i, j, a[i][j]); flag2 = 1; } } } } if (!flag2) printf("\n矩阵中无鞍点!\n"); }