高级语言程序设计课程设计报告.docx
《高级语言程序设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计课程设计报告.docx(37页珍藏版)》请在冰豆网上搜索。
高级语言程序设计课程设计报告
高级语言程序设计课程设计
题目:
专业计算机与信息与科学系
班级计算机1105班
学生裴和平
学号3110307518
指导教师鲍春波蒋建辉陈乐
起止时间2012.2.13——2012.2.17
_2012__年_02___月
题目1:
写一个函数计算下列函数的值f(0),f(3),f(-3)。
测试之
实现代码:
/*
*函数功能:
计算下列函数的值f(0),f(3),f(-3)
*入口参数:
定义域X,值域y
*返回值:
y
*/
#include
intfunc(intx);
intmain()
{
intx;
while(scanf("%d",&x)!
=EOF)
{
printf("%d\n",func(x));
}
return0;
}
intfunc(intx)
{
inty;
if(x>0)
{
y=3*x*x-4;
}
elseif(x==0)
{
y=2;
}
else
{
y=0;
}
returny;
}
//本题的的目的是学会判断语句的使用,以及如何连续输入。
题目2:
写一个函数可以打印下面的图案
*
***
*****
*******
*****
***
*
要求每个打印语句只打印一个*号,测试之
实现代码:
/*
*函数功能:
打印菱形
*入口参数:
行号i,列号j,k符号*
*返回值:
无
*/
#include
intupangle(inti,intj,intk);
intdownangle(inti,intj,intk);
intmain()
{
inti,j,k;
upangle(i,j,k);
downangle(i,j,k);
return0;
}
intupangle(inti,intj,intk)
{
for(i=1;i<=5;i++)
{
for(j=5-i;j>=0;j--)
printf("");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
}
intdownangle(inti,intj,intk)
{
for(i=4;i>=1;i--)
{
for(j=0;j<=5-i;j++)
printf("");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
}
//本题的目的是学会for循环语句的使用
题目3:
写一个函数voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize),求一组数据的最大值、最小值和平均值,测试之。
其中data指向给定数据的数组的指针,max、min、ave分别指向最大值、最小值和平均值,size是数组的大小。
要求第一个实参是数组,第2、3、4个实参都是对普通的简单变量的某种操作,最后一个实参是数组的大小。
测试之
实现代码:
/*
*函数功能:
求数据的最大,最小和平均值
*入口参数:
数据data,数据大小size
*返回值:
最大值max,最小值min,平均值ave
*/
#include
#include
#defineSIZE2
voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize);
intmain()
{
intmin,max,i;
intsize=SIZE;
floatave;
intdata[SIZE];
for(i=0;i{
scanf("%d",&data[i]);
}
maxMinAver(data,&max,&min,&ave,size);
printf("%d%d%f\n",max,min,ave);
return0;
}
voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize)
{
inti,total;
total=0,*ave=0;
*max=data[0];
*min=data[0];
for(i=0;i{
total=total+data[i];
}
*ave=(float)total/size;
for(i=1;i{
if(data[i]>*max)
*max=data[i];
if(data[i]<*min)
*min=data[i];
}
}
//本题主要考指针在数组中的应用,关键在于最大最小值先定义为第一个数据以及参数的指向地址。
题目4写一个函数用指针型字符串实现两个字符串比较,intmystrcmp(constchar*str1,constchar*str2),如果大于返回1,等于返回0,小于返回-1,测试之
实现代码:
/*
*函数功能:
用指针型字符串实现两个字符串比较
*入口参数:
字符串a,b
*返回值:
大于返回1,等于返回0,小于返回-1
*/
#include
intmystrcmp(constchar*str1,constchar*str2);
intmain()
{
inti=0;
chara[80],b[80];
scanf("%s%s",a,b);
i=mystrcmp(a,b);
printf("%d\n",i);
return0;
}
intmystrcmp(constchar*str1,constchar*str2)
{
inti;
for(i=0;*(str1+i)!
='\0'&&*(str2+i)!
='\0';i++)
{
if(*(str1+i)>*(str2+i))
{
return1;
}
elseif(*(str1+i)<*(str2+i))
{
return-1;
}
}
if(str1[i]=='\0'&&str2[i]=='\0')return0;
if(str2[i]=='\0')return1;
if(str1[i]=='\0')return-1;
}
//本题最主要的是要注意字符串一长一短的比较;刚开始做题时我也忽略了这点,只想到两个字符串自左至右逐个字符相比,直到出现不同的字符。
题目5写一个函数求求圆周率的近视值,精确到小数7位。
计算公式是
实现代码:
/*
*函数功能:
求圆周率的近似值
*入口参数:
分子a,分母b,第i个数,第i个数的值num,第i个数前的积s
*返回值:
∏
*/
#include
#include
doublefunc(doubles);
intmain()
{
doubles=1;
printf("∏=%.7f\n",func(s));
return0;
}
doublefunc(doubles)
{
doublea=0,b=1;
inti=0;
doublenum;
doubles1=0;
intk;
while(fabs(2*s-2*s1)>=1e-7)
{
s1=s;
if(i%2==0)
a=a+2;
else
b=b+2;
num=a/b;
i++;
s*=num;
}
s=s*2;
returns;
}
//本题目的是学会精度的使用,其次是要善于发现该计算公式的规律。
题目6定义一个学生结构体,取别名STU,包含学号、姓名、数学、语文、计算机、英语等课程成绩,还有总分和平均分,写一个函数实现求一组学生每个学生各门课程的平均值,函数原型为floatave(STUstu[],intsize)。
测试之。
实现代码:
#include
#include
#defineSIZE2
typedefstruct
{
charnum[10];
charname[10];
intmath;
intenglish;
intcomputer;
intchinese;
intsum;
floataverage;
}STU;
STUstu[SIZE];
floatave(STUstu[],intsize);
intmain()
{
inti,size=SIZE;
floatsum,average;
for(i=0;i{
scanf("%s%s%d%d%d%d",&stu[i].num,&stu[i].name,&stu[i].math,&stu[i].english,
&stu[i].computer,&stu[i].chinese);
}
ave(stu,size);
for(i=0;i{
printf("%s%s%5.2f\n",stu[i].num,stu[i].name,stu[i].average);
}
return0;
}
floatave(STUstu[],intsize)
{
inti;
intsum=0;
floataverage=0;
for(i=0;i{
stu[i].sum=stu[i].math+stu[i].english+stu[i].computer+stu[i].chinese;
stu[i].average=stu[i].sum/4.0;
}
}
//结构体会把调用函数计算出的结果自动带回,注意结构体别名的使用。
题目7写一个函数能够从文件读入一组学生STU的信息,保存到一个结构体数组中。
测试之
实现代码:
#include
#include
#include
#defineSIZE2
typedefstruct
{
charnum[10];
charname[10];
intmath;
intenglish;
intcomputer;
intchinese;
}STU;
STUstu[SIZE];
voidreadline(STUstu[]);
intmain()
{
inti;
readline(stu);
for(i=0;i{
printf("%s%s%d%d%d%d\n",stu[i].num,stu[i].name,stu[i].math,stu[i].english,
stu[i].computer,stu[i].chinese);
}
return0;
}
voidreadline(STUstu[])
{
inti;
FILE*fp;
if((fp=fopen("php.txt","r+"))==NULL)
{
printf("cannotopeninfile\n");
getch();
exit
(1);
}
for(i=0;i{
fscanf(fp,"%s%s%d%d%d%d",stu[i].num,stu[i].name,&stu[i].math,&stu[i].english,
&stu[i].computer,&stu[i].chinese);
}
fclose(fp);
}
//用“r+”方式时该文件应该已经存在,以便能向计算机输入数据。
如果不能实现“打开”的任务,fopen函数将会带回一个出错信息,出错原因可能是用“r+”打开一个并不存在的文件。
在使用完一个文件后应该关闭它,以防止再被误用。
题目8写一个函数能够输出某一学生结构体数组STUstu[10]的信息和每个人的总分、平均分到某一文本文件中,测试之。
输出格式是:
“%s%s%d%d%d%d%d%5.2f”
实现代码:
#include
#include
#include
#defineSIZE10
typedefstruct
{
charnum[10];
charname[10];
intmath;
intenglish;
intcomputer;
intchinese;
intsum;
floataverage;
}STU;
STUstu[SIZE];
floatave(STUstu[],intsize);
voidoutfile(STUstu[],intsize);
intmain()
{
inti,size=SIZE;
intsum;
floataverage;
for(i=0;i{
scanf("%s%s%d%d%d%d",stu[i].num,stu[i].name,&stu[i].math,&stu[i].english,
&stu[i].computer,&stu[i].chinese);
}
ave(stu,size);
outfile(stu,size);
return0;
}
floatave(STUstu[],intsize)
{
inti;
intsum=0;
floataverage=0;
for(i=0;i{
stu[i].sum=stu[i].math+stu[i].english+stu[i].computer+stu[i].chinese;
stu[i].average=stu[i].sum/4.0;
}
}
voidoutfile(STUstu[],intsize)
{
FILE*fp;
inti;
if((fp=fopen("structstu.txt","w+"))==NULL)
{
printf("cannotopeninfile\n");
getch();
exit
(1);
}
for(i=0;i{
fprintf(fp,"%s%s%d%d%d%d%d%5.2f\n",stu[i].num,stu[i].name,stu[i].math,stu[i].english,
stu[i].computer,stu[i].chinese,stu[i].sum,stu[i].average);
}
fclose(fp);
}
//懂得fprintf的作用是将结构体中的整型和实型常量输出到fp指向的文件上。
题目9写一个函数能够打印输出学生结构体数组STUstu[10]的信息到屏幕上,测试之
实现代码:
#include
#include
#defineSIZE2
typedefstruct
{
charnum[10];
charname[10];
intmath;
intenglish;
intcomputer;
intchinese;
intsum;
floataverage;
}STU;
STUstu[SIZE];
floatave(STUstu[],intsize);
voidprint(STUstu[],intsize);
intmain()
{
inti,size=SIZE;
intsum;
floataverage;
for(i=0;i{
scanf("%s%s%d%d%d%d",stu[i].num,stu[i].name,&stu[i].math,&stu[i].english,
&stu[i].computer,&stu[i].chinese);
}
ave(stu,size);
print(stu,size);
return0;
}
floatave(STUstu[],intsize)
{
inti;
intsum=0;
floataverage=0;
for(i=0;i{
stu[i].sum=stu[i].math+stu[i].english+stu[i].computer+stu[i].chinese;
stu[i].average=stu[i].sum/4.0;
}
}
voidprint(STUstu[],intsize)
{
inti;
for(i=0;i{
printf("%s%s%d%d%d%d%d%8.2f\n",stu[i].num,stu[i].name,stu[i].math,stu[i].english,
stu[i].computer,stu[i].chinese,stu[i].sum,stu[i].average);}
}
题目10写一个函数能够把一组学生成绩信息按总分进行排序,测试之。
实现代码:
#include
#include
#defineSIZE2
typedefstruct
{
charnum[10];
charname[10];
intmath;
intenglish;
floatsum;
}STU;
STUstu[SIZE];
floatave(STUstu[],intsize);
voidexchangeSort(STUstu[],intsize);
voidprint(STUstu[],intsize);
intmain()
{
inti,j,size=SIZE;
floatsum;
for(i=0;i{
scanf("%s%s%d%d",&stu[i].num,&stu[i].name,&stu[i].math,&stu[i].english);
}
ave(stu,size);
exchangeSort(stu,size);
print(stu,size);
return0;
}
floatave(STUstu[],intsize)
{
inti,j;
floatsum=0;
for(i=0;i{
stu[i].sum=stu[i].math+stu[i].english;
}
}
voidexchangeSort(STUstu[],intsize)
{
inti,j,tmp;
floattemp;
chartmpstr[size];
for(i=0;i{
for(j=i+1;j{
if(stu[i].sum>stu[j].sum)
{
temp=stu[i].sum;stu[i].sum=stu[j].sum;stu[j].sum=temp;
strcpy(tmpstr,stu[i].num);strcpy(stu[i].num,stu[j].num);strcpy(stu[j].num,tmpstr);
strcpy(tmpstr,stu[i].name);strcpy(stu[i].name,stu[j].name);strcpy(stu[j].name,tmpstr);
tmp=stu[i].math;stu[i].math=stu[j].math;stu[j].math=tmp;
tmp=stu[i].english;stu[i].english=stu[j].english;stu[j].english=tmp;
}
}
}
}
voidprint(STUstu[],intsize)
{
inti;
for(i=0;i{
printf("%5s%10s",stu[i].num,stu[i].name);
printf("%8.2f\n",stu[i].sum);
}
}
//注意字符串的赋值不是用等号,而是用strcpy(,);字符串不能和一个字符等价,操作过程中不小心常会犯这样的错误。
题目11写一个函数能够查找给定学号的学生成绩信息,如果找到打印成绩信息,如果没有,显示“notfound!
”.测试之。
实现代码:
#include
#include
#defineSIZE2
typedefstruct
{
charnum[10];
charname[10];
intmath;
intenglish;
intcomputer;
intchinese;
floataverage,sum;
}STU;
STUstu[SIZE];
voidchoose(STUstu[],intsize);
intmain()
{
inti,j,size=SIZE;
floatsum,average;
for(i=0;i{
scanf("%s%s%d%d%d%d",&stu[i].num,&stu[i].name,&stu[i].math,&stu[i].english,
&stu[i].computer,&stu[i].chinese);
}
choose(stu,size);
return0;
}
voidchoose(STUstu[],intsize)
{
inti;
charnum[10];
intflag=0;
scanf("%s",&num);
for(i=0;i{
if(strcmp(num,stu[i].num)==0)
{
printf("