(2)数组指针程序段

//对整型,实型,字符型数组赋值的测试。


//对整型赋初值
#include<stdio.h>
int main()
{
int i,a[6]={3,5,9,7,2,0};
for(i=0;i<6;i++)
printf("a[%d]=%d,   ",i,a[i]);
return 0;
}
-------------------------------------------------


//对实型赋初值
#include<stdio.h>
int main()
{
float a[6]={3.1,5.1,9.1,7.1,2.1,0.1};
int i;
for(i=0;i<6;i++)
printf("a[%d]=%f,   ",i,a[i]);
return 0;
}
-------------------------------------------------------
//对字符型赋初值
#include<stdio.h>
int main()
{
char a[6]={'a','F','d','N','Y','G'};
int i;
for(i=0;i<6;i++)
printf("a[%d]=%c,   ",i,a[i]);
return 0;
}
-------------------------------------------------
//对整型数组赋字符型数值,
//程序会正常输出,因为int型数值分配2个字节,字符型数值占1个字节,足够使用,无精度损失
#include<stdio.h>
int main()
{
int a[6]={'a','F','d','N','Y','G'};
int i;
for(i=0;i<6;i++)
printf("a[%d]=%c,   ",i,a[i]);
return 0;
}
---------------------------------------------------------------


//把实型数值赋给整型
//输出结果是只留下整数部分,小数部分损失
#include<stdio.h>
int main()
{
int a[6]={3.2,5.2,7.2,1.2,0.2,9.2};
int i;
for(i=0;i<6;i++)
printf("a[%d]=%d,   ",i,a[i]);
return 0;
}
------------------------------------------------------
//对整型数组赋初值不够,后面的默认为0。
//下面的输出结果是3,6,9,2,0,0,。
#include<stdio.h>
int main()
{
int a[6]={3,6,9,2};
int i;
for(i=0;i<6;i++)
printf("a[%d]=%d,   ",i,a[i]);
return 0;
}


------------------------------------------------------------------
//对字符型数组赋初值不够,后面的默认为'\0','\0'在本机中输出为空格。
//下面的结果输出是a,F,d,G,0,0




#include<stdio.h>
int main()
{
char a[6]={'a','F','d','G'};
int i;
for(i=0;i<6;i++)
printf("a[%d]=%c,   ",i,a[i]);
return 0;
}
====================================================================
//测试字符型数组赋值及输出。
//printf("str[]=%s\n",str);可以正常输出,如果是printf("str[]=%s\n",str[]);则编译出错
//如果是printf("str[]=%s\n",str[0])则编译通过但输出出错显示为引用内存不为‘read’
#include<stdio.h>
int main()
{
char str[]={"I am a student"};//不打双引号也可以
printf("str[]=%s\n",str);//可以正常输出,
puts(str);//输出效果和上面printf一样,如果是puts(str[0])则编译出错
puts("I am a student");//输出结果和上面printf一样
return 0;
}
--------------------------------------------------------------------------
#include<stdio.h>
int main()
{
char str[20];
scanf("%s",str);//可以输入打回车结束,但有个缺陷,即输入空格后后面输入的字符将不会输入。
printf("str[]=%s\n",str);//可以正常输出,


return 0;
}


--------------------------------------------------------------------------------
#include<stdio.h>
int main()
{
char str[20];
gets(str);//可以输入打回车结束,也可以输入空格不会有任何影响,
printf("str[]=%s\n",str);//可以正常输出,
puts(str);
return 0;
}




=====================================================================
//测试常用字符串处理函数
strcpy()==拷贝
strcmp()==比较


strlen(字符串)
strlwr(字符串)
strupr(字符串)
strcat(字符数组,字符串)




--------------------------------------------------------------------
//strlen(字符串);用于计算字符串的长度,不包括'\0'


#include<stdio.h>
#include<string>
int main()
{

char str[]={"I am a student"};
printf("字符串的长度=%d.\n",strlen(str));

return 0;
}
---------------------------------------------------------------
//strlwr(字符串)将字符串中大写字母改为小写


