高级语言程序设计.docx
《高级语言程序设计.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计.docx(46页珍藏版)》请在冰豆网上搜索。
高级语言程序设计
陕西省高等教育自学考试
高级语言程序设计课程
实践环节考核报告
准考证号:
考生姓名:
所学专业:
计算机及应用专业层次:
大专
考核地点:
西安电子科技大学考核时间:
2012、5、18
考核桌(机)号:
同组考核者姓名:
实践考核评语及成绩评定(由指导教师填写)
教师签名:
年月日
主考院校:
西安电子科技大学
《高级语言程序设计》课程实践
实验环境
1.硬件:
CPU2.4G;内存256M;硬盘40G;显示器17;
2.软件:
操作系统windowsxp
3.实验环境:
TurboC,word2003
实验一数据类型、运算符、表达式和数据的输入输出
一、实验目的
1.掌握C语言的基本数据类型,熟悉不同类型数据之间运算和赋值的转换规律,以及字符型、整型数据之间的混合引用。
2.掌握运算符的优先级和结合方向,特别是増一(++)和减一(——)运算符的使用。
3.掌握C程序的编辑、编译、连接和运行的过程。
二、实验内容
手工分析程序中各变量的输出值,运行程序验证手工分析的结果。
1.符号位的扩展。
main()
{charc1,c2;
Inti1,i2;
unsignedu1,u2;
c1=’a’;c2=c1-32;
printf(“%c,%c,%d,%d\n”,c1,c2,c1,c2);
c1=’\176’;c2=’\376’;
i1=c1;12=c2;
u1=’\176’;u2=’\376’;
printf(“%d,%d,%u,%u\n”,i1,i2,u1,u2);
}
运行结果:
‘a’,’A’,97,65
126,-2,126,65534
2、算术表达式的计算。
上机运行并输出结果如下:
main()
{inti1,i2;
charc1,c2;
floatf;
i1=5;c1='A';
i2=i1+++i1;c2=--c1%2;
printf("%d,%d\n",i2,c2);
i1=10;i1*=i1-5;i2=i1%3;
printf("%d,%d\n",i1,i2);
i1=3;f=15/(i1--);
printf("%5.2f\n",f);
}
输出结果:
10,0
50,2
5.00
main()
{inta=5,b=4,c=3,i;
i=a>b>c;
printf("%d,%d\n",i,a||b+c&&c-b);
a=b=c=2;
i=a>b&&(c=0);
printf("%d,%d,%d,%d\n",i,a,b,c);
i=(a==b?
(c=0):
a>b?
(c=1):
(c=-1));
printf("%d,%d,%d,%d\n",i,a,b,c);
}
运行结果:
0,1
0,2,2,2
0,0,2,0
运行程序:
运行结果:
main()
{inta=5,b=4,c=3,i;
i=a>b>c;
printf("%d,%d\n",i,a||b+c&&c-b);
a=b=c=2;
i=a>b&&(c=0);
printf("%d,%d,%d,%d\n",i,a,b,c);
i=(a==b?
(c=0):
a>b?
(c=1):
(c=-1));
printf("%d,%d,%d,%d\n",i,a,b,c);
}
运行结果:
0,1
0,2,2,2
0,0,2,0
运行程序:
运行结果:
源代码:
main()
{inta=5,b=4,c=3,i;
i=a>b>c;
printf("%d,%d\n",i,a||b+c&&c-b);
a=b=c=2;
i=a>b&&(c=0);
printf("%d,%d,%d,%d\n",i,a,b,c);
i=(a==b?
(c=0):
a>b?
(c=1):
(c=-1));
printf("%d,%d,%d,%d\n",i,a,b,c);
}
运行结果:
0,1
0,2,2,2
0,0,2,0
运行程序:
运行结果:
main()
{inta=5,b=4,c=3,i;
i=a>b>c;
printf("%d,%d\n",i,a||b+c&&c-b);
a=b=c=2;
i=a>b&&(c=0);
printf("%d,%d,%d,%d\n",i,a,b,c);
i=(a==b?
(c=0):
a>b?
(c=1):
(c=-1));
printf("%d,%d,%d,%d\n",i,a,b,c);
}
运行程序:
运行结果:
运行结果:
0,1
0,2,2,2
0,0,2,0
5、逗号表达式的计算。
main()
{inta=2,b=3,c,i;
i=(b=a+1,c=b+2);
printf("%d,%d,%d,%d\n",a,b,c,i);
b=a++,c=++b,i=c+++a;
printf("%d,%d,%d,%d\n",a,b,c,i);
}
实验二基本语句的使用
一、实验目的
1.掌握if、switch语句的使用,掌握分支程序设计的一般方法。
2.掌握witch、do-while、for语句实现循环的方法,注意三种循环语句判断循环条件和执行循环体的先后顺序。
3.掌握用分支、循环的方法实现一些常用方法。
4.学习调试程序的方法。
二、实验内容
1.从键盘输入一个字符,判断是字母、数字还是其它字符。
将程序输出部分补充完整。
main()
{charch;
scanf("%c",&ch);
if('a'<=ch&&ch>='z'||'A'<=ch&&ch>='Z')
printf("%cisletter.\n",ch);
elseif('0'<=ch&&ch>='9')
printf("%cisdigit.\n",ch);
elseprintf("%cisother.\n",ch);
}
程序运行:
输出结果:
输出结果:
从键盘上输入:
4
输出结果:
4isother
输入:
B
输出结果:
Bisdigit
输入:
b
输出结果:
bisletter
2.输入X的值,计算Y的值。
X(x<1)
Y=2X-1(1=3X-11(x.>=10)
#include
main()
{intx,y;
scanf("%d",&x);
if(x<1)y=x;
elseif(x<10)y=2*x-1;
elsey=3*x-11;
printf("%d",y);
}
输入:
x=0.6输出:
0.6
输入:
x=2输出:
3
输入:
x=11输出:
22
3.
X+1(0≤x≤1.5)
2x²+x+1(1.5≤x≤3.0)
X+sinx(3.0≤x≤6.0)
x²+cosx(6.0≤x≤9.0)
0(x≥9.0)
用if语句或switch语句计算.
Y=
#include
main()
{floatx,y;
scanf("%f",&x);
if(x>0&&x<=1.5)
y=x+1;
elseif(x>=1.5&&x<3.0)
y=2*x*x+x+1;
elseif(x>=3.0&&x<6.0)
y=x+sin(x);
elseif(x>=6.0&&x<9.0)
y=x*x+cos(x);
elseif(x≥9.0);
y=0;
}
输入数据:
1
结果:
2
4.输入一个不超过5位的正整数,要求1.求出它是几位数;2.分别打印出每一位数字;3.按逆序打印出各位数字,例如原数为123,应输出321.
main(){
intdata;
inta,b,c,d,e;
printf("enter:
");
scanf("%d",&data);
if(data<10){
printf("1\n");
}
if(data>=10&&data<100){
a=data%10;
b=data/10;
printf("2\n");
printf("%d%d\n",a,b);
}
if(data>=100&&data<1000){
a=data/100;
b=data/10%10;
c=data%10;
printf("3\n");
printf("%d%d%d\n",c,b,a);
}
if(data>=1000&&data<10000){
a=data/1000;
b=data/100%10;
c=data/10%10;
d=data%10;
printf("4\n");
printf("%d%d%d%d\n",d,c,b,a);
}
if(data>=10000&&data<100000){
a=data/10000;
b=data/1000%10;
c=data/100%10;
d=data/10%10;
e=data%10;
printf("5\n");
printf("%d%d%d%d%d\n",e,d,c,b,a);
}
getch();
}
输入:
123
输出结果为:
321
5.计算数列:
1、3、5、……2n-1、……的前n项之和,其中的n的键盘输入,将程序补充完整。
(分别用三种循环语句来完成)
方法一:
(用for语句实现)
main()
{longs,n,k,i;
scanf("%ld",&n);
k=2*n-1;
s=0;
for(i=1;i<=k;i++)s+=i;
printf("1+3+……+%ld=%ld\n",k,s);
}
方法二(用while语句实现)
main()
{longs=0,n,i=1;
scanf("%ld",&n);
while(i<=(2*n-1));
{s+=i;
i=i+2;
}
printf("1+3+……+%ld=%ld\n",2*n-1,s);
}
方法三(用do-while语句实现)
main()
{longs=0,n,i=1;
scanf("%ld",&n);
do
{s+=i;
i=i+2;
}while(i<=(2*n-1));
printf("1+3+……+%ld=%ld\n",2*n-1,s);
}
7、利用公式e=1+1/1!
+1/2!
+……+1/n!
计算e的值,要求最后一项小于10-6;
/1+1/1!
+1/2!
+....+1/n!
=e
main()
{inti=1,n=1;
floatp=1.0,e=1.0;
while(p>10E-6)
{n=n*i;
p=1.0/n;
i++;
e=e+p;
}
printf("%f=1+1/1!
+1/2!
+....+1/n!
\n",e);
}
结果:
e=1+1/1!
+1/2!
+…+1/n!
=2.718282
实验三数组及指针的应用
一、实验目的
1.掌握指针的概念,能够正确使用指针变量。
2.掌握一维数组和二维数组的定义及初始化的方法。
3.掌握使用下标法和指针法引用数组元素。
4.掌握用一维数组的方法处理二维数组。
5.掌握用字符数组存放字符串的操作方法,能正确使用指向字符串的指针量。
6.掌握系统提供的字符串处理函数。
7.掌握与数组有关的算法。
二、实验内容
1.用下标和指针对一维数组进行输出。
分析程序运行结果,然后运行程序进行验证。
main()
{inti,a[5]={1,2,3,4,5},b[3]={2,4,6},*pb=b;
for(i=0;i<5;i++)
printf("%5d",a[i]);
printf("\n");
for(i=4;i>=0;i--)
printf("%5d",*(a+i));
printf("\n");
for(i=0;i<3;i++)
printf("%5d",pb[i]);
printf("\n");
for(i=2;i>=0;i--)
printf("%5d",*(pb+i));
printf("\n");
}
运行程序:
运行结果:
输出结果:
1,2,3,4,55,4,3,2,12,4,66,4,2
2、输入字符串a,b,将字符串b连接在、字符串a之后。
将程序补充完整。
(不使用字符串连接函数)
#include
main()
{
chara[80],b[40],*pa=a,*pb=b;
gets(pa);gets(pb);
while(*pa!
='\0')pa++;
while(*pb!
='\0')
{*pa=*pb;
pa++;
pb++;
}
puts(a);
puts(b);
}
运行结果:
如数组a为:
abc,数组b为def
结果是:
abcdef
3、从键盘上输入一个十进制正整数,将其转化成八进制,然后输出(要求用字符型存放八进制数)
main()
{inti=0,a[100],x,k;
scanf("%d",&x);
while(x!
=0){
a[i]=x%8;
x/=8;
i++;
}
for(k=i-1;k>=0;k--)
printf("%d",a[k]);
}_
程序运行结果:
4、输入10个正整数,存入数组a中然后按从大到小的顺序进行排序并输出。
main()
{inti,j,m,n,a[10]
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(m=1;m<10;m++)
for(j=9,i=0;i<10-m;i++,j--)
if(a[j]>a[j-1])
{n=a[j],a[j]=a[j-1],a[j-1]=n;}
for(i=10;i>0;i--)
printf("%d",a[i]);
printf("\n");
}
实验结果:
12,36,-35,56,-15,35,40,58,-100,
58,56,40,36,35,12,-15,-35,-100
6、输入一行数字字符,用整型数组统计其中每个数字字符的个数,下标为零的元素存放‘0’的个数,下标为一的元素存放‘1’的个数,……。
#include
#include
intmain()
{
inta[10]={0};
charch='\0';
printf("请输入数字:
");
do
{
ch=getche();
if(ch>='0'&&ch<='9')
{
a[ch-'0']++;
}
}while((ch>='0'&&ch<='9'));//非数字退出循环
for(inti=0;i<10;++i)
{
printf("\n%d,%d个",i,a[i]);
}
return0;
}
7、用二维字符型数组存放若干个字符串,利用系统提供的字符串处理函数找出其中最大的字符串。
#include
#include
#define N 3
void main()
{
char a[10][10];
int i;char *max;
for(i=0;i{
printf("input %d strings:
",i+1);
gets(a[i]);
}
max=a[0];
for(i=1;iif(strcmp(max,a[i])<0)max=a[i];
puts(max);
}
实验四函数及指针的应用
一、实验目的
1.掌握函数定义和调用的方法。
2.掌握函数之间数据传递的方法,理解“值传递”和“地址传递”的区别。
3.掌握函数的嵌套调用和递归调用的方法。
4.掌握数据存贮类型的概念和使用方法。
二、实验内容
1、利用函数求一维数组中的最大值和最小值,将程序补充完成。
#definen5
main()
{voidmax_min();
inta[n],i,max,min;
for(i=0;iscanf("%d",&a[i]);
max_min(a,&max,&min,n);
for(i=0;iprintf("%5d",a[i]);
printf("\nmax=%d,min=%d\n",max,min);
}
voidmax_min(a,p_max,p_min,n)
inta[],*p_max,*p_min,n;
{inti;
*p_max=*p_min=a[0];
for(i=1;i{if(a[i]>*p_max)*p_max=a[i];
if(a[i]<*p_min)*p_min=a[i];
}
return;
}
实验结果:
8,32,46,15,20
max=46,min=8
2.分析程序运行结果,然后运行程序进行验证。
比较静态变量与自动变量的区别。
源程序:
main()
{voidfun();
fun();
fun();
}
voidfun()
{inta=0;
staticintb=0;
a++;b++;
printf("%d,%d\n",a,b);
}
运行程序:
运行结果:
输出结果:
1,11,21,11,2
4、分别用函数递归和非递归的方法求两个整数的最大公约数。
要求在主函数中输入两个整数并输出最大公约数。
1)非递归
#include
intmain()
{
intm,n;
intm_cup,n_cup,res;/*被除数,除数,余数*/
printf("Entertwointeger:
\n");
scanf("%d%d",&m,&n);
if(m>0&&n>0)
{
m_cup=m;
n_cup=n;
res=m_cup%n_cup;
while(res!
=0)
{
m_cup=n_cup;
n_cup=res;
res=m_cup%n_cup;
}
printf("Greatestcommondivisor:
%d\n",n_cup);
}
elseprintf("Error!
\n");
return0;
}
2)递归
#include
intgetGreatestCommonDivisor(intnum1,intnum2)
{
inttemp;
temp=num1%num2;
if(temp==0)
{
returnnum2;
}
else
{
returngetGreatestCommonDivisor(num2,temp);
}
}
intmain()
{
intm,n;
intm_cup,n_cup,res;/*被除数,除数,余数*/
printf("Entertwointeger:
\n");
scanf("%d%d",&m,&n);
if(m>0&&n>0)
{
m_cup=m;
n_cup=n;
printf("Greatestcommondivisor:
%d\n",getGreatestCommonDivisor(m_cup,n_cup));
}
elseprintf("Error!
\n");
return0;
}
5.用函数递归的方法求Fibonacci数列的前n项。
int(m);
intm;
{if(n<0)
{printf("inputerror!
\n");
return(-1);
else
if(m==0||m==1)
return
(1);
else
return(f(m-2)+f(m-1));
}
main()
{inti,f[100];
scanf(%d%,&n);
for(i=0;i{F[i]=f[i];printf(“%d”,F(i);)}
实验结果:
1235
13213455
144233377610
1597258441816765
只部分结果。
。
。
。
。
。
9
7、编写一函数,统计由实参传来的一个字符串中的字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。
#include
voidcount(char*s,int*a,int*b,int*c,int*d)
{
*a=*b=*c=*d=0;
while(*s)
{
if('A'<=*s&&*s<='Z'||'a'<=*s&&*s<='z')
(*a)++;
elseif('0'<=*s&&*s<='9')
(*b)++;
elseif(*s=='')
(*c)++;
else
(*d)++;
s++;
}
}
intmain()
{
chars[100];
intlc,dc,sc,oc;
printf("输入字符串:
\n");
gets(s);
count(s,&lc,&dc,&sc,&oc);
printf("字母:
%d\n",lc);
printf("数字:
%d\n",dc);
printf("空格:
%d\n",sc);
printf("其它:
%d\n",oc);
return0;
}
8、利用函数计算一个5*5矩阵的主对角线元素之和,在主函数中输出矩阵以及主对角线元素之和。
#include
intmain(intargc,char*argv[])
{
inti,j;
intsum=0;
intmatrix[5][5]={0};
printf("请输入一个5×5矩阵:
\n");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
scanf(