ImageVerifierCode 换一换
格式:DOCX , 页数:47 ,大小:61.15KB ,
资源ID:2828331      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2828331.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《C语言程序设计实验》实验报告.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

《C语言程序设计实验》实验报告.docx

1、C语言程序设计实验实验报告(此文档为word格式,下载后您可任意编辑修改!)C语言程序设计实验实验报告指导老师: 专业: 班级: 学号: 姓名: 日期: 重庆邮电大学计算机科学与技术学院实验一实验名称:一维数组程序设计实验目的:1、 熟练掌握使用一维数组编程的方法。2、 熟练掌握排序算法。实验内容:1、 调试示例输入一个整数n(0n9)和一组数,再输入一个整数,把x插入到这个数据中,使该组数据仍然有序。源程序:略调试好的程序:#includeint main() int i,j,n,x,a10; printf(输入数据的个数n:); scanf(%d,&n); printf(输入%d个整数:,

2、n); for(i=0;in;i+) scanf(%d,&ai); printf(输入要插入的整数:); scanf(%d,&x); for(i=0;iai)continue; j=n-1; while(j=i) aj+1=aj; j-; ai=x; break; if(i=n)an=x; for(i=0;i=n;i+) printf(%dt,ai); return 0;2、 编程题1输入一个正整数n(0n=10),再输入n个整数,输出平均值(保留两位小数)。程序代码:#includeint main() int i,n,sum=0,a10; float av; printf(输入数据的个数n

3、:); scanf(%d,&n); printf(输入%d个整数:,n); for(i=0;in;i+) scanf(%d,&ai); for(i=0;in;i+) sum+=ai; av=(float)sum/n; printf(%0.2ft,av); return 0;3、 编程题2输入一个正整数n(0n=10),再输入n个整数,按逆序输出这些数。程序代码#includeint main() int i,n,a10; printf(输入数据的个数n:); scanf(%d,&n); printf(输入%d个整数:,n); for(i=0;i=0;i-) printf(%dt,ai); re

4、turn 0;4、 编程题3输入一个正整数n(0n=10),再输入n个整数,输出最大值及其下标(设最大值唯一,下标从零开始)。程序代码:#includeint main() int i,j,n,x,a10; printf(输入数据的个数n:); scanf(%d,&n); printf(输入%d个整数:,n); for(i=0;in;i+) scanf(%d,&ai); x=a0; for(i=0;ix)x=ai;j=i; printf(最大数:%dt下标:%dt,x,j); return 0;5、 编程题4输入一个正整数n(0n=10),再输入n个整数,将最小值与第一个数交换,最大值与最后一

5、个数交换,然后输出交换后的n个数。程序代码:#includeint main() int i,n,j=0,k=0,x,y,a10; printf(输入数据的个数n:); scanf(%d,&n); printf(输入%d个整数:,n); for(i=0;in;i+) scanf(%d,&ai); y=a0; x=a0; for(i=0;ix)x=ai;j=i; if(aiy)y=ai;k=i; aj=a0; a0=y; ak=ai-1; ai-1=x; for(i=0;in;i+) printf(%dt,ai); return 0;6、 编程题5输入一个正整数n(0n=10),再输入n个整数,

6、再将它们从小到大排序后输出。程序代码:#includeint main() int i,n,j=0,x,a10; printf(输入数据的个数n:); scanf(%d,&n); printf(输入%d个整数:,n); for(i=0;in;i+) scanf(%d,&ai); x=a0; for(i=0;in-1;i+) for(j=i;jaj+1) x=ai;ai=aj+1;aj+1=x; else continue; for(i=0;in;i+) printf(%dt,ai); return 0;实验总结:本次C语言上机实验,主要是对一维整数数组进行处理,通过本次实验,我熟练掌握了一维数

7、组元素的处理组排序算法(冒泡排序法和选择排序法)。实验二实验名称:字符串程序设计 【实验1】判断回文 从键盘输入一串字符,判断该字符串是否是回文,即该字符串从左向右读,与从右向左读都一样,如“ABCBA”、“ABCCBA”。编程思路:定义指针start和end,分别指向字符串首、尾。分别从串首、尾开始向中间比较,若指针所指字符不同,则不是回文。源程序: #include#includeint is(char*ptr);void main() char str100; printf(input a stringn); gets(str); if(is(str) printf(%s is a Pa

8、lindromen,str); else printf(%s is a not palindromen,str);int is(char*ptr) int i,a,flag=0; a=(int)strlen(ptr)-1;/数组下标从0开始! for(i=0;a=0;i+,a-) if(ptra=ptri) flag=1; else flag=0; break; return flag;【实验2】删除排序已知某已排好序的数组,其元素为1,3,5,7,9,从键盘输入x的值,若数组中存在与x相等的元素,则删除。编程思路:搜索整个数组判断x是否存在于数组中;如果在,定位待删除元素的下标 ;从该下标开

