1、C 语言实验报告说明1,所有程序均用 VC6.0 编译运行,文件名命名为姓名+日期,因为实验存在补做,所以并不是按照日期先后排列的。2,为了使截图清晰,手动将运行窗口由“黑底白字”改为了 “白底黑字” 。实验 2 数据类型、运算符和表达式一、实验目的: (1 )掌握 C 语言数据类型,熟悉如何定义一个整型、字符型、实型变量、以及对它们赋值的方法。 (2 )学会使用 C 的有关算术运算符,以及包含这些运算符的表达式,特别是自加(+)和自减()运算符的使用。 (3 )掌握 C 语言的输入和输出函数的使用 (4 )进一步熟悉 C 程序的编辑、编译、连接和运行的过程。三、程序调试与问题解决:(1)输人
2、并运行下面的程序#include void main() char c1,c2; c1=a; c2=b; printf(“%c %cn“,c1,c2); 运行此程序。 1在上面 printf 语句的下面再增加一个 printf 语句。 2printf(“%d %dn“,c1,c2); 再运行,并分析结果。输出结果如图,编译成功,无错误。将第 3 行改为 3int c1,c2; 再运行,并分析结果。再将第 4、5 行改为 4c1=a; c2=b; 再运行,并分析结果。a,b 没有定义,编译报错。再将第 4、5 行改为 5c1=a; c2=b; 再运行,并分析结果。再将第 4、5 行改为 6c1=
3、300; c2=400; 再运行,并分析结果。以字符型输出时,输出的将是 300,400 对应的字符。(2)输人并运行教材第 3 章习题 3. 6 给出的程序#includemain () char c1=a,c2=b,c3=c,c4=101,c5=116; printf(“a%c b%ctc%ctabcn“,c1,c2,c3);printf(“tb%c %cn“,c4,c5); #includevoid main() int a,b; unsigned c,d; long e,f;a=100; b=-100; e=50000; f=32767; c=a; d=b; printf(“%d,%d
4、n“,a,b); printf(“%u,%un“,a,b); printf(“%u,%un“,c,d); c=a=e; d=b=f; printf(“%d,%dn“,a,b); printf(“%u,%un“,c,d);请对照程序和运行结果分析: 将一个负整数斌给一个无符号的变 t,会得到什么结果。画出它们在内存中的表 示形式。将一个大于 32767 的长整数斌给整型变 t,会得到什么结果。画出它们在内存中 的表示形式。将一个长整数赋给无符号变量,会得到什么结果(分别考虑该长整数的值大于或等于65535 以及小于 65535 的情况) 。画出它们在内存中的表示形式。得到的是原来正数取存的数 1
5、将一个大于 32767 的长整数斌给整型变 t,造成溢出,数据丢失。 2可能会溢出,也可能正常。 3(4)输人习题 3. 10#includevoid main() int i,j,m,n; i=8; j=10; m=+i; n=j+; printf(“%d,%d,%d,%dn“,i,j,m,n); 运行程序,注意 i,j,m,n 各变量的值。分别作以下改动并运行: 将第 6,7 行改为: m=i+; n=+j; 再运行。将程序改为: #include void main() int i,j;i=8; j=10; printf(“%d,%dn“,i+,j+); 在的基础上,将 printf 语
6、句改为:printf(“%d,%d,%d,%dn“,i,j,+i,+j); 再将 printf 语句改为: printf(“%d,%d,%d,%dn“,i,j,i+,j+); 将程序改为: #include void main() int i,j,m=0,n=0; i=8; j=10; m+=i+; n-=-j; printf(“i=%d,j=%d,m=%d,n=%dn“,i,j,m,n); 将第 6,7 行改为: m=i+; n=+j; 再运行。以上程序结果的不同均是由于自增自减运算符引起的,考虑到一个判断技巧,看自增自减运算符时,先将它们从原程序中拿出来,如果+或在后,就先把值放回去,然后
7、自增自减,如果在前,先自增自减,再把结果放进去。printf(“%d,%d,%d,%dn“,i,j,+i,+j); #include void main() int i,j,m=0,n=0; i=8; j=10; m+=i+; n-=-j; printf(“i=%d,j=%d,m=%d,n=%dn“,i,j,m,n); 实验 5 循环控制一、实验目的: (1 )熟练掌握 for 语句、while 语句、do-while 语句实现循环的方法; (2 )理解循环嵌套及其使用方法; (3 )掌握 break 语句与 continue 语句的使用; (4 )掌握用循环实现一些常用算法(如穷举、迭代、递
8、推等) 。二、实验内容:1输入两个正整数,求其中最大公约数和最小公倍数。2. 输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。3.用牛顿迭代法求方程 2X3 4X2 3X 6=0 在 1.5 附近的根。4. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过痛,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。三、程序调试与问题解决:1输入两个正整数,求其中最大公约数和最小公倍数。编译无错误,运行如上图所示,使用了最简单的算法,清晰易理解,同
9、时注意了编程的格式,在以往编程序时,往往不注意上下对齐等问题,容易出现缺标点等现象,将大括号一级一级对齐后,可以有效地避免出错。发现一个技巧,打括号时一次打出一对括号,可以减少括号不配对的错误。2. 输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。编译无误,测试正确,写该程序时特意加了注释,以便阅读。3.用牛顿迭代法求方程 2X3 4X2 3X 6=0 在 1.5 附近的根。该程序缺少#include;是截图原因,原程序中是存在的。最开始不知道 fabs 函数的用法,通过百度查询。4. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过痛,又多吃了一个。第二天早上
10、又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。实验 7 函数一、实验目的:(1) 掌握定义函数的方法。 (2) 掌握函数实参与形参的对应关系及值传递的方式。 (3) 掌握函数的嵌套调用和递归调用的方法。 (4) 掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。 (5) 学习对多文件程序的编译和运行。二、实验内容:1.写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。本程序应当准备以下测试数据:17、34、2、1、0 。分别运行并检查结果是否正确。2用一个函数来实现将
11、一行字符串中最长的单词输出。此行字符从主函数传递给该函数。()把两个函数放在同一个程序文件中。 ()将两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。3用递归法将一个整数 n 转换成字符串。例如输入 483应输出字符串 “” 。n 的位数不确定,可以是任意的整数。4求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数用另一个函数根据求出的最大公约数求最小公倍数。分别用下面的两种方法编程。 ()不用全局变量,在主函数中输入两个数和输出结果。 ()用全部变量的方法,数据的传递通过全部变量的方法。5写一个函数,输入一个十六进制数,输出相应的十进制数。三、程序调试与问题解决:1
12、.写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。本程序应当准备以下测试数据:17、34、2、1、0 。分别运行并检查结果是否正确。该例编译时出现错误,原因是误将 sushu(a)=1 写为 sushu(a)=1。改正后编译无误。2用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。子函数中第二个 while 考虑到了多种标点符号的情况,但是该程序可能存在的问题是,如果有两个单词的长度是相同的?3用递归法将一个整数 n 转换成字符串。例如输入 483应输出字符串 “” 。n 的位数不确定,可以是任意的整数。4求两个整数的最大公约数和最小公倍数。用一个函数
13、求最大公约数用另一个函数根据求出的最大公约数求最小公倍数。分别用下面的两种方法编程。 ()不用全局变量,在主函数中输入两个数和输出结果。 ()用全部变量的方法,数据的传递通过全部变量的方法。使用了两个子函数,我认为应该还有更简单的算法?!5写一个函数,输入一个十六进制数,输出相应的十进制数。程序运行时出现错误,后检查发现在 scanf 格式字符串的双引号是中文符号,改成英文双引号后成功。实验 9 指针一、实验目的 :通过实验进一步掌握指针的概念,会定义和使用指针变量; 1能正确使用数组的指针和指向数组的指针变量; 2能正确使用字符串的指针和指向字符串的指针变量; 3能正确使用指向函数的指针变量
14、; 4了解指向指针的指针的概念及其使用方法。 5二、 实验内容:(1). 输入三个整数,按由小到大的顺序输出,然后将程序改为:输入三个字符串,按由小到大顺序输出。(2). 将一个 3X3 的矩阵转置,用一函数实现之。l 3 5 7 9 11 13 15 19将数组名作为函数实参,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出已转置的矩阵。(3).有 n 个人围成一圈,顺序排号。从第 1 个人开始报数(从 1 到 3 报数) ,凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位。(4). 用一个函数实现两个字符串的比较,即自己写一个 strcmp 函数,函数原型为:int s
15、trcmp (char * p1, char * p2); 设 p1 指向字符串 s1,p2 指向字符串 s2,要求当 s1s2 时,函数返回值为 0, 如果sl s2,则返回它们二者第一个不相同字符的 ASCII 码差值(如“BOY”与“BAD”的第二个字母不相同, “O”与“A”之差为 7965=14);如果 sls2,则输出正值;如果 sls2 则输出负值。两个字符串 s1、s2 由 main 函数输入,strcmp 函数的返回值也由 main 函数输出。(5).用指向指针的指针的方法对 n 个整数排序并输出。要求将排序单独写成一个函数。n 和各整数在主函数中输入,最后在主函数中输出。三
16、、程序调试与问题解决:(1). 输入三个整数,按由小到大的顺序输出,然后将程序改为:输入三个字符串,按由小到大顺序输出。(2). 将一个 3X3 的矩阵转置,用一函数实现之。l 3 5 7 9 11 13 15 19(3).有 n 个人围成一圈,顺序排号。从第 1 个人开始报数(从 1 到 3 报数) ,凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位。(5).用指向指针的指针的方法对 n 个整数排序并输出。要求将排序单独写成一个函数。n 和各整数在主函数中输入,最后在主函数中输出。实验 12 文件一、目的要求 :1掌握文件以及缓冲文件系统、文件指针的概念; 2学会使用文件打开、关闭、读、写等文件操作函数。 3学会用缓冲文件系统对文件进行简单的操作。二、实验内容 :1. 有 5 个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号、姓名、三门课成绩) ,计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“Stud”中。 三、程序调试与问题解决:1. 有 5 个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号、姓名、三门课成绩) ,计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“Stud”中。