//对整型,实型,字符型数组赋值的测试。
//对整型赋初值
#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;
}
//对整型赋初值
#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;
}