c语言实验.docx
- 文档编号:4343139
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:19
- 大小:34.34KB
c语言实验.docx
《c语言实验.docx》由会员分享,可在线阅读,更多相关《c语言实验.docx(19页珍藏版)》请在冰豆网上搜索。
c语言实验
实验报告样例
南京信息工程大学C语言程序设计实验(实习)报告
实验(实习)名称指针的应用实验(实习)日期得分指导老师
系专业班级姓名学号
一.实验目的:
1.掌握C程序设计的基本编程方法和步骤;
2.掌握C语言,数组,函数,指针的应用方法;
3.提高编制综合应用程序的能力。
二.实验内容:
编制子函数并利用指针,将主函数一维数组中最小的数与第1个数交换,最大的
数与第9个数交换,且将9个数的平均值放在数组中间。
编制一个主函数,输入9个
数到一维数组a中,调用子函数实现其交换功能。
三.实验准备:
1.学习选择结构,循环,数组,函数,指针等章节的有关内容,弄清楚以下问题:
1).如何应用选择结构和循环语句挑选一个数组中特定的数据;
2).编制子函数的方法和步骤;
3).如何将指针应用到上述具体问题中。
2.根据题目要求,确定算法思路以及相应的数据结构。
四.实验步骤:
1.画出子函数算法流程图:
2.编制源程序:
(可附在下一页上)
3.运行
1)输入:
2)输出:
五.分析实验中遇到的问题及其解决的办法
六.实验体会
实验1程序的运行环境和运行程序的方法
1.实验目的
(1)了解所用的计算机系统的基本操作方法,学会独立适用该系统。
(2)了解在该系统上如何编辑、编译、连接和运行一个程序。
(3)通过运行简单的程序,初步了解源程序的特点。
2.实验内容和步骤
(1)检查所用的计算机系统是否已安装了C编程系统并确定它所在的子目录。
(2)进入所有的集成环境。
(3)熟悉集成环境的界面和有关菜单的使用方法。
(4)输入并运行一个简单的、正确的程序。
输入下面的程序(教材第1章例1.1):
#include
voidmain()
{
printf(“Thisiscprogram.\n”);
}
1观察屏幕上显示的编译信息,如果出现“出错信息”,则应找出原因并改正之,再进行编译,如果无错,则进行连接。
2如果编译连接无错误,使程序运行,观察分析运行结果。
(5)输入并编译一个有错误C程序。
1输入以下程序(教材第1章中例1.2,故意打或打错几个字符)。
#include
voidmain()
{
inta,b,sum;
a=123;b=456;
sum=a+b;
print(“sumis%d\n”,sum);
}
②进行编译,仔细分析编译信息窗口,可能显示有多个错误,逐一修改,直到不出现错误。
③使程序运行,分析允许结果。
(6)输入并运行一个需要在运行时输入数据的程序。
①输入下面的程序:
#include
voidmain()
{
intmax(intx,inty);
inta,b,c;
printf(“intputa&b:
”);
c=max(a,b);
printf(“max=%d\n”,c);
}
itnmax(intx,inty)
{intz;
if(x.y)z=x;
elsez=y;
return(z);
}
②编译并运行,在运行时从键盘输入整数2和5,然后按“回车”键,观察运行结果。
③将程序中的第3行改为
inta;b;c;
再运行编译,观察其结果。
④将子程序的第3,4两行合并为一行,即
if(x>y)z=x;elsez=y;
进行编译和运行,分析结果。
(7)运行一个自己编写的程序
题目是教材第1章的习题1.6,即:
输入a、b、c三个值,输入其中最大值。
①输入自己编写的源程序。
②检查程序有无错误(包括语法错误和逻辑错误),有则改之。
③编译和连接,仔细分析编译信息,如有错误应找出原因并改正。
④运行程序,输入数据,分析结果。
⑤自己修改程序(例如,故意改成错的),分析其编译和运行情况。
⑥将调试好的程序保存在自己的用户目录中,文件名自定。
⑦用File→New将编辑窗口清空,再选File→Load将该文件读入,检查编辑窗口中的内容是否是刚才保存的程序。
⑧关闭TurboC,用DOS命令dir检查用户目录中的文件名,有无后缀为.c、.obj和.exe的文件。
3.预习内容
第1章;
实验2数据类型、运算符和表达式
1.实验目的
(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。
(2)掌握不同的类型数据之间赋值的规律。
(3)学会使用C的有关算术运算符,以及包含这些运算符的表达试,特别是自加(++)和自减(——)运算符的使用。
(4)进一步熟悉C程序的编辑、编译、连接和运行的过程。
2.实验内容和步骤
(1)输入并运行下面的程序
Main()
{charc1,c2;
c1=’a’;
c2=’b’;
printf(“%c%c\n”,c1,c2);
}
1运行此程序。
②在此基础上增加一个语句:
Printf(“%d%d\n”,c1,c2);
再运行,并分析结果。
③将第2行改为:
Intc1,c2;
再使之运行,并观察结果。
④再将第3、4行改为:
c1=a;/*不用单撇号*/
c2=b;
再使之运行,并分析其运行结果。
⑤再将第3、4行改为:
c1=“a”;/*不用单撇号*/
c2=“b”;
再使之运行,并分析其运行结果。
⑥再将第3、4行改为:
c1=300;/*用大于255的整数*/
c2=400;
再使之运行,并分析其运行结果。
(2)输入并运行教材第3章习题3.6给出的程序
Main()
{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”,c4,c5);
}
在上机前先用人工分析程序,写出应得结果,上机后将二者对照。
(3)输入并运行下面的程序
Main()
{inta,b;
Unsignedc,d;
Longe,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(“%d,%d\n”,a,b);
printf(“%u,%u\n”,a,b);
}
请对照程序和运行结果分析:
1将一个负整数赋给一个无符号的变量,会得到什么结果。
画出它们在内存中的表示形式。
2将一个大于32767的长整数赋给整型变量,会得到什么结果。
画出它们在内存中的表示形式。
3将一个长整数赋给无符号变量,会得到什么结果(分别考虑长整数的值大于或等于65535以及小于65535的情况)。
画出它们在内存中的表示形式。
(4)输入习题3.10
Main()
{inti,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
1运行程序,注意i、j、m、n各变量的值,分别作以下改动并运行。
2将第4、5行改为:
m=i++;
n=++j;
再运行。
3将程序改为:
Main()
{inti,j;
i=8;
j=10;
printf(“%d,%d”,i++,j++);
}
4在③的基础上,将printf语句改为:
Printf(“%d,%d”,++I,++j);
5再将printf语句改为:
Printf(“%d,%d,%d,%d”,i,j,i++,j++);
6将程序改为:
Main()
{
Inti,j,m=0,n=0;
i=0;
j=10;
m+=i++;
n-=--j;
printf(“i=%d,j=%d,m=%d,n=%d”,I,j,m,n);
}
(5)按习题3.7的要求编程序并上机运行
该题的要求是:
要将“China”译成密码,译码规律是:
用原来字母后面的第4个字母替代原来的字母。
例如,字母“A”,后面第4个字母是“E”,用“E”代替“A”。
因此,“China”应译为“Glmre”。
请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为‘C’、‘h’、’i’、‘n’、‘a’,经过运算,使c1、c2、c3、c4、c5分别变为‘G’、‘l’、‘m’、‘r’、‘e’
并输出。
1输入事先已编好的程序,并运行该程序。
分析是否符合要求。
2改变c1、c2、c3、c4、c5的初值为:
‘T’、‘o’、‘d’、‘a’、‘y’,对译码规律作如下补充:
‘W’用‘A’代替,‘X’用‘B’代替,‘Y’用‘C’代替,‘Z’用‘D’代替。
修改程序并运行。
3将译码规律修改为:
将字母用它前面的第4个字母代替,例如
‘E’用‘A’代替,‘Z’用‘U’代替,‘D’用‘Z’代替,‘C’用‘Y’代替,‘B’用‘X’代替,‘A’用‘V’代替。
修改程序并运行。
3.预习内容
预习教材第3章。
实验3最简单的C程序设计
1.实验目的
(1)掌握C语言中使用最多的一种语句——赋值语句的使用方法。
(2)掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。
2.实验内容和步骤
(1)掌握各种格式转换符的正确使用方法
1输入程序
Main()
{inta,b;
Floatd,e;
Charc1,c2;
Doublef,g;
Longm,n;
Unsiguldintp,q;
c1=’a’;c2=’b’;
d=3.56;e=-6.87;
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\np=%u,q=%u\n”,f,g,m,n,p,q);
}
2运行此程序并分析结果。
3在此基础上,修改程序的第8~13行:
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↙
分析运行结果。
5在④的基础上将printf语句改为:
printf(“a=%d,b=%d\nc1=%c,c2=%c\nd=%15.6f,e=%15.12f\n”,a,b,c1,c2,d,e);
printf(“f=%f,g=%f\nm=%d,n=%d\np=%d,q=%d\n”,f,g,m,n,p,q);
运行程序。
6将p、q改用%o格式符输出。
7将scanf函数中的%lf和%ld改为%f和%d,运行程序并观察分析结果。
(2)按习题4.8要求编写程序
题目为:
设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据,输出计算结果。
输出时要有文字说明,取小数点后两位数字。
(3)编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和scanf函数输出这两个字符.
上机运行程序,比较用putchar和scanf函数输出字符的特点。
3.预习内容~
预习教材第4章。
实验4逻辑结构程序设计
1.实验目的
(1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。
(2)学会正确使用逻辑运算符和逻辑表达式。
(3)熟悉掌握if语句和switch语句。
(4)结合程序掌握一些简单的算法。
(5)学会调试程序。
2.实验内容
本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。
(1)有一函数:
y=
用scanf函数输入x的值,求y值。
(习题5.5)
运行程序,输入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。
(习题5.6)
1事先编好程序,要求分别用if语句和switch语句实现。
运行程序,并检查结果是否正确。
2再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级。
修改程序,使之能正确处理任何数据。
当输入数据大于100或小于0时,通知用户“输入数据错”,程序结束。
(3)给一个不多于5位的正整数,要求:
①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数为321,应输出123。
(习题5.7)
应准备以下测试数据:
•要处理的数为1位正整数;
•要处理的数为2位正整数;
•要处理的数为3位正整数;
•要处理的数为4位正整数;
•要处理的数为5位正整数;
除此之外,程序还应当对不合法的输入作必要的处理。
例如:
·输入负数;
·输入的数超过5位(如123456)。
(4)输入4个整数,要求按由小到大顺输出。
得到正确结果后,修改程序使之按由大到小顺序输出。
(习题5.9)
3.预习内容
预习教材第5章。
实验5循环控制
1.实验目的
熟悉掌握用while语句,do-while语句和for语句实现循环的方法。
掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。
进一步学习调试程序。
2.实验内容
编程序并上机调试运行。
(1)输入两个正整数m和n,求它们最大公约数和最小公倍数。
(习题6.1)
在运行时,输入的值m>n,观察结果是否正确。
在输入时,是m 修改程序,不论m和n为何值(包括负整数),都能得到正确结果。 (2)输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。 (习题6.2) 在得到正确结果后,请修改程序时只能分别统计大小写字母、空格、数字和其他字符的个数。 (3)用牛顿迭代法求方程2 在1.5附近的根。 (习题6.12) 在得到正确结果后,请修改程序使所设的x初值有1.5改变为100、1000、10000,再运行,观察结果,分析不同的x初值对结果有没有影响,为什么? 修改程序,使只能输出迭代的次数和每次迭代的结果,分析不同的x初始值对迭代的次数有无影响。 (4)猴子吃桃问题。 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,有多吃了一个。 第二天早上又奖剩下的桃子吃掉一半,有多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想在吃时,见只剩一个桃子了。 求第一天共摘了多少桃子。 (习题6.10) 在得到正确结果后,修改题目,改为猴子每天吃了前一天剩下的一半后,在吃两个。 请修改程序,并运行,检察结果是否正确。 3.预习内容 预习教材第6章。 实验6数组 1.实验目的 (1)掌握一维数组和二维数组的定义、赋值和输入输出的方法; (2)掌握字符数组和字符串函数的使用; (3)掌握与数组有关的算法(特别是顺序算法)。 2.实验内容 编程序并和上机调试运行。 (1)用选择法对10个整数排序。 10个整数用scanf函数输入。 (习题7.2) (2)有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。 如果该书不在数组中,则输出“无此数”。 以15个数用赋初值的方法在程序中给出。 要找的数用scanf函数输入。 (习题7.9) (3)将两个字符串连接起来,不要用strcat函数。 (4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。 也可能没有鞍点。 (习题7.8) 应当至少准备两组测试数据: 1二维数组有鞍点 98020540 90-60961 210-310189 2二维数组没有鞍点 98020540 90-60961 210-310189 45541567 用scanf函数从键盘输入数组各元素的值,检察结果是否正确。 题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。 因此,从理论上来说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需准备典型的数据即可。 如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。 请大家修改程序以实现之。 3.预习内容 预习教材第7章。 实验7函数 1.实验目的 (1)掌握定义函数的方法; (2)掌握函数实参与形参的对应关系以及“值传递”的方式; (3)掌握函数的嵌套调用和递归调用的方法; (4)掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。 (5)学习对多文件程序的编译和运行。 2.实验内容 编程序并上机调试运行。 (1)写一个判别素数的函数,在主函数输入一个整数,输出是否是素数的信息。 (习题8.3) 本程序应当准备以下测试数据: 17、34、2、1、0。 分别输入数据,运行程序并检查结果是否正确。 (2)用一个函数来实现将一行字符串中最长的单词输出。 此行字符串从主函数传递给该函数。 (习题8.10) 把两个函数放在同一程序文件中,作为一个文件进行编译和运行。 把两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。 (3)用递归法将一个整数n转换成字符串。 例如,输入483,应输出字符串“483”。 n的为数不确定,可以是任意的整数。 (习题8.17) (4)求两个整数的最大公约数和最小公倍数。 用一个函数求最大公约数,用另一个函数根据求出的最大公约数求最小公倍数。 (习题8.1) 1不用全局变量,分别用两个函数求最大公约数和最小公倍数。 两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回主函数输出最大公约数和最小公倍数。 2用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。 将最大公约数和最小公倍数都设为全局变量,在主函数中输出它们的值。 (5)写一函数,输入一个十六进制数,输出相应的十进制数。 (习题8.16) 3.预习内容 教材第8章; 实验8编译预处理 1.实验目的 (1)掌握宏定义的方法; (2)掌握文件包含处理方法; (3)掌握条件编译的方法。 2.实验内容 编程序并上机调试运行。 (1)定义一个带参数的宏,是两个参数的值互换。 在主函数中输入两个数作为使用数的实参,输出已交换后的两个值。 (习题9.1) (2)设计输出实数的格式,包括: ①一行输出一个实数;②一行内输出两个实数;③一行内输出三个实数。 实数用“%6.2f”格式输出。 (习题9.6) 用一个文件print_format.h包含以上用#define命令定义的格式。 在自己的文件(自己命名)中用#include命令将print_format.h文件包含进来。 在程序中用scanf函数读入三个实数给f1、f2、f3。 然后用上面定义的三种格式分别输出: ①f1;②f1、f2;③f1、f2、f3。 (3)用条件编译方法实现以下功能: 输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如‘a’变成’b’……‘z’变成‘a’。 其他字母不变)。 用#define命令来控制是否要译成密码。 例如: 若#defineCHANGE1则输出密码。 若#defineCHANGE0则不译成密码,按原码输出。 (习题9.10) 编写程序,用条件编译方法来实现题目要求。 首先在程序中用“#defineCHANGE1”,运行程序,应得到密码。 将“#defineCHANGE1”改为“#defineCHANGE0”,再运行程序,应得到原文。 3.预习内容 预习教材第9章。 实验9指针 1.实验目的 (1)通过实验进一步掌握指针的概念,会定义和使用指针变量; (2)能正确使用数组的指针和指向数组的指针变量; (3)能正确使用字符串的指针和指向字符串的指针变量; (4)能正确使用指向函数的指针变量; (5)了解指向指针的指针的概念及其使用方法。 2.实验内容 编程序并上机调试运行程序(都要求用指针处理)。 (1)输入三个整数,按由小到大的顺序输出,然后将程序改为: 输入三个字符串,按由小到大顺序输出。 (习题10.1、10.2) (2)将一个3×3的矩阵转置,用一函数实现。 (习题10.9) 在主函数中用scanf函数输入以下矩阵元素: 135 7911 131519 将数组名作为函数实参,再执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出已转置的矩阵。 (3)有n个人围成一圈,顺序排号。 从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的哪位。 (习题10.5) (4)用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为: intstrcmp(char*p1,char*p2); 设p1指向字符串s1,p2指向字符串s2,要求当s1=s2时,函数返回值为0;如果s1≠s2,则返回它们二者第一个不相同字符的ASCII码差值(如“BOY”与”BAD”第二个字母不相同,“O”与”A”之差为79-65=14);如果S1>S2,则输出正值;如果S1 (习题10.17) 两个字符串s1、s2有main函数输入,strcmp函数的返回值也由main函数输出。 (5)写一个用矩阵法求定积分的通用函数,分别求: 说明: sin、cos、exp已在系统的数学函数库中,程序开头要用#include (习题10.13) (6)用指向指针的指针的方法对n个整数排序并输出。 (习题10.21) 3.预习内容 预习教材第10章。 实验10结构体和共用体 1.实验目的 (1)掌握结构体类型变量的定义和使用; (2)掌握结构体类型数组的概念和使用; (3)掌握链表的概念,初步学会对链表进行操作; (4)掌握共用体的概念与使用。 2.实验内容 编程序,然后上机调试运行。 (1)有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验