《高级语言程序设计》实验课程要求
高级语言程序设计是一门实践性很强的课程,理论与实践双重并重,学好理论课的同时应加强注重动手能力的培养与提高。
为了达到上述目的,本课程根据课程内容,安排了十个实验题目,在实验时应注意以下几点,并完成相应的实验要求。
一、实验设备
1 软件系统:Window XP操作系统、Microsoft Visual C++ 6.0
2 硬件环境:多媒体机房、微机
二、实验报告要求
1源程序清单;
2 运行结果截图;
3.每个实验另起一页。
三、 每次上机前应了解本次的实验目的与要求,对题目进行问题分析和算法求解,按要求完成实验报告。
实验一 C语言系统环境
一、目的要求
1 熟悉C语言的运行环境;
2 学会C语言的源程序的调试及运行;
3 了解C源程序的结构特点。
二、实验内容
1 求三个数中的大数并输出。
三、源程序清单
#includeint main()
{
int a,b,c,max;
scanf(\"%d %d %d\
if(a>b) max=a;
else max=b;
if(c>max) max=c;
else max=max;
printf(\"max=%d\\n\
return 0;
}
四、运行结果截图:
实验二 顺序结构程序设计
一、目的要求
1 掌握C语言数据类型及对它们的赋值方式;
2 学会使用C语言的有关算数运算符及表达式的使用;
3 熟练掌握数据的输入输出方法,能正确使用各种格式转换符。
二、实验内容
要求用scanf输入数据,输出计算结果,结果取小数点后两位。
1 已知圆的半径r=1.5cm,求圆的周长、面积。
2 已知一个圆柱高h=3cm,求圆柱体的体积。
三、源程序清单
#includeint main()
{
float r,l,s,h,v;
float pi=3.1415926;
scanf(\"%f %f\
l=2*pi*r;
s=pi*r*r;
v=s*h;
printf(\"周长l=%.2f\\n面积s=%.2f\\n圆柱体积v=%.2f\\n\
return 0;
}
四、运行结果截图
实验三 选择结构程序设计
一、目的要求
1 了解C语言表示逻辑量的方法;
2 学会正确使用C语言的逻辑运算符和逻辑表达式;
3 熟练掌握if语句和switch语句。
二、实验内容
1 输入三个数,判断能否以这三个数构成一个三角形,若能则输出所构成三角形的类别(等边、等腰、直角或斜三角形)。
2 已知年月,求该年该月有多少天。
三、源程序清单
1#includeint main()
{
double a,b,c;
scanf(\"%lf %lf %lf\
if((a<0)||(b<0)||(c<0)||(a+b<=c)||(b+c<=a)||(a+c<=b))
printf(\"不能构成三角形\\n\");
else
if(a==b&&b==c&&a==c)
printf(\"能构成等边三角形\\n\");
else if(a==b||b==c||a==c)
printf(\"能构成等腰三角形\\n\");
else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
printf(\"能构成直角三角形\\n\");
else printf(\"能构成斜三角形\\n\");
return 0; }
2
#includeint main()
{
int year,month,day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf(\"%d,%d\
if(year%400==0||(year%100!=0&&year%4==0))day[1]=29;
printf(\"%d天\\n\
return 0;
}
四、运行结果截图
1
2
实验四 循环结构程序设计
一、目的要求
1 掌握while语句、 do-while语句和for语句实现循环的方法;
2 用循环的方法实现各种算法。
二、实验内容
1 求两个自然数,其和是667,最小公倍数与最大公约数之比为120:1。
2 一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?第10次反弹多高?
三、源程序清单
1
#includeint main()
{
int m,n,yue,bei;
for(n=1;n<334;n++)
{
m=667-n;
for(yue=n;yue>=1;yue--)
if(m%yue==0&&n%yue==0) break;
bei=m/yue*n;
if(bei%yue==0&&bei/yue==120)
printf(\"m=%d,n=%d\\n\
}
return 0;
}
2
#include int main()
{
float sum=100,h=sum/2;
int n;
for (n=2;n<=10;n++)
{
sum=sum+h*2;
h=h/2;
}
printf(\"sum=%f\\nh=%f\\n\
return 0;
}
四、运行结果截图
1
2
实验五 数组及其应用
一、目的要求
1 掌握一维数组和二维数组的定义、赋值和输入输出方法;
2 掌握与数组有关的算法(特别是排序算法);
3 掌握字符数组的使用方法和字符串函数的使用。
二、实验内容
1 用选择法对10个整数进行排序,要求用scanf函数输入。
2 打印杨辉三角形。
3 编程将两个字符串连接起来,不能使用strcat函数。
三、源程序清单
1
#includeint main()
{
int i,j,min,temp,a[11];
for(i=1;i<=10;i++)
scanf(\"%d\
printf(\"\\n\");
for(i=1;i<=10;i++)
printf(\"%4d\
printf(\"\\n\");
for(i=1;i<=9;i++)
{
min=i;
for(j=i+i;j<=10;j++)
if(a[min]>a[j]) min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
for(i=1;i<=10;i++)
printf(\"%4d\
printf(\"\\n\");
return 0;
}
2
#include#define N 10
int main()
{
int i,j,a[N][N];
for(i=0;i{ a[i][i]=1;a[i][0]=1;
}
for(i=2;ifor(j=1;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i{ for(j=0;j<=i;j++)printf(\"%6d\j]);
printf(\"\\n\");
}
printf(\"\\n\");
return 0;
}
3
#includeint main()
{
char s1[80],s2[40];
int i=0,j=0;
printf(\"input string1:\");
scanf(\"%s\
printf(\"input string2:\");
scanf(\"%s\
while(s1[i]!='\\0') i++;
while(s2[j]!='0') s1[i++]=s2[i++];
s1[i]='\\0';
printf(\"\\nThe new string is: %s\\n\
return 0;
}
四、运行结果截图
1
2
实验六 函数及其应用
一、目的要求
1 掌握函数的定义方法;
2 掌握函数中实参和形参的传递关系和对应关系,返回语句return的使用;
3 掌握函数的一般调用、嵌套调用和递归调用的方法。
4 了解局部和全局变量,静态和动态存储方式,内部和外部函数。
二、实验内容
1 用递归法将一个整数n转换成字符串。n的位数不确定,可以是任意位数的整数。例如,输入483,应输出字符串“483”。
2 编程求前n个素数。n的大小由用户键盘输入决定。
三、源程序清单
1#includeint main()
{
void convert(int n);
int num;
printf(\"intput an integer:\");
scanf(\"%d\
printf(\"output:\");
if(num<0)
{putchar('-');putchar(' ');
num=-num;
}
convert(num);
printf(\"\\n\");
return 0;
}
void convert(int n)
{int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
putchar(32);
}
2
#includeint main()
{
int n=0;
printf(\"n=\");
scanf(\"%d\
int s=1;
int j=0;
for (int i=0;i{ s++;int t=s-1;
for(j=2;j{if (s%j==0){break;}
}
if (j==t||s==2)
{
printf(\"%d\\n\
}
else{i--;}
}
return 0;
}
四、运行结果截图1
2
实验七 指针及其应用
一、目的要求
1 掌握指针的概念,会定义和使用指针变量;
2 学会使用字符串的指针和指向字符串的指针变量;
3 学会使用指针数组的引用方法和理解其含义;
4 了解命令行参数的使用方法。
二、实验内容
1 用指针完成函数strlen的功能。
2 将n个数按照输入的顺序的逆序输出,用函数实现。(传递时的实参或形参尽量使用指针进行传递。)
三、源程序清单
1. #includeint main()
{
int length(char*p);
int len;
char str[20];
printf(\"intput string: \");
scanf(\"%s\
len=length(str);
printf(\"The length of string is %d.\\n\
return 0;
}
int length(char*p)
{
int n;
n=0;
while (*p!='\\0')
{n++;p++;}
return (n);
}
2. #includeint main()
{
void sort(char*p,int m);
int i,n;
char *p,num[20];
printf(\"intput n: \");
scanf(\"%d\
printf(\"intput numbers:\\n\");
for(i=0;iscanf(\"%d\p=&num[0];
sort(p,n);
printf(\"the sequence is:\\n\");
for(i=0;iprintf(\"%d \printf(\"\\n\");
return 0;
}
void sort(char*p,int m)
{
int i;
char temp,*p1,*p2;
for (i=0;i<=m/2;i++)
{ p1=p+i;
p2=p+(m-1-i);
temp=*p1;
*p1=*p2;
*p2=temp;
}
}
四、运行结果截图
1
2
实验八 结构体、共同体
一、目的要求
1 掌握结构体定义方法,结构体变量作为函数参数的调用方法;
2 掌握共同体的定义和使用方法,以及与结构体的区别。
二、实验内容
1 定义一个结构体变量(包括年、月、日)。计算某一日在本年中是第几天?
(注意闰年的不同)
2 将一个链表按逆序排列,即将链头当做链尾,链尾当做链头。
(此题目选做)
三、源程序清单
1. #includestruct Date
{ int year;
int month;
int day;
}date;
int main()
{
int i,days;
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf(\"请输入年月日: \");
scanf(\"%d %d %d\
days=0;
for(i=1;idays=days+day_tab[i];days=days+date.day;
if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&date.month>=3)
days=days+1;
printf(\"%d月%d日在%d年中是第%d天\\n\
return 0;
}
四、运行结果截图
实验九 文件操作及应用
一、目的要求
1 掌握文件、文件指针,以及缓冲文件系统的概念;
2 学会使用文件打开、关闭、文件读和写等操作。
二、实验内容
1 对std文件中的数据进行输入,并按平均分排序,且存入新文件sort中。
* 实验十 预处理命令、位运算
一、目的要求
1掌握按位运算的概念和方法,学会使用位运算;
2 学会通过运算实现对某些位和运算。
二、实验内容
1 编写一个函数getbits,从一个16位的单元中取出某几位。