华中科技大学
C语言实验与课程设计
实验报告
华中科技大学 目录
C语言实验与课程设计实验报告 CS1408赵晓雁
指导老师:
2
计算机科学与技术学院 华中科技大学 C语言实验与课程设计实验报告 CS1408赵晓雁
1 表达式和标准输入输出实验 ········ 3 2 流程控制实验 ·············· 11 3 函数程序与结构实验 ··········· 20 4 编译预处理实验 ·············5 数组实验 ················ 35 6 指针实验 ················ 42 7 结构与联合实验 ·············8 文件实验 ················ 61
3
28 52 华中科技大学 C语言实验与课程设计实验报告 CS1408赵晓雁
1 表达式和标准输入与输出实验
1.1 实验目的
(1) 熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类
型及运算过程中的类型转换,重点是C语言特有的运算符,例如位运算符,问号运算符,逗号运算符等;熟记运算符的优先级和结合性。 (2)掌握scanf 和printf 函数的用法。
(3)掌握简单C程序(顺序结构程序)的编写方法。
1.2 实验内容及结果
1.2.1. 源程序改错
下面给出了一个简单C语言程序例程,用来完成以下工作: (1)输入华氏温度f,将它转换成摄氏温度C后输出; (2)输入圆的半径值r,计算并输出圆的面积s;
(3)输入短整数k、p,将k的高字节作为结果的低字节,p的高字节作为结果的高字节,拼成一个新的整数,然后输出;
在这个例子程序中存在若干语法和逻辑错误。要求参照2.1.3和2.1.4的步骤对下面程序进行调试修改,使之能够正确完成指定任务。
程序代码:
#include
int f ;
short p, k ; double c , r , s ;
/* for task 1 */
printf(“Input Fahrenheit:” ) ; scanf(“%d”, f ) ; c = 5/9*(f-32) ;
printf( “ \\n %d (F) = %.2f (C)\\n\\n ”, f, c ) ;
/* for task 2 */
printf(\
4
华中科技大学 C语言实验与课程设计实验报告 CS1408赵晓雁
scanf(\s = PI * r * r;
printf(\/* for task 3 */
printf(\scanf(\
newint = (p&0xff00)|(k&0xff00)<<8; printf(\
}
【分析及改正】本程序共存在9处错误,分析如下: (1)#define PI 3.14159;
错误原因:宏定义在预处理时会将后续程序中的标示符展开为对应全部字符串,而PI不需要分号。
改正:去掉其后分号 (2)voidmain(void) {
错误原因:函数返回值与函数名之间应加空格,C90标准建议main函数应返回一个int作为状态值
改正:int main(void) { (3)short p,k;
错误原因:后续用到了newint变量但并未声明 改正:short p,k,newint; (4)scanf(“%d”, f );
错误原因:应该把要读入的变量的地址传递给scanf才能正确写入 改正:scanf(\(5)c = 5/9*(f-32) ;
错误原因:5和9是整型常数,相除会截断小数部分,应该将其中任意一个输表示为或转换为浮点数类型
改正:c = 5.0/9*(f-32); (6)scanf(\
错误原因:double类型对应的占位符是%lf 改正:scanf(\
(7)printf(\
错误原因:要输出s的值应该将s作为参数传递给printf,不应传递其地址
改正:printf(\(8)scanf(\
printf(\
错误原因:k,p为short类型,对应十六进制占位符应为%hx 改正:scanf(\
printf(\(9)newint = (p&0xff00)|(k&0xff00)<<8;
错误原因:要求将k的高字节作为结果的低字节,应该将k的高字节
5