9、始,将所有后续元素往前移。注意移动顺序应从最后一个元素开始,还是先从待删除元素的位置开始! 源程序:#include#includeint *Delete(int a,int n,int x) int i,pos,k; for(i=0;in;i+) if(ai=x) pos=i; break; for(k=pos;kn-1;k+) ak=ak+1; return a;int main() int arr5= ,x,i; printf(input x= ); scanf(%d,&x); printf(before delete); for(i=0;i5;i+) printf(%4d,arri);

10、 printf(n); Delete(arr,5,x); printf(after delete); for(i=0;i4;i+) printf(%4d,arri); printf(n); return 0;实验总结:通过这次实验,了解了字符串的特点,它在数组中有结束标志“0”,而其长度又不将起算在内,牢记这点对编程速率很有帮助。实验三实验名称:指针和二维数组【实验1】对N个字符串进行排序编程思路:第一种实现方式:要求从键盘输入N个字符串,将其存储在二维数组中,在主函数中进行排序。第二种实现方式:要求定义指针数组指向N个字符串,调用函数sort()进行排序。sort()具有如下原型:/*函数返

11、回值:多级指针类型char*,返回指针数组首地址形式参数:指针p,char *,用于操纵N个字符串line,int,表示字符串个数*/char * sort(char * p,int linel)源程序:#include #include #define N 5int main() /*定义二维数组*/ int i,k,j; char aN30,temp20; /*从键盘输入N 个字符串*/ printf(从键盘输入%d个字符串n,N); for(i = 0;i N;i+) gets(ai); for(i=0;iN-1;i+) k = i; /*若当前字符串大于 strk,记录其下标*/ fo

12、r(j=i+1;jN;j+) if(strcmp(ak,aj)0)/ai改为ak k=j; if(k!=i) /*交换字符串 strk和 stri*/ strcpy(temp,ai);strcpy(ai,ak);strcpy(ak,temp); puts(nAfter sort:); for( i = 0;i N;i+) puts(ai); return 0; 【实验2】找众数定义函数实现: (1)输出整数数组中重复出现的数和重复的次数。(2)找出整数数组中的众数(即出现次数最多的数) 并编写相应的主函数测试之。编程思路:先对数组排序,排序后数组内的元素如有相同值就会紧邻存储。 定义maxCo

13、unt、maxI、seek,分别表示最多重复次数、最多重复次数对应的元素下标、当前正在查找的数值,将两数置0。从头扫描整个数组,统计每个元素出现的次数,如果出现次数大于maxCount,记录其出现次数和该元素对应下标。扫描完毕即可找到众数及其出现次数。源程序:#include #include #define N 6 int main() int aN; int i,j,k,temp; int maxCount = 0,maxI = 0,seek = 0,count = 0; for(i = 0;i N ;i+) printf(请输入第%d 个数:,i + 1); scanf(%d,a + i

14、); /*选择法对数组排序*/ for(i=0;iN-1;i+) k=i; for(j=i;jaj)/ai改为ak k=j; if(i!=k) temp=ai;ai=ak;ak=temp; for(i = 0,seek = a0;i maxCount) maxCount=count; maxI=i-1; count = 0; count+; seek = ai; printf(nmaxNumber = %d,maxCount = %dn,amaxI,maxCount); return 0; 实验总结:本次实验运用了选择法对数组进行排序,不管是二维数组,还是一维数组,其思路是一样的,只是具体的实

15、现有所不同,比如比较字符串要用函数strcmp()。实验四实验名称:结构体【实验1】计算椭圆面积 已知坐标系统中两点p1、p2构成的矩形是椭圆的外切矩形,如图3-1所示。定义结构体struct ellipse struct point int x; int y; p1,p2; double a ; double b ; ; 从键盘输入p1、p2的坐标值,计算椭圆面积,已知积计算公式为:S = ab。程序代码:#include #include struct ellipse struct point int x; int y; p1,p2; double a ; double b ;typede

16、f struct ellipse ell;int main() ell e; double s; printf(请输入左上角顶点坐标:); /*输入坐标*/ scanf(%d%d,&e.p1.x,&e.p1 .y); printf(请输入右下角顶点坐标:); /*输入坐标*/ scanf(%d%d,&e.p2.x,&e.p2.y); /*计算椭圆面积*/ e.a=abs(e.p1 .y-e.p2 .y)/2.0;/取整函数abs() e.b=abs(e.p1 .x-e.p2 .x)/2.0; s=3.14*e.a*e.b; printf(area = %lfn,s); return 0;实验总

17、结:这次实验用到了结构体的嵌套定义,通过实验,让我更深入了解结构体的定义,使用,访问等操作。实验五实验名称:指针强化1【实验1】字符串逆序存储编写一个函数inverse,实现将字符串逆序存放,即原字符串为“abcdef”,将其重新存储为“fedcba”。实验思路:从字符串中第一个字符开始,使其和最后一个字符交换,第二个字符和倒数第二个字符交换,一直到字符串中间的字符为止。 程序代码:#include #include char * inverse(char *p) /*定义需要用到的变量*/ int i,len; char tmp; len = strlen(p); /*将原字符串逆序存储于p

