《《程序设计基础》实验指导书.doc》由会员分享,可在线阅读,更多相关《《程序设计基础》实验指导书.doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、说明每个实验做完以后,按照实验报告模板格式完成相应的实验报告,存储为word文档,最终提交的实验文档数量种类和命名原则如下例:(不按要求者拒收)目录结构图 目录实验1内的文件种类和命名原则实验报告成绩将作为平时成绩的一部分计算到期末总成绩中。实验报告严禁相互抄袭,一经发现抄袭和被抄袭者本次实验按零分计算!实验1 C的实验环境和C语言的数据类型 实验目的 了解在具体的语言环境下如何编辑、编译、连接和运行一个C程序。 通过运行简单的C程序,初步了解C源程序的特点。 掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。 掌握不同的类型数据之间赋值的规律。 学会使用C的
2、有关算术运算符,以及包含这些运算符的表达式,特别是自加(+)和自减(-)运算符的使用。 实验内容和步骤 检查所用的计算机系统是否已安装了C编译系统并确定他所在的子目录。 进入所用的集成环境。 熟悉集成环境的界面和有关菜单的使用方法。 输入并运行一个简单的、正确的程序。 实验题目 输入下面的程序# include stdio.hvoid main() printf(This is a c program.n); 程序无误,其运行的结果为:(请填写) 输入并编辑一个有错误的C程序。# include “stdio.h”void main() int a,b,suma=123; b=456;sum=
3、a+bprint(“sum is %dn”,sum);运行后程序出现几处错误,请分别指出,并逐一更改: 若k,g均为int型变量,则下列语句的输出为,:# include stdio.hvoid main() int k, g;k=017;g=111;printf(%dt,+k);printf(%xn,g+);运行结果为:实验2 顺序结构程序设计 实验目的 掌握C语言中赋值语句的使用方法。 掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。 进一步熟悉C程序的编辑、编译、连接和运行的过程。 实验内容用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=A
4、,c2=a。问在键盘上如何输入?请书写程序#include stdio.hvoid main() int a,b;float x,y;char c1,c2;scanf(a=%d b=%d,&a,&b);scanf(%f %e,&x,&y);scanf( %c %c,&c1,&c2);printf(a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn,a,b,x,y,c1,c2);运行,并按照如下方式在键盘上输入:a=3 b=78.5 71.82A a运行结果:思考:为什么在第三个scanf函数双引号第一个字符为空格字符,如果没有这个空格字符,而写成:scanf(“%c %c”,&c
5、1,&c2); 按以上的输入、输出将如何变化?请分析原因实验3 选择结构程序设计 实验目的 了解C语言表示逻辑量的方法(以0代表”假”,以非0代表”真”)。 学会正确使用逻辑运算符和逻辑表达式。 熟练掌握if语句和switch语句。 结合程序掌握一些简单的算法。 学习调试程序。 实验内容题目: 有3个整数a、b、c,由键盘输入,输出其中最大的数。题目:求三位数的水仙花数(水仙花数是指一个 n 位数 ( n3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:13 + 53 + 33 = 153))。要求:每道题目分别画出程序流程图,书写程序,试运行(如何输入,结果如何)。实验4、循环结
6、构程序设计 实验目的 熟悉掌握用while语句,dowhile语句和for语句实现循环的方法。 掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。 进一步学习调试过程。 实验内容题目:输入两个正整数m和n,求其最大公约数和最小公倍数(公约数,亦称“公因数”。它是几个整数同时均能整除的整数。如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数; 最小公倍数(Least Common Multiple,缩写L.C.M.),如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个。)
7、。题目:输入一行字符,分别统计出其中大小写英文字母、空格、数字和其他字母的个数(注意每输入一个非空格符字符后加一个空格符所有字符输入后回车)。题目:猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第一天共摘多少桃子。要求:每道题目分别画出程序流程图,书写程序,试运行(如何输入,结果如何)。实验5 函数定义和使用 实验目的 学习C语言中函数的定义和调用方法。 掌握通过参数在函数间传递数据的方法。 熟悉vc集成环境对包含函数调用的程序的
8、调试方法。 实验题目A:修改调试题目:题目:调试下列程序,使之具有如下功能:fun函数是一个判断整数是否为素数的函数,使用该函数求1000以内的素数平均值。写出调试过程。#include “stdio.h”void main() int a=0,k; /* a保存素数之和 */float av; /* av保存1000以内素数的平均值 */for (k=2;k=1000;k+)if (fun(k) /* 判断k是否为素数 */a+=k;av=a/1000;printf(av=%fn,av);fun(int n) /* 判断输入的整数是否为素数 */ int i,y=0;for(i=2;iy)?
9、x:y;return(z); 题目(3):调试以下程序并查看运行结果:int a=5;int b=7;#include “stdio.h”void main() int a=4,b=5,c;c=plus(a,b);printf(A+B=%dn,c); int plus(int x,int y) 请回答:函数功能是什么? int z;z=x+y;return(x);B、编程题目:要求:每道题目分别书写程序,试运行(如何输入,结果如何)。题目:编写函数求x的n次方的值(提示:有一个参数的函数)题目:编写一个求水仙花数的函数,求3位正整数的全部水仙花数中的次大值。所谓水仙花数是指三位整数的各位上的数
10、字的立方和等于该整数本身。例如:153就是一个水仙花数:153 = 13 + 53 + 33实验6 编译预处理 实验目的 掌握宏定义的规则,领会带参数宏定义和函数调用的区别。 了解文件包含命令的功能和使用规则。 了解条件编译的特点和功能。 实验内容A 宏定义及其应用 以下程序的运行结果是_。#define MIN(x,y) (x)(y)?(x):(y)#include stdio.hvoid main() int i=10,j=15,k;k=10*MIN(i,j);printf(%dn,k); 若有宏定义如下:#define X 5#define Y X+1#define Z Y*X/2则执行
11、以下printf语句后,输出结果是_。int a;a=Y;printf(%dn,Z);printf(%dn,-a); 请读程序:#include #define MUL(x,y) (x)*ymain() int a=3,b=4,c;c=MUL(a+,b+);printf(%dn,c); 上面程序的输出结果是_。 以下程序的运行结果是_.#include stdio.hvoid main()incx();incy();incx();incy();incx(); incy(); incx() int x=0;printf(x=%dt,+x);incy() static int y=0;printf
12、(ny=%dn,+y);B “文件包含”处理测试 文件format.h包含以下内容:#define PR printf#define NL n#define D %D#define D1 D NL#define D2 D D NL#define D3 D D D NL#define D4 D D D D NL#define S %S 文件file1.C包含以下内容:#include format.hvoid main() int a,B,C,D;char string=CHINA;a=1;B=2;C=3;D=4;PR(D1,a);PR(D2,a,B);PR(D3,a,B,C);PR(D4,a,
13、B,C,D);PR(S,string);调试并察看运行结果。注意文件保存的路径。实验7 数组应用编程 实验目的 掌握一维数组和二维数组定义、赋值和输入输出的方法。 掌握字符数组和字符串函数的使用。 掌握数组名作为函数参数的基本使用方式。 掌握与数组有关的算法(特别是排序算法)。 实验内容A:修改调试题目:调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。#include “stdio.h”void main() int i,n,a10,av;for(i=0;in;i+)scanf(%d,ai);for(i=0;in;i+) pr
14、intf(%d,ai);if (i%3=0) printf(n);for(i=0;i!=n;i+)av+=ai;printf(av=%fn,av);上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用+键终止程序的运行,返回到TC环境。B、编程题目:(题目、题目为一组,题目为一组,题目为一组,题目、题目为一组,题目为一组。每个同学每组都必须完成1题)要求:每道题目分别书写程序,试运行(如何输入,结果如何)。题目:从键盘输入10个整数存入数组,找出其中最大和最小值,
15、并输出。题目:从键盘输入一个字符串,编写程序将该字符串逆序。题目:输出杨辉三角形(要求输出10行)11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 1 6 15 20 15 6 1 (提示,使用二维数组)题目: 输入44的数组,编写程序实现: 求出对角线上各元素的和; 求出对角线上行、列下标均为偶数的各元素的积; 找出对角线上其值最大的元素和它在数组中的位置。题目:编写函数实现将数组元素按从小到大的顺序排序,主函数从键盘输入10个整数存入数组,调用函数后输出数组的元素。题目:用数组名作为函数参数,编写一个比较两个字符串s和t大小的函数strcomp(s,t),要求s
16、小于t时返回-1,s等于t时返回0,s大于t时返回1。在主函数中任意输入4个字符串,利用该函数求最小字符串。题目: 输入66的数组,下面的各要求通过编写函数实现,要求用数组名作为函数参数: 求出对角线上各元素的和; 求出对角线上行、列下标均为偶数的各元素的积; 找出对角线上其值最大的元素和它在数组中的位置。实验8 使用指针处理数组 实验目的 掌握指针变量的定义与引用。 掌握指针与变量、指针与数组的关系。 掌握用数组指针作为函数参数的方法。 实验题目A:修改调试题目:题目: 调试下列程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。#include format.
17、hvoid main() int j,k,a12,*p;for(j=0;j12;j+)scanf(%d,p+);for(j=0;j contain. position ,pstu-name, pstu-sex, pstu-age, pstu-pingshi, pstu-bishi, pstu-caozuo);pstu=&stu2;printf(n请输入职位、姓名、性别、年龄、平时、笔试、操作这几项内容 n);scanf(%d%s%s%d%d%d%d,&stu2. contain.num,stu2.name,stu2.sex,&stu2.age,&stu2.pingshi,&stu2.bishi
18、,&stu2.caozuo);printf(%10d%10s%4s%4d%4d%4d%4dn, stu2. contain. num ,stu2.name,stu2.sex,stu2.age,stu2.pingshi,stu2.bishi,stu2.caozuo);printf(%10d%10s%4s%4d%4d%4d%4dn, pstu- contain.num ,pstu-name, pstu-sex, pstu-age, pstu-pingshi, pstu-bishi, pstu-caozuo);B、链表操作题目(1):下列程序中,子函数insertup(head,newp)实现将一个
19、newp所指新结点按升序插入到由头指针head所指的链表中的适当位置;请将函数括号内的语句补充完整,并编写主程序输出插入前后链表的情况;【程序代码】:struct memberint num; struct member *next;typedef struct member Member; insertup(Member *head, Member *newp)Member *pre,*suc; pre=head; ( ) while (suc=NULL) if (suc-num =newp-num) pre-next=newp;( ) return; pre=suc; ( ) pre-next=newp;/当要插入的节点中的数据在链表中是最大值时,将它插入链表尾 ( )题目(2):25个人围成一个圈,从第1个人开始顺序报号,凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。 要求:用链表实现。报到3或3的倍数的结点删除; 提示:1)需要将链表首尾相接形成环形; 2)删除时注意头、尾结点的特殊处理; 3)注意循环结束的条件;C、文件操作编程先通过文件操作建立文件file1.txt,并写入20个任意字符到文件中,接着把file1.txt文件读出来,统计其中字母、数字及其它字符各有多少个。
限制150内