1 知识点
(1)野指针不能正常使用 (野指针有三种类型)
(2)32位系统下,使用的最大内存空间是2^32。(2^32Byte == 2^32/1024KB ==2^32/1024/1024MB==2^32/1024/1024/1024GB == 4GB)64位系统下,使用的最大空间是2^64
(3)指针可以比较大小,指针中存储的是地址,地址可以看成一个数据,因此是可以比较大小的。
(4)两个指针相减,指针必须指向一段连续空间,减完之后的结构代表两个指针之间相差元素的个数。
(5)指针数组,落到数组上面,还是一个数组,数组里面存放的是都是指针。
(6)sizeof不可以在函数内,strlen可以在函数内
(7)在循环体中,尽量不要改变循环变量i ,j ,k 这样的值,否则影响循环。
2 写一个函数,可以逆序一个字符串的内容。
数据范围:1≤len(str)≤10000
代码展示:
1. #include <stdio.h> 2. #include <string.h> 3. int main() 4. { 5. char arr[1000] = { 0 }; 6. gets(arr); 7. char* left = arr; 8. char* right = arr + strlen(arr) - 1; 9. while (left < right) 10. { 11. char ret = *left; 12. *left = *right; 13. *right = ret; 14. left++; 15. right--; 16. } 17. printf("%s", arr); 18. return 0; 19. }
知识点: gets(arr)表示输入一个字符串到数组arr
3 打印水仙花数
求出0~100000之间的所有“水仙花数”并输出。 “水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
代码展示:
1. #include <stdio.h> 2. #include <math.h> 3. int main() 4. { 5. int i = 0; 6. for (i = 0; i <= 100000; i++) 7. { 8. int n = 1; 9. int tmp = i; 10. while (tmp /= 10) 11. { 12. n++; 13. } 14. tmp = i; 15. int sum = 0; 16. while (tmp) 17. { 18. sum = sum + (int)pow(tmp % 10, n); 19. tmp /= 10; 20. } 21. if (sum == i) 22. { 23. printf("%d ", i); 24. } 25. } 26. return 0; 27. }
知识点:(1)pow(a,n)返回值double,注意类型转换 头文件为math,h
注意:(1)在循环体中,尽量不要改变循环变量i ,j ,k 这样的值,否则影响循环,如果需要用的话,可以将循环变量赋给中间值。
(2)while 循环,注意条件,学会尝试应用0为假和其他数为真
4 打印菱形
代码展示:
1. #include <stdio.h> 2. int main() 3. { 4. int line = 0; 5. scanf("%d", &line); 6. int i = 0; 7. for (i = 0; i < line; i++) 8. { 9. int j = 0; 10. for (j = 0; j < line - 1 - i; j++) 11. { 12. printf(" "); 13. } 14. for (j = 0; j < 2 * i + 1; j++) 15. { 16. printf("*"); 17. } 18. printf("\n"); 19. } 20. for (i = 0; i < line - 1; i++) 21. { 22. int j = 0; 23. for (j = 0; j < i + 1; j++) 24. { 25. printf(" "); 26. } 27. for (j = 0; j < 2 * (line - 2 - i) + 1; j++) 28. { 29. printf("*"); 30. } 31. printf("\n"); 32. } 33. return 0; 34. }