说明:
(1)
以下所列题目是我结合平常时所做错,重点题型和编程题.
(2)
必刷题上更新至函数
错题
1.printf输出
(1)关于printf的输出
(2)注意点
printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个
2. 关键字
continue语句和break语句相似。
所不同的是,
它不是退出一个循环,而是开始循环的一次新迭代。
3. ASCII编码
4.转义字符
5.变量
局部变量是放在内存的栈区的,全局变量是放在内存的静态区
6.for循环
(1)线段图案
(2) for循环体
(3) 素数
打印100-200的素数
素数:这个数只能除1和它本身的数
int main() { int i = 0, count = 0; for (i = 100; i <= 200; i++) { int j = 0; for (j = 2; j <= i; j++) { if (i % j == 0) { break; } } if (i == j) //它本身 { count++; printf("%d ", i); } } printf("\n"); printf("count=%d\n", count); return 0; }
(4)"x"型图案
int main() { int n = 0; while ((scanf("%d", &n) != EOF)) { int i = 0; //控制行 for (i = 0; i < n; i++) { int j = 0;//控制列 for (j = 0; j < n; j++) { if (i == j) { printf("*"); } else if (i + j == n - 1) { printf("*"); } else { printf(" "); } } printf("\n"); } } return 0; }
逐步调试:
(5)正方形图案
int main() { int n = 0; while ((scanf("%d", &n) != EOF)) { int i = 0;//控制行 for (i = 0; i < n; i++) { int j = 0; for (j = 0; j < n; j++) { if (i == 0 || i == n - 1) { printf("* "); } else if (j == 0 || j == n - 1) { printf("* "); } else { printf(" "); } } printf("\n"); } } return 0; }
逐步调试及总结
7.while循环
(1)注意点
关于while(条件表达式) 循环体, (假设循环体里面没有break,continue,return,goto等等语句)
条件表达式的执行次数总是比循环体的执行次数多一次
while循环中,当条件表达式成立时,才会执行循环体中语句,每次执行期间,都会对循环因子进行修改(否则就成为死循环),修改完成后如果while条件表达式成立,继续循环,如果不成立,循环结束
(2)求两个数的最大公约数
int main() { int a = 0, b = 0, c = 0; scanf("%d %d", &a, &b); while (c = a % b)//表达式直到为0停止 { a = b; //b-->a b = c; //c-->b } printf("这两个数的最大公约数为%d\n", b); return 0; }
8.switch..case语句
(1)switch..case中的break
(2) 注意点
switch语句中表达式的类型只能是:整形(int)和枚举类型
9.数组
数组的下标由小到大,地址由低到高
10.函数
(1)
(2) 9*9乘法口诀表
*输入n就输出到n*n的乘法口诀
int print(int n) { int i = 0; for (i = 1; i <= n; i++) { int j = 0; for (j = 1; j <= i; j++) //j<=i方便控制台输出更有条理性 { printf("%d*%d=%d ", i, j, i * j); } printf("\n"); } return 0; } int main() { int n = 0; scanf("%d", &n); print(n); return 0; }
重点题型
1.关于strlen和sizeof计算的题目
(1)strlen作用与数组
(2)转义字符和strlen
(3)关于sizeof题目
sizeof的计算
(4)strlen和sizeof的计算
4.1
4.2
2.前置++和后置++
3.数组&函数
要求:
(1)实现print() 打印数组的每个元素
(2)实现reverse() 函数完成数组元素的逆置
(3)实现函数init() 初始化数组为全0
void init(int arr[], int sz, int set) { int i = 0; for (i = 0; i < sz; i++) { arr[i] = set; } } void print(int arr[], int sz) { int i = 0; for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } printf("\n"); } void reverse(int arr[], int sz) { int left = 0; int right = sz - 1; while (left <= right) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } } int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int sz = sizeof(arr) / sizeof(arr[0]); print(arr, sz); //打印数组 reverse(arr, sz); print(arr, sz); //数组逆序 init(arr, sz, 0); //函数set置为0 print(arr, sz); //数组置0 return 0; }
编程题
1.将三个数从大到小排序
定义临时变量temp,
从大到小,先用临时变量=最小
图解:
int main() { int a = 0, b = 0, c = 0; scanf("%d %d %d", &a, &b, &c); int temp = 0; //从大到小 if (a < b) { temp = a; a = b; b = temp; } if (a < c) { temp = a; a = c; c = temp; } if (b < c) { temp = b; b = c; c = temp; } printf("%d %d %d\n", a, b, c); return 0; }
2.在数组中寻求最大值
int main() { int arr[10] = { 0 }; int i = 0; int max = arr[0]; //先令max取数组的第一个元素 for (i = 0; i < 10; i++) { scanf("%d", &arr[i]); //在控制台输入10个数 if (arr[i] > max) //如果数组中某个元素>max { max = arr[i]; //令max取数组的某个元素 } } printf("max=%d\n", max); //最后输出单独放出来,不能放在循环中,否则就会输出10个不同的最大值 return 0; }
计算最小值则相反
3.计算分组求和
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
方法一
int main() { int i = 0; double zheng = 0.0; double fu = 0.0; //分组求和肯定是小数,要用double类型 for (i = 1; i <= 100; i++) { if (i % 2 == 1) { zheng += 1.0 / i; //如果是分母是奇数,就用+ //double类型所含的表达式要加小数点和0,如:1.0 } else { fu -= 1.0 / i; //如果是分母是偶数,就用- } } printf("result=%lf\n", zheng+fu);//0.688172 return 0; }
方法二
int main() { int i = 0; double sum = 0.0; int flag = 1; //定义一个flag for(i=1; i<=100; i++) { sum += flag*1.0/i; //首先分母是奇数,用+ flag = -flag; //然后接着下一步分母是负数,就用- } printf("%lf\n", sum); return 0; }
4.数数字
数一下 1到 100 的所有整数中出现多少个数字9
int main() { int count = 0; int i = 0; for (i = 1; i <= 100; i++) { if(i%10==9) { count++; } if (i / 10 == 9) { count++; } } printf("count=%d\n", count);//20 return 0; }
*值得注意的是:
i%10==9:余数为9,i的个位数为9,如9,19,29,39...
i% 9 ==0:余数为0,是9的倍数, 如9,18,27,36...
5.数组的并序并升序
两个数组分别升序组合成一个数组,并排为升序
值得注意的是,输入的两个数组都要分别为升序!!!
int main() { int m = 0, n = 0;//数组a,b元素个数 int i = 0, j = 0;//for循环会使用到 scanf("%d %d", &m, &n); //定义数组 int a[100] = { 0 }; int b[100] = { 0 }; //输入数组a,b元素个数 for (i = 0; i < m; i++) { scanf("%d", &a[i]); } for (j = 0; j < n; j++) { scanf("%d", &b[j]); } //重新初始化为0 i = 0; j = 0; while (i < m && j < n) { if (a[i] < b[j]) { printf("%d ", a[i]); i++; } else { printf("%d ", b[j]); j++; } } if (i == m) { for (; j < n; j++) { printf("%d ", b[j]); } } if (j == n) { for (; i < m; i++) { printf("%d ", a[i]); } } }