c语言中void arrout,c语言学习笔记(数组、函数

《c语言学习笔记(数组、函数》由会员分享,可在线阅读,更多相关《c语言学习笔记(数组、函数(53页珍藏版)》请在人人文库网上搜索。

1、数组2010-3-29 22:40一维数组的定义和一维数组的引用内存中一串连续的存储单元(变量),叫数组。指针移动和比较只有在一串连续的数组中才有意义。当数组中每个变量只带一个下标时,为一维数组。定义一个一维数组:类型名 数组名【常量表达式】 如:int a8;说明: 定义一个一维整型名为a的数组。方括号中规定此数组有8个元素,(a【0】-a【7】),不存在a【8】这个元素。a数组中每个元素均为整型,且每个元素只能存放整型。每个元素只有一个下标,且第一个元素的下标总为0。c编译程序,为a数组开辟8个连续存储单元。3)在定义数组语句中,可以有多个数组说明符;它们用逗号隔开。例:double a【。

2、22】,v【100】,u【5】,a,b,c; 注:双精度型 每个单元占用8个字节的存储空间。另外,也可以和普通变量一起定义。用逗号分隔开。2010-3-23 10:29 一维数组元素的引用21)引用形式:数组名 【下标表达式】可以是:常量,变量,表达式。如:double x【8】 则 x【0】 x【j】 x【i+k】均合法2)(1)一个数组元素实际上就是一个变量名,代表内存中的一个存储单元。我们可以把数组元素看做一个变量名来处理。(2)一个数组不能整体引用,数组名中存放的是一个地址常量,它代表整个数组的首地址。当学习指针时,引用的变量的地址,就是变量中第一个字节的地址。数组的首地址也是它的第一。

3、个元素的第一个字节的地址,即它的首地址。数组的首地址存放在数组名中。所以说,数组名就代表一个地址。数组名是一个地址值。(3)在引用数组元素时,数组元素下标表达式必须是整数,下标表达式下限为0.系统并不自动检验数组元素下标是否越界,因此编程时要注意。如:double a,b; int c10;a=2.0;b=3.0;则ai; 是不合法的。给数组赋初值时,如果所赋初值少于元素个数时,后面的元素补为0,字符补为0可以通过赋初值来定义一个数组的大小。如:int a=0,0,0,0,0; 相当于:a5=0;一维数组的初始化void main()int i,j,a30;for (i=0,j=1;i=0;i。

4、-)printf(“%d, ”,ai);if (i%10=0) printf(“n”); /*先输出第i=20这个元素,再输入回车。*/getch(); /2010年10月14日14:43:15 上次是怎么做的啊,错了那么多。1一维数组和数组元素的地址1)数组和指针的比较(1)指针变量的地址:指向内存中一个存储单元的第一个字节的地址。数组名的地址值,就是该数组的第一个元素的第一个字节的地址。(2)指针变量有基类型,相当于数组的类型名。(3)指针变量的地址值不可改变,即指针变量指向的存储单元的地址值是固定的,不可改变,如int *p,a;p=&a;则变量a的地址是不可改变的。也不可给数组名的地址。

