数组程序设计及指针初步.doc_第1页
数组程序设计及指针初步.doc_第2页
数组程序设计及指针初步.doc_第3页
数组程序设计及指针初步.doc_第4页
数组程序设计及指针初步.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

标准C语言程序设计上机报告实验五 数组程序设计及指针初步 专业: 通信工程 班级: 通信 学号: U20 姓名: 完成日期: 2010.05.20 一、 实验目的1. 掌握一维数组和二维数组的定义、初始化和数组元素的引用。2. 掌握字符数组和字符串函数的使用。3. 理解掌握数组名和数组下标的含义。4. 掌握与数组有关的常规运算。5. 掌握C开发环境中调试,跟踪数组元素取值和元素空间地址的使用 二、 实验内容及要求1. 深入理解上机实践训练教程2.5实验五案例示范【典型示例】中对外部参照存储类型的数组和自动类数组还有static数组的内存空间的分配及其是否初始化的有关文字描述。#includechar ch14=g,l,o,b,l,e, ,s,t,r,i,n,g,0;void main()int x,y,i;int a5=1,2,3,4,5;int b32= 3,4,9,11,88,2 ;for(i=0;i5;i+)printf(%5d,ai );printf(n);for(x=0;x3;x+) for(y=0;y2;y+) printf(%5d,bxy); printf (n); for(i=0;chi;i+) printf(%lc,chi); puts();我的理解: 只有静态数据和外部数组才能初始化。数组a和b是在栈空间里面动态创建的,数组ch则是静态创建的。所以,a和b不能初始化,因为编译时无法给a和b分配内存单元。而全局数据ch的元素可以在编译时就给出初值,当程序一开始执行,对应的全局静态数据区中属于ch的内存单元也就通过映射有了初始值。2. 有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。以15个数用赋初值的方法在程序中给出,要找的数用scanf函数输入。#includevoid main()int i,a,left,right,mid;int arr15;left=0;right=14;for(i=0;i15;i+)arri=15+i; printf(请输入一个数:n);scanf(%d,&a); if(aarr14)printf(你要查找的数不存在);elsewhile(left=right)mid=(left+right)/2;if(aarrmid)left=mid+1;elseprintf(你要查找的数为第%d个n,mid+1);break;if(leftright)printf(你要查找的数不存在);3. 输入一串字符,以“?”结束。统计各字母出现的次数,并按字母出现的多少输出(先输出次数多的,次数相同的按字母表顺序输出,不出现的字母不输出)。#includevoid main()int i,j,l;char string1256,string252,a;static int count52=0;printf( please input string :n);for(i=0;i26;i+) string2i=i+A; for(i=26;i=A)&(string1i=a)&(string1i=z)count26+string1i-a+;for(j=0;j51;j+)for(i=j+1;icountj) l=counti; counti=countj; countj=l; a=string2i; string2i=string2j; string2j=a;for(i=0;i52;i+)if(counti=0) break;elseprintf( 字母%c的个数为%dn,string2i,counti);运行结果:4. 输入一段以回车换行终止的英文语句,要求将句中的多余空格删掉(允许在单词之间有一个空格),然后将句中单词首字母全改成大写输出。要求:该英文语句保存进一维数组str中,删除多余空格及大写首字母等操作均在同一个数组str内存中完成。#include#includevoid main()int i;char string256;printf(please input a sentence:n);for(i=0;stringi!=n;i+)scanf(%c,&stringi);for(i=0;stringi= ;)if(stringi= )strcpy(string,&stringi+1);elsebreak;for(i=0;stringi!=0;)if(stringi= )&(stringi+1= )strcpy(&stringi,&stringi+1);elsei+;if(string0=a)&(string0=a)&(stringi=z)stringi=stringi-32;printf(%sn,string);5. 讨论实验五11题中is_modified的用途、12题中出现的异常现象的理解及如何避免。(提示;跟踪11题运行过程,检查跳出排序算法时,外层循环变量i的值;12题把strcpy(str1,str2);改为strncpy(str1,str2,sizeof(str1)-1);看执行结果,比较两次的运行结果不同,分析原因。实验五 11题;#include#include#define TRUE 1#define FALSE 0void main()char temp20;int i,j;int is_modified=FALSE;char cs520=Chian,American,Japan,India,England; for(i=0;ii;j-) if(strcmp(csj-1,csj)0) is_modified=TRUE; strcpy(temp,csj-1); strcpy(csj-1,csj); strcpy(csj,temp); if(is_modified=FALSE) break; printf(i=%dn,i); for(i=0;i5;i+) puts(csi);我对is_modified的作用的理解:is_modified在程序中简化了循环语句的计算次数,使程序更加简洁。实验五 12题;#include#include#includevoid main() static char str1=abc,str2=asdfgh8;char ch;ch=8;system(cls);strcpy(str1,str2); printf(%st%st%cn,str1,str2,ch);#include#include#includevoid main() static char str1=abc,str2=asdfgh8;char ch;ch=8;system(cls);strncpy(str1,str2,sizeof(str1)-1);printf(%st%st%cn,str1,str2,ch);我对错误原因的理解:由于在定义变量时,str1所分配的空间小于str2,故在将str2复制到str1的过程中产生了越界,str2为高地址,str1为低地址,复制过程进行时str2的元素部分被覆盖,所以导致了上面的情况。6. 按照实验六 指针程序设计中案例示范【典型示例】中给出的过程描述在VC6.0环境下一步一步修改,了解整个过程中编译发生错误时的提示信息、对代码的完善过程中蕴含的正确使用指针的方法。并谈谈你对指针变量使用的一点理解。#include#include#includevoid main()char *name,str10;name=(char*)malloc(20*sizeof(char);scanf(%s,name);strcpy(str,comrade);printf(%st%sn,str,name);我的理解;字符数组不能直接用赋初值,可以添加头文件,再用strcpy函数来实现,name为指针变量,但程序并没有为mane指针分配它所指的内存单元,故name的指向不确定,带有随机性,从而使程序运行时破坏计算机系统,造成危害,因此,需要为name指针分配空间。7. 实验六的1题和6题实验七 第一题:上机调试并理解下述例题:找错并作理解说明:实验七 第二题:上机运行下面程序,观察输出结果有没有异常,如果有,请在报告中分析异常造成的原因以及你的深层次理解#include#include#includevoid main()char *str1,*str2,ch;strcpy(str1,abc);strcpy(str2,asddfgh8);ch=8;strcpy(str1,str2);printf(%st%st%cn,str1,str2,ch);【进一步提升】将数的处理改为字符串的处理,即15个字符串保存在一个二维字符数组中,对其排序后任意输入一字符串,采用折半查找法判断是否存在与二维字符数组中。#include#include#include#define N 5void main() int i,j,k,locationN; char c20,temp20,arrN20; printf(please input %d characters:,N); for(i=0;iN;i+) scanf(%s,arri); locationi=i; for(i=0;iN-1;i+) for(j=i+1;jN;j+) if(strcmp(arrj,arri)0) strcpy(temp,arrj); strcpy(arrj,arri); strcpy(arri,temp); k=locationj; locationj=locationi; locationi=k; for(i=0;iN;i+) printf(%st,arri); printf(请输入要查找的字符:); scanf(%s,c); int left=0,right=N-1,middle;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论