第1章 程序设计入门
struct SStudent aStudents [20]; 好。
再例如:
#define TOTAL_ELEMENTS 100
for(i = 0; i < TOTAL_ELEMENTS; i++) { }
(2)使用sizeof(),不直接使用变量所占字节数的数值。如应该写成: int nAge;
for(j = 0; j < 100; j++ )
fwrite(fpFile, & nAge, 1, sizeof(int));
不应该写:
for( j = 0; j < 100; j++ )
fwrite( fpFile, & nAge, 1, 4);
(3)稍复杂的表达式中要积极使用括号,以免优先级理解上的混乱以及二义性。 n = k++ + j; //不好 n = (k++) + j; //好一点
(4)不很容易理解的表达式应分几行写: n = (k++) + j;应该写成: n = k + j; k++;
(5)嵌套的if else 语句要多使用 { } if(Condition1()) if(condition2()) DoSomething(); else
NoCondition2();
不够好,应该:
if(Condition1()) {
if(condition2())
DoSomething(); else
NoCondition2();
}
(6)单个函数的程序行数最好不要超过100 行(两个屏幕高)。 (7)尽量使用标准库函数。
(8)不要随意定义全局变量,尽量使用局部变量。 (9)保持注释与代码完全一致,改了代码别忘改注释。 (10)循环、分支层次最好不要超过5层。
(11)注释可以与语句在同一行,也可以在上行。 (12)一目了然的语句不加注释。
1.6 小结与习题
通过前几个小节的学习,对顺序结构程序设计和分支程序设计的核心概念和方法,然而对这些进行知识进行总结,并且完成适当的练习是很有必要的。
1.6.1 数据类型实验
实验A1:表达式11111*11111的值是多少?把5个1改为6个1呢?9个1呢? 解答:(1)计算表达式11111*11111的值 #include
printf(\
第 11 页
第1章 程序设计入门
return 0;
}
程序的运行结果为11111*11111=123454321。
(2)计算表达式111111*111111的值
只须将(1)中的printf语句改为printf(\,程序的运行结果为111111*111111=-539247567。正确的结果应为12345654321,由于这个数比较大,所以产生了溢出。
(3)计算表达式111111111*111111111的值 只须将(1)中的printf改为printf(\\11);,程序的运行结果为111111111*111111111=1653732529。正确的结果应为12345678987 654321,由于这个数比较大,所以产生了溢出。
实验A2:把实验A1中的所有数换成浮点数,结果如何? 解答:(1)计算表达式11111.0*11111.0的值 #include
printf(\return 0; }
程序的运行结果为11111*11111=123454321.000000。
(2)计算表达式111111.0*111111.0的值
只须将(1)中的printf语句改为printf(\,程序的运行结果为111111.0*111111.0=12345654321.000000。
(3)计算表达式111111111.0*111111111.0的值
只须将(1)中的printf改为printf(\\*111111111.0);,程序的运行结果为111111111.0*111111111.0=12345678987654320.00000 0。
实验A3:表达式sqrt(-10)的值是多少?尝试用种方法输出。在计算过程中系统会报错吗?
解答:
#include
printf(\return 0; }
程序的运行结果为sqrt(-10)=-1.#IND,没有报错,但结果异常。
实验A4:表达式1.0/0.0、0.0/0.0的值是多少?尝试用种方法输出。在计算过程中系统会报错吗?
解答:
#include
printf(\return 0; }
输出结果为1.0/0.0=1.#INF 0.0/0.0=-1.#IND。在计算过程中系统会报错,提示信息为“divdide or mod by zero”。
实验A5:表达式1/0的值是多少?在计算过程中系统会报错吗? 解答:表达式1/0的值无结果。在计算过程中系统会报错,提示信息为“divdide or mod by zero”。
1.6.2 scanf输入格式实验
scanf(\语句用来输入两个数,可用Tab、空格、回车,作为分隔符。
第 12 页
第1章 程序设计入门
实验B1:在同一行中输入12和2,并以空格分隔,是否得到了预期的效果? 解答:
#include
scanf(\ printf(\ return; }
从键盘上输入:12 2↙,可以达到输入两个数给变量a和b的效果。 实验B2:在不同的两行中输入12和2,是否得到了预期的效果? 解答:
从键盘上输入:12↙
2↙,也可以达到输入两个数给变量a和b的效果。。
实验B3:在实验B1和B2中,在12和2的前面和后面加入大量的空格或水平制表符(TAB),甚至插入一些空行。
解答:从键盘上输入的12和2,也可以前面和后面加入大量的空格或水平制表符(TAB),甚至插入一些空行,达到输入两个数给变量a和b的效果。
实验B4:把2换成字符s,重复实验B1~B3。
解答:从键盘上输入:12 2↙,而输出的结果为12 -85899360。 1.6.3 printf语句输出实验
在printf语句中的格式字符串,决定了数据的输入/输出格式。
实验C1:仅用一条printf语句,打印1+2和3+4,用两个空行隔开。 解答:
#include
printf(\ return; }
实验C2:试着把%d中的两个字符(百分号和小写字)。 解答:
#include
printf(\ return; }
实验C3:试着把\\n中的两个字符(反斜线和小写字母n)输出到屏幕。 解答:
#include
printf(\ return; }
实验C4:像C2、C3那样也需要“特殊方法”才能输出的东西还有哪些?哪些是printf函数引起的问题,哪些不是?
解答:输出单引号和双引号需要用\\’和\\\。 1.6.4 测试你的实践能力
问题1:int型整数的最小值和最大值是多少?(需要精确度)。 解答:(1)方法一 #include
第 13 页
第1章 程序设计入门
int main() { int a,b;
a=-pow(2,31); b=pow(2,31)-1;
printf(\ return 0; }
注意:在TC中int型整数(2字节)的最小值和最大值分别为-32768和32767;在VC6.0中int型整数(4字节)的最小值和最大值分别为-2147483648和2147483647,所以不同的编译系统为整型数据分配的字节数是不相同的。本题程序是在VC6.0中调试的。
(2)方法二
#include
printf(\ return 0; }
说明:头文件limits.h中定义了用于表示整数类型大小的常量(宏定义)。
(1)如果在C:盘上有TC,就可以在“c:\\TC”用记事本打开头文件limits.h,可以找到“#define INT_MAX 0x7FFF”和“#define INT_MIN ((int)0x8000)”。INT_MAX表示在TC中表示最大整数,0x7FFF就是32767;INT_MIN表示在TC中表示最小整数,(int)0x8000就是-32768。
(2)如果在C:盘装有VC6.0,就可以在“C:\\Program Files\\Microsoft Visual Studio\\VC98\\Include”用记事本打开头文件limits.h,可以找到“#define INT_MIN (-2147483647-1) /* minimum (signed) int value */”和“#define INT_MAX 2147483647 /* maximum (signed) int value */”。INT_MAX表示在VC6.0中表示最大整数是2147483647;INT_MIN表示在TC中表示最小整数是-2147483648。
问题2:double型浮点数能精确到多少位小数?或者,这个问本身值得商榷? 解答:
#include
printf(\ return 0; }
double型浮点数隐含输出小数位数为6位,不过还可以通printf(\来重新设置,.20中的20也可以换成其它的数值。
问题3:double型浮点数最大正数值和最小正数值分别是多少? 解答:
#include
int y = 1030;
for (double x = 0.999999999; y-- ; x *= 2) cout << x << '\\t'; cout << endl;
第 14 页
第1章 程序设计入门
y = 1030;
for (x = 0.000000001; y-- ; x /= 2) cout << x << '\\t'; cout << endl; return 0; }
由程序可得,double型浮点数最大正数值和最小正数值分别是1.79769e+308、1.73832e -319。
问题4:逻辑运算符号&&、||和!(它表示逻辑非)的相对优先级是怎样的?也就是说,a&&b||c应理解成(a&&b)||c还是a&&(b||c),或者随便怎么理解都可以?
解答:逻辑运算符号&&、||和!(它表示逻辑非)的相对优先级(由高到低)是!→ &&→||。a&&b||c应理解为(a&&b)||c。
问题5:if(a) if(b) x++; else y++;的确切含义是什么?这个else应和哪个if配套?有没有办法明确表达出配套方法,以避免初学者之困惑?
解答:
if(a) if(b) x++; else y++; 可以换成以下的形式: if(a)
if(b) x++; else y++;
else与if的配对的原则是else一般与最近没有配对的if进行配对。实际上,如果else与第一个if进行配对,可以采取加{}的方式进行:
if(a)
{ if(b) x++;} else y++;
如果else与第二个if进行配对,可以采取加{}的方式进行: if(a){
if(b) x++; else y++; }
以上这种加{}的方式,就不会引起歧义。 1.6.5 小结
(1)本章介绍了常见的各种数据类型,以及他们所能表达的范围; (2)本章介绍了scanf和printf语句的使用;
(3)本章介绍了逻辑判断的使用,理解并描述复杂的逻辑判断。
(4)程序设计是一门实践性很强学科,所以在学习时,给出两点建议:重视实验、学会模仿。
1.6.6 上机练习
程序设计是一门实践性很强的学科,所以给出下面的练习。 习题1-1 平均数(average)
输入3个整数,输出它们的平均值,保留3位小数。 解答:
#include
scanf(\d=(double)(a+b+c);
printf(\return 0; }
习题1-2 温度(temperature)
输入华式温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。
第 15 页
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新小学教育算法竞赛入门经典授课教案第1章 算法概述 (3)全文阅读和word下载服务。
相关推荐: