第7章变量及字符处理的几个问题1.pptVIP

  • 2
  • 0
  • 约2.22千字
  • 约 12页
  • 2017-05-29 发布于四川
  • 举报
* * 第七章 变量及字符处理的几个问题 变量的存储模式 同名变量的分辨 变量赋初值及初值问题 实型变量的存储及常见问题 字符处理的结束标志问题 * * 一、变量的存储模式 设有定义: int a=1; 则系统将在内存中给变量a分配两个字节的空间,并将1存入。 存储时先存低字节还是先存高字节取决于CPU,图中所示的小端模式的存储方式。00000000 a 低地址 高地址 * * 二、同名变量的分辨 int a = 1, b = 2, c = 3; int main() { int a,b; a = 4; // ?变量 b = 5; // ?变量 c = 6; // ?变量 if(a b){ int c; c = a; // ?变量 a = b; // ?变量 b = c; } //以下代码略 } * * 三、变量赋初值及初值问题 赋初值时不能连等 int a=b=c=3; //错误 变量不赋初值时,其值: 全局变量: 清为0模式 局部静态变量: 清为0模式 局部自动变量(含寄存器变量):不确定 * * 四、实型变量的存储及常见问题 实型变量的存储遵循IEEE754格式,其存储规则是:任何一个实数都要表示成规定格式: (符号)M*2n 其中1=M2 如:30.0表示为? + 1.875 * 24 -0.3925表示为 - 1.57 * 2-2 然后计算机将符号、指数、小数三部分分别存储,如下表所示: 符号位(0或1) 指数部分 (n+127) 纯小数部分?(M-1) 占1 位?[第31位] 占8位 [第30位~第23位] 占23位 [第22位~第00位] * * 对于30.0 = +1.875 * 24 符号位 : + 表示为: 0 指数部分 : 4+127=131 表示为: 纯小数部分 :0.875 表示为: 11100000000000000000000 故30.0存为4字节的float型变量中时,其内存存储状况是(s7_1验证): 注意: 实数的存储有时是不精确的 如:1.2的纯小数部分是0.2,化为二进制应为: 0011 0011 0011 0011 0011 0011 0011……. 但IEEE754规定只存储前面23位,23位之后的或者进位或者丢弃,都将导致存储的值出现偏差。 不要试图比较float型的变量与常量是否相等,下面程序(s7_2)的运行结果是:不相等 float x = 0.2; if(x == 0.2) printf(“相等\n”); else printf(“不相等\n”); * * 同样地,下面的循环是无限循环,其输出结果是:0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 …… #include stdio.h int main() { float x; for(x = 0.1; x != 1.0; x += 0.1) printf(“%4.1f ”, x); return 0; } * * * * 五、字符处理的结束标志问题 例7-3:键盘输入一行字符,统计大写字符的个数 方法一: #include stdio.h int main() { char c; int n = 0; while( (c = getchar()) != ‘\n’ ) //遇到换行符停止循环 if(c = 65 c = 90) n++; printf(“%d\n”, n); return 0; } * * 例7-3:键盘输入一行字符,统计大写字符的个数 方法二: #include stdio.h int main() { char s[80]; int i, n = 0; gets(s); for(i = 0; s[i] != ‘\0’; i++)

文档评论(0)

1亿VIP精品文档

相关文档