#include<stdio.h>
#include<string>
int main()
{

char str[]={"I Am a Student"};
printf("字符串为:%s\n",str);//换成puts(str);效果一样
strlwr(str);
printf("处理后字符串为:%s\n",str);//换成puts(str);效果一样

return 0;
}
-------------------------------------------------------------------------------
strupr(字符串)将字符串中小写字母改为大写


#include<stdio.h>
#include<string>
int main()
{

char str[]={"I Am a Student"};
printf("字符串为:%s\n",str);
strupr(str);
printf("处理后字符串为:%s\n",str);

return 0;
}
--------------------------------------------------------------------------------
//strcat(字符数组,字符串)把“字符串”连接到“字符数组”中字符串的最后一个有效字符的后面,
//组成新的字符串存回“字符数组”中。注意“字符数组”要有足够的存储空间
//输出结果为:I Am a StudentFrom China!
#include<stdio.h>
#include<string>
int main()
{

char str1[]={"I Am a Student"},str2[]={"From China!"};//注意该程序编译成功,输出有警告引用内存不为‘read’。
//要把str1定义足够的存储空间例str[30]就不会出现上说情况。


puts(str1);
puts(str2);
strcat(str1,str2);
puts(str1);
puts(str2);

return 0;
}




==========================================================================
//数组可以从a[0]赋值也可以从a[1],a[2]开始赋值
//测试数组越界
#include<stdio.h>
int main()
{
int i,a[5]={22,45,67,87,34};
for(i=0;i<5;i++)
printf("%d   ",a[i]);//
printf("%d\n",a[5]);//会输出数组末尾下一个内存中存放的数值,往往是垃圾值
return 0;

}
========================================================================
//测试数组输入和输出并且前9个数末尾以“,”结束 。最后一个数以.结束,一行输出4个数
#include<stdio.h>
int main()
{
int i,a[10];
printf("please input array value:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);//输入数据时加空格和换行不会对输入数据有任何影响




printf("The array value is:\n");
for(i=0;i<10;i++)
{
if(i<9)
{
printf("a[%d]=%d,  ",i,a[i]);//前9个数末尾以“,”结束
if((i+1)%4==0) printf("\n");//保证一行输出4个数
}
else 
printf("a[%d]=%d.  ",i,a[i]);//最后一个数以.结束
      }

return 0;

}


========================================================
//二维数组赋值








==========================================================================


//排序算法
//选择排序




-----------------------------------------------


//冒泡排序
#include<stdio.h>
int main()
{
int a[10],i,t,j;
printf("please input 10 number :");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=10;j>0;j--)
for(i=0;i<j;i++)
if((i+1<j)&&(a[i]>a[i+1]))
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("排序后的的顺序为:");
for(j=0;j<10;j++)
printf("%d   ",a[j]);
return 0;
}


==============================================================================
//测试变量的指针使用及地址输出形式,和变量.地址.指针占用的空间
#include<stdio.h>


int main()
{
float a,b,c,*pt_1,*pt_2,*pt_3;
a=10,b=20,c=30,pt_1=&a,pt_2=&b,pt_3=&c;
printf("%x,%lf,%x,%lf,%x,%lf\n",pt_1,a,pt_2,b,pt_3,c);
printf("%x,%lf,%x,%lf,%x,%lf\n",&a,*pt_1,&b,*pt_2,&c,*pt_3);
printf("%d,%d,%d,%d\n",sizeof(a),sizeof(pt_1),sizeof(20),sizeof(pt_2));//当然输出结果全为4,因为都占用4个字节
printf("%d\n",sizeof(*pt_1));//输出结果为4

return 0;
}
----------------------------------------------------------------------------------------


//测试变量的值,变量的地址,指针的值,指针的地址,


#include<stdio.h>


int main()
{
int x=10,*px;
px=&x;
printf("x的值=%d,x的地址=%x,\npx的值=%x,px所指向的变量的值=%d,\npx的地址=%x\n",x,&x,px,*px,&px);



return 0;
}


