#include<stdio.h> intmain() { int a = 0; int b = 0; int c = 0; int d = 0; int e = 0; for (a = 1; a <= 5; a++) { for (b = 1; b <= 5; b++) { for (c = 1; c <= 5; c++) { for (d = 1; d <= 5; d++) { for (e = 1; e <= 5; e++) { if (((b == 2) + (a == 3) == 1) && ((b == 2) + (e == 4) == 1) && ((c == 1) + (d == 2) == 1) && ((c == 5) + (d == 3) == 1) && ((e == 4) + (a == 1) == 1) ) { if (a * b * c * d * e == 120) printf("a=%d b=%d c=%d d=%d e=%d \n", a, b, c, d, e); } } } } } } return0; }
二维数组列排序
#include<stdio.h> intmain(){ int i, j, k, b[20][20]; int m,n; scanf("%d %d", &m, &n); for(i = 0; i < m; i++) for(j = 0; j < n; j++) scanf("%d", &b[i][j]); int temp = 0; for(i = 0; i < n; i++){ for(j = 0; j < m; j++){ for(k = 0; k < m - j - 1; k++){ if(b[k][i] < b[k + 1][i]){ temp = b[k][i]; b[k][i] = b[k + 1][i]; b[k + 1][i] = temp; } } } } for(i=0;i<m;i++){ for(j=0;j<n;j++) printf("%d ", b[i][j]); printf("\n"); } return0; }
3_7-指针
一级指针传参
#define _CRT_SECUTE_NO_WARNIG #include<stdio.h>
voidprint(int* ptr, int sz) { int i = 0; for (i = 0; i < sz; i++) { printf("%d ", *(ptr + i)); } } voidtest(char* p) {
typedefvoid(*pfun_t)(int);//对void(*)(int)的函数指针型重命名为pfun_t //typedef unsigned int uint;
pfun_tsignal(int, pfun_t);
仿射密码
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> voidAffine()/* 仿射密码 */ { char c[100]; int length, i = 0, ka = 0, kb = 0, tmp; system("cls"); printf("********仿射密码********\n请输入最初的明文:"); gets(c); length = strlen(c); printf("请输入秘钥(两数字):"); scanf("%d %d", &ka, &kb); getchar(); while (gcd(ka,26) != 1) { printf("秘钥输入错误,请重新输入:"); scanf("%d %d", &ka, &kb); getchar(); } for (i = 0; i < length; i++) { //大写字母 if (c[i] > 96 && c[i] < 123) c[i] = (ka * (c[i] - 97) + kb) % 26 + 97; //小写字母 elseif (c[i] > 64 && c[i] < 91) c[i] = (ka * (c[i] - 65) + kb) % 26 + 65; } printf("\n密文为:\n%s\n", c); //printf("********请安1~3选择:********\n"); //printf("1.仿射加密\n2/仿射解密\n3.退出\n"); } intgcd(int a, int b)/* 求最大公因数 */ { int k = 0; do { k = a % b; a = b; b = k; } while(k != 0); return a; } voidexAffine()/* 仿射加密 */ { char c[100]; int length, i = 0, ka = 0, kb = 0, tmp; system("cls"); printf("********仿射密码*******\n请输入最初的密文:"); gets(c); length = strlen(c); printf("请输入秘钥(两数字):"); scanf("%d %d", &ka, &kb); getchar(); while (gcd(ka,26) != 1) { printf("秘钥输入错误,请重新输入:"); scanf("%d %d", &ka, &kb); getchar(); } for (i = 0; i < length; i++) { //大写字母 if (c[i] > 64 && c[i] < 91) { tmp = Ni(ka, 26) * ((c[i] - 65) - kb); if (tmp < 0) c[i] = tmp % 26 + 26 + 65; else c[i] = tmp % 26 + 65; } //小写字母 if (c[i] > 96 && c[i] < 123) { tmp = Ni(ka, 26) * ((c[i] - 97) - kb); if (tmp < 0) c[i] = tmp % 26 + 26 + 97; else c[i] = tmp % 26 + 97; } } printf("\n明文为:\n %s \n", c); //printf("********请安1~3选择:********\n"); //printf("1.仿射加密\n2/仿射解密\n3.退出\n"); } intNi(int a, int b) { int i = 0; while (a * (++i) % b != 1); return i; }
intmain() { char i = '0'; printf("********请按1~3选择:********\n"); printf("1.仿射加密\n2/仿射解密\n3.退出\n"); //scanf("%c", &i); //getchar(); i = getch(); while (i != '3') { if (i == '1') Affine(); elseif (i == '2') exAffine(); printf("********请按1~3选择:********\n"); printf("1.仿射加密\n2/仿射解密\n3.退出\n"); i = getch(); } return0; }
#include<stdio.h> intmain() { short s = 5; int a = 4; printf("%d\n", sizeof(s = a + 6));//2 由s决定 printf("%d\n", s);//5 sizeof内部的表达式不会计算,只看类型 return0; }
总结:数组名的意义
sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小
&数组名,这里的数组名表示整个数组,取出的是整个数组的地址
除此之外所有的数组名都表示首元素的地址
PAT 答题卡
#include<stdio.h> #include<string.h> intIswhat(char a[]) { int flag = 0; int len = strlen(a); int i = 0; for (i = 0; i < len; i++) { if (a[i] == ';'){ flag = 1; break; } elseif (a[i] == '/'){ flag = 2; break; } } return flag; } voidinit(char s[]) { int i = 0; int len = strlen(s); for (i = 0; i < len; i++) { s[i] = '\0'; } } intmain() { int n ,m, x, y; int i = 0; int j = 0; char s[6] = { 0 }; char a[90][90] = {}; scanf("%d %d", &n, &m); for (i = 0; i < n; i++) for (j = 0; j < n; j++) a[i][j] = '.'; for (i = 0; i < m; i++) { init(s); scanf("%s", &s); if (Iswhat(s) == 0) { //printf("%s ", s); int len = strlen(s); printf("%d\n", len); if (len == 1) { x = 0; y = int(s[len - 1] - '0') - 1; } elseif (len == 2) { x = 0; y = int(s[len - 2] - '0') * 10 + int(s[len - 1] - '0'); } elseif (len == 3) { x = int(s[len - 3] - '0'); y = int(s[len - 2] - '0') * 10 + int(s[len - 1] - '0'); } else { x = int(s[len - 4] - '0') * 10 + int(s[len - 3] - '0'); y = int(s[len - 2] - '0') * 10 + int(s[len - 1] - '0'); } //printf("%d %d\n", x, y); a[n - y][x - 1] = '#'; } elseif (Iswhat(s) == 1) { int len = strlen(s); if(len == 5) { x = int(s[len - 5] - '0') * 10 + int(s[len - 4] - '0'); y = int(s[len - 2] - '0') * 10 + int(s[len - 1] - '0'); } elseif(len == 3) { x = int(s[len - 3] - '0'); y = int(s[len - 1] - '0'); } else { int index = 0; int j = 0; for (j = 0; j < len; j++) { if(s[j] == ';') { index = j; } } if (index == 2) { x = int(s[len - 4] - '0'); y = int(s[len - 2] - '0') * 10 + int(s[len - 1] - '0'); } else { x = int(s[len - 4] - '0') * 10 + int(s[len - 3] - '0'); y = int(s[len - 1] - '0'); } } a[n - y][x - 1] = '#'; } else { int len = strlen(s); if(len == 5) { x = int(s[len - 5] - '0') * 10 + int(s[len - 4] - '0'); y = int(s[len - 2] - '0') * 10 + int(s[len - 1] - '0'); } elseif(len == 3) { x = int(s[len - 3] - '0'); y = int(s[len - 1] - '0'); } else { int index = 0; int j = 0; for (j = 0; j < len; j++) { if(s[j] == '/') { index = j; } } if (index == 2) { x = int(s[len - 4] - '0'); y = int(s[len - 2] - '0') * 10 + int(s[len - 1] - '0'); } else { x = int(s[len - 4] - '0') * 10 + int(s[len - 3] - '0'); y = int(s[len - 1] - '0'); } } a[n - y][x - 1] = '#'; } } for (i = 0; i < n; i++){ for (j = 0; j < n; j++){ printf("%c", a[i][j]); } printf("\n"); } return0; }