电子科大高级语言程序设计实验报告四.docx
《电子科大高级语言程序设计实验报告四.docx》由会员分享,可在线阅读,更多相关《电子科大高级语言程序设计实验报告四.docx(16页珍藏版)》请在冰豆网上搜索。
电子科大高级语言程序设计实验报告四
电子科技大学通信与信息工程学院
实验报告
(实验)课程名称高级语言程序设计
电子科技大学教务处制表
电子科技大学
实验报告
学生姓名:
学号:
指导教师:
实验地点:
科AXXX实验时间:
一、实验室名称:
校公共机房
二、实验项目名称:
C语言程序设计
三、实验学时:
4学时
四、实验原理:
使用VC2010或TC开发环境,在微型计算机上对程序进行编辑、编译、连接与运行。
通过上机练习掌握C程序的设计思路、实现方法和程序调试过程。
五、实验目的:
(指针和函数部分)
1.熟练掌握指针的概念和基本试用方法。
2.掌握指针编程以及指针和数组;
3.掌握结构体的编程方法;
4.掌握函数的定义、函数原型和调用、函数参数传递以及返回值的使用
5.理解模块化编程的基本方法和一般技巧
6.掌握基于函数的程序设计技术利用函数实现简单的功能模块。
六、实验方法与手段:
编程实现实验指定内容,调试运行程序并完成报告。
七、实验内容:
(指针部分)
1.编写程序对课后习题5.6进行实现。
2.编写程序使用指针编写程序,输入N个整数,求N个整数中最大最小值以及其在N个整数中的位置。
3.编写程序输入一个字符串S1,将S1中所有字符拷贝到字符串S2中,要求每2个字符后面增加一个“*”。
如S1:
“ABCDE”,则S2:
“AB*CD*E”。
(函数部分)
4.编写程序对课后习题6.1进行实现。
5.编写程序对课后习题6.4进行实现注:
main函数循环调用find函数,根据返回值求出所有符合条件的数以及总个数,并输出。
6.编写函数,实现如下功能:
根据给定的字符串,如:
“a123x456178?
23304tbc789”,将其中的连续数字作为一个整数拷贝到一个数组中去,并统计该字符串共有多少个整数。
函数原型:
voidfunc(char*str,int*p,int*num);其中str是需要处理的字符串,p指向数组用于保存数据,num指向保存整数个数的整数。
七、实验器材(设备、元器件):
硬件要求:
普通pc机。
软件要求:
Windows7/XP/2003等。
八、实验步骤、实验编程与运行结果:
1.编写的程序
(程序名称)ex4_1
#include
#include
voidmain()
{
inti,j,
k,
count=0;
charstring1[20],
string2[20];
char*p1,*p2;
printf("请输入一个源字符串\n");
gets(string1);
printf("请输入你要查找的字符\n");
gets(string2);
p1=string1;
p2=string2;
for(i=0;i<(strlen(string1));i++)
{
k=0;//k初始化为0
if(p1[i]==p2[0]&&p1[i]!
='\0')//如果p1数组中有和p2数组中第一个字符相同的字符,且不为'\0'
{
for(j=1;j<(strlen(string2));j++)
{//判断后续字符是否相等,若不相等,k置为一
if(p1[i+j]!
=p2[j])
{//在判断过程中若有字符不等,k置为一
k=1;
}
}
if(k==0)//判断结束后若k=0,输出查找字符所在起始位
{
count++;
printf("第%d个字符所在位置为:
%d\n",count,i);
}
}
}
if(count==0)
{
printf("NO\n");
}
getchar();
}
典型测试数据(输入):
请输入一个源字符串
asdhhfajl
请输入你要查找的字符
aj
应输出(上机前自己分析的结果):
请输入一个源字符串
asdhhfajl
请输入你要查找的字符
aj
NO
实际运行结果:
请输入一个源字符串
asdhhfajl
请输入你要查找的字符
aj
NO
2.编写的程序
(程序名称)ex4_2
#include
#include
voidmain()
{
inti;//循环变量
intn;
intmax,min;
int*p;
intposition1=0,
position2=0;
printf("请输入一个数以开辟适当大小的内存空间\n");
scanf_s("%d",&n);
p=(int*)calloc(n,sizeof(int));
printf("请输入一组整数\n");
for(i=0;i{
scanf("%d",p+i);
}
max=min=*p;
for(i=1;i{
if(max<(*(p+i)))
{
max=p[i];
position1=i;
}
if(min>p[i])
{
min=p[i];
position2=i;
}
}
printf("最大值为%d\t,位置在%d\n",max,position1);
printf("最小值为%d\t,位置在%d\n",min,position2);
getchar();
getchar();
}
典型测试数据(输入):
请输入一个数以开辟适当大小的内存空间
6
请输入一组整数
213454445323243
应输出(上机前自己分析的结果):
请输入一个数以开辟适当大小的内存空间
6
请输入一组整数
213454445323243
最大值为4532,位置在3
最小值为3,位置在5
实际运行结果:
请输入一个数以开辟适当大小的内存空间
6
请输入一组整数
213454445323243
最大值为4532,位置在3
最小值为3,位置在5编写的程序
(程序名称)ex4_3
#include
voidmain()
{
inti;
intn;
intcount=0;
charline1[40],
line2[40];
char*p;
gets(line1);
p=line1;
for(i=0;line1[i-count]!
='\0';i++)
{
if((i+1)%3!
=0)
{
line2[i]=p[i-count];
}
else
{
line2[i]='*';
count++;
}
}
line2[i]='\0';
puts(line2);
while
(1);
}
典型测试数据(输入):
adsaaggga
应输出(上机前自己分析的结果):
adsaaggga
ad*sa*ag*gg*a
实际运行结果:
adsaaggga
ad*sa*ag*gg*a
编写的程序
(程序名称)ex4_4
#include
/*5*3矩阵的转置*/
voidmain()
{
voidtran(intarray[5][3]);
intarray0[5][3]={0};
inti,j;
for(i=0;i<5;i++)
for(j=0;j<3;j++)
{
scanf("%d",&array0[i][j]);
}
tran(array0);
}
voidtran(intarray[5][3])
{
intarray1[5][5]={0};
inttemp;
inti,j;
for(i=0;i<5;i++)
for(j=0;j<3;j++)
{
array1[i][j]=array[i][j];//将array数组中的数据拷到array1中前三列
}
for(i=0;i<5;i++)
for(j=i;j<5;j++)
{
if(i!
=j)
{
temp=array1[i][j];
array1[i][j]=array1[j][i];//进行行列转置
array1[j][i]=temp;
}
}
for(i=0;i<3;i++)
for(j=0;j<5;j++)
{
printf("%d\t",array1[i][j]);
if(j==4)
printf("\n");
}
getchar();
getchar();
}典型测试数据(输入):
123456789101112131415
应输出(上机前自己分析的结果):
1471013
2581114
3691215
上机时遇到的问题:
①进行两次行列交换导致数据未转置解决办法:
J赋初值I
②实参错选array0[5][3]解决办法:
将array0的首地址传给形参
实际运行结果:
1471013
2581114
3691215
编写的程序
(程序名称)ex4_5
/*找水仙花数*/
#include
#include
voidmain()
{
voidfind(intn);
inti;
for(i=100;i<1000;i++)
{//循环输入所有三位数
find(i);
}
while
(1);
}
voidfind(intn)
{
doubleunit,
decade,
hundred;
inta,b,c;
staticintcount=0;
hundred=int(n/100);
decade=int((n-hundred*100)/10);
unit=n-hundred*100-decade*10;
a=int(pow(hundred,3));
b=int(pow(decade,3));//计算个位,十位,百位的立方
c=int(pow(unit,3));
if(n==a+b+c)
{
printf("%d是水仙花数\n",n);
}
}典型测试数据(输入):
无
应输出(上机前自己分析的结果):
153是水仙花数
370是水仙花数
371是水仙花数
407是水仙花数
上机时遇到的问题:
①调用Pow函数数据类型设为int型出错解决办法:
改为double型
②计算个十百出错解决办法:
换用其它方法
实际运行结果:
153是水仙花数
370是水仙花数
371是水仙花数
407是水仙花数
3.编写的程序
(程序名称)ex4_6
#include
#include
voidmain()
{
voidfunc(char*str,int*p,int*num);
charstr[20]={'\0'};//定义一个字符数组用于储存数据并初始化
intINT[20]={0};//定义一个整型数组用于储存处理后得到的整数
intnum=0;//指向整数个数计数
printf("请输入字符串\n");
gets(str);
func(str,INT,&num);
while
(1);
}
voidfunc(char*str,int*p,int*num)
{
inti;//循环变量
inta[20]={0};//辅助数组
intj=0,
m=0,
b=0,
count=0,
flag=0;
for(i=0;*(str+i)!
='\0';i++)
{
if(*(str+i)>='0'&&*(str+i)<='9')//若数据为1~9
{
a[j++]=str[i]-'0';
flag=1;
if(*(str+i+1)=='\0')//若字符以数字结尾
{
for(m=0;m{
b=b*10+a[m];
}
printf("%d",b);
count++;
}
}
elseif(flag==1)//若非数字字符前为数字表示一串数字已经结束
{
for(m=0;m{
b=b*10+a[m];
}
flag=0;
*(p+count)=b;
count++;
j=0;//j重置为0
printf("%d\t",b);
b=0;//b重置为0
}
}
num=&count;
printf("\n");
printf("整数个数为:
%d",*num);
}
典型测试数据(输入):
21jkfd34334hj34
应输出(上机前自己分析的结果):
请输入字符串
21jkfd34334hj34
213433434
整数个数为:
3
上机时遇到的问题:
①判断语句错写成赋值语句解决办法:
修改
②b忘记初始化导致数据一直连续运算解决办法:
每次b初始化为0
实际运行结果:
请输入字符串
21jkfd34334hj34
213433434
整数个数为:
3
九、实验结论:
10、总结及心得体会:
十一、对本实验过程及方法、手段的改进建议:
报告评分:
指导教师签字: