程序设计与编程实验指导书
校内讲义
《程序设计与编程》实验指导书
(2012版)
编写:黄玉兰修订:张海蓉
吉林大学通信工程学院
目录
实验一熟悉C语言运行环境 (1)
实验二数据类型、运算符和表达式 (4)
实验三最简单的C程序设计 (6)
实验四选择结构程序设计 (8)
实验五循环结构程序设计(一) (10)
实验六循环结构程序设计(二) (11)
实验七函数 (13)
实验八数组(一) (14)
实验九数组(二) (16)
实验十指针(一) (18)
实验十一指针(二) (19)
实验十二结构体 (20)
实验十三文件 (21)
附录:Visual C++5.0的基本用法 (22)
实验一熟悉C语言运行环境
一、实验目的
1、了解VC++6.0环境的组成。
2、学习VC++6.0环境的使用方法。
3、了解C语言程序从编辑、编译、连接到运行并得到运行结果的过程。
二、实验内容
1、通过网络查找Visual C++6.0的安装图解,了解Visual C++6.0的安装过程,要求在课下对个人机进行安装此软件的实验。
2、编写程序t1.cpp。
2.1 进入VisualC++6.0编程开发环境。在桌面上双击Visual C++6.0图标,即可进入VC++6.0界面。
2.2 建立工程。在Visual C++6.0编程开发环境下,用鼠标单击菜单【File】→【New】,在【New】菜单弹出的对话框中选Project中的Win32 Console Application(控制台程序)。
2.3 在同一对话框的右边Project name处,用键盘输入一个要建立的工程名称Task1。
2.4 在同一对话框的右边Location处,用键盘输入一个路径D:\或者选择路径D:\,然后单击OK按钮。
2.5 接下来出现Win32 Console Application,选择An empty project后单击Finish按钮。
2.6 之后出现New Project Information界面,单击OK按钮,工程就建好了。这时可以看到界面名为Task1 project-Microsoft Visual C++。
2.7 单击FileView选项卡出现
workspace 'Task1':1 project[s]
Task1 files
单击第二行文字前的+号,会出现3个文件的目录。
2.8 单击Source Files,可以看到该文件夹是空的。(原因是什么?)
2.9 用鼠标单击菜单【File】→【New】,在【New】菜单弹出的对话框
中使用File选项卡,选择C++ Source File,此时该界面右侧的Add to project 中自动出现Task1 project,选中“添加到工程”复选框表示将要建立的新文件加入到名为Task1 project的工程中。
2.10 在同一对话框的右侧中间部分的File处,输入给新建文件所起的名字t1.cpp,输入之后单击OK按钮,将弹出VC++的编程界面。
2.11 在编程界面下键入一个小程序:
#include "stdio.h"
int main()
{ printf("hello world!\n");
return 0;
}
2.12 输入完毕后单击界面上的“保存”按钮,就可将源代码存放到名为t1.cpp的文件中。
2.13 按下F7键,对程序进行编译和链接,如果有错还要改正;按下Ctrl+F5键或者单击“执行”,即可运行程序。观察运行结果出现的界面及结果的内容。
2.14 退出VC++6.0。单击界面右上角的关闭按钮,屏幕上会出现一条提示,问是否要保留对工程内容所做的改变,可以有3种选择:“是”、“否”或“取消”,选“是”退出VC++6.0系统。
3、格式控制输入输出
3.1 要使下面程序的输出语句在屏幕上显示1,2,34,则从键盘输入的数据格式应为以下备选答案中的哪一个?
#include
void main()
{ char a,b;
int c;
scanf("%c%c%d",&a,&b,&c);
printf("%c,%c,%d\n",a,b,c);
}
A) 1 2 34 B) 1, 2, 34
C) '1', '2',34 D) 12 34
3.2 与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在
屏幕上显示1 2 34,则应修改程序中的哪条语句?怎样修改?
3.3 要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?怎样修改?
3.4 要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为'1','2',34,则应修改程序中的哪条语句?怎样修改?
3.5 要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为'1','2',34,则程序应修改程序中的哪条语句?怎样修改?
第一种输入方式:1,2,34↙(以逗号作为分隔符)
第二种输入方式:1 2 34↙(以空格作为分隔符)
第三种输入方式:1 2 34↙(以Tab键作为分隔符)
第四种输入方式:1↙
2↙
34↙(以回车符作为分隔符)
4、顺序结构程序设计:计算定期存款本利之和
设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入。
三、实验要求
1、学习Visual C++6.0的基本操作,编写程序。
2、运行程序并记录运行结果。
3、保存源程序、目标文件、可执行文件和实验报告。
实验二数据类型、运算符和表达式
一、实验目的
1、进一步熟悉Visual C++6.0环境的使用方法。
2、学习C语言赋值语句和基本输入输出函数的使用。
3、了解数据类型在程序设计语言中的意义。
二、实验内容
1、输入并运行下列程序:
#include
void main()
{ char c1,c2;
c1=97;c2=98;
printf("%c %c\n",c1,c2);
printf("%d %d\n",c1,c2);
}
①将第三行改为:int c1,c2;再使之运行,分析结果。
②再将第四行改为:c1=300;c2=400;再使之运行,分析其运行结果。
2、输入并运行下列程序,然后分别作以下改动并运行:
#include
void main()
{ int i,j,m,n;
i=8;j=10;
m=++i; n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
①将第五行改为:m=i++;n=++j;
②程序改为:
#include
void main()
{ int i,j;
i=8;j=10;
printf("%d,%d",i++,j++);
}
③在②的基础上,将printf语句改为:printf("%d,%d",++i,++j);
④再将printf语句改为:printf("%d,%d,%d,%d",i,j,i++,j++);
⑤再将printf语句改为:printf("%d,%d,%d,%d",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=%d",i,j,m,n);
}
三、实验要求
1、复习赋值语句和输入输出函数各种格式符的使用。
2、复习数据类型和运算符的有关概念。
3、编写程序,运行程序并记录运行结果。
4、保存源程序、目标文件、可执行文件和实验报告。
实验三最简单的C程序设计
一、实验目的
1、掌握数据的输入输出的方法,能正确使用各种格式字符。
2、了解不同类型数据间的转换。
二、实验内容
1、输入并运行以下程序:
#include
void main()
{ short int a,b;
float d,e;
char c1,c2;
double f,g;
long m,n;
unsigned short int p,q;
a=61;b=62;
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=%hd,b=%hd\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=%hu,q=%hu\n",f,g,m,n,p,q );
}
2、进行以下改动后,运行程序,分析结果。
①将程序第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;
②在①的基础上将printf语句进行下如下修改,再运行程序:
printf("a=%hd,b=%hd\nc1=%c,c2=%c\nd=%15.6f,e=%15.12f\n",a,b,c1,c2,d, e);
printf("f=%f,g=%f\nm=%ld,n=%ld\np=%hd,q=%hd\n",f,g,m,n,p,q);
3、编写程序,用getchar函数读入两个字符c1、c2,然后分别用putchar 函数和printf函数输出这两个字符。上机运行程序,比较用printf和putchar 函数输出字符的特点。
三、实验要求
1、学习程序的调试方法。
2、编写程序,运行程序并记录运行结果。
3、保存源程序、目标文件、可执行文件和实验报告。
实验四选择结构程序设计
一、实验目的
1、正确使用关系表达式和逻辑表达式表达条件。
2、学习分支语句if和switch的使用方法。
3、进一步熟悉Visual C++6.0集成环境的使用方法,学习Visual C++6.0环境提供的调试工具。
二、实验内容
1、编写程序,使之具有如下功能:输入a、b、c三个整数,求最小值。写出调试过程。
2、编写程序,求解下列分段函数:
y=x (-5 y= x-1 (x=0) y=x+1 (0 y=100 其它 3、某托儿所收2岁到6岁的孩子,2岁、3岁孩子进小班(Lower class);4岁孩子进中班(Middle class);5岁、6岁孩子进大班(Higher class)。编写程序(用switch语句),输入孩子年龄,输出年龄及进入的班号。如:输入:3,输出:age:3,enter Lower class。先编程序,然后上机调试运行程序。 (选做)4、有一个函数:x<1时,y=x+3;1<=x<10时,y=(2x+10)/3;x>=10时,y=x。 用scanf函数输入x的值(分别为x<1、1~10、≥10三种情况),求y值。 5、给出一个百分制成绩,要求输出成绩等级'A','B','C','D','E'。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。 6、求a、b、c、d、e等五个数中的最大数。 7、从键盘上输入三个数,让它们代表三条线段的长度,请编写一个判断这三条线段所组成的三角形属于什么类型(不等边,等腰,等边或不构成三 角形)的程序。 8、身高预测 每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。 设faHeight为其父身高,moHeight为其母身高,身高预测公式为: 男性成人时身高=(faHeight+moHeight)*0.54(cm) 女性成人时身高=(faHeight*0.923+moHeight)/2(cm) 此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。 编程从键盘输入你的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示喜爱,输入字符N表示不喜爱),利用给定公式和身高预测方法对你的身高进行预测。 9、简单的计算器程序 要求用switch语句编程设计一个简单的计算器程序。要求根据用户从键盘输入的表达式:data1 op data2 计算表达式的值,操作数为整数,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。 10、在实验9基础上,增加如下要求: (1)如果要求程序能进行浮点数的算术运算,程序应该如何修改?如何比较实型变量data2和常数0是否相等? (2)如果要求连续做多次算术运算,每次运算结束后,程序都给出提示:Do you want to continue(Y/N or y/n)?如果用户输入Y或y时,程序继续进行其它算术运算,否则程序退出运行状态。那么,程序如何修改? 三、实验要求 1、复习关系表达式、逻辑表达式和if语句、switch语句。 2、编写程序,运行程序并记录运行结果。 3、保存源程序、目标文件、可执行文件和实验报告。 实验五循环结构程序设计(一) 一、实验目的 1、学习循环语句for、while和do-while语句的使用方法。 2、学习用循环语句实现各种算法。 3、进一步熟悉Visual C++6.0集成环境的使用方法。 二、实验内容 1、编程计算SUM的值。写出调试过程。计算公式如下:SUM=1+ 1/2+1/3+1/4+……+1/n 2、北京市体育彩票采用整数1、2、 3、……、36表示36种体育运动,一张彩票可选择7种运动。编写程序,选择一张彩票的号码,使得这张彩票的7个号码之和是105且相邻两个号码之差按顺序依次是1、2、3、 4、 5、6。如果第一个号码是1,则后续号码应是2、4、7、11、1 6、22。 (选做)3、编写程序实现输入整数n,输出如下所示由数字组成的菱形。(图中n=5) 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 3 2 1 1 2 3 2 1 1 2 1 1 三、实验要求 1、复习for、while、do-while语句和continue、break语句。 2、编写程序,运行程序并记录运行结果。注意程序的书写格式。 3、保存源程序、目标文件、可执行文件和实验报告。 实验六循环结构程序设计(二) 一、实验目的 1、掌握三种循环语句的格式及应用。 2、掌握break语句和continue语句的格式及应用。 3、提高用结构程序设计的能力。 二、实验内容 1、编写一个程序,求小于100且能被3整除的正数之和。 2、一封电文转换成密文,转换规律如下: ①电文的每一个字母用在字母表中位于其后一个字母来代替,如a用b 代替,z用a代替,Z用A代替。 ②电文中的非字母字符不变。 (选做)3、猜数游戏 在这个实验中,我们将尝试编写一个猜数游戏程序,这个程序看上去有些难度,但是如果你按下列要求以循序渐进方式进行编程实现,你就会发现其实这个程序是很容易实现的。 那么,现在就开始吧,先编写第一个程序,然后试着在第一个程序的基础上编写第二个程序,……。 程序1:编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则计算机给出提示:“Right!”,否则提示:“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所“想”的数不能都是一样的。 程序2:编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。 程序3:编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉人所猜的数是太大还是 太小,最多可以猜10次,如果猜了10次仍未猜中的话,则结束游戏。 程序4:编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。 三、实验要求 1、复习for、while、do-while语句和continue、break语句。 2、编写程序,运行程序并记录运行结果。注意程序的书写格式。 3、保存源程序、目标文件、可执行文件和实验报告。 实验七函数 一、实验目的 1、熟悉掌握函数的定义、调用方式。 2、掌握变量的作用域和变量存储属性在程序中的应用。 3、能用函数编写一般的应用程序。 二、实验内容 1、题目要求:用函数实现三个数求最大值。 2、二维数组(3*4)进行转置,即行列互换,即a[i][j]=>a[j][i];借助一个中间二维数组来存放转置后的结果。 3、编写一个判断素数的函数,然后用主函数调用该函数来求100至500之间的所有素数,并统计素数的个数。 三、实验要求 1、复习函数的调用、声明与使用。 2、编写程序,运行程序并记录运行结果。 3、保存源程序、目标文件、可执行文件和实验报告。 实验八数组(一) 一、实验目的 1、掌握数组的定义、赋值和输入输出的方法。 2、学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等)。 3、熟悉Visual C++6.0集成环境的调试数组的方法。 4、掌握C语言中字符数组和字符串处理函数的使用。 5、掌握在字符串中删除和插入字符的方法。 6、熟悉Visual C++6.0集成环境的调试字符串程序的方法。 二、实验内容 1、调试下述程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。 #include void main() { int i,n,a[10],av; for(i=0;i scanf("%d",a[i]); for(i=0;i printf("%d",a[i]); if(i%3==0) printf("\n"); } for(i=0;i!=n;i++){ av+=a[i]; printf("av=%f\n",av); } } 上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。 2、编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。 3、编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以“stop”作为输入的最后一个字符串。 三、实验要求 1、复习数组的定义、引用和相关算法的程序设计。复习字符串处理函数和字符数组的使用、库函数的调用方法。 2、编写程序,运行程序并记录运行结果。 3、保存源程序、目标文件、可执行文件和实验报告。 实验九数组(二) 一、实验目的 1、熟悉掌握数组的定义及元素的引用方法。 2、掌握有关数组程序设计的方法。 二、实验内容 1、编程实现将一个3*4的矩阵元素各右移动一列,最后一列移至第一列。 2、编写一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中,不能用strcpy函数。拷贝时,'\0'也要拷贝过去,但'\0'后面的字符不拷贝。 3、从键盘输入一整数,然后在一给定的整数数组中进行查找,若找到此数,则将其删除,否则,给出没有找到的提示。 三、实验指导 1、题目要求实现将一个3*4的矩阵元素各右移动一列,最后一列移至第一列。它操作的对象是3*4的矩阵,那么首先应该定义一个3行4列的二维数组;接下来就应该初始化数组并按矩阵形式输出,即每输出一行(4个)数据就输出一个换行符以实现换行。矩阵元素各右移动一列,最后一列移至第一列,第0—2列依次移动一列,即行下标不变,列下标加一即:j+1;最后一列移至第一列即第3列移至第一列,这时行下标不变、列下标为0;两种情况统一,任何元素的下标在移动前后都满足:行下标i不变,列下标j变为(j+1)%4即a[i][j] 移动到a[i][(j+1)%4];将移动后的数组用矩阵的格式输出,此时可以和先前输出的已知矩阵进行比较看,与要求的功能是否相符。注意这里应该借助用一个中间二维数组来存放移动后的新的二维数组,否则会出错。本算法仅供参考。 2、只要将s2中的字符从第一个字符开始依次复制(赋值)到s1的相应的位置,直到遇到第一个'\0'字符时结束。 3、将输入的数据依次和数组的元素比较,如果相等则将此元素后面的所有元素依次向前移动一个位置(即实现删除相等的那个元素),否则再和数组的下一个元素比较;不断重复上面两个过程直到数组结束。 四、实验要求 1、复习数组的定义、引用和相关算法的程序设计。复习字符串处理函数和字符数组的使用、库函数的调用方法。 2、编写程序,运行程序并记录运行结果。 3、保存源程序、目标文件、可执行文件和实验报告。 实验十指针(一) 一、实验目的 1、掌握指针变量的定义与引用。 2、掌握指针与变量、指针与数组的关系。 3、掌握用数组指针作为函数参数的方法。 4、熟悉Visual C++6.0集成环境的调试指针程序的方法。 二、实验内容 以下均用指针方法编程: 1、调试下列程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。 #include void main() { int j,k,a[12],*p; for(j=0;j<12;j++) scanf("%d",p++); for(j=0;j<12;j++){ printf("%d",*p++); if(j%4==0) printf("\n"); } } 2、自己编写一个比较两个字符串s和t大小的函数strcomp(s,t),要求s 小于t时返回-1,s等于t?时返回0,s大于t时返回1。在主函数中任意输入4个字符串,利用该函数求最小字符串。 三、实验要求 1、复习指针的定义与使用方法。 2、编写程序,运行程序并记录运行结果。 3、保存源程序、目标文件、可执行文件和实验报告。