C语言 课程设计报告.docx
《C语言 课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言 课程设计报告.docx(27页珍藏版)》请在冰点文库上搜索。
C语言课程设计报告
泉州师范学院数学与计算机科学学院
《高级语言程序设计》课程设计
实验报告
目录
1.课程设计的目的和要求1
1.1课程要求1
1.2课程目的1
2.课程设计选题1
3.课程设计内容1
3.1选题1(选题名称)1
将一个数字字符串转换为一个整数;1
3.2选题2(选题名称)5
3.3选题3(选题名称)9
3.4选题4(选题名称)12
3.5选题5(选题名称)16
4.总结19
4.1碰到的问题19
4.2心得和体会19
5.参考文献19
6.附录(程序清单及注释)19
1.课程设计的目的和要求
1.1课程要求
运用所学C语言编程知识开发设计具有一定实用价值的计算机应用程序。
1.2课程目的
●复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握;
●培养理论与实践相结合的能力;
●培养独立分析问题解决问题的能力;
2.课程设计选题
选题1:
编程题第24题
将一个数字字符串转换为一个整数;
选题2:
编程题第44题
统计一个长度为2的字符串在另一个字符串中出现的次数;
选题3:
编程题第60题
删去一维数组中所有相同的数,使之只剩一个;
选题4:
编程题第76题
计算一个复杂的多项式的值;
选题5:
编程题第83题
将字符串尾部的*号全部删除。
3.课程设计内容
3.1选题1(选题名称)
将一个数字字符串转换为一个整数;
3.1.1详细设计
(1)主函数main()模块
该模块功能说明:
定义一维字符数组、文件型指针变量,打开文件,调用gets函数输入原始数组,调用printf函数显示提示信息,在调用fun函数,得到由fun函数指针传回的返回值,得到目标字符串存放在原数组中,调用printf函数,在屏幕上显示运行结果,关闭文件;
(2)各模块
N-S流程图
s=0,i=0,s1=0
n=strlen(p)
p[0]=’-’
是否
i++
it=p[j]-‘0’
s=s*s1+t
P[0]=’-’
是否
返回-s
返回s
该模块功能及程序说明:
将一个数字字符串转换为一个整数。
关键代码及代码注释
longfun(char*p)
{
longs=0;
inti=0,n,j,s1=10,t;
n=strlen(p);
if(p[0]=='-')
i++;
for(j=i;j{
t=p[j]-'0';
s=s*s1+t;
}
if(p[0]=='-')
return-s;
else
returns;
}
3.1.2运行结果
运行结果。
(附贴图)
3.1.3测试
测试数据及结果。
(附贴图)
3.2选题2(选题名称)
统计一个长度为2的字符串在另一个字符串中出现的次数;
3.2.1详细设计
(1)主函数main()模块
该模块功能说明:
定义两个一维字符数组、文件型指针变量,打开文件,调用gets函数输入原始数组和长度为2的数组,调用printf函数显示提示信息,在调用fun函数,得到由fun函数指针传回的返回值,得到目标字符串存放在原数组中,调用printf函数,在屏幕上显示运行结果,关闭文件;
(2)各模块
N-S流程图
n=0
当*str为真
p=str
q=substr
当*q为真
*q=*p
是否
r++
p++
break
*q=’\0’
是否
n++
str++
返回n
该模块功能及程序说明:
统计一个长度为2的字符串在另一个字符串中出现的次数;
关键代码及代码注释
intfun(char*str,char*substr)
{
char*p,*q;
intn=0;
while(*str)
{
p=str;
q=substr;
while(*q)
{
if(*q==*p)
{
q++;
p++;
}
else
break;
}
if(*q=='\0')
n++;
str++;
}
returnn;
}
3.2.2运行结果
运行结果。
(附贴图)
3.2.3测试
测试数据及结果。
(附贴图)
3.3选题3(选题名称)
删去一维数组中所有相同的数,使之只剩一个;
3.3.1详细设计
(1)主函数main()模块
该模块功能说明:
定义一维字符数组、文件型指针变量,打开文件,调用scanf函数输入原始数组,调用printf函数显示数组信息,在调用fun函数,得到由fun函数指针传回的返回值,得到目标字符串存放在原数组中,调用printf函数,在屏幕上显示运行结果,关闭文件;
(2)各模块
N-S流程图
j=1,i=1
ia[i]!
=a[i-1]
是否
a[j++]=a[i]
返回j
该模块功能及程序说明:
删去一维数组中所有相同的数,使之只剩一个;
关键代码及代码注释
intfun(inta[],intn)
{
inti,j=1;
for(i=1;iif(a[i]!
=a[i-1])
a[j++]=a[i];
returnj;
}
3.3.2运行结果
运行结果。
(附贴图)
3.3.3测试
测试数据及结果。
(附贴图)
3.4选题4(选题名称)
计算一个复杂的多项式的值;
3.4.1详细设计
(1)主函数main()模块
该模块功能说明:
定义文件型指针变量,打开文件,调用scanf函数输入原始数组,调用printf函数显示提示信息,在调用fun函数,得到由fun函数指针传回的返回值,得到目标字符串存放在原数组中,调用printf函数,在屏幕上显示运行结果,关闭文件;
(2)各模块
N-S流程图
s1=1.0,p=1.0,sum=0.0,t=1.0
s0=s1
sum=sum+s0
t=t*n
p=p*(0.5-n+1)*x
s1=p/t
n++
当fabs(s1-s0)>=1e-6
返回sum
该模块功能及程序说明:
计算一个复杂的多项式的值;
关键代码及代码注释
doublefun(doublex)
{
intn=1;
doubles1=1,p=1,sum=0,s0,t=1;
do
{
s0=s1;
sum+=s0;
t*=n;
p*=(0.5-n+1)*x;
s1=p/t;
n++;
}while(fabs(s1-s0)>=0.000001);
returnsum;
}
3.4.2运行结果
运行结果。
(附贴图)
3.4.3测试
测试数据及结果。
(附贴图)
3.5选题5(选题名称)
将字符串尾部的*号全部删除。
3.5.1详细设计
(1)主函数main()模块
该模块功能说明:
定义一维字符数组、文件型指针变量,打开文件,调用scanf函数输入原始数组,调用printf函数显示数组信息,在调用fun函数,得到由fun函数指针传回的返回值,得到目标字符串存放在原数组中,调用printf函数,在屏幕上显示运行结果,关闭文件;
(2)各模块
N-S流程图
p=0,t=a
当*t为真
*t!
=’*’
是否
p=i
t++
*(a+p+1)=’\0’
该模块功能及程序说明:
将字符串尾部的*号全部删除。
关键代码及代码注释
voidfun(char*a)
{
inti,p=0;
char*t=a;
for(i=0;*t;i++)
{
if(*t!
='*')
p=i;
t++;
}
*(a+p+1)='\0';
}
3.5.2运行结果
运行结果。
(附贴图)
3.5.3测试
测试数据及结果。
(附贴图)
4.总结
4.1碰到的问题
对冒泡排序法和选择排序法还不能灵活运用。
对文件的认识度不够,导致不理解主函数的意思。
4.2心得和体会
第一次为期一周这么长时间的做程序题,感触颇多,也对程序有了一定的认识。
自己的做题速度也明显增快。
在这一段时间里我深深地意识到自己的阅读量太小,对C的知识掌握不全面,不会深究这门语言。
真的,要学好一门语言,就要扎扎实实地学习,这些语言也都是前人想出来的,那我们就应该学会站在巨人的肩膀上看世界,在他们的基础上把C学得更好。
5.参考文献
【1】谭浩强主编.C程序设计(第三版).北京:
清华大学出版社,2005
【2】崔武子,李青,李红豫编著.C程序设计辅导与实训.北京:
清华大学出版社,2004.1
【3】崔武子等著.C程序设计教程.北京:
清华大学出版社,2003
6.附录(程序清单及注释)
选题1:
编程题第24题
将一个数字字符串转换为一个整数;
#include
#include
longfun(char*p)
{
longs=0;
inti=0,n,j,s1=10,t;
n=strlen(p);
if(p[0]=='-')
i++;
for(j=i;j{
t=p[j]-'0';
s=s*s1+t;
}
if(p[0]=='-')
return-s;
else
returns;
}
main()
{
chars[6];
longn;
FILE*out;
char*test[]={"-1234","5689","7102","-4356"};
printf("Enterastring:
\n");
gets(s);
n=fun(s);
printf("%ld\n",n);
out=fopen("out.dat","w");
for(n=0;n<4;n++)
fprintf(out,"%ld\n",fun(test[n]));
fclose(out);
}
选题2:
编程题第44题
统计一个长度为2的字符串在另一个字符串中出现的次数;
#include
#include
#include
intfun(char*str,char*substr)
{
char*p,*q;
intn=0;
while(*str)
{
p=str;
q=substr;
while(*q)
{
if(*q==*p)
{
q++;
p++;
}
else
break;
}
if(*q=='\0')
n++;
str++;
}
returnn;
}
main()
{
charstr[81],substr[3];
intn;
FILE*out;
printf("输入主字符串:
");
gets(str);
printf("输入子字符串:
");
gets(substr);
puts(str);
puts(substr);
n=fun(str,substr);
printf("n=%d\n",n);
out=fopen("out.dat","w");
strcpy(str,"asdasasdfgasdaszx67asdmklo");
strcpy(substr,"as");
fprintf(out,"%d",fun(str,substr));
fclose(out);
getch();
}
选题3:
编程题第60题
删去一维数组中所有相同的数,使之只剩一个;
#include
#defineN80
intfun(inta[],intn)
{
inti,j=1;
for(i=1;iif(a[i]!
=a[i-1])
a[j++]=a[i];
returnj;
}
main()
{
inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
FILE*out;
printf("Theoriginaldata:
\n");
for(i=0;iprintf("%3d",a[i]);
n=fun(a,n);
printf("\n\nThedataafterdeleted:
\n");
out=fopen("out.dat","w");
for(i=0;i{
printf("%3d",a[i]);
fprintf(out,"%d\n",a[i]);
}
fclose(out);
printf("\n\n");
}
选题4:
编程题第76题
计算一个复杂的多项式的值;
#include
#include
doublefun(doublex)
{
intn=1;
doubles1=1,p=1,sum=0,s0,t=1;
do
{
s0=s1;
sum+=s0;
t*=n;
p*=(0.5-n+1)*x;
s1=p/t;
n++;
}while(fabs(s1-s0)>=0.000001);
returnsum;
}
main()
{
inti;
doublex,s;
FILE*out;
printf("Inputx:
");
scanf("%lf",&x);
s=fun(x);
printf("s=%f\n",s);
out=fopen("out.dat","w");
for(i=20;i<30;i++)
fprintf(out,"%f\n",fun(i/100.0));
fclose(out);
}
选题5:
编程题第83题
将字符串尾部的*号全部删除。
#include
#include
#include
voidfun(char*a)
{
inti,p=0;
char*t=a;
for(i=0;*t;i++)
{
if(*t!
='*')
p=i;
t++;
}
*(a+p+1)='\0';
}
main()
{
chars[81];
FILE*out;
printf("Enterastring:
\n");
gets(s);
fun(s);
printf("Thestringafterdeleted:
\n");
puts(s);
out=fopen("out.dat","w");
strcpy(s,"****A*BC*DE*F*G*********");
fun(s);
fprintf(out,"%s",s);
fclose(out);
}