零基础学c语言c语言基础.docx

上传人:b****2 文档编号:17193786 上传时间:2023-07-22 格式:DOCX 页数:25 大小:21.25KB
下载 相关 举报
零基础学c语言c语言基础.docx_第1页
第1页 / 共25页
零基础学c语言c语言基础.docx_第2页
第2页 / 共25页
零基础学c语言c语言基础.docx_第3页
第3页 / 共25页
零基础学c语言c语言基础.docx_第4页
第4页 / 共25页
零基础学c语言c语言基础.docx_第5页
第5页 / 共25页
零基础学c语言c语言基础.docx_第6页
第6页 / 共25页
零基础学c语言c语言基础.docx_第7页
第7页 / 共25页
零基础学c语言c语言基础.docx_第8页
第8页 / 共25页
零基础学c语言c语言基础.docx_第9页
第9页 / 共25页
零基础学c语言c语言基础.docx_第10页
第10页 / 共25页
零基础学c语言c语言基础.docx_第11页
第11页 / 共25页
零基础学c语言c语言基础.docx_第12页
第12页 / 共25页
零基础学c语言c语言基础.docx_第13页
第13页 / 共25页
零基础学c语言c语言基础.docx_第14页
第14页 / 共25页
零基础学c语言c语言基础.docx_第15页
第15页 / 共25页
零基础学c语言c语言基础.docx_第16页
第16页 / 共25页
零基础学c语言c语言基础.docx_第17页
第17页 / 共25页
零基础学c语言c语言基础.docx_第18页
第18页 / 共25页
零基础学c语言c语言基础.docx_第19页
第19页 / 共25页
零基础学c语言c语言基础.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

零基础学c语言c语言基础.docx

《零基础学c语言c语言基础.docx》由会员分享,可在线阅读,更多相关《零基础学c语言c语言基础.docx(25页珍藏版)》请在冰点文库上搜索。

零基础学c语言c语言基础.docx

零基础学c语言c语言基础

【零基础学c语言】c语言基础

c语言基础

在一维数组中,存在p+i=a+i,*(p+i)=*(a+i)=*(&a[i])=a[i]p1+n=a+n=&a[n];代表第n行的首地址。

二维数组:

*(p1+n)+0=*(a+n)+0=*(&a[n])代表n行0列地址。

(*p)[4]指向的是含有4个整型元素的一维数组,默认p=a,指向0行首地址;

p指向的二维的0行,加1是指向下一行,不指向每一行元素,要想求行列交点值那就取摸*(*(p+i)+j)、、p+i表示行号,从而转到对应的行列数

例如:

(*p)[4]用法,输出任意一行一列的值

#include

voidmain()

{inta[3][3]={1,2,3,4,5,6,7,8,9},(*p)[3],i,j;

p=&a[0];

scanf("%d%d",&i,&j);

printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j));

}

#include

voidmain()

