高级计算机语言实验指导书.docx
《高级计算机语言实验指导书.docx》由会员分享,可在线阅读,更多相关《高级计算机语言实验指导书.docx(36页珍藏版)》请在冰豆网上搜索。
高级计算机语言实验指导书
高级计算机语言
实验指导书
物理与电子信息学院
电子技术实验室
实验目录
实验1C程序的运行环境和运行一个C程序的方法3
实验2数据类型、运算符和表达式6
实验3最简单的C程序设计9
实验4逻辑运算和判断选取控制11
实验5循环控制13
实验6数组16
实验7函数20
实验8指针23
实验9结构体和共用体26
实验1C程序的运行环境和运行一个C程序的方法
一、实验目的
(1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。
(2)了解在该系统上如何编辑、编译、连接和运行一个C程序。
(3)通过运行简单的C程序,初步了解C程序的特点。
二、实验内容和步骤
1、检查所用的计算机系统
是否已安装了C编译系统并确定它所在的子目录。
如果使用的是Windows和Tur-boC,可以按以下步骤进行操作:
单击Windows桌面上的“开始”按钮,从菜单中选中并单击“查找(F)",在其右面的下拉菜单中选择“文件或文件夹(F)",屏幕上出现“查找”窗口,在“名称”栏中输人文件名“tc.exe”,然后单击“开始查找”按钮,系统会自动在指定的范围内寻找所需的文件,如果找到,就会显示出文件路径(例如,C:
\tc)。
请注意搜索范围,应当使“搜索”栏中的内容为“C:
\”,表示从根目录开始寻找,即搜索整个C盘。
2、进入C的工作环境
(1)单击桌面上的“开始”按钮,从菜单中选择“程序”,单击它然后在其下拉菜单中选择“MS-DOS”,屏幕上出现MS-DOS窗口。
(2)用DOS命令cd,使当前目录改变为用户专用的子目录(例如C:
\tc\ZHANG)。
(3)用dir命令检查用户目录中已有哪些文件。
(4)调用Turbo,一般情况下Turboc所在的目录为C:
\tc.调用Turboc的命令一般为,C:
\tc\tc。
此时屏幕上出现Turboc的工作环境。
TurboC主菜单中共有8个项目,功能如下:
File处理文件(包括文件载入、保存、选择、建立、另存为等),目录操作(包括目录列表、改变工作目录等),退出以及调用DOS。
其中主要用到Load、New、Save、Writeto、Quit这五个功能
Edit建立与编辑C源文件
Run控制运行程序。
Compile编译并生成目标程序和可执行程序文件
Project允许说明程序中包含哪些文件的管理项目(Project)
Options可以选择集成编译环境的相关选项(如存储模式、编译时的相关选项、诊断以及连接任选项)与定义宏,可以记录Include、Output与Library文件目录,保存编译选项和从配置文件加载相关选项
Debug检查、改变变量的值,查找函数,程序运行时查看调用栈。
选择程序编译时是否在执行行代码中插入调试信息
Break/Watch增加、删除、编辑监视表达式,设置、清除、执行至断点处
4、输人并运行一个简单的程序
(1)再选择File菜单中的New并按回车键,使编辑窗口变成空白
(2)输入下面的程序。
#include
intmain(void)
{
printf((″Programmingisfun.″);/*输出一串字符*/
return0;/*向操作系统返回一个数字0*/
}
(3)按功能键F9进行编译和连接,观察屏幕上显示的编译信息。
如果出现“出错信息”,则应找出原因并改正之,再进行编译。
(4)如果编译无错误,按Ctrl和F9键使程序运行,按Alt和F5键,切换到用户屏,观察分析运行结果。
5、输人并编辑一个C程序
(1)再选择FileNew,使编辑窗口变成空白。
(2)输人以下程序(故意漏打或打错几个字符)。
#include
intadd(int,int);/*声明将要使用的函数add()*/
intmain(void)
{
ints;/*声明将要使用的变量s是整型的*/
s=add(2,3);/*调用add()进行计算,并用s接收结果*/
printf("Thesumis:
%d",s);/*输出s的值*/
return0;
}
intadd(inta,intb)/*函数add()的定义*/
{
intsum;/*定义一个整数sum,用于存放和*/
sum=a+b;/*将a和b求和,并把结果赋给sum*/
returnsum;/*返回sum的值到调用程序*/
}
(3)按F9进行编译,仔细分析编译信息窗口和Message窗口,可能显示有多个错误,逐个修改,直到不出现错误。
请与教材上的程序对照。
(4)运行程序,分析运行结果。
6、输人并运行一个需要在运行时输人数据的程序
#include
intmax(intx,inty);
voidmain()
{
inta,b,c;
scanf(“%d,%d”,&a,&b);
c=max(a,b);
printf(“max=%d\n”,c);
}
/*max函数的功能是计算出x和y的最大值并返回*/
intmax(intx,inty)
{
intz;
if(x>y)z=x;
elsez=y;
return(z);
}
(1)编译并运行,在运行时从键盘输人整数2和5,然后按回车键,观察运行结果。
(2)将程序中的第2行改为:
Inta;b;c;
再进行编译,观察其结果。
(3)将子程序max的第3,4两行合并为一行,即
if(x>y)z=x;elsez=y;
进行编译和运行,分析结果。
实验2数据类型、运算符和表达式
一、实验目的
(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它赋值的方法。
(2)掌握不同的类型数据之间赋值的规律。
(3)学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
(4)进一步熟悉C程序的编辑、编译、连接和运行的过程。
二、实验内容和步骤
1、输人并运行下面的程序
(1)运行此程序。
(2)在此基础上增加一个语句:
再运行,并分析结果。
(3)将第2行改为:
再使之运行,并观察结果。
(4)再将第3、4行改为:
再使之运行,分析其运行结果。
(5)再将第3、4行改为:
再使之运行,分析其运行结果。
(6)再将第3、4行改为:
再使之运行,分析其运行结果。
2、输人并运行程序
在上机前先用人工分析程序,写出应得结果,上机后将二者对照
3、输人并运行下面的程序
请对照程序和运行结果分析:
(1)将一个负整数赋给一个无符号的变量,会得到什么结果。
画出它们在内存中的表示形式。
(2)将一个大于32767的长整数赋给整型变量,会得到什么结果。
画出它们在内存中的表示形式。
(3)将一个长整数赋给无符号变量,会得到什么结果(分别考虑该长整数的值大于或等于65535以及小于65535的情况)。
画出它们在内存中的表示形式。
读者可以改变程序中各变量的值,以便比较。
例如:
a=65580,b=40000,e=65535,f=65580。
4、输人并运行下面的程序
(1)运行程序,注意i、j、m、n各变量的值,分别作以下改动并运行。
(2)将第4、5行改为:
再运行。
(3)将程序改为:
(4)在(3)的基础上,将Printf语句改为:
(5)再将Printf语句改为:
(6)将程序改为
实验3最简单的C程序设计
一、实验目的
(1)掌握C语言中使用最多的一种语句——赋值语句的使用方法。
(2)掌握各种类型数据的输人输出的方法,能正确使用各种格式转换符。
二、实验内容和步骤
1、掌握各种格式转换符的正确使用方法
#include“stdio.h”
intmain()
{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);
return(0);
}
运行此程序并分析结果。
改用scanf函数输入数据而不用赋值语句,scanf函数如下:
输人的数据如下:
61,62,a,b,3.5,-6.87,3157.890121,0.123456789,50000,-60000,37678,40000分析运行结果。
将p、q改用%0格式符输出。
将scanf函数中的%lf和%ld改为%f和%d,运行程序并观察分析结果。
2、设圆半径
,圆柱高
,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位数字。
说明:
(a)程序设计中使用的所有变量均为float类型
(b)圆周长公式:
(c)圆面积公式:
(d)圆球表面积公式:
(e)圆球体积公式:
(f)圆柱体积公式:
参考程序如下:
#include
#definePI3.14
main()
{
floatr=1.5,h=3;
floatl,s1,s2,v1,v2;
l=2*PI*r;
s1=PI*r*r;
s2=4*PI*r*r;
v1=4*PI*r*r*r/3;
v2=PI*r*r*h;
printf("l=%.2f\n",l);
printf("s1=%.2f\n",s1);
printf("s2=%.2f\n",s2);
printf("v1=%.2f\n",v1);
printf("v2=%.2f\n",v2);
}
实验4逻辑运算和判断选取控制
一、实验目的
(l)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。
(2)学会正确使用逻辑运算符和逻辑表达式。
(3)熟练掌握if语句和switch语句。
(4)结合程序掌握一些简单的算法。
(5)学习调试程序。
二、实验内容
本实验要求事先编好解决下面问题的程序,然后上机输人程序并调试运行程序。
1、有一函数:
用scanf函数输人x的值,求y值。
运行程序,输人x的值(分别为x<1、1
x<10、x
10三种情况),检查输出的y值是否正确。
参考程序如下:
#include
main()
{
floatx,y;
printf("inputx:
");
scanf("%f",&x);
if(x<1)
y=x;
if(x>=1&&x<10)
y=2*x-1;
if(x>=10)
y=3*x-11;
printf("y=%f\n",y);
}
2、给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。
90分以上为A,81-89分为B,70-79分为C,60-69分为D,60分以下为E。
事先编好程序,要求分别用if语句和switch语句实现。
运行程序,并检查结果是否正确。
再运行一次程序,输人分数为负值(如-70),这显然是输人时出错,不应给出等级。
修改程序,使之能正确处理任何数据。
当输人数据大于100或小于。
时,通知用户“输入数据错”,程序结束。
参考程序如下:
#include"stdio.h"
voidmain()
{
intscore;
chargrade;
printf("\npleaseinputastudentscore:
");
scanf("%f",&score);
if(score>100||score<0)
printf("\ninputerror!
");/*程序中对用户可能的错误输入,进行的出错处理*/
else
{
if(score>=90)
grade='A';
else
{
if(score>=80)
grade='B';
else
{
if(score>=70)
grade='C';
else
{
if(score>=60)
grade='D';
elsegrade='E';
}
}
}
printf("\nthestudentgrade:
%c",grade);
}
}
实验5循环控制
一、实验目的
熟悉掌握用while语句,do-while语句和for语句实现循环的方法。
掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。
进一步学习调试程序。
二、实验内容
1、输入两个正整数
和
,求其最大公约数和最小公倍数
说明:
(a)最大公约数:
能够被
和
同时整除的最大正整数
(b)最小公倍数:
和
相乘的积除以最大公约数
(c)使用for循环,将
和
同时除以1到
(
为
和
两者中较小者),直到找出最大的正整数即为最大公约数
(d)输出格式如下:
Thegreatestcommondivisoris*!
Theleastcommonmultipleis*!
参考程序如下:
#include
main()
{
intm,n,temp;
inti;
intgreat,least;
printf("inputm,n:
");
scanf("%d,%d",&m,&n);
if(m>n)
{
temp=m;
m=n;
n=temp;
}
for(i=1;i<=m;i++)
{
if(n%i==0&&m%i==0)
great=i;
}
least=m*n/great;
printf("Thegreatestcommondivisoris%d\n",great);
printf("Theleastcommonmultipleis%d\n",least);
}
2、求1!
+2!
+……+20!
说明:
(a)首先要求出每一项的n!
的值
(b)然后把各项相加得到所求的值
(c)存储求和运算结果的变量的初始值应为0
(d)存储求积运算结果的变量的初始值应为1
参考程序如下:
①使用while循环
#include
main()
{
floatsum=0;
floatmid=1;
intn=1;
while(n!
=21)
{
mid=mid*n;
n++;
sum=sum+mid;
}
printf("sum=%f\n",sum);
}
②使用for循环
#include
main()
{
floatsum=0;
floatmid=1;
intn;
for(n=1;n<=20;n++)
{
mid=mid*n;
sum=sum+mid;
}
printf("sum=%f\n",sum);
}
3、用牛顿迭代法求方程2x
-4x
+3x-6=0在1.5附近的根。
在得到正确结果后,请修改程序使所设的x初值由1.5改变为100、1000、10000,再运行,观察结果,分析不同的x初值对结果有没有影响,为什么?
修改程序,使之能输出迭代的次数和每次迭代的结界,分析不同的x初始值对迭代的次数有无影响。
参考程序如下:
#include
voidmain()
{
floatx,x0,f,f1;
x=1.0;
do
{
x0=x;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x=x0-f/f1;
}while(fabs(x-x0)>=1e-5);
printf(“%6.2f”,x);
}
实验6数组
一、实验目的
(1)掌握一维数组和二维数组的定义、赋值和输人输出的方法;
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法(特别是排序算法)。
二、实验内容编程序并上机调试运行。
1、从键盘输入10个整数,对这个十个数进行排序,并输出。
说明:
(a)将这10个整数存入一个含有10个元素的一维数组中
(b)冒泡法:
从第一个数开始依次让相邻的两个数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。
第一遍比较后,最大的数已放在最后,第二遍只需考虑剩下的数,以此类推直到最后两个数比较后就可以完成排序。
(c)比较完成后将数组中元素依次输出
参考程序如下:
#include
main()
{
intnum[10];
inti,j;
inttemp;
printf("input10numbers:
");
for(i=0;i<10;i++)
scanf("%d",&num[i]);
for(i=0;i<=8;i++)
{
for(j=0;j<9-i;j++)
{
if(num[j]>num[j+1])
{
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
printf("thesortednumbers:
");
for(i=0;i<10;i++)
printf("%d",num[i]);
}
2、已有一个已排好序的数组,从键盘输入一个数,要求按原来排序的规律将它插入数组中。
说明:
(a)需要保证数组的元素据个数比插入前多1,
(b)需要找到在数组中插入的位置,
(c)可倒序查找:
假设从小到大排序,从最后一个开始查找,如果要插入元素比当前数组元素小则将该数组元素赋予后边一个元素,继续比较;否则将要插入元素赋予该数组元素的下一个元素,然后break结束循环,
(d)输入该数组即可。
参考程序如下:
#include
main()
{
inta[10]={0,1,2,4,5,6,7,8,9};
intb=3;
inti;
for(i=8;i>=0;i--)
{
if(a[i]>b)
a[i+1]=a[i];
else
{
a[i+1]=b;
break;
}
}
printf("Thenewsortedarrayis");
for(i=0;i<10;i++)
printf("%d",a[i]);
}
3、将两个字符串连接起来,不要用strcat函数。
说明:
(a)将连个字符串存入两个字符串数组中,要保证第一个字符串的长度能够容纳两个字符串之和,
(b)连接两个字符串主要是找到第一个字符串的结尾,然后将第二个字符串连接到第二个字符串的后边,
(c)输出格式为:
Theconnectedstringis*!
参考程序如下:
#include
main()
{
charstr1[50],str2[20];
inti,j;
printf("inputstring1:
");
scanf("%s",str1);
getchar();
printf("inputstring2:
");
scanf("%s",str2);
for(i=0;str1[i]!
='\0';i++);
for(j=0;str2[j]!
='\0';j++,i++)
str1[i]=str2[j];
str1[i]='\0';
printf("Theconnectedstringis%s\n",str1);
}
4、从键盘输入一串字符串,统计字符串中特定字符的个数(特定字符也需要从键盘输入),并输出个数。
说明:
(a)输入时需要用到的输入格式控制字是%s,
(b)字符串存入一个足够大的字符数组中,保证输入的字符个数不要超过最大个数,
(c)使用循环控制语句,需要了解字符数组的结束标志是’\0’,作为循环的结束标志,
(d)输出格式如下:
Thenumberof*is*!
参考程序如下:
#include
main()
{
charstr[50];
charch;
intcount=0;
inti=0;
printf("inputastring:
");
scanf("%s",str);
getchar();
printf("inputthechar:
");
scanf("%c",&ch);
while(str[i]!
='\0')
{
if(str[i]==ch)
count++;
i++;
}
printf("Thenumberof%cis%d!
\n",ch,count);
}
实验7函数
一、实验目的
(l)掌握定义函数的方法;
(2)掌握函数实参与形参的对应关系以及“值传递”的方式;
(3)掌握函数的嵌套调用和递归调用的方法;
(4)掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。
(5)学习对多文件程序的编译和运行。
二、实验内容编程序并上机调试运行。
1、写一个判别素数的函数,在主函数输人一个整数,输出是否素数的信息。
本程序应当准备以下测试数据:
17、34、2、1、O。
分别输人数据,运行程序并检查结果是否正确。
说明:
(a)判断素数的函数名为Prime