------------------------------------------------------------------------------------------
//测试指针类型长度,数组名,数组各元素地址,结果显示数组名就是数组首地址,
//即数组第一个元素的地址,从地址上看数组元素在内存中是连续的,
//地址值由低到高每个元素占4个字节(int)。


#include<stdio.h>


int main()
{
int x[9]={10,20,30,40,50,60,70,80,90},*px=x,i;
printf("px的值为%x\n数组名为%x\n",px,x);
for(i=0;i<9;i++)
printf("x[%d]的地址为%x\n",i,&x[i]);
for(i=0;i<9;i++)
printf("*px=%d,  px++=%x\n",*px,px++);





return 0;
}


-------------------------------------------------------------------------------
//不管是字符型还是整型,指针都占4个字节吗?
#include<stdio.h>
int main()
{
int a[10],*px=a,*py;
char *pc;
printf("%d,%d,%d\n",sizeof(px),sizeof(py),sizeof(pc));
return 0;
}


---------------------------------------------------------------------------------------
//测试指针变量之间的赋值,同类型之间和不同类型之间。


#include<stdio.h>
int main()
{
int a[10],*px=a,*py;
char ch[2],*pc=ch;
printf("%d,%d,%d\n",sizeof(px),sizeof(py),sizeof(pc));
py=px;         //把整型指针赋给整型指针,  同类型赋值,没问题。
printf("px=%x,py=%x\n",px,py);
// py=pc;         //把字符型指针赋给整型指针,类型提升 编译出错 ,改为py=(int*)pc; 类型转换后正确。
// printf("px=%x,py=%x,pc=%x",px,py,pc);
// pc=py; //把整型指针赋给字符型指针,类型降低  编译出错,改为pc=(char*)py;  类型转换后正确。
// printf("px=%x,py=%x,pc=%x",px,py,pc);
return 0;
}


============================================================================================


//这函数实现功能是统计输入字符中空格和小写字母的个数
#include<stdio.h>
int get()
int main()
{
int ws,lc;
if(get(&ws,&lc))
{
printf("There are %d whitespace characters\n",ws);
printf("and %d lowercase letters\n",lc);
}
else printf("unexpected end=of-file\n");
return 0;
}
int get(ws,lc)
int *ws,*lc;
{
int c;
*ws=*lc=0;
while((c=getchar())!=EOF)
switch(c)
{
case '':
case '\t':(*ws)++;break;
case '\n':return 1;
default: if(c>='a'&&c<='z') (*lc)++;
}
return 0;
}




=================================================================
//输入三个数实现按从小到大的顺序排序(用三种不同的方法)


//程序实现输入三个数按从小到大排序的功能(直接用变量)
//排序后a,b,c的值按从小到大的顺序排序
#include<stdio.h>
int main()
{
int a,b,c,*pa,*pb,*pc,t;
scanf("%d,%d,%d",&a,&b,&c);
if(a>b)
{t=a,a=b,b=t;}
if(a>c)
{t=a,a=c,c=t;}
if(b>c)
{t=b,b=c,c=t;}
printf("a=%d, b=%d, c=%d\n",a,b,c);
return 0;
}
-------------------------------------------------------------------
//程序实现输入三个数按从小到大排序的功能(使用传地址方式)
//测试下面结果排序前各变量地址和指向各变量的指针值一样
//排序后a,b,c的值没变,各指针的值(即地址)改变,即所指向的变量改变了,按*pa,*pb,*pc从小到大排序
#include<stdio.h>
int main()
{
int a,b,c,*pa=&a,*pb=&b,*pc=&c,*p;
printf("排序前各a,b,c变量的地址 add_a=%x,add_b=%x,add_c=%x\n",&a,&b,&c);
printf("排序前各指针的值        pa=%x,pb=%x,pc=%x\n",pa,pb,pc);
scanf("%d,%d,%d",pa,pb,pc);
if(*pa>*pb)
{p=pa,pa=pb,pb=p;}
if(*pa>*pc)
{p=pa,pa=pc,pc=p;}
if(*pb>*pc)
{p=pb,pb=pc,pc=p;}
printf("排序后各指针所指变量的值  *pa=%d, *pb=%d,*pc=%d\n",*pa,*pb,*pc);
printf("排序后a,b,c的值            a=%d,b=%d,c=%d\n",a,b,c);
printf("排序后各指针的值           pa=%x,pb=%x,pc=%x\n",pa,pb,pc);
printf("排序后各a,b,c变量的地址    add_a=%x,add_b=%x,add_c=%x\n",&a,&b,&c);
return 0;
}