18、所指数组中*/ for(i=len-1;i=len/2;i-) tmp=*(p+i);*(p+i)=*(p+len-1-i);*(p+len-1-i)=tmp; return p;int main() char str100; printf(请输入字符串:); gets(str); puts(inverse(str); return 0;【实验2】字符串逆序存储删除字符串s中所有出现的与变量c相同的字符。程序代码:#include #include char * squeez(char *s,char c) int i,j; for(i = j = 0;istrlen(s);i+)/_请填空_

19、 if(si != c) sj=si;/_请填空_ j+; sj = 0; return s;int main() char s100,c; printf(请输入字符串:); gets(s); printf(请输入变量:); c = getchar(); puts(squeez(s,c); return 0;实验总结:这次与前面的某次实验的内容差不多,用到了知识点是指针,字符串。实验六实验名称:指针强化2【实验1】实现库函数atoi已知C标准库函数atoi实现将字符串转换为整数的功能,如: char str = 123456; printf(对应的整数为:%dn,atoi(str); 自定义函

20、数:int atoi(char *str),使其实现同名标准库函数的功能。实验思路:先考虑最简单的情况,字符串中只有数字,如果是负数,字符串第一个元素是负号。定义变量sign,若字符串中第一个元素是,则sign值为-1,并让字符串指针指向下一元素。指针指向字符串“”的第一个数字字符1,将其转换为对应数字1,放入变量t中,指针下移至后一元素2,再将其转换为对应数字2,将t中1变成10,再加2,如此循环,至字符串结束。返回变量t*sign即可。程序代码:#include#includeint atoi(char *str);int main() char str100; printf(请输入字符串

21、:); gets(str); /此处不能否替换成 scanf()! printf(对应的整数为:%dn,atoi(str); return 0; int atoi(char*str) int i=0,a,s=0,sign=0,p=1; for(i=0;*(str+i)!=0&p;i+) if(*(str+i)=-&(*(str+i+1)=48&*(str+i+1)=48&*(str+i)=57) a=*(str+i)-48; s=s*10+a; if(*(str+i+1)=57&p) p=0; if(sign) s*=sign; return s;【实验2】译码编写change函数实现:将大于

22、0小于1000的阿拉伯数字转换为罗马数字输出。阿拉伯数字和罗马数字对应关系如下: 并编写相应的主函数测试该函数。实验思路:先考虑最简单的情况,字符串中只有数字,如果是负数,字符串第一个元素是负号。定义变量sign,若字符串中第一个元素是,则sign值为-1,并让字符串指针指向下一元素。指针指向字符串“”的第一个数字字符1,将其转换为对应数字1,放入变量t中,指针下移至后一元素2,再将其转换为对应数字2,将t中1变成10,再加2,如此循环,至字符串结束。返回变量t*sign即可。程序代码:#include/*定义数据结构code 存储罗马字符*/ typedef struct char s3;/

23、别忘了0 int a; COD;int change(COD *code,int num);int main() COD code13=M,1000,CM,900,D,500,CD,400,C,100,XC,90,L,50,XL,40,X,10,IX,9,V,5,IV,4,I,1; int x; printf(请输入一个阿拉伯数字:); scanf(%d,&x); if(x0&x4000) change(code,x); else printf(输入的阿拉伯数字超出范围!n); return 0; int change(COD *code,int num) int i,a,last=0; wh

24、ile(num) a=num/(*(code+last).a; if(a=0)last+; else for(i=0;ia;i+) printf(%s,(*(code+last).s); num%=(*(code+last).a;/有点类似进制型问题 putchar(10); return 0;实验总结:这次实验译码实验给我的印象比较深,开始在算法上有点纠结,后来想到了以上程序中的算法,其实是个逐减和取余的问题,另外还用到了结构体,指针等知识,综合性还是比较大的。但算法是面向过程程序设计的灵魂,想到算法就好办了。实验七实验名称:模拟1简单题:计算卡片的最大数量将一摞卡片按照图1所示叠放,使其中一部分悬于桌外(卡片数量为n,每张卡片长度为1)。当n=1时,仅有一张卡片,其最大可悬空长度为1/2;当n=2时, 置于底部的那张卡片其悬空长度是1/3,而置于顶部的卡片其悬空长度是1/2,故悬于桌外的总长度是1/2 + 1/3 = 5/6。可以推断,当有n张卡片时,悬空部分的总长度是:1/2 + 1/3 + 1/4 + . + 1/(n + 1)。从键盘输入一个最大悬空长度值,判断该长度下最多能叠放几张卡片。图1 卡片最大可悬空长度示意图程序代码:#includes

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2