{inta[3][3]={1,2,3,4,5,6,7,8,9},*p,i;

p=a[0];

for(i=0;i{printf("%d\t",*(p+i));}//a[0]+1到a[0]+9可以输出所有的值

printf("\n");

}

最多在一维数组中用到:

*p1=*p2是把p1指向的变量的值改变,但p1所指向的变量不变,

p1=p2,则是p1指向变量改变了,即p1不再指向原变量的地址,改为指向p2所指向的地址.

题目:

把数组a复制到b数组上

法1

#include//

voidmain()

{int*p,*p1,a[]={1,2,3,4,5},i,b[5];

p=a;

p1=b;

for(i=0;i{*p1=*p;}//赋值给他,但他们所指的变量都不变

for(i=0;i{printf("%d\t",b[i]);}

printf("\n");

printf("%d\t",b[4]);//这样可以的,因为它记录了这个数组的地址以及对应素质printf("\n");

}

法2不能用,

#include

voidmain()

{int*p,*p1,a[]={1,2,3,4,5},i,b[5];

p=a;

p1=b;

for(i=0;i{p1=p;//导致指向的变量变了

printf("%d\t",*p1);

}

printf("\n");

}

以上几题就用到第一段的方法

案例1数组名做实形参数

法1:

#include//1230456,前后调换,

voids(inta[],intn)

{inti,t,k=(n-1)/2;

for(i=0;i{t=a[i];

a[i]=a[n-1-i];//以下三个数组交换值固定格式

a[n-1-i]=t;

}

}

main()

{inti;

inta[]={1,2,3,0,4,5,6};

for(i=0;i{printf("%d",a[i]);

}

printf("\n");

s(a,7);

for(i=0;i{printf("%d",a[i]);}

printf("\n");

}

法2:

#include//1230567,前后调换,用的指针法

voids(int*p,intn){inti,t,k=(n-1)/2;//

for(i=0;i{t=*(p+i);

*(p+i)=*(p+n-1-i);

*(p+n-1-i)=t;

}

}

main()

{inti;

inta[]={1,2,3,0,5,6,7};

for(i=0;i{printf("%d",a[i]);

}

printf("\n");

s(a,7);

for(i=0;i{printf("%d",a[i]);}

printf("\n");

}

#include//一般方法,1230456从大到小输出,数组名做形参数voids(inta[],intn)

{inti,j,t;

for(j=0;j{for(i=0;i{if(a[i]{t=a[i];

a[i]=a[i+1];

a[i+1]=t;}

}

}

}

main()

{inta[7]={1,2,3,0,4,5,6},i;

for(i=0;i{printf("%d",a[i]);}

printf("\n");

s(a,7);

for(i=0;i{printf("%d",a[i]);

}

printf("\n");

}

#include//一般方法,1230456从大到小输出,数组名做形参数voids(inta[],intn)

{inti,j,t;

for(j=0;j{for(i=0;i{if(a[i]{t=a[i];

a[i]=a[i+1];

a[i+1]=t;}

}

}}

main()

{inta[10],i;

printf("pleaseinput10numbers:

");

for(i=0;i{scanf("%d",&a[i]);}

s(a,10);

for(i=0;i

{printf("%d",a[i]);

}

printf("\n");

}

下页c语言基础

案例2数组名作实参,指针做形参数,#include//1230456从大到小输出,

voids(int*p,intn)//调用函数后,就相当于定义指针变量一样,p=a,当做自己数组处理,在之前里面不能出现其他的数组

{inti,j,t;

for(j=0;j{for(i=0;i{if(*(p+i){t=*(p+i);

*(p+i)=*(p+i+1);//这题你应该用指针的。

*(p+i+1)=t;}}

}

}

main()

{inta[10],i;

printf("pleaseinput10numbers:

");

for(i=0;i{scanf("%d",&a[i]);}

s(a,10);

for(i=0;i{printf("%d",a[i]);

}

printf("\n");

}

案例3实参和形参都是指针变量

就把实参指针变量指向的数组都付给形参指针变量,当做自己的数组

案例4实参为指针变量,形参为数组名

#include//3行4列输出,二维数组指针

voidmain()

{inta[3][4]={1,2,2,2,3,4,4,5,5,6,9,0},i,*p;

for(p=a[0],i=1;p{

printf("%d\t",*p);

if(i%4==0)

{printf("\n");}

}

}

上面2-底一样的题目

#include//输入行列号,输出任意一行一列元素,二维数组指针

voidmain()

{inta[3][4]={1,2,2,2,3,4,4,5,5,6,9,0},i,j;

printf("pleaseinputiandj:

");

scanf("%d,%d",&i,&j);

//不需要的p=a[0];//&a[0][0]

printf("a[%d,%d]=%d\n",i,j,*(a[i]+j));

}

这两个最特殊:

p指向由m个数组元素构成的一维数组

#include//3行4列输出,二维数组指针

voidmain()

{inta[3][4]={1,2,2,2,3,4,4,5,5,6,9,0},i,j;

int(*p)[4];//虽然是二维数组,但是他这意思是p指向含有4个整形元素的一维数组,p=a;//意思是指向0行a[0],p+1为a[1]行

printf("pleaseinputiandj:

");

scanf("%d,%d",&i,&j);

printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j));//这是二维数组取地址方式

}

#include//3行4列输出,二维数组指针

voidmain()

{inta[3]={1,2,2},i,j;

int(*p)[3];

//虽然是二维数组,但是他这意思是p指向含有4个整形元素的一维数组,//p=a;//意思是指向0行a[0],p+1为a[1]行

//printf("pleaseinputiandj:

");

//scanf("%d,%d",&i,&j);

//printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j));//这是二维数组取地址方式p=&a;

printf("%d\n",(*p)[2]);

}

题目为:

有一个班,3个学生,都学4门学科,求所有的平均成绩,可以查出n个学生的成绩,查找有一门以上课程不及格的学生,输出他们的全部课程的成绩.

把*a数组元素首地址赋给指针p,p就代表指向主调函数,

#include,

voidf(int*p,intn)

{int*p1,s=0,av;

p1=p+n;

for(;p{s=s+(*p);

}

()av=s/n;

printf("%d\n",av);//av=3

}

main()

{inta[3][4]={2,4,2,2,2,6,2,8,2,4,4,8};

f(*a,12);//a是首行的地址&a[o],p=a;*a指的是数组首元素地址a[0]+0,或者&a[0][0],p=a[0],把*a数组元素首地址赋给指针p

}

把a数组赋给指针p,p就代表指向主调函数,

voidf2(int(*p2)[4],intn)//p指向的是含有4位整形数组的一维数组,对二维讲,她也是从一维看,由上而下一行看,对一维来说p=&a,取摸(*p)[4]

{inti,j;

for(n=0;n{for(i=0;i{if(*(*(p2+n)+i){for(j=0;j{printf("%d\t",*(*(p2+n)+j));

}//这三个黄色是固定搭配,死记

printf("\n");

break;

}

}

}

}

main()

{inta[3][4]={4,4,4,4,2,6,2,8,2,4,4,8};

f(*a,12);//*a指的是数组首元素地址a[0]+0,或者&a[0][0],p=a[0],把*a数组元素首地址赋给指针p

f1(a,2);

printf("\n\n");

f2(a,3);

printf("\n");

}

上页下页c语言基础

用二维数组求平均数

voidmain()//

{inta[3][4]={1,2,2,2,3,4,4,5,5,6,9,0},*p,s=0,av;

for(p=a[0];pav=s/12;

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

}

对于一位数组:

字符数组

指针和字符数组的相互应用:

#include

main()

{char*s={"abc"};//定义的字符指针s默认指向字符串a首地址

do

{printf("%d\t",*s%10);//*s取摸后再取余

++s;//s指向下一个元素地址

}while(*s);

printf("\n");

}

题目:

1,定义一个字符数组,存放“ilovechina”,输出该字符串和第8个字符数组include

voidmain(){charstring[]={"ilovechina"};//或者string[]={'i','l','o','v','e','

','c','h','i','n','a'};等价printf("%s\n",string);//为%d求得就是0元素的地址,%s输出ilovechina

printf("%c",string[7]);//为%d求得就是7元素的地址asciic=99,%c输出c,%s就有问题printf("\n");

}

2,通过字符指针变量输出一个字符串:

法1:

#include

voidmain()

{chars[]={"ilovechina"};

printf("%c",s[1]);//为%d求得就是0元素的地址,%s输出ilovechina

printf("\n");

}

法2:

#include

voidmain()

{char*p={"ilovechina"};//固定格式,定义字符指针变量s,并对s初始化

printf("%c\n",p[0]);//结果是i

p="212";//也可以对s重新赋值printf("%c\n",a、[1]);

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

//p指向的是字符串常量的第一个字符,会自动加1指向下一个字符地址}//输出的结果是212,s指向2,输出自动加1

或者

#include

voidmain()

{char*s;//固定格式,定义字符指针变量s,并对s初始化

s=={"ilovechina"};把字符数组首元素i地址赋给了s

printf("%s\n",s);//结果是ilovechina

}

sizeof与strien的用法:

第一:

对于字符指针数组char*s="0123456789";

sizeof(s)结果4,因为s是指向字符串常量的字符指针,sizeof获得的是一个指针的之所占的空间,应该是

长整型的,所以是4

sizeof(*s)结果1,因为*s是第一个字符其实就是获得了字符串的第一位'0'

所占的内存空间,是char类型的,占了1位strlen(s)=10如果要获得这个字符串的长度,则一定要使用strlen(是获得有效字符长度,无\0)

例如:

#include

#include

main()

{charstr[][20]={"one*world","one*dream!

"},*p=str[1];

printf("%d,",strlen(p));

printf("%s\n",p);//p指向的是字符串常量的第一个字符,会自动加1指向下一个字符地址}////或者str也可以输出字符串

字符串比较函数:

一般形式:

strcmp(字符串1,字符串2)

说明:

当s1当s1=s2时,返回值=0

当s1>s2时,返回值>0

即:

两个字符串自左向右逐个字符相比(按aScii值大小相比较),直到出现不同的字符或遇'\0'为止。

如:

"a""a">"a"

"computer">"compare"

特别注意:

strcmp(constchar*s1,constchar*s2)这里面只能比较字符串,不能比较数字等其他形式的参数。

charname[20];

scanf("%s",name);

//这个可以输入字符串

scanf("%s",&name);错误的

字符串连接函数:

#include

#include

voidmain()

{inti;

chara[]="123",a1[]="asd";

printf("%s",strcat(a,a1));//a与a1两个字符串连接在一起123asd,字符串连接函数printf("\n");//strcpy(a,a1));//把a1复制覆盖到a1,asd字符串复制函数

}

#include

voidmain()

{chara[5];

printf("请输入字符数组a:

");//在输入时,辨别谁是谁输入的,以空格为界限分开scanf("%s",a);//必须是数组名,

printf("%s",a);

printf("\n");

}

题目:

将数组字符串a复制到数组b上,并输出数组b

法1:

#include

voidmain()

{chara[]={"im"},b[5];//b[]在定义时候一定要知道大小inti;

for(i=0;*(a+i)!

='\0';i++)//不定义p也能用指针,用*(a+i)代替,遇到‘\0’就跳出结束输出,表示已处理完

{*(b+i)=*(a+i);}*(b+i)='\0';//一定把\0复制过去给他

printf("stringais:

%s\n",a);//下面三句也可以用printf("stringbis:

%s\n",b);代替

printf("stringbis:

");//

for(i=0;b[i]!

='\0';i++)

{printf("%c",b[i]);}

printf("\n");

}

法2:

#include//

voidmain()

{char*p,*p1,a[]={"ilove"},b[7];

inti;

p=a;

p1=b;

for(i=0;i{*p1=*p;}//赋值给他,但他们所指的变量都不变

for(i=0;i{printf("%c",b[i]);}

printf("\n");

}

法3:

#include

voidmain()

{chara[]={"im"},b[5],*p,*p1;//b[]在定义时候一定要知道大小inti;

p=a;

p1=b;//可省略

for(p=a,p1=b;*p!

='\0';p++,p1++)//不定义p也能用指针,用*(a+i)代替,遇到'\0'就跳出结束输出

{*p1=*p;}

*p1='\0';

printf("stringais:

%s\n",a);

()printf("stringbis:

");

//下面三句也可以用printf("stringbis:

%s\n",b);代替

for(i=0;b[i]!

='\0';i++)

{printf("%c",b[i]);}

printf("\n");

}

题目:

用函数调用实现字符串的复制

法1:

#include

voidcopy(chara[],intn)//数组名

{inti=0;

charb[20],*p,*p1;//b数组长度一定要大于等于调用函数的数组长度

p=a;

p1=b;

for(i=0;i{*p1=*p;}

for(i=0;i{printf("%c",b[i]);}

}

main()

{chara[]={"ilovechina"};

charc[]={"youlovechina"};

copy(c,15);//数组名

printf("\n");

copy(a,13);

printf("\n");

}

上页下页c语言基础

#include

voidcopy(charc[],chard[])//定义的数组,传递数组名或者数组名也可以用声明的指针代替{inti=0;

for(i=0;*(c+i)!

='\0';i++)//字符复制给另一方那就用左面的方法

{*(d+i)=*(c+i);}

*(d+i)='\0';

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

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

}

main()

{chara[]={"im"},b[]="in",*p,*p1;//b[]在定义时候一定要知道大小

inti;

p=a;

p1=b;

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

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

printf("覆盖b数组后:

\n");

copy(p,p1);//或者copy(a,b);传递数组名和指针都可以

printf("\n");

}

法3:

#include

voidcopy(charc[],chard[])

{inti=0;

while(c[i]!

='\0')

{d[i]=c[i];

i++;}

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

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

}

main()

{chara[]={"im"},b[]="in",*p,*p1;//b[]在定义时候一定要知道大小

inti;

p=a;

p1=b;

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

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

printf("覆盖b数组后:

\n");

copy(p,p1);

printf("\n");

}

#include

voidc(char*p1,char*p2)

{inti;

for(i=0;*(p1+i)!

='\0';i++)

{*(p2+i)=*(p1+i);}

*(p2+i)='\0';

}

main()

{char*a={"wiqo"};//定义声明字符指针变量,a指向字符串常量的第一个字符w

char*p,b[]={"1227"};

p=b;

c(a,p);

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

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

}

#include

voidcopy(char*p,char*p1)

{inti=0;

for(i=0;*(p+i)!

='\0';i++,p++,p1++)//不定义p也能用指针,用*(a+i)代替,遇到'\0'就跳出结束输出

{*p1=*p;}

*p1='\0';

}

main()

{chara[]={"im"},b[]="in",*p,*p1;//b[]在定义时候一定要知道大小

p=a;

p1=b;

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

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

printf("覆盖b数组后:

\n");

copy(p,p1);

//printf("%s\n",a);

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

}

指向函数的指针变量

题目:

输出a,b两个最大值

#include

intmax(inta,intb)

{intz;

if(a>b)

z=a;

else

z=b;

return(z);

}main()

{int(*p)(int,int);//这些都是必须要有的inta=2,b=4,c;

p=max;

c=(*p)(2,4);

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

}

题目:

输入1,2,3选择调用哪个程序#include

intfun(intx,inty,int(*p)(int,int))//学会用fun函数的功能

{intr;

r=(*p)(x,y);

return(r);

}

intmax(inta,intb)

{intz;

if(a>b)z=a;

elsez=b;

return(z);

}

intmin(inta,intb)

{intz;

if(a>b)z=b;

elsez=a;

return(z);

}

intsum(inta,intb)

{intz;

z=a+b;

return(z);

}

main()

{inta=2,b=4,c,n;

printf("用户输入选择是:

");

scanf("%d\n",&n);

if(n==1)

c=fun(2,4,sum);

if(n==2)

c=fun(2,4,max);//只要写函数名就可以了

if(n==3)

c=fun(2,4,min);

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

}

被调用的指针函数返回指针值如下:

题目:

有3个同学,每一个学生有3门成绩,任意输入一个学生序号(序号从0开始),输出该生的所有成绩

#include//指针函数定义套用格式

int*c(int(*p1)[3],intn)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

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

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