当前位置: 首页 > 编程语言 > C细节注意 (2008年2月13日整理)

C细节注意 (2008年2月13日整理)

  • 分类:编程语言
  • 本文标签: C++
  • 发布时间:2017-12-18 17:57:45
  • 查看数: 5
C细节注意 (2008年2月13日整理) 这是我大一学C语言时收集的,现整理如下。 1.scanf()中用%lf代表双精度数,用%f代表浮点数,这与printf()通用%f代表不同。 2.二维浮点数数组的输入一定要先声明一个变量,接着把值赋给这个变量,然后再将该变量值赋给数组。见如下代码: #include main(){ float a[2][3], x; int i, j; for(i = 0; i < 2; i++) { for (j = 0; j < 3; j++) { scanf("%f", x); a[i][j] = x; } } } 3.整数在计算机中是准确表示的,可以用二进制数表示。当用八进制数表示时,第一位数字前必须加0(数字);用十六进制数时必须加0x;无符号整数的末尾必须加字母u或U;长整数的末尾必须加字母l或L。 4.auto, register 与 static, extern 内的比较: (一) auto 和 register 型变量的初始化是在程序执行期间完成的; static 和 extern 型变量的初始化是在编译期间完成的。 (二) static 和 extern 型变量只能用常数或常数表达式进行初始化; auto 和 register 型变量除常数或常数表达式外还可用已初始化过的变量进行初始化。 如:int a = 3 + 2, b = 6, c = a + 1; static float x = 5.6 + 7.3, y = 0.7; (三) auto 和 register 型变量若未初始化,其值是不定的; static 和 extern 型变量若未初始化,其值为0; 5.算术运算符中,%只能对整形运算量施加运算。在计算两个整数的余数时,余数的符号与被除数相同。 如:3%(-2) = 1, -3 % 2 = -1, 3 % 2 = 1, -3 % (-2) = -1. 6.二维数组传送地址给一维指针时注意在数组名前加*,否则可能出现运算错误。 如: int a[3][4] = {...}, *p; p = a; /* TC 中不提示出错,只警告,但运行中可能出错*/ p = *a; /* 或用 p = a[0] 都正确 */ 7.scanf()中,在%后有一个"*"附加说明符,表示跳过指定的列数。 如:scanf("%2d %*3d %2d", &a, &b); 输入 12 345 67. 则12赋给a,67赋给b。 8.每次调用printf()、scanf(),都将返回一个整数值,其大小等于输出输入的字符个数。(printf()返回输出所有字符个数,scanf()返回赋值了的地址个数。 如:n = scanf("a = %d, %d, %d", &a, &b, &c); n为3. 9.由于getchar()要求以回车键结束输入,因此如果两个getchar()顺序出现时,第一个getchar()要求作为结束标志的回车键将被第二个getchar()接收。同样,如果getchar()出现在scanf()后边时,也会接收scanf()要求结束输入的回车符。 10.转义字符为/后跟一个特定字符或八进制或十六进制的整数。[不能为十进制数] 例:下列属于C语言合法的字符常数的是____. A) '/97' B)"A" C)'/t' D)"/0" 选C。A中97不是一个正确的八进制或十六进制数。 11.printf()中%x 和 %X 都用来输出十六进制数,差别是:若十六进制数中出现"abcdef"这些字母时,前者显示小写字母,后者显示大写字母。 12.定义数组时,TC中数组长度不超过65535(2^16-1),即定义a[65536]时会出错。 13.else 和 if 的配对关系(易错点)。当 if 没有卢它配对的其他 else 时,else 总是与离自己前面最近的 if 配对。 例:有如下程序 main() { int a = 2, b = -1, c = 2; if (a < b) if (b < 0) c = 0; else c++; printf("%d/n", c); 该程序的输出结果是____ A) 0 B) 1 C) 2 D) 3 (选C) 14.switch后面的表达式 e 只能是字符型或整型,且必须放在圆括号中,各个case中也只能使用整型常量或整型常量表达式。且 case 与其后的表达式之间必须留有空格。case 中出现的字符常数会自动转换成整型。 15.用 "%s" 控制的 scanf() 及 gets() 函数和 printf() 及 put() 函数在输入输出字符串时要求地址项作输入输出项。对一维数组,数组名就是地址量,对二维数组,数组名连同第一个下标作为地址量。 如:ch[10][80] 则 printf("%s", ch[1]); 输出 16.printf() 函数在输出字符串时,遇'/0'字符时结束。无换行功能。而 puts() 函数遇'/0'字符时结束输出,并把'/0'字符自动转换成换行符。 如:str = "Good morning", 则 printf("%s%s", str, str); 输出为 Good morningGood morning 而 puts(str); puts(str); 输出为 Good morning Good morning 17.类型转换中,浮点型数据转换为整型只能换为以下几种: (unsigned)int; (unsigned)long; (unsigned)long long; 如:float f = 23456.789; short s = f; /* Error!*/ 18.gets(char *) 函数可以读入带空格的字符串并存入一个字符数组中,区别于 scanf() 中用 %s 不能读取空格。 19.防止头文件被重复定义: #ifndef __headerfileXXX__ #define __headerfileXXX__ ... 文件内容 ... #endif

文章来源于网络

转载时请以 超链接的形式 注明:转自疯狂泰克