C程序设计实验指导书第三版.docx
《C程序设计实验指导书第三版.docx》由会员分享,可在线阅读,更多相关《C程序设计实验指导书第三版.docx(22页珍藏版)》请在冰豆网上搜索。
![C程序设计实验指导书第三版.docx](https://file1.bdocx.com/fileroot1/2023-1/22/43adab8d-fb53-4eba-815e-339dc1363c30/43adab8d-fb53-4eba-815e-339dc1363c301.gif)
C程序设计实验指导书第三版
目录
目录1
实验一——程序的运行环境和运行C程序的方法2
实验二——数据类型、运算符和表达式5
实验三——数据类型、运算符和表达式9
实验四——逻辑程序设计12
实验五——循环控制16
实验六——数组19
实验七——函数21
实验八——指针24
实验一——程序的运行环境和运行C程序的方法
实验名称
程序的运行环境和运行C程序的方法
成绩
姓名
学号
班级
实验地点
完成日期
实验目的
1)了解所用的计算机系统的基本操作方法,学会独立使用该系统
2)了解在该系统上如何编辑、编译、连接和运行一个C程序
3)通过运行简单的C程序,初步了解C源程序的特点
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
1)检查所用的计算机系统是否已安装了C编译系统并确定它所在的子目录;
2)进行所用的集成环境;
3)熟悉集成环境的界面的有关菜单的使用方法;
4)输入并运行一个简单的、正确的程序。
输入下面的程序:
#include
voidmain()
{
printf("Thisisacprogram.\n");
}
1根据前面介绍的方法对源程序进行编译,观察屏幕上显示的编译信息。
如果出现“出错信息”,则应找出原因并改正之,再进行编译,如果无错,则进行连接。
2如果编译连接无错误,使程序运行,观察分析运行结果。
5)输入并运行一个有错误的C程序。
1输入下面的程序(故意漏打或打错几个字符):
#include
voidmain()
{
inta,b,sum
a=123;b=456;
sum=a+b
print("sumis%d\n",sum);
}
2进行编译,仔细分析编译信息窗口,可能显示有多个错误,逐个修改,直到不出现错误。
最后请与教材上的程序对照。
3使程序运行,分析运行结果。
6)输入并运行一个需要在运行时输入数据的程序;
输入下面的程序:
#include
voidmain()
{
intmax(intx,inty);
inta,b,c;
printf("inputa&b;");
scanf("%d,%d",&a,&b);
c=max(a,b);
printf("max=%d\n",c);
}
intmax(intx,inty)
{
intz;
if(x>y)z=x;
elsez=y;
return(z);
}
1编译并运行,在运行时从键盘输入整数2和5,然后按“回车”键,观察运行结果。
2将程序中的第3行改为
inta;b;c;
再进行编译,观察其结果
3将max函数中的第3、4两行合并写为一行,即
if(x>y)z=x;elsez=y;
再进行编译运行,分析结果。
7)运行一个自己编写的程序,即输入a、b、c3个数,输出其中最大者。
1输入自己编写的源程序。
2检查程序有无错误(包括语法错误和逻辑错误),有则改之。
3编译和连接,仔细分析编译信息,如有错误应找出原因并改正之。
4运行程序,输入数据,分析结果。
5自己修改程序(例如故意改成错的),分析其编译和运行情况。
8)将调试好的程序保存在自己的用户目录中,文件名自定。
9)将关闭工作区,再重新打开该文件,检查内容是否是刚才存盘的程序。
10)关闭VC集成环境,用Windows的“我的电脑”找到刚才使用的用户子目录,浏览其中文件,看有无刚才保存的后缀为.c和.exe的文件。
实验心得
实验二——数据类型、运算符和表达式
实验名称
数据类型、运算符和表达式
成绩
姓名
学号
班级
实验地点
完成日期
实验目的
1)掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。
2)掌握不同的类型数据之间赋值的规律。
3)学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
4)进一步熟悉C程序的编辑、编译、连接和运行过程
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
1)输入并运行下面的程序:
#include
voidmain()
{
charc1,c2;
c1='a';
c2='b';
printf("%c%c\n",c1,c2);
}
1运行此程序。
2在上面的printf语句的下面再增加一个printf语句:
printf("%d%d\n",c1,c2);
再运行,并分析结果。
3将第3行改为:
intc1,c2;
再使之运行,并分析结果。
4再将第4、5行改为:
c1=a;/*不用单撇号*/
c2=b;
再使之运行,并分析其运行结果。
5再将第4、5行改为:
c1=97;
c2=98;
再使之运行,分析其运行结果。
6再将第4、5行改为:
c1=300;/*用大于255的整数*/
c2=400;
再使之运行,并分析其运行结果。
2)输入并运行如下程序:
#include
voidmain()
{
charc1='a',c2='b',c3='c',c4='\101',c5='\116';
printf("a%cb%c\tc%c\tabc\n",c1,c2,c3);
printf("\t\b%c%c\n",c4,c5);
}
在上机前先用人工分析程序,写出相应结果,上机后将二者对照。
3)输入并运行下面的程序:
#include
voidmain()
{
shortinta,b;
unsignedshortc,d;
inte,f;
a=100;
b=-100;
e=50000;
f=32767;
c=a;
d=b;
printf("%d,%d\n",a,b);
printf("%u,%u\n",a,b);
printf("%u,%u\n",c,d);
c=a=e;
d=b=f;
printf("%u,%u\n",a,b);
printf("%u,%u\n",c,d);
}
请对照程序和运行结果分析:
1将一个负整数赋给一个无符号的变量,会得到什么结果。
2将一个大于32767的整数赋给短整型变量(在VC环境下),会得到什么结果。
3将一个整数赋给无符号短整型变量,会得到什么结果(分别考虑该长整数的值大于、等于或小于65535的情况)。
4改程序中各变量的值,再比较。
4)输入并运行教材第3章习题3.10(P67)即:
#include
voidmain()
{
inti,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf("%d,%d,%d,%d\n",i,j,m,n);
}
1运行程序,注意i,j,m,n各变量的值。
分别做以下改动并运行:
2将第6、7行改为:
m=i++;
n=++j;
再运行。
3程序改为:
#include
voidmain()
{
inti,j;
i=8;
j=10;
printf("%d,%d\n",i++,j++);
}
4在③的基础上,将printf语句改为:
printf("%d,%d\n",++i,++j);
5再将printf语句改为:
printf("%d,%d,%d,%d\n",i,j,i++,j++);
6程序改为
#include
voidmain()
{
inti,j,m=0,n=0;
i=8;
j=10;
m+=++i;
n-=j--;
printf("i=%d,i=%d,m=%d,n=%d\n",i,j,m,n);
}
实验心得
实验三——数据类型、运算符和表达式
实验名称
最简单的C程序设计
成绩
姓名
学号
班级
实验地点
完成日期
实验目的
1)掌握C语言中使用最多的一种语句——赋值语句的作用方法。
2)掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
1)通过下面的程序掌握各种格式转换符的正确使用方法。
1输入以下程序:
#include
voidmain()
{
inta,b;
floatd,e;
charc1,c2;
doublef,g;
longm,n;
unsignedintp,q;
a=61;b=62;
c1='a';c2='b';
d=3.56;e=-6.78;
f=3157.890121;g=0.123456789;
m=50000;n=-60000;
p=32768;q=40000;
printf("a=%d,b=%d\nc1=%c,c2=%c\nd=
%6.2f,e=%6.2f\n",a,b,c1,c2,d,e);
printf("f=%15.6f,g=%15.12f\nm=%ld,
n=%ld\np=%u,q=%u\n",f,g,m,n,p,q);
}
2运行此程序并分析结果。
3在此基础上,将程序第9~14行改为:
a=61;b=62;
c1=a;c2=b;
f=3157.890121;g=0.123456789;
d=f;e=g;
p=a=m=50000;;q=b=n=-60000;
运行程序,分析结果。
4改用scanf函数输入数据而不用赋值语句,scanf函数如下:
scanf("%d,%d,%c,%c,%f,%f,%lf,%lf,
%ld,%ld,%u,%u",&a,&b,&c1,&c2,&d,
&e,&f,&g,&m,&n,&p,&q);
输入的数据如下:
61,62,a,b,3.56,-6.87,3157.890121,
0.123456789,50000,-60000,32768,40000
分析运行结果。
(说明:
lf和ld格式符分别用于输入double型和long型数据)
5在④基础上,将printf语句改为:
printf("a=%d,b=%d\nc1=%c,c2=%c\n
d=%15.6f,e=%15.12f\n",a,b,c1,c2,d,e);
printf("f=%15.6f,g=%15.12f\nm=%ld,
n=%ld\np=%d,q=%d\n",f,g,m,n,p,q);
运行程序。
6将p、q改用%o格式符输出。
将scanf函数中的%lf和%ld改为%f和%d,运行程序并观察分析结果
2)按要求编写程序,并上机运行。
题目为:
设半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积,圆柱体积。
用scanf输入数据,输出计算结果。
输出时要有文字说明,取小数点后两位数字。
3)编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符。
实验心得
实验四——逻辑程序设计
实验名称
逻辑程序设计
成绩
姓名
学号
班级
实验地点
完成日期
实验目的
1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。
2)学会正确使用逻辑运算符和逻辑表达式。
3)熟练掌握if语句和switch语句。
4)结合程序掌握一些简单的算法。
5)学习调试程序。
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。
(1). 有一函数:
用scanf函数输入x的值,求y值。
运行程序,输入x的值(分别为x<1、1≤x<10、x≥10三种情况),检查输出的y值是否正确
(2). 给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。
90分以上为A,81-89分为B,70-79分为C,60-69分为D,60分以下为E。
①事先编好程序,要求分别用if语句和switch语句实现。
运行程序,并检查结果是否正确。
②再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级。
修改程序,使之能正确处理任何数据。
当输入数据大于100或小于0时,通知用户“输入数据错”,程序结束。
3). 给一个不多于3位的正整数,要求:
①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数为321,应输出123。
应准备以下测试数据:
● 要处理的数为1位正整数;
● 要处理的数为2位正整数;
● 要处理的数为3位正整数;
除此之外,程序还应当对不合法的输入作必要的处理。
例如:
●输入负数;
●输入的数超过3位(如1234)。
(4). 输入4个整数,要求按由小到大顺序输出。
得到正确结果后,修改程序使之按由大到小顺序输出。
(5). 根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积。
实验心得
实验五——循环控制
实验名称
循环控制
成绩
姓名
学号
班级
实验地点
完成日期
实验目的
1)熟悉并掌握用while语句,do-while语句和for语句实现循环的方法。
2)掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。
3)进一步学习调试程序。
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
本实验编程序并上机调试运行。
(1). 输入两个正整数m和n,求它们的最大公约数和最小公倍数。
在运行时,输入的值m>n,观察结果是否正确。
再输入时,使m修改程序,不论m和n为何值(包括负整数),都能得到正确结果。
(2). 输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其它字符的个数。
(3). 用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。
在得到正确结果后,请修改程序使所设的x初值由1.5改变为100、1000、10000,再运行,观察结果,分析不同的x初值对结果有没有影响,为什么?
修改程序,使之能输出迭代的次数和每次迭代的结果,分析不同的x初始值对迭代的次数有无影响。
(4). 猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩一个桃子了。
求第一天共摘了多少桃子。
在得到正确结果后,修改题目,改为猴子每天吃了前一天剩下的一半后,再吃两个。
请修改程序,并运行,检查结果是否正确。
实验心得
实验六——数组
实验名称
数组
成绩
姓名
学号
班级
实验地点
完成日期
实验目的
1)掌握一维数组和二维数组的定义、赋值和输入输出的方法;
2)掌握字符数组和字符串函数的使用;
3)掌握与数组有关的算法(特别是排序算法。
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
编程序并上机调试运行。
(1). 用选择法对10个整数排序。
10个整数用scanf函数输入。
(2). 有15个数存放在一个数组中,输入一个数,要求用查找找出该数是数组中第几个元素的值。
如果该数不在数组中,则输出“无此数”。
以15个数用赋初值的方法在程序中给出。
要找的数用scanf函数输入。
(3). 将两个字符串连接起来,不要用strcat函数。
(4). 输出n行杨辉三角形,n由键盘输入(n小于等于15)
实验心得
实验七——函数
实验名称
成绩
姓名
学号
班级
实验地点
完成日期
实验目的
1)掌握定义函数的方法;
2)掌握函数实参与形参的对应关系以及“值传递”的方式;
3)掌握函数的嵌套调用和递归调用的方法;
4)掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。
学习对多文件程序的编译和运行。
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
本实验编程序并上机调试运行。
(1). 写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。
本程序应当准备以下测试数据:
17、34、2,1、0。
分别输入数据,运行程序并检查结果是否正确。
(2). 用一个函数来实现将一行字符串的内容按反序存放,在主函数中输入和输出字符串.
把两个函数放在同一个程序文件中,作为一个文件进行编译和运行。
把两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。
(3). 用递归法将一个整数n转换成字符串。
例如,输入483,应输出字符串“483”。
n的位数不确定,可以是任意的整数。
(4). 求两个整数的最大公约数和最小公倍数。
用一个函数求最大公约数,用另一函数根据求出的最大公约数求最小公倍数。
①不用全局变量,分别用两个函数求最大公约数和最小公倍数。
两个整数在主函数中输人,并传送给函数l,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。
②用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。
将最大公约数和最小公倍数都设为全局变量,在主函数中输出它们的值。
(5). 写一函数,输入一个由字符串表示的十六进制数,输出相应的十进制数。
实验心得
实验八——指针
实验名称
指针
成绩
姓名
学号
班级
实验地点
完成日期
实验目的
1)通过实验进一步掌握指针的概念,会定义和使用指针变量;
2)能正确使用数组的指针和指向数组的指针变量;
3)能正确使用字符串的指针和指向字符串的指针变量;
4)能正确使用指向函数的指针变量;
5)了解指向指针的指针的概念及其使用方法
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
实
验
内
容
与
步
骤
编程序并上机调试运行程序(都要求用指针处理)。
(1). 输入三个整数,按由小到大的顺序输出,然后将程序改为:
输入三个字符串,按由小到大顺序输出。
(2). 将一个3X3的矩阵转置,用一函数实现之。
在主函数中用scanf函数输入以下矩阵元素:
135
7911
131519
将数组名作为函数实参,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出已转置的矩阵。
。
(3). 写一函数,求一个字符串的长度。
在main函数中输入字符串,并输出其长度。
(4). 用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:
intstrcmp(char*p1,char*p2);
设p1指向字符串s1,p2指向字符串s2,要求当s1=s2时,函数返回值为0,如果sl≠s2,则返回它们二者第一个不相同字符的ASCII码差值(如“BOY”与“BAD”的第二个字母不相同,“O”与“A”之差为79—65=14);如果sl>s2,则输出正值;如果sl两个字符串s1、s2由main函数输入,strcmp函数的返回值也由main函数输出。
5). 写一个用矩形法求定积分的通用函数,分别求:
说明:
sin、cos、exp已在系统的数学函数库中,程序开头要用#include
(6). 用指向指针的指针的方法对n个整数排序并输出。
要求将排序单独写成一个函数。
n和各整数在主函数中输入,最后在主函数中输出。
实验心得