实验2 顺序结构程序设计
实验 2
顺序结构程序设计
2.1 基本数据类型和表达式 【实验目的】
1. 2. 3. 掌握 C 语言程序的基本数据类型,变量定义; 掌握赋值语句的使用方法; 熟悉各种运算的含义和功能,正确使用运算符书写各类表达式。
【相关知识点】
1. 基本数据类型及变量的定义 C 语言中基本的数据类型有三种:整型(int) ,实型(单精度浮点型 float,双精度浮点 型 double) ,字符型(char) 。 变量代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值。C 语言规定,所有要用到的变量都必须先定义其类型,然后才使用。 变量定义(声明)的一般形式: 类型名 变量列表; 示例: int a,b; float x,y; double m,n; char c1,c2; /*定义两个整型变量 a 和 b,用于存放整数*/ /*定义两个单精度浮点型变量 x 和 y,用于存放实数*/ /*定义两个双精度浮点型变量 m 和 n,用于存放实数*/ /*定义两个字符型变量 c1 和 c2,用于存放字符*/
图 2.1.2 变量窗口中的变量值
在变量窗口的观察区中发现,变量 a 已被赋初值为 3,变量 b 的值是个随机值,表示变 量 b 没有被赋初值,从而使得最后的求和结果 s 的值也发生错误。 改正程序后的运行结果示例如图 2.1.3 所示。
图 2.1.3 pg2101_ok.cpp 的运行结果
2.打开 C:\c-programming\2\pg2102.cpp,该程序中有一处错误,修改程序,使其能够正 确运行,并观察变量 i, j 的结果值。修改后的程序以 pg2102_ok.cpp 保存。该源程序内容如 下: #include<stdio.h>
} 提示:如何发现问题? 编译、链接和运行后,出现错误结果,如图 2.1.1 所示。
图 2.1.1 pg2101.cpp 的错误运行结果
关闭运行窗口,使用工具栏上的 行单步调试,当单步运行到 printf("s=%d\n",s);
ቤተ መጻሕፍቲ ባይዱ
按钮或者快捷键 F10 命令,启用单步运行程序,进
语句时,变量窗口的变量值如图 2.1.2 所示。
图 2.2.1 pg2103.cpp 的错误运行结果
关闭运行窗口,使用工具栏上的 行单步调试,当单步执行到 scanf("%d%d",x,y);
按钮或者快捷键 F10 命令,启用单步运行程序,进
语句时,程序的执行流程切换到运行窗口,要求输入两个数,如图 2.2.2 所示。
图 2.2.2 运行窗口中输入数据
也可以只对部分变量初始化。 示例 2: float x=2.57,y; /*定义实型变量 x 和 y,只给 x 赋初值 2.57*/
对字符变量赋初值时,要用一对单引号将单个字符括起来,组成字符常量。 示例 3: char c1=′m′,c2=′n′; /*给两个字符型变量 c1 和 c2,分别赋初值 m 和 n*/ 如果需要给几个变量赋予相同的值,则需要给每个变量都单独赋值。 示例: int i=2,j=2,k=2; 3. 运算符和表达式 C 语言的算术运算符有多种,应用范围很广,几乎所有的基本操作都作为运算符处理。 这里介绍如下常用的几种: 算术运算符和表达式。算术运算符包括: “+” 、 “-” 、 “*” 、 “/” 、 “%” 、 “++”(自增运算) 和“--” (自减运算) 。 示例 1: a*k+7/4+5%3+′b′; i++; ++i 上述表达式中,7/4 的结果值为 1,因为两个整数相除结果为整数;i++或++i 的结果是 将 i 的值增 1,相当于 i=i+1;′b′是将字符 b 转换成它的 ASCII 码,再进行计算。 赋值运算符和表达式。赋值运算符包括: “=” 、 “+=” 、 “-=” 、 “*=” 、 “/=” 、 “%=” 。 示例 2: a=2+(b=5); j+=3; /*相当于两个赋值语句:b=5; a=2+b; */ /*相当于赋值语句:j=j+3; */ /*给三个变量 i,j,k 都赋初值 2*/
针对上面的问题,查找下面程序中存在的错误并改正。 1.打开 C:\c-programming\2\pg2103.cpp,该程序是从键盘输入两个数,在屏幕上输出这 两个数。 程序中有几处错误, 修改程序, 使其能够正确运行。 修改后的程序以 pg2103_ok.cpp 保存。该源程序内容如下: #include<stdio.h> void main(void) { int x,y; printf("请输入两个数 x,y(以空格或回车间隔) : "); scanf("%d%d",x,y); printf("x=%d,y=%d\n",&x,&y); printf("\n"); } 提示:如何发现问题? 编译、链接和运行后,出现错误结果,如图 2.2.1 所示。
【实验任务】
一、读程序改错
该部分实验主要训练学生读简单程序的能力, 并在理解程序的基础上, 改正程序中出现 的问题,这些问题都是初学者经常容易犯的错误,针对顺序结构程序设计这一章,主要有如 下问题: 1) 2) 输入和输出函数中,变量列表和地址列表表示不正确; 字符常量的赋值格式不正确,字符函数的引用错误。
图 2.1.4 pg2102_ok.cpp 的运行结果
二、编写程序
1.定义三个整型变量,如 a, b, c,计算逗号表达式:c=(a=7,b=a+2,b+1),并输出变量 a, b, c 的值。编写的源程序以 pg2301.cpp 保存。 训练要点:掌握整型数据的定义方法,了解逗号表达式的运算规则,并能正确使用逗号 表达式,输出正确结果。 提示:整型数据的输出格式为:printf("%d",a); 程序运行结果参考示例如图 2.1.5 所示。
void main(void) { int i; i=3; j=++i; printf("i=%d, j=%d\n",i,j); i=3; j=i++; printf("i=%d, j=%d\n",i,j); printf("\n"); } 提示:如何发现问题? 编译后,信息窗口出现如下错误: C:\c-programming\2\pg2102.cpp(7) : error C2065: 'j' : undeclared identifier 发现问题所在,是变量 j 没有定义。 改正程序后的运行结果示例如图 2.1.4 所示。
变量定义的类型名必须是有效的数据类型, 变量列表中可以有一个变量名或由逗号隔开 的多个变量名。 2. 变量赋初值 变量定义后,常常需要对某些变量预先赋初值。C 语言中可以在变量定义的同时给变量 初始化。 示例 1:
int a=5; 相当于: int a; a=5;
/*定义整型变量a,给a赋初值 5*/
字符输入函数 getchar 的一般形式为: getchar(); 此函数的作用是从输入设备(键盘)输入单个字符。getchar 函数得到的字符可以赋给
一个字符变量或整型变量,也可以作为表达式的一部分。 示例 2: ch=getchar( ); putchar(getchar()); /*从键盘读入一个字符给字符变量 ch*/ /*从键盘读入一个字符,,并输出到显示器屏幕上*/
逗号运算符和表达式。逗号运算符为: “,” ,逗号表达式是把多个表达式用逗号连接 起来,按顺序求值,整个逗号表达式的值,就是最后一个表达式的值。 示例: x=2*3, x=x+4, y=x+1; /*逗号表达式的值是 11,此时 x=10, y=11 */
【实验任务】
一、读程序改错
该部分实验主要训练学生读简单程序的能力, 并在理解程序的基础上, 改正程序中出现 的问题,这些问题都是初学者经常容易犯的错误,针对顺序结构程序设计这一章,主要有如 下问题: 1) 2) 没有正确定义变量; 变量没有初始化;
输入数据 3 和 5 后,按回车,程序无法向下执行,表示 scanf 函数有错误,仔细观察发 现问题所在,是 scanf 函数中的地址列表有错误,修改该语句。 再次编译、链接和运行后,仍然出现错误结果,如图 2.2.3 所示。
输出列表是需要输出的数据,可以是常量、变量、表达式、函数返回值等。如果有多个 输出项,则以逗号分隔。 示例 1: printf("%d, %d, %d",a, b, c); printf("%.3f, %.3f",x, y); printf("Welcome to you! "); printf("\n"); /*格式字符串,输出三个整型变量*/ /*格式字符串,输出两个实型变量,保留 3 位小数*/ /*非格式字符串,直接输出此语句*/ /*转义字符,输出回车换行符*/
图 2.1.5 pg2301.cpp 的运行结果
2.定义三个实型变量,如 x,y,z,并对 x,y 赋初值:x=11.5,y=24.6,计算表达式: z=3x+2y+1,并输出 z 的值。编写的源程序以 pg2302.cpp 保存。 训练要点:掌握实型数据的定义方法,正确使用运算符书写表达式。 提示:实型数据的输出格式为:printf("%f",z); 程序运行结果参考示例如图 2.1.6 所示
条件运算符和表达式。条件表达式的一般形式: 表达式①?表达式②:表达式③
如果表达式①的值为 1(真) ,则整个条件表达式的计算结果为表达式②的值,如果表 达式①的值为 0(假) ,则整个条件表达式的计算结果为表达式③的值。 示例 3: a>b ?a : b; /*当 a=2, b=5 时,条件表达式的值为 5 */