5、重新赋值。如数组名为a的数组:a=&x;或a+等给数组名重新赋值都是错误的。一旦定义,a永远指向a数组的首地址。(4)虽然不可改变a的内容(地址),但可以对数组名加一个整数的办法,来依次表达该数组中不同元素的地址。如:a 代表 &a【0】数组的首地址,也是a0的地址 /首地址a+1 代表 &a【1】数组元素a1的地址 /在指针中,1代表一个存储单元a+2 代表 &a【2】. /注意:不是a=a+1,而是 a+1例:main()int a10,*p,x,k;for(k=0;k=0)i+;scanf(%d,&ai);return i;arrout(int *a,int n)int i;for(i=。

6、0;i=0)i+;scanf(%d,a+i);return i;int output(int *a,int n)int i;for(i=0;i=0)i+;scanf(%d,a+i);if(aimain()int i,a,b,h,sum=0;for(i=0;i0;i-)for(j=0;jgetdate(int *a,int n)int i;for(i=0;i5) printf(no);main()int a5=1,2,3,4,5,n=6;fun(a,n);getch();二看视频后模仿做的int getin(int *a)int i,n;doprintf(please input 1 and 3。

7、0);for(i=0;i=n) p=-1;else p=i;return p;main()int a30,x,n,p;n=getin(a);scanf(%d,&x);p=fun(a,x,n);if(p!=-1) printf(x=%d,p=%dn,x,p);else printf(NO);getch();2010年10月19日22:36:38 自己又做了一遍,和金文老师的程序比起来,还是差了不少啊。int arrout(int *a,int n)int i;for(i=0;i=n) printf(NO);int main()int n,x,a5=1,2,3,4,5;arrout(a,5);sc。

8、anf(%d,&x);search(a,x,5);getch();函数之间对一维数组和一维数组的元素的引用及一维数组实例8 2010 4.10w数组中存放着n个数据,编写函数实现删除下标为k的元素中的值arrout(int *a,int n)int i;for(i=0;i30);return i;int arrdel(int *a,int n,int m)int i;for(i=n;i30);return i;int arrin(int *a,int n)int i;for(i=0;ivoid arrout(int *a,int n)int i;for(i=0;ivoid arrout(int。

9、 *a,int n)int i;for(i=0;in;i+)printf(%d,ai);printf(n);search(int *a)int i,j,temp,p,m=0,n=0;for(j=0;j4;j+)p=j;for(i=j+1;i5;i+)if(aiap) p=i;if(p!=j) /*如果当前值不等于最小值时,才交换*/temp=ai;ai=aj;aj=temp;m+; /*此处错了,应该是:temp=aj;aj=ap;ap=temp;*/n+;printf(xun huan ci shu: %dn,n);printf(jiao huan ci shu: %dn,m);void m。

10、ain()int a5=8,1,1,1,8;arrout(a,5);search(a);arrout(a,5);getch();/*此程序不对,但我又是半年没有接触C语言了,所以生疏了,还没看出错误2010.9.24晚11:40。*/2010年10月21日22:04:46 从昨天晚上,到今天晚上整整24小时,包括白天,上课之余都在想,实验这个“选择排序法”,今晚上终于成功了,明白了。上面的程序为什么不对也搞清楚了。O(_)O。(算法的核心是:找一个中间的变量,记住最大的或最小的元素,当比完一轮后,在外层循环将这个最大的或最小的数和每一轮的最前面一个数交换。它相比冒泡排序,交换的次数少了。选择排。

11、序是一个不稳定的排序算法?,还要在学习,还有什么“程序的复杂性分析.等等也是要学习”)#include stdio.hint main()int a10;arrin(a,10);arrout(a,10);paixu(a,10);printf(paixu jieshu,zhunbei shuchu.n);arrout(a,10);getch();int arrin(int *a,int n)int i;srand(unsigned)time(NULL);for(i=0;in;i+)ai=rand()%10;arrout(int *a,int n)int i;for(i=0;in;i+)print。

12、f(%d ,ai);printf(n);paixu(int *a,int n)int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(ajak) k=j;if(k!=i) t=ak;ak=ai;ai=t;、!、 2010年10月27日22:30:16学完了一维数组了,进度还是太慢,学完了还想多做几道习题。可翻开谭老头的书,却是一维数组和二维数组混编的题目,从网上找了个什么“猴子大王”的什么题,也没有头绪,是纯算法的题啊,所以,先放放。不过,我做了一个用筛法求素数的程序,一开始做不出,是参考了谭老头的书后,学会的。(源程序以后补吧,明天打乒乓球,得准。

13、备准备)从上周五开始和李继勇修理学校的微机,一直也没空学习,打乱了学习计划和进度了。得抓紧时间学习。加油!2010年11月1日23:51:45筛法求素数:main()int a100;getarr(a,100);arrout(a,100);sushu(a,100);getch();getarr(int *a,int n)int i;for(i=1;i=n;i+)ai=i;arrout(int *a,int n)int i;for(i=1;i=n;i+)printf(%d ,ai);printf(n);sushu(int *a,int n)int i,j,k;for(i=2;in;i+)for(。

14、j=i+1;jn;j+)if(aj!=0&ai!=0)if(aj%ai=0)aj=0;for(k=2;kn;k+)if(ak!=0)printf(%d,ak);二维数组二维数组的第一节:二维数组的定义和引用 资料没保存丢失了。. 10.9.262010年10月27日22:44:02二维数组在内存中是一一串连续的存储单元的方式保存的。第二节:二维数组的初始化int a34= 1,2,3,4, 5,6,7,8, 9,10,11,12 ; 注:可看成3个连续的一维数组,每个数组有4个元素。每一行的花括号也可以省略不写。行缺省,或列缺省都补零。一维数组可以省略数组的大小:如:int a=1,2,3,4。

15、;二维数组则不可以都省略行和列,只可以省略行下标,列下标是不能省略的。数组元素的个数不可以是变量。如:int x,y; int ax+y; 这样是不合法的。第m行n列可以写成:am-1 n-1;二维数组的遍历:二维数组是一个矩阵。遍历二维数组:main()int i,j,a34;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,&aij);for(i=0;i3;i+)for(j=0;j4;j+)printf(%d,aij);printf(n);getch();二维数组和指针以及二维数组程序举例:2010.9.26二维数组名和指针:数组名存放的是内存中该二维数组的首地址,。

16、即&a00若 指针p=a;即p=&a00.二维数组中元素的表示方法:ai j(*(a+i) j*(ai+j)*(*(a+i)+j)*(a+j*i+j)9.29指针数组和行指针2010年10月3日15:16:16指针数组:定义一个一维数组,数组中的每一个元素都是一个整形指针变量。如:定义一个整形的数组:int a3 2 ; 则对应的指针数组为:*q 3; 它和整形数组的行下标相同。指向二维数组每一行的开头,也可以说,指针数组中的每一个元素存放每一行的首地址。则:p0 存放a00的地址 p1存放 a10的地址 p2存放 a20的地址赋值方法:(双for循环)for(i=0;i3;i+) pi=ai。

17、;指针数组引用数组元素:aij 等价于 pij*(ai+j); 等价于 *(pi+j)因为pi 等价于 *(p+i) 所以*(pi+j) 等价于*(*(p+i)+j)pij 等价于 (*(p+i) j 行指针:定义一个指针变量q,它指向一个包含2个整形元素的数组。行指针赋初值:若q=a; 则q+1 等价于 a+1;等价于 a1;如: int a3 2, (*q)2; 注意定义行指针的格式。括号不能少,元素个数和整形数组的列下标是相同的。指针数组移动一次,是移动一个单位,即移动一个元素的位置。行指针的单位是一个数组,所以它移动一次是移动一个数组的位置。它的移动是以行为单位。行指针引用数组元素:因。

18、为q=a;所以a的引用方法均适用于q(最后一项除外)两者的基类型不同:行指针的基类型是 数组 ,指针数组的基类型和原数组的类型相同。. /要再看,再学习二维数组名和指针数组做实参二维数组名做实参时,形参一定是指针,并且这个指针应指向数组,指向数组的指针变量为行指针。形参对应格式,即行指针。应为:1.(*a)N /数组的列2. 行指针也可以表示成数组的形式,即 aMN;3. 行的表达式可缺省aN指针数组做实参:由于指针数组是一个数组,而且她中的每个元素都是指针,因此当指针数组做实参时,她对应的形参必须是指向她的指针。即对应的形参,必然是一个指向指针的指针。即 1*a;2与指针数组表示方式相同 *aM;3缺省 *a;。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值