资源描述
《C++程序设计》
实 验 教 学 指 导 书
课程编号:?????
撰写人:朱世华
审核人:
序言
程序设计是一门实践性很强课程,经过试验能够巩固和加强课堂教学内容,提升学生实际工作能力和动手能力,并为后续课程和从事实践技术工作奠定关键基础。所以,学生在进行理论知识学习同时,必需十分重视实践步骤----上机。
上机试验时应该一人一组,独立上机。在上机过程中出现问题,通常应自己独立处理,学生应在试验前将老师指定题目编好程序,然后上机输入和调试。
上机前应事先作好准备工作,以提升上机试验效率,准备工作最少应包含:
(1) 复习和掌握和本试验相关教学内容。
(2) 准备好上机所需程序。
(3) 对运行中可能出现问题应事先做出估量;对程序中有疑问地方,应做上记号,方便上机时给注意。
(4) 准备好调试和运行时所需数据。
试验设备和环境:
1、硬件配置
PentiumⅡ以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,内存大于32MB,硬盘自由空间不少于60MB。推荐配置为内存256MB(或以上),硬盘自由空间1GB以上。
2、软件配置
操作系统:Windows XP,Windows 以上版本
开发环境:Microsoft Visual C++ 以上版本。
目录
试验一 Visual C++ 基础使用方法 1
试验二 数据类型、运算符和表示式 4
试验三 三种基础结构实现1 7
试验四 三种基础结构实现2 9
试验六 指 针 13
试验七 函数 14
试验八 结构和联合 17
试验九 类和对象 20
试验十 综合试验 23
试验一 Visual C++ 基础使用方法
一、试验目标
1. 熟悉Visual C++集成开发环境基础命令和功效键。
2. 学习完整C++ 程序开发过程。
3. 了解简单C++ 程序结构。
二、试验内容和步骤
此次试验将学习相关Visual C++ 开发环境部分知识,并尝试实现一个简单DOS程序和Windows程序。经过此次试验,能够了解用Visual C++ 开发应用程序全过程。
1、熟悉Visual C++ 开发环境
我们选择Visual C++那一项就能够了。下图是VS打开后画面,当然可能你界面跟我不一样,没关系,那只是设置问题。
菜单栏我们常见是File,View和Debug菜单下菜单项。工具栏各项其实在菜单栏全部有和它们对应菜单项,功效是一样。左侧面板能够放多个视图,我这里放了处理方案浏览器、类视图和资源视图,处理方案浏览器中我们能够看到全部头文件和源文件组成树,头文件就是.h后缀文件,源文件就是.cpp后缀文件,类视图中显示了每个工程每个类,也是树状结构,在处理方案浏览器或类视图中双击每一项,中间区域全部会打开对应文件或到类位置。资源视图中显示了界面工程中使用部分界面资源。中间区域默认是打开start page,打开一个工程后我们在左侧面板上双击某项时,中间区域会出现对应界面。右侧面板上有个Toolbox,是在界面工程中用来往界面资源模板上添加控件,里面包含了多种控件,直接拖到模板上就行了。底侧还有多个标签,其中一个是output,这是输出视图,用来输出程序运行信息和我们程序中写部分调试信息,还有一个Find Result视图,用来显示我们搜索任何字母或单词结果。
File->New->Project项能够创建一个工程,也能够在start page中点击New Project...,然后出现New Project窗口中有多个工程类型能够选择, Win32 Console Application是Win32控制台程序,MFC Application是MFC应用程序,能够建立以开发界面程序,Win32 Project是Win32程序,Empty Project是空程序,MFC DLL用来建立生成动态链接库工程,其它不常见就不介绍了。我们要建立一个没有应用程序界面只有Dos命令行界面工程就选Win32 Console Application项,我们学习C++基础知识用这个就能够了。它跟Win32 Project区分是,它入口是main函数,而Win32 Project入口是WinMain函数。
File->Open->Project/Solution能够打开以前建立工程或处理方案,一个处理方案中能够包含多个工程,你能够把它了解为多个相关系或没关系工程集合,有时把多个工程放到一个处理方案里调试起来很方便。
在View下菜单项我们就能够控制它。View->Solution Explorer能够打开或关闭处理方案浏览器视图,View->Class View用来控制类视图显示,View->Resource View控制资源视图显示,当然只有界面工程资源视图中才会有内容。View->Output和View->FindResults等项大家应该也知道它们含义了吧。
Debug->Start Debugging(快捷键是F5)用来开始调试,Debug->Toggle Breadpoint(快捷键是F9)用来设置断点,设置断点后然后开始调试,程序运行到断点时会停下来,我们用鼠标放到断点处各个变量上时能够看到当初这些变量值。Debug->Start Without Debugging表示不调试直接运行,也就是到断点处也不会停止运行。Debug->Step Into(快捷键是F11)用来单步实施,碰到子函数就进入而且继续单步实施;Debug->Step Over(快捷键是F10)也是单步实施,但在单步实施时,在函数内碰到子函数时不会进入子函数内单步实施,而是将子函数整个实施完而跳到下一步,也就是把子函数整个作为一步。
工具栏上有个下拉列表框,它包含有Debug、Release和Configuration Manager,选择Debug时为调试模式,生成可实施程序中包含调试信息,我们能够调试并清楚看到变量值,选择Release时生成可实施程序中不含调试信息,在设置断点后看到变量值可能不正确。
msdn帮助能够点Help->View Help(快捷键是F1),也能够点开始->Microsoft Visual Studio ->Microsoft Visual Studio Documentation打开。
2、控制台应用程序建立
用Appwizard建立一个控制台应用程序,在显示器上输出“Hello,World!”。
(1)创建项目(project)
首先创建一个项目,用来管理用户应用程序。创建项目标步骤为:
① 开启visual Studio 。
② 从主菜单中选择菜单项“File” →“New”,打开“New”对话框。
③ 选择“Projects”标签,从项目列表中单击“Win32 Console Application”选项。
在“project name”编辑框中键入项目标名字,如“hello”,系统将自动为用户项目分配一个默认目录。也能够在“Location”编辑框中重新输入项目存放路径。
单击“OK”按钮继续。
(2)编辑源程序
在项目中添加一个文件:
① 从主菜单中选择菜单项“File”→“New”,打开“New”对话框。
② 在“New”对话框中选择“File”标签,单击“C++ Source File”选项,建立源文件(扩展名为.cpp)。选中“Add to Project”复选框。在右边“File name”编辑框中为文件指定一个名字,如“Hello”,系统将自动加上后缀“.cpp”。
这时在编辑窗口将自动打开一个新空白文件,在文件中输入源程序。
本例中输入以下内容:
#include <iostream.h>
void main()
{
cout<<〞hello,world!〞<<endl;
}
仔细检验输入内容,确保内容正确。
(3)保留源文件
单击工具栏中“save”图标,或选择菜单项“File”→“Save”保留源文件。
(4)编译源文件
选择菜单项“Build”→“Compile Hello.cpp”来编译源文件,假如输入内容没有错误,那么,在屏幕下方输出窗口将会显示:
hello.obj--0 error(s),0 warning(s)
假如在编译时得到错误或警告,则表明源文件出现错误,检验源文件,更正错误后再编译,直至无误。
(5)链接程序
选择菜单项“Build”→“Build Hello.exe”链接程序,假如链接过程中没有错误,则在输出窗口会显示:
hello.exe--0 error(s),0 warning(s)
假如有错误,应更正,然后反复(4)、(5),直至无误。
(6)运行程序
选择菜单项“Build”→“Execute Hello.exe”运行程序,将显示一个类似于DOS窗口,在窗口中第一行输出 “hello,world!”,第二行输出“Press any key to continue”,提醒用户按任意键回到开发环境。
3、编写一个简单C++ 程序
要求:输入圆半径,计算圆周长和面积。
步骤:
(1) 根据上面步骤创建一个项目,名字为“Circle”。
(2) 在项目中增加一个文件,命名为“Circle.cpp”。
(3) 在文件中输入源程序以下:
#include<iostream.h>
const double PI = 3.14159; // 定义符号常量
void main( )
{
double radius; // 定义半径
double perimeter, area ; // 定义周长和面积
cout<<"请输入圆半径:";
cin>>radius;
perimeter=2*PI*radius; // 计算周长
area=PI*radius*radius; // 计算面积
cout<<"圆周长为:"<<perimeter;
cout<<"\n圆面积为:"<<area<<endl;
}
(4) 编译、链接程序,直到没有错误。
(5) 运行程序,输入测试数据,测试程序功效。
测试数据:
输入:5
输出:
圆周长为: 31.4159
圆面积为: 78.5397
输入:7
输出:
圆周长为: 43.9823
圆面积为: 153.938
思索问题:
(1) 程序中为何要包含头文件iostream.h?
(2) 建立控制台应用程序通常步骤是怎样?
试验二 数据类型、运算符和表示式
一、试验目标
1. 掌握Visual C++ 基础数据类型字节宽度和范围表示,熟悉怎样定义一个整型、字符型和实型变量,和对它们赋值方法。
2. 掌握不一样类型数据之间赋值规律。
3. 学会使用C++相关算术运算符,和包含这些运算符表示式,尤其是自增(++)和自减(――)运算符使用。
4. 深入熟悉C++程序编辑、编译、连接和运行过程。
二、试验内容和步骤
1、基础数据类型长度
编写一个程序,输出基础数据类型char、short、int、long、float、double和指针类型void*、char*、short*、int*、long*、float*、double*数据类型长度。
要求:
搞清所使用系统上运行C++编译器中每个基础数据类型长度。
提醒:
利用运算符sizeof(数据类型名)来得到各个数据类型长度。
思索问题:
为何全部指针长度全部一样?
2、整型、字符型变量定义及赋值
(1) 输入并调试运行下面程序
#include<iomanip.h>
void main( )
{
char c1, c2;
c1=’a’;
c2=’b’;
cout<<c1<<setw(5)<<c2<<endl;
}
① 运行此程序,写出实施结果。
② 在此基础上增加一个语句:
cout<<(int)c1<<setw(5)<<(int)c2<<endl;
再运行,并观察结果。
③ 将第1行改为; int c1, c2;
再运行,并观察结果。
④ 将第2、3行改为:
c1= a; //不用单撇号
c2= b;
再使之运行,分析其运行结果。
⑤ 将第2、3行改为:
c1=”a”; // 用双撇号
c2=”b”;
再使之运行,分析其运行结果。
⑥ 将第2、3行改为:
c1=300; //用大于127整数
c2=400;
再使之运行,分析其运行结果。
(2) 输入并调试运行下面程序
#include<iostream.h>
void main( )
{
char c1=’a’, c2=’b’, c3=’c’, c4=’\101’, c5= ’\116’;
cout <<c1<<c2<<”\t”<<c3<<”\t”<<c1<<c2<<c3<<endl;
cout<<”\t\b”<<c4<<c5<<endl;
}
要求:在试验前先分析程序,写出应得结果,试验时将二者对照。
(3) 输入并调试运行下面程序
include<iomanip.h>
void main( )
{
int x, y, m, n;
x = 8;
y = 10;
m = ++x;
n = y++;
cout<<x<<setw(5)<<y<<setw(5)<<m<<setw(5)<<n<<endl;
}
① 运行程序,注意x、y、m、n各变量值。
② 将第4、5行改为:
m = x++;
n = ++y;
再运行。
③ 将程序改为:
#include<iomanip.h>
void main( )
{
int x,y;
x = 8;
y = 10;
cout<<x++<<setw(5)<<++y<<endl;
}
④ 在③基础上,将cout语句改为:
cout<<++x<<setw(5)<<++y<<endl;
⑤ 再将cout语句改为:
cout<<x<<setw(5)<<y<<setw(5)<<x++<<setw<<y++<<endl;
⑥ 将程序改为:
#include<iomanip.h>
void main ( )
{
int x, y, m=0, n=0;
x = 8;
y = 10;
m += x++:
n -= --y;
cout<<x<<setw(5)<<y<<setw(5)<<m<<setw(5)<<n<<endl;
}
写出程序实施结果。
试验三 三种基础结构实现1
一、试验目标
1、 学会正确使用逻辑运算符和逻辑表示式。
2、 熟练掌握if语句和switch语句。
3、 学习调试程序。
二、试验内容和步骤
1、已知三个数a、b、c,找出最大值放于max中。
(1) 输入并调试运行下面程序:
#include<iostream.h>
void main()
{
int a,b,c,max; //定义四个整型变量
cin>>a>>b>>c;
if(a>= b)
max = a; //a>=b
else
max = b; //a<b
if(c>max)
max = c; //c是最大值
cout<<"max="<<max<<endl;
}
(2) 若输入下列数据,分析程序实施次序并写出运行结果。
① 1 2 3
② 2 1 3
③ 3 2 1
④ 3 1 2
⑤ 3 3 2
⑥ 2 1 2
2、输入某学生成绩,经处理后给出学生等级,等级分类以下:
90分以上(包含90):A
80至90(包含80):B
70至80(包含70):C
60至70(包含60)D
60分以下:E
输入以下程序并调试运行。
#include<iostream.h>
void main()
{
float score;
char grade;
cout<<"input a student score:";
cin>> score;
if ( score <0 || score >100 )
cout<<"input error!"<<endl;
else
{
switch ( int(score)/10 )
{
case 10:
case 9: grade = 'A';break;
case 8: grade = 'B';break;
case 7: grade = 'C';break;
case 6: grade = 'D';break;
default: grade = 'E';
}
cout<<"the student scort:"<< grade <<endl;
}
}
输入测试数据,调试程序并写出结果。测试数据要覆盖全部路径,注意临界值,比如此题中100分、60分、0分和小于0和大于100数据。
3、有一函数:
x ( x<1 )
y = 2x-1 ( 1≤x<10 )
3x-11 ( x≥10 )
用cin语句输入x值,求y值。
运行程序,输入x值(分别为x<1、1≤x<10、x≥10三种情况),检验输出y值是否正确。
思索问题:
(1) if语句和switch语句适合于什么情况?
(2) 能否用switch语句完成对输入值判定?
试验四 三种基础结构实现2
一、试验目标
1、学会正确使用逻辑运算符和逻辑表示式。
2、了解并掌握程序循环结构。
3、熟练掌握用while语句、do—while语句和for语句实现循环方法。
4、 掌握在程序设计中用循环方法实现部分常见算法(如穷举、迭代、递推等)。
5、 深入学习调试程序。
二、试验内容和步骤
1、打印500以内“水仙花数”。“水仙花数”是一个3位数,其各位数立方和等于该数本身。
输入以下程序并调试运行
#include <iostream.h>
void main()
{
int i, j, k, n;
for ( n = 100; n<=500; n++ )
{
i = n/100;
j = n/10-i*10;
k = n%10;
if ( n==i*i*i+j*j*j+k*k*k)
cout<<n<<endl;
}
}
2、一个数假如恰好等于它因子之和,这个数就称为完数。求500之内全部完数。
输入以下程序并调试程序。
#include <iostream.h>
void main()
{
int n, s, j;
for ( n=1; n<=500; n++ )
{
s=0;
for ( j=1; j<n; j++)
if ( n%j==0 )
s=s+j;
if ( s==n )
cout<<s<<endl;
}
}
3、任给一个正整数,要求:
(1) 求出它是几位数。
(2) 按逆序打印出各位数字。比如原数为321,应输出123。
(3) 除此之外,程序还应该对不正当输入作必需处理。比如:输入负数。
提醒:利用 %、/ 运算符,循环迭代。
4、编写一个程序,循环从标准输入读入某雇员工作时间(以小时计)和每小时工资数,计算并输出她工资。若雇员月工作小时超出40小时,则超出部分按原工资1.5倍加班工资来计算。若雇员月工作小时超出50小时,则超出50部分按原工资3倍加班工资来计算。而40到50小时工资仍根据原工资1.5倍加班工资来计算。
要求:
(1)分别用三种循环(for、while、do--while)完成程序要求。
(2)要求有输入提醒和输出提醒,如要输入雇员工作时间和每小时工资值时,能够提醒: “请输入雇员工作时间和小时工资:”
输出时,提醒: “雇职员资为:”
(3)循环在用户输入工作时间为0时结束。
测试数据:
输入:30 4
输出:120
输入:45 4.5
输出:213.75
输入:60 5
输出:425
输入:0 0
程序结束
思索问题:
(1) 三种循环语句全部适合于什么情况?假如已经知道要计算雇员数目(如10个),用哪种循环更方便?
(2) while、do—while区分?试验五 数 组
一、试验目标
1、 掌握一维数组和二维数组定义、赋值和输入输出方法。
2、 掌握字符数组和字符串函数使用。
3、 掌握和数组相关算法(尤其是排序算法和查找算法)。
二、试验内容和步骤
1、输入一串字符,计算其中*字符个数。
输入以下程序并调试运行。
#include <iomanip.h>
void main( )
{
char c[30];
int i , sum=0;
cin>>setw(30)>>c;
for ( i=0; c[i]!=’\0’; i++ )
if (c[i] == ‘*‘)
sum=sum + 1;
cout << c <<endl;
cout << “*字符个数为:” << sum << endl ;
}
2、输入一行字符,分别统计出其中英文字母、数字和其它字符个数。
在得到正确结果后,请修改程序使之能分别统计大小写字母、数字和其它字符个数。
提醒:用数组统计个数。
3、从键盘读入若干整数,使用选择排序方法将它们按由低到高排序输出。
要求:用一个数组存放各个整数,用cin 语句输入。
提醒:选择排序法算法以下:
(1) 从n个数中选择最小一个,把它和第一个数组元素交换;
(2) 从剩下n – 1个数中选择最小一个,把它和第二个数组元素交换;
(3) 依这类推,直到从最终两个元素中选出倒数第二小元素并把它和倒数第二个元素交换为止。
测试数据:
程序先输出:请输入数据个数::
用户输入: 5
程序再输出:请输入全部数据:
用户输入: 31 75 63 45 58
程序输出: 31 45 58 63 75
4、有若干个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第多个元素值。假如该数不在数组中,则输出“无此数”。
要求:若干个数用赋初值方法在程序中给出,要找数用 cin语句输入。
提醒:折半查找法:
折半查找思想为:在有序表中,取中间元素作为比较对象,若给定值和中间元素关键码相等,则查找成功;若给定值小于中间元素关键码,则在中间元素左半区继续查找;若给定值大于中间元素关键码,则在中间元素右半区继续查找。不停反复上述查找过程,直到查找成功,或所查找区域无数据元素,查找失败。
(1)low=0;high=length-1; //设置初始区间
(2)当low>high时,返回查找失败信息 //表空,查找失败
(3)low<=high,mid=(low+high)/2; //取中间
① 若kx<elem[mid],high=mid-1;转(2) //查找在左半区进行
② 若kx>elem[mid],low=mid+1;转(2) //查找在右半区进行
③ 若kx==elem[mid],返回数据元素在表中位置 //查找成功
测试数据:
比如,有序表{20,25,30,36,42,48,55,61,69,72,83,97}
程序先输出: 请输入一个整数:
用户输入: 72
程序则应输出: 数据72在有序表中位置下标是10。
用户输入: 35
程序则应输出: 在有序表中无此数!
5、将两个字符串链接起来。
要求:不使用strcat函数。
提醒:定义两个字符型数组,找到第一个串最终一个字符位置,将第二个串字符依次放入。注意串结束标志“\0”。
6、找出一个二维数组“鞍点”,即该位置上元素在该行上最大,在该列上最小。也可能没有鞍点。
提醒:
用cin语句从键盘输入数组各个元素值,检验结果是否正确。题目并未指定二维数组行数和列数,程序应能处理任意行数和列数数组。所以,从理论上来说,应该准备很多个不一样行数和列数数组数据,但这么工作量太大,通常来说不需要这么做,只需要准备经典数据即可。
假如已指定了数组行数和列数,能够在程序中对数组元素赋初值,而无须用cin语句。请同学们修改程序以实现之。
测试数据:(最少应该准备两组测试数据)
(1)二维数组有鞍点
9 80 205 40
90 -60 96 1
210 -3 101 89
(2)二维数组没有鞍点
9 80 105 40
90 -60 196 1
210 -3 101 89
试验六 指 针
一、试验目标
1、 掌握指针概念,会定义和使用指针变量。
2、 能正确使用数组指针和指向数组指针变量。
3、 能正确使用字符串指针和指向字符串指针变量。
4、 了解二级指针概念及其使用方法。
二、试验内容和步骤
1、输入两个整数,按由大到小次序输出。
输入以下程序并调试运行。
#include<iomanip.h>
void main()
{
int a, b;
int * p=&a, *q=&b, *t;
cout<<"请输入a和b:";
cin>>a>>b;
if ( a<b )
{ t=p; p=q; q=t; }
cout<<a<<setw(5)<<b<<endl;
cout<<*p<<setw(5)<<*q<<endl;
}
输入测试数据,分析运行结果。
2、将若干字符串按英文字典由小到大排序。
提醒:利用字符指针数组存放若干字符串,字符串比较和交换。
3、有n个人围成一圈,从第一个人开始报数(从1到3),凡报到3人退出圈子,问最终留下是原来第几号那位。
4、编写程序,当输入整数1—12(月份号)时,输出该月英文名称,输入其它整数时结束程序。
比如,输入“4”,则应输出“April”。输入“0”,则退出程序,要求使用指针数组处理。
5、使用动态内存分配技术设计一个计算学生平均成绩程序,学生个数和课程门数是任意,使用二维数组,程序按平均成绩从大到小输出每个学生成绩。
试验七 函数
一、试验目标
1、掌握函数定义和调用方法。
2、掌握函数实参与形参对应关系和C++三种函数参数传输机制。
3、掌握函数嵌套调用和递归调用方法。
4、掌握全局变量和局部变量、动态变量和静态变量概念和使用方法。
二、试验内容和步骤
1、写一个判定素数函数,在主函数中输入一个整数,输出是否是素数信息。
输入以下程序并调试运行。
#include<iostream.h>
#include<math.h>
#include<string.h>
int prime(int number)
{
int flag=1, n;
for ( n=2; n<= int(sqrt(number)) && flag == 1; n++)
if (number%n ==0)
flag = 0;
return flag;
}
void main ( )
{
int number;
cout<<"请输入一个正整数:";
cin>>number;
if (prime(number))
cout<<number<<"是素数."<<endl;
else
cout<<number<<"不是素数."<<endl;
}
判定素数算法,在以前学习循环时候已经学过了,在这里只是把这个算法用函数形式表示出来 。这里要注意函数定义 申明方法和格式。
2、分析程序运行结果
输入下列程序,运行它,分析得到结果。
#include<iostream.h>
int n=0;
int func( int x=10 );
void main()
{
int a, b;
a=5;
b=func(a);
cout<<”\nlocal a=”<<a<<endl<<”local b=”<<b<<endl
<<”global n=”<<n<<endl;
a++;
b=func(a);
cout<<”\nlocal a=”<<a<<endl<<”local b=”<<b<<endl
<<”global n=”<<n<<endl;
func();
}
int func( int x )
{
int a=1;
static int b=10;
a++;
b++;
x++;
n++;
cout<<”\nlocal a=”<<a<<endl<<”local b=”<<b<<endl
<<”parameter x=”<<x<<endl;
return a+b;
}
运行该程序,得到实施结果。分析得到结果,说明为何得到这么结果。
3、递归函数和非递归函数。
编写一个函数,求从n个不一样数中取r个数全部选择个数。其个数值为:
n!
C rn=
r!*(n-r)!
其中:n!=n*(n-1)*(n-2)*……..*1。
要求:
(1) 分别用递归和非递归两种方法完成程序设计;
(2) 主程序中设计一个循环,不停从输入接收n和r值,计算结果并输出,当用户输入0 0时,程序结束;
(3) 能检验输入数据正当性,要求n>=1而且n>=r;
(4) 注意整数能存放数据范围有限,怎样处理?
提醒:
(1) 能够用double数据类型来存放函数计算结果。
(2) 递归结束条件:
假如r=0,则C(n,r)=1;
假如r=1, 则C(n,r)=n。
测试数据:
输入:5 3
输出:10
输入:10 20
输出:Iput Invalid1
输入:50 3
输出:1.#IND
输入:0 0
Iput Invalid1
程序结束
思索问题:
(1) 对多种数据类型字长是否有了新认识?
(2) 递归函数书写关键点是什么?
(3) 递归和非递归函数各有哪些好处?
5、 求两个整数最大条约数和最小公倍数,用一个函数求最大条约数,用另一个函数求最小公倍数。
(提醒:能够用下面方法求:
一、利用辗除法或其它方法求得最大条约数;
二、 最小公倍数等于两数之积除以最大条约数。)
要求:
两个整数在主函数中输入,并传送给函数1,求出最大条约数返回主函数,然后再和两个整数一起作为实参传输给函数2,以求出最小公倍数,再返回到主函数输出最大条约数和最小公倍数。
试验八 结构和联合
一、试验目标
1、 掌握结构体类型变量定义和使用。
2、 掌握结构数组概念和使用。
3、 掌握链表概念,初步学会对链表进行操作。
4、 掌握联合体概念和应用。
二、试验内容和步骤
1、输入和运行以下程序。
#include<iostream.h>
union data
{
short int s[2];
float a;
int b;
char c[4];
}u;
void main()
{
cin>>u.s[0]>>u.s[1];
cout<<"s[0]="<<u.s[0]<<" s[1]="<<u.s[1]<<endl
<<"a="<<u.a<<" b="<<u.b<<endl
<<"c[0]="<<u.c[0]<<" c[1]="<<u.c[1]<<endl
<<"c[2]="<<u.c[2]<<" c[3]="<<u.c[3]<<endl;
}
输入两个整数10000、0给u.s[0]和u.s[1],分析运行结果。
然后将cin语句改为: cin>>u.b;输入60000给b,分析运行结果。
2、打印学生成绩单,内容包含学号、姓名、三门课(数学MT、英语EN、计算机COMPU)成绩。计算每个学生三门课程总分SUM和平均分AVER。若三门课成绩全部在90分以上者,输出“Y”;不然输出“N”,并打印学生成绩单,格式以下:
NUM NAME MT EN COMP SUM AVER >=90
9501 Liufan 95 98 96.5 289.5 96.5 Y
9502 Zhanghua 95 82 86.5 263.5 87.8333 N
9503 Liming 68 89 85 242 80.6667 N
输入以下程序并调试运行。
#include <iomanip.h>
struct student
{
int num;
char name[15];
float score[3];
float sum;
float aver;
char ch;
};
void main()
{
student stu[3];
int i,j;
for ( i=0; i<3; i++ )
{
cin>> stu[i].num;
cin>> stu[i].name;
for ( j=0; j<3; j++ )
cin>> stu[i].score[j];
}
for ( i=0; i<3; i++ )
{
stu[i].sum=0;
stu[i].ch='Y';
for ( j=0; j<3; j++ )
{
stu[i].sum +=stu[i].score[j];
if (stu[i].score[j]<90)
stu[i].ch='N';
}
stu[i].aver=stu[i].sum/3;
}
cout<<"NUM NAME MT EN COMP SUM AVER >=90"<<endl;
for (i=0;i<3;i++)
{
cout<<stu[i].num<<setw(8)<<stu
展开阅读全文