---------------------------------------------------------------------------------
//程序实现输入三个数按从小到大排序的功能(使用传指针所指变量的值方式)
//测试下面结果排序前各变量地址和指向各变量的指针值一样
//排序后a,b,c的值及*pa,*pb,*pc的值都按从小到大的顺序排序,各变量a,b,c地址及指针的值不变


#include<stdio.h>
int main()
{
int a,b,c,*pa=&a,*pb=&b,*pc=&c,p;
printf("排序前a,b,c各变量的地址:add_a=%x,add_b=%x,add_c=%x\n",&a,&b,&c);
printf("排序前指向各变量的指针值:pa=%x,pb=%x,pc=%x\n",pa,pb,pc);


scanf("%d,%d,%d",&a,&b,&c);
if(*pa>*pb)
{p=*pa,*pa=*pb,*pb=p;}
if(*pa>*pc)
{p=*pa,*pa=*pc,*pc=p;}
if(*pb>*pc)
{p=*pb,*pb=*pc,*pc=p;}

printf("排序后a,b,c的值a=%d,b=%d,c=%d\n",a,b,c);
printf("排序后各指针所指变量的值*pa=%d,*pb=%d,*pc=%d\n",*pa,*pb,*pc);
printf("排序后a,b,c各变量的地址add_a=%x,add_b=%x,add_c=%x\n",&a,&b,&c);
printf("排序后各指针的值 pa=%x,pb=%x,pc=%x\n",pa,pb,pc);
return 0;
}
====================================================================================
//给字符数组赋值
//下面程序输出I am happy
#include<stdio.h>
int main()
{
char c[10];//这里换成整型的数组也可以如 int c[10];。
//由于字符型与整型是相互通用的,因此也可以定义一个整型数组存放字符数据。
c[0]='I';
c[1]=' ';
c[2]='a';
c[3]='m';
c[4]=' ';
c[5]='h';
c[6]='a';
c[7]='p';
c[8]='p';
c[9]='y';
for(int i=0;i<10;i++)
printf("%c",c[i]);
printf("\n");


return 0;
}


====================================================================================


//输入一行字符,统计其中有多少个单词,单词之间用空格或好几个空格隔开.


#include<stdio.h>
int main()
{
int counter=0;


char c[100];
gets(c);


for(int i=0;c[i]!='\0';i++)
if(c[i]==' '&&c[i-1]!=' '&&i!=0)
counter++;


printf("单词的个数为:%d\n",counter+1);


return 0;
}


===================================================


//有3个字符串,要求找出其中最大者
#include<stdio.h>
#include<string>
int main()
{
char str[3][20];
char max[20];


for(int i=0;i<=2;i++)
gets(str[i]);
if(strcmp(str[0],str[1])>0)
strcpy(max,str[0]);
else
strcpy(max,str[1]);
if(strcmp(max,str[2])<0)
strcpy(max,str[2]);


printf("%s\n",max);




return 0;
}


===================================================================


//求一个3*3的整型矩阵对角线元素之和


#include<stdio.h>
#include<string>
int main()
{
int d[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int s=0;


for(int i=0;i<3;i++)
for(int j=0;j<3;j++)

if(i==j) //对角线就是元素下标相等的情况
s+=d[i][j];


printf("%d\n",s);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值