实验 2 顺序结构程序设计 明符 一 实验目的 1. 掌握 C 语言基本数据类型 运算符和赋值语句 2. 变量的定义及初始化 整型 实型 字符型等基本类型变量的定义和初始化 3. 熟练使用赋值运算 算术运算等表达式, 能够编写简单顺序结构程序 4. 掌握 C 语言基本的输入输出 熟练使用标准输入 输出函数及各种数据类型的格式说 二 实验内容及步骤 例题 2.1 输入程序, 查看输出结果 (1) 参照第一章创建 Liti2 1.c 文件并输入以下代码 #define price 32 int main () int num,total; num=10; total=num * price; printf("total=%d\n",total); (2) 编译执行结果如图 2 1 所示 图 2 1 运行结果 (3) 错误调试记录 例题 2.2 输入如下程序, 查看输出结果
实验 2 顺序结构程序设计 9 unsigned short a; a= 1; printf("%d\n",a); 运行以上程序, 查看输出的结果, 分析为什么会输出这些信息 (1) 打开 VC 创建 liti2 2.c 文件 (2) 输入以上代码并编译执行 (3) 结果如图 2 2 所示 图 2 2 运行结果 (4) 分析提高 考虑如果将程序第 4,5 行改为 int a; a= 2147483648; 运行时会输出什么信息? 为什么? (5) 程序分析 无符号短整型 ( 长度 2 字节 ) 的取值范围为 0~65535, a= 1, 1 的补码是 1111111111111111, 方法是 : 先写出 1 的二进制形式 0000000000000001, 然后按位取反,1111111111111110, 然后 再加 1, 结果为 1111111111111111 因为 a 是无符号短整型变量, 其左边第一位不代表符号, 按 %d 格式输出, 结果是 65535 对于无符号整型, 二进制形式 0000~~0000, 为最小 ;1111~~1111 为最大值 其中第 1 位不代 表符号 对于整型 ( 默认长度为 4 字节 ), 二进制形式 1000~0000 为最小值,0111~1111 为最 大值 其中第 1 位为 0 代表正数,1 代表负数 (6) 错误调试记录 例题 2.3 编写程序如下, 分析输出结果 char c,d; c='1';
10 C 语言程序设计实验指导与实训 d=128; printf("%d\n",c+1); printf("%c\n",c+1); printf("%c\n",d); printf("%d\n",d); (1) 打开 VC 创建 liti2 3.c 文件 (2) 输入以上代码并编译执行 (3) 结果如图 2 3 所示 图 2 3 输出字符变量运行结果 (4) 错误调试记录 例题 2.4 编写程序如下, 分析输出结果 int a, b; float d, e; char c1, c2; long f, g; double m, n; unsigned int x, y; a = 65; b = 97; c1 = 'a'; c2 = 'b'; d = 3.145; e = 6.874; f = 10000; g = 20000; m = 3141.592627; n = 0.123456789; x = 9527; y = 40000; printf("a=%c, b=%c\nc1=%d, c2=%c\nd=%6.2f, e=%6.2f\n", a, b, c1, c2, d, e); printf("f=%ld, g=%ld\nm=%15.6f, n=%15.12f\nx=%u, y=%u\n",f, g,m, n, x, y);
实验 2 顺序结构程序设计 11 (1) 打开 VC 创建 liti2 4.c 文件 (2) 输入以上代码并编译执行 (3) 结果如图 2 4 所示 图 2 4 格式化输出运行结果 (4) 错误调试记录 例题 2.5 编写程序如下, 掌握 C 语言表达式和顺序结构 #include <math.h> double a,b,c,disc,x1,x2,p,q; scanf("%lf,%lf,%lf",&a,&b,&c); disc=b*b 4*a*c; p= b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p q; printf("x1=%5.2f\nx2=%7.2f\n",x1,x2); (1) 打开 VC 创建 liti2 5.c 文件 (2) 输入以上代码并编译执行 (3) 在第一行输入 1,4,4, 其结果如图 2 5 所示 图 2 5 求解一元二次方程运行结果
12 C 语言程序设计实验指导与实训 (4) 分析提高 对于输入, 同学们应注意输入格式和输入数值的问题, 对于本题中 scanf 函数使用了这样 的格式 scanf("%lf,%lf,%lf",&a,&b,&c);, 因此, 在输入时应按照 1,4,4 的输入方式分别给 a,b,c 输入值 请考虑如果按照 1 4 4 的格式输入, 应该如何修改程序? 此外, 当你输入的数字为 4,5,6 时, 此时运行结果会出现如图 2 6 所示的样子 请考虑 为何会出现此种运行结果 图 2 6 输入 4,5,6 时运行结果 (5) 错误调试记录 例题 2.6 编写程序如下, 掌握 C 语言表达式和顺序结构 main() int i,a,b; float x,y,z; i=1; x=++i; printf("x=%f\ni=%d\n",x,i); y=30.1234567; z=x+y; printf("z=%f\n",z); printf("z=%4.2f\n",z); printf("z=%6.2f\n",z); printf("z=%15.8f\n",z); printf("z=%e\n",x+y); (1) 打开 VC 创建 liti2 6.c 文件 (2) 输入以上代码并编译执行 (3) 结果如图 2 7 所示
实验 2 顺序结构程序设计 13 图 2 7 运行结果 (4) 错误调试记录 例题 2.7 编写程序如下, 掌握 C 语言基本的输入输出函数 main() char a,b,c; a=66;b='o';c='y'; putchar(a); putchar(b); putchar(c); putchar('\n'); (1) 打开 VC 创建 liti2 7.c 文件 (2) 输入以上代码并编译执行 (3) 结果如图 2 8 所示 图 2 8 输出字符运行结果 (4) 分析提高 请试着修改程序并考虑输出结果为何会是这样? 首先删除程序第 4 行 char a,b,c; 将程序第 5 行 a=66;b='o';c='y'; 改为 int a=66,b=79,c=89; 查看运行结果, 思考两段程序的异同 第二次修改, 保留程序第 4 行 char a,b,c; 将程序第 5 行改为 a=getchar();
14 C 语言程序设计实验指导与实训 b=getchar(); c=getchar(); 运行时会输出什么? 为什么? (5) 错误调试记录 三 典型习题讲解 习题 2.1 例如我国国民生产总值的年增长率为 9%, 计算 10 年后我国国民生产总值与 现在相比增长多少百分比 计算公式为 : p=(1+r) n 式中 :r 为年增长率 ;n 为年数 ;p 为与现在相比的倍数 模块中 问题分析 : 参看附录 D( 库函数 ), 使用 pow 函数求 y x 的值, 调用函数的具体形式是 pow(x,y) 注意 : 调用数学函数时需要在程序的开头用 #include 指令将 <math.h> 头文件包含到本程序 (1) 创建 xiti2 1.c 文件并输入以下程序代码 : #include <math.h> float p,r,n; r=0.09; n=10; p=pow(1+r,n); printf("p=%f\n",p); (2) 调试运行结果如图 2 9 所示 图 2 9 计算增长百分比运行结果 请考虑如何使用百分比格式输出 (3) 错误调试记录
实验 2 顺序结构程序设计 15 习题 2.2 用下面的 scanf 函数输入数据, 使 a=3,b=7,x=8.5,y=71.82,c1='a',c2='a', 问在 键盘上如何输入? (1) 创建 xiti2 2.c 文件并输入以下程序代码 int a,b; float x,y; char c1,c2; scanf("a=%d b=%d",&a,&b); scanf("%f %e",&x,&y); scanf("%c%c",&c1,&c2); printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,c1,c2); (2) 程序运行结果如图 2 10 所示, 图中 1,2 行为用户在键盘上的输入 第 3 行为程序 输出结果 图 2 10 scanf 函数的使用运行结果 (3) 分析与提高 请注意输入的格式问题 在输入 71.82 后, 应该紧接着输入字符 A, 中间不要有空格 因 为 A 是字母, 系统在遇到字母 A 时就确定输入给 y 的数值已经结束 字符 A 就送到下一个 scanf 语句中的字符变量 c1 如果在 71.82 后输入空格字符, 该空格字符就被 c1 读入,c2 读入字符 A 所以输出时 c1 就输出空格,c2 输出 A 请同学考虑在输入 71.82 后按回车键, 结果会怎 么样呢? 在使用 scanf 函数输入数据时往往会出现一些意想不到的情况, 例如在连续输入不同类型 的数据情况下, 需要特别注意 希望同学通过此例, 可以了解怎样正确进行输入数据 (4) 错误调试记录
16 C 语言程序设计实验指导与实训 习题 2.3 设圆半径 r=1.5, 圆柱高 h=3, 求圆周长 圆面积 圆球表面积 圆球体积 圆柱体积 用 scanf 输入数据, 输出计算结果, 输出时要求文字说明, 取小数点后两位数字 请编写程序 (1) 创建 xiti2 3.c 文件并输入以下程序代码 : int main () float h,r,l,s,sq,vq,vz; float pi=3.141526; printf(" 请输入圆半径 r, 圆柱高 h "); scanf("%f,%f",&r,&h); // 要求输入圆半径 r 和圆柱高 h l=2*pi*r; // 计算圆周长 l s=r*r*pi; // 计算圆面积 s sq=4*pi*r*r; // 计算圆球表面积 sq vq=3.0/4.0*pi*r*r*r; // 计算圆球体积 vq vz=pi*r*r*h; // 计算圆柱体积 vz printf(" 圆周长为 : l=%6.2f\n",l); printf(" 圆面积为 : s=%6.2f\n",s); printf(" 圆球表面积为 : sq=%6.2f\n",sq); printf(" 圆球体积为 : v=%6.2f\n",vq); printf(" 圆柱体积为 : vz=%6.2f\n",vz); (2) 按照输入格式要求输入数据 例如输入 3,5, 则运行结果如图 2 11 所示 图 2 11 输入半径和高并计算输出运行结果 (3) 错误调试记录 四 二级考试提高 训练 2.1 编写程序如下, 分析输出结果 main()
实验 2 顺序结构程序设计 17 int i,a,b; i=1; a=i++; printf("a=%d,i=%d\n",a,i); b=++i; printf("b=%d,i=%d\n",b,i); a=i ; printf("a=%d,i=%d\n",a,i); b= i; printf("a=%d,i=%d\n",b,i); (1) 打开 VC 并创建 xunlian2 1.c (2) 在代码框输入上面的代码 (3) 编译并执行, 运行结果如图 2 12 所示 图 2 12 运行结果 (4) 分析提高 a=i++ 运算, 先赋值再增加, 所以 a 的值先赋值为 1, 而 i 赋值后自身再增加为 2;b=++i, 先增加再赋值,i 的值先自增为 3( 之前的运算 i 的值已经是 2), 再赋值给 b 的为 3 请同学 自己分析 i 和 i 的结果 训练 2.2 分析下面程序, 写出运行结果, 再输入计算机运行, 将得到的结果与你分析 得到的结果比较对照 int i, j, m, n; i=6; j=8; m=++i; n=j++; printf( %d,%d,%d,%d\n,i,j,m,n); (1) 打开 VC 并创建 xunlian2 2.c (2) 在代码框输入上面的代码 (3) 编译执行并分析运行结果如图 2 13 所示
18 C 语言程序设计实验指导与实训 图 2 13 最初程序运行结果 (4) 分别作以下改动之后, 再运行程序 1 将第 6 行改为 m=i++; n= ++ j; 后运行结果如图 2 14 所示 图 2 14 修改第 6 行后运行结果 2 程序改为 : int i, j; i=6; j=8; printf( %d,%d\n, i++, j++); 查看运行结果为图 2 15 所示 图 2 15 第二次改动后运行结果 3 在 2 的基础上, 将 printf 语句改为 : printf("%d,%d\n", ++ i, ++ j ); 4 再次将 printf 语句改为 : printf("%d,%d,%d,%d\n",i,j,i++,j++); 5 程序改为 : main() int i, j, m=0, n=0; i=6; j=8; m+= i ++; n = j; printf("i=%d,j=%d,m=%d,n=%d\n",i,j,m,n); 此程序主要考查自加 自减运算符以及复合运算符的用法
实验 2 顺序结构程序设计 19 五 习题与思考 1. 编写程序, 运行并查看输出结果 (1) unsigned short a; a= 1; int b; b=2147483647; printf("%d\n",a); printf("%d\n",b+1); (2) int x=10; int y=x++; printf("%d,%d",(x++,y),y++); 2. 编写程序使其通过键盘输入三个整数后由小到大输出 3. 编写一个加 乘法运算的程序, 当输入两个整数就能把各个加 减 乘式子输出