一月总结
2017-10-29 17:43
169 查看
数组
二维数组如果没有数,按一位数组算a[1][2] = a[1*2 + 2] = a[4],就是a[2][0],就是要取数组中的第五个元素5.
数组二分查找法
不断的取中间值,直到找到为止;遇到除不净的时候取中间值如:11/2中间值就是6
//杨辉三角
函数
循环
//数组不做越界检查 void f(int a[3][2]) { a[1][2] = 100; } void main() { int a[3][2] = { 1,2, 3,4, 5,6 }; printf("\n%d", a[1][2]); //要取第三行第二列,但是数组没有第三行第二列怎么办. //把它当做一维数组理解,a[i][j]对应的就是一维数组中的下标为:行数 * 列数 + j 的元素 //所以a[1][2] = a[1*2 + 2] = a[4],就是a[2][0],就是要取数组中的第五个元素5. f(a); printf("\n%d", a[1][2]); getchar(); }
二维数组如果没有数,按一位数组算a[1][2] = a[1*2 + 2] = a[4],就是a[2][0],就是要取数组中的第五个元素5.
数组二分查找法
void main() { int a[20], head = 0, end = 20, mid = (head + end) / 2, key, i; //head表示头,end表示尾,mid表示中间,key代表我们输入的数 for (i = 0; i < end; i++) { a[i] = i + 1; printf("%d ", a[i]); //初始化数组后,数组元素呈从小到大的造型排列 } printf("\n请任意输入一位数字: "); scanf("%d", &key); getchar(); while (key != a[mid]) { key > a[mid] ? (head = mid + 1) : (end = mid - 1); //跟中间位置比,大了,就把前面的全部砍掉。小了,就把后面的全部砍掉。 mid = (head + end) / 2; //每次缩小范围后,都要重新定位中间位置,为下一次的比较做准备 if (head == end && key != a[mid]) //当砍到只剩一位时,说明没有找到。 { printf("数组中不存在您输入的数字\n"); getchar(); return; //找不到就跳出整个函数,否则就是死循环了。 } } printf("您要找的数字在数组中的下标是%d ", mid); //如果程序能运行到这里,说明找到了。 getchar(); }
不断的取中间值,直到找到为止;遇到除不净的时候取中间值如:11/2中间值就是6
矩阵旋转 void main() { int a[5][5], b[5][5], i, j; for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { a[i][j] = 10 + rand() % 91; //b[j][4 - i] = a[i][j]; //顺90度 //b[4-i][4 - j] = a[i][j]; //180度 //b[4 - j][i] = a[i][j]; //逆90度 b[4 - i][j] = a[i][j]; //上下镜像翻转 //b[i][4 - j] = a[i][j]; //左右镜像翻转 printf("%5d", a[i][j]); } printf("\n"); } //printf("\n\t顺时针旋转90度\n\n"); //printf("\n\t顺时针旋转180度\n\n"); //printf("\n\t逆时针旋转90度\n\n\n"); printf("\n\t上下镜像翻转\n\n"); //printf("\n\t左右镜像翻转\n\n"); for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { printf("%5d", b[i][j]); } printf("\n"); } getchar(); }
//杨辉三角
void main() { int a[10][10] = { 0 },i,j; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { if (j == 0) { a[i][j] = 1; } if (j > 0 && i >= j) { a[i][j] = a[i - 1][j] + a[i - 1][j - 1]; } //核心代码 if (i >= j) { printf("%5d", a[i][j]); } } putchar('\n'); } getchar(0); }
函数
运用函数递归调用,打印100加到1的和 int add(int num) { //printf("\n%d", num); if (num == 1) { return 1; } else { return num + add(num - 1); //4 + add(3) // 4 + 3 + add(2) //4 + 3 + 2 + add(1)//4 + 3 + 2 + 1; } } void main() { int n; scanf("%d", &n); getchar(); printf("\n\n从1加到%d的结果是%d", n, add(n)); getchar(); }
运用函数递归调用,打印1加到100的和 int add(int num,int i) { if (num == i) { return num; } else { return i + add(num,i+1); //1 + add(5,2) // 1 + 2 + add(5,3) //1 + 2 + 3 +add(5,4) //1 + 2 + 3 +4 + add(5,5) //1 + 2 + 3 +4 + 5 } } void main() { int n; scanf("%d", &n); getchar(); printf("从1加到%d的结果是%d", n, add(n,1)); getchar(); }
编写一个函数,用于返回菲薄纳西数列 int fibonacci(int n) { int a = 1, b = 1, sum = 0; for (int i = 2; i < n; i++) { sum = a + b; a = b; b = sum; } return sum; } void main() { int n; scanf("%d", &n); getchar(); printf("sum = %d", fibonacci(n)); getchar(); }
循环
判断一个数是否为水仙花数 void checkNum(int a) { int g = a % 10; int s = (a / 10) % 10; int b = a / 100; return (g*g*g + s*s*s + b*b*b == a) ? printf("\n%d是水仙话术", a) : NULL; } void main() { int i; for (i = 100; i < 1000; i++) { checkNum(i); getchar(); }
//判断质数 int checkPrimer(int num) { int i; for (i = 2; i < num; i++) { if (num%i == 0) { return 0; } } if (i == num && i != 1) { return 1; } return 0; } void main() { int a = 129; checkPrimer(a) ? printf("%d是质数", a) : printf("%d不是质数", a); getchar(); }
//习题9:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 void main() //90 = 2 * 3 * 3 * 5 { int num,i = 2,a = 0; scanf("%d",&num); getchar(); printf("\n%d = ",num); while (num / i >= 1) { if (num % i == 0) { !a ? printf("%d", i) : printf(" * %d", i); num /= i; a++; } else { i++; } } getchar(); }