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