电子科大高级语言程序设计实验报告四.docx
- 文档编号:12178463
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:16
- 大小:18.28KB
电子科大高级语言程序设计实验报告四.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、总结及心得体会: 十一、对本实验过程及方法、手段的改进建议: 报告评分: 指导教师签字:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子科 高级 语言程序设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)