下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 最新整理最新整理c指针练习题含答案

最新整理最新整理c指针练习题含答案.doc

最新整理最新整理c指针练习题含答案

小喵喵苗芯
2018-01-05 0人阅读 举报 0 0 暂无简介

简介:本文档为《最新整理最新整理c指针练习题含答案doc》,可适用于战略管理领域

最新整理最新整理c指针练习题含答案C指针练习题总结使用的编译软件是visualc软件。练习的结果还没仔细检测对程序的质量还待考虑。对指针的程序还没很好理解先了解指针的含义及格式。及理解指针的灵活之处多上机做题培养指针的思维方式。在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中寄存器(Register)。指针一般出现在比较近机器语言的语言如汇编语言或C语言。面向对象的语言如Java一般避免用指针。指针一般指向一个函数或一个变量。在使用一个指针时一个程序既可以直接使用这个指针所储存的内存地址又可以使用这个地址里储存的变量或函数的值。*和两个地方要注意:在程序声明变量的时候的*只是表明“它是一个整数这个整数指向某个内存地址一次访问sizeof(type)长度”。这点不要和(*)操作符混淆在C程序声明变量的时候的只是表明“它是一个引用这个引用声明时不开辟新空间它在内存分配表加入新的一行该行内存地址等于和调用时传入的对应参数内存地址”。这点不要和(*)声明符()操作符混淆。双重指针(指向指针的指针)指针数组:就是一个整数数组那个数组的各个元素都是整数指向某个内存地址。数组指针:数组名本身就是一个指针指向数组的首地址。注意这是一个常数。指向函数的指针:从二进制角度考虑数组名是该数组数据段首地址函数名就是该代码段的首地址可以用“int*fun()”。在二进制层面代码段和数据段什么区别,没什么区别。题输入三个整数按由大到小的顺序输出#include<stdioh>voidmain(){voidswap(int*p,int*p)intn,n,nint*p,*p,*pprintf("inputthreeintergern,n,n")scanf("d,d,d",n,n,n)p=np=np=nif(n>n)swap(p,p)if(n>n)swap(p,p)if(n>n)swap(p,p)printf("Now,theorderis:d,d,dn",n,n,n)}voidswap(int*p,int*p){inttemptemp=*p*p=*p*p=temp}题*输入三个字符串按由小到大的顺序输出*#include<stdioh>#include<stringh>voidmain(){voidswap(char*,char*)charstr,str,strprintf("inputthreeline:n")gets(str)gets(str)gets(str)if(strcmp(str,str)>)swap(str,str)if(strcmp(str,str)>)swap(str,str)if(strcmp(str,str)>)swap(str,str)printf("Now,theorderis:n")printf("snsnsn",str,str,str)}voidswap(char*p,char*p){charpstrcpy(p,p)strcpy(p,p)strcpy(p,p)}题*输入个整数将其中最小的数和第一个数对换把最大的数与最后一个数对换。编写三个程序、输入十个数进行处理输出十个数*#include<stdioh>voidmain(){voidinput(int*)voidmaxminvalue(int*)voidoutput(int*)intnumberinput(number)maxminvalue(number)output(number)}voidinput(int*number){intiprintf("inputnumbers:")for(i=i<i)scanf("d",numberi)}voidmaxminvalue(int*number){int*max,*min,*p,tempmax=min=numberfor(p=numberp<numberp)if(*p>*max){max=ptemp=numbernumber=*max*max=temp}elseif(*p<*min){min=ptemp=numbernumber=*min*min=temp}}voidoutput(int*number){int*pprintf("Now,theyare:")for(p=numberp<numberp)printf("d",*p)printf("n")}题*有n个整数使其前面各数顺序向后移m个位置最后M个数变成最前面m个数*#include<stdioh>voidmain(){voidmove(int,int,int)intnumber,n,m,iprintf("howmanynumber")scanf("d",n)printf("inputdnumbers:",n)for(i=i<ni)scanf("d",numberi)printf("howmanyplaceyouwantmove")scanf("d",m)move(number,n,m)printf("Now,theyare:n")for(i=i<ni)printf("d",numberi)printf("n")}voidmove(intarry,intn,intm)循环后移一次函数{int*p,arryendarryend=*(arryn)for(p=arrynp>arryp)*p=*(p)*arry=arryendmif(m>)move(arry,n,m)}题*有n个人围城一圈。从第一个人开始报数(从到报数)凡报到的人退出圈子问最后留下的是原来的第几号的那个人*#include<stdioh>voidmain(){inti,k,m,n,num,*pprintf("inputnumberofperson:n=")scanf("d",n)p=numfor(i=i<ni)*(p)=i以至n为序给每人编号i=k=m=while(m<n)当退出人数比n少时执行循环体{if(*(pi)!=){k}if(k==){*(pi)=k=m}iif(i==n)i=报数到尾后i恢复为}while(*p==)pprintf("ThelastoneisNdn",*p)}题*编写一个函数求一个字符串的长度。在main函数中输入字符串并输出其长度*#include<stdioh>voidmain(){intlength(char*p)intlencharstrprintf("inputstring:")scanf("s",str)len=length(str)printf("Thelengthofstringisdn",len)}intlength(char*p)求字符串的长度{intn=while(*p!=''){np}return(n)}题*有一字符串包含n个字符。编写一个函数将此字符串中从第m个字符开始的全部字符复制成为另一个字符串*#include<stdioh>#include<stringh>voidmain(){voidcopystring(char*,char*,int)intmcharstring,stringprintf("inputstring:")gets(string)printf("whichcharacterthatbegintocopy")scanf("d",m)if(strlen(string)<m){printf("inputerror!")}else{copystring(string,string,m)printf("result:sn",string)}}voidcopystring(char*p,char*p,intm)字符串复制函数{intn=while(n<m){np}while(*p!=''){*p=*ppp}*p=''}题*输入一行文字找出其中大写字母小写字母空格数字以其他的字符各有多少,*#include<stdioh>voidmain(){intupper=,lower=,digit=,space=,other=,i=char*p,sprintf("inputstring:")while((si=getchar())!='n')ip=swhile(*p!='n'){if(('A'<=*p)(*p<='Z'))upperelseif(('a'<=*p)(*p<='z'))lowerelseif(*p=='')spaceelseif((*p<='')(*p>=''))digitelseotherp}printf("uppercase:dlowercase:d",upper,lower)printf("space:ddigit:dother:dn,",space,digit,other)}题*编写一个函数将一个×的矩阵转置*#include<stdioh>#include<iostreamh>usingnamespacestdvoidmain(){voidmove(intpointer)inta,i,jprintf("inputmatrix:n")for(i=i<i)scanf("ddd",ai,ai,ai)p=amove(a)printf("Now,matrix:n")for(i=i<i){for(intj=j<j)cout<<aij<<'t'cout<<endlfor(j=j<j){printf("dt",aij)}printf("n")}}voidmove(intpointer)矩阵转置{inti,j,tfor(i=i<i)for(j=ij<j){t=pointerijpointerij=pointerjipointerji=t}}题*将一个×的矩阵中最大的元素放在中心个角分别放个最小的元素(顺序为从坐到右从上到下顺序依次从小到大存放)编写一个函数实现之用main函数调用*#include<stdioh>voidmain(){voidchange(int*)inta,*p,i,jprintf("inputmartix:n")for(i=i<i){for(j=j<j)scanf("d",aij)}p=achange(p)printf("Now,martix:n")for(i=i<i){for(j=j<j)printf("d",aij)printf("n")}}voidchange(int*p)交换函数的实现{inti,j,tempintpmax,pminint*pmax,*pminpmax=ppmin=ppmax=apmin=afor(i=i<i)寻找最大值和最小值{for(j=ij<j){if(*pmax<*(p*ij))if(pmax<aij)pmax=p*ijpmax=aijif(*pmin>*(p*ij))if(pmin)>aijpmin=p*ijpmin=aij}}temp=*(p)最大值换给中心元素*(p)=*pmax*pmax=temptemp=*p*p=*pmin*pmin=temppmin=pfor(i=i<i)for(j=j<j){if(((p*ij)!=p)(*pmin>*(p*ij)))pmin=p*ij}temp=*pmin*pmin=*(p)*(p)=temppmin=pfor(i=i<i)for(j=j<j){if(((p*ij)!=(p)(p*ij)!=p)(*pmin>*(p*ij)))pmin=p*ij}temp=*pmin*pmin=*(p)*(p)=temppmin=pfor(i=i<i)for(j=j<j){if(((p*ij)!=p)((p*ij)!=(p))((p*ij)!=(p))(*pmin>*(p*ij)))pmin=p*ij}temp=*pmin*pmin=*(p)*(p)=temp}题*在主函数中输入个等长的字符串。用另一个函数对他们排序。然后在主函数输出这个个已排好序的字符串*#include<stdioh>#include<stringh>voidmain(){voidsort(char(*p))inticharstrchar(*p)printf("inputstrings:n")for(i=i<i)scanf("s",stri)p=strsort(p)调用sort函数printf("Now,thesequenceis:n")for(i=i<i)printf("sn",stri)}voidsort(char(*s))指向由个元素组成的一维数组的指针{inti,jchartemp,*t=tempfor(i=i<i)for(j=j<ij){if(strcmp(sj,sj>)){strcpy(t,sj)strcpy(sj,sj)strcpy(sj,t)}}}题*用指针数组处理上一题目字符串不等长*#include<stdioh>#include<stringh>voidmain(){voidsort(char*)intichar*p,strfor(i=i<i)pi=stri将第i个字符串的首地址赋予指针组p的第i个元素printf("inputstrings:n")for(i=i<i)scanf("s",pi)sort(p)printf("Now,thesequenceis:n")for(i=i<i)printf("sn",pi)}voidsort(char*s){inti,jchar*tempfor(i=i<i)for(j=j<ij){if(strcmp(*(sj),(sj))>){temp=*(sj)*(sj)=*(sj)*(sj)=temp}}}题*编写一个用矩形法求定积分的通用函数*#include<stdioh>#include<mathh>voidmain(){floatintegral(float(*p)(float),float,float,int)floatfsin(float)floatfcos(float)floatfexp(float)floata,b,a,b,a,b,c,(*p)(float)intn=printf("inputa,b:")scanf("f,f",a,b)printf("inputa,b:")scanf("f,f",a,b)printf("inputa,b:")scanf("f,f",a,b)p=fsinc=integral(p,a,b,n)printf("theintegralsin(x)=fn",c)p=fcosc=integral(p,a,b,n)printf("theintegralcos(x)=fn",c)p=fexpc=integral(p,a,b,n)printf("theintegralexp(x)=fn",c)}floatintegral(float(*p)(float),floata,floatb,intn){intifloatx,h,sh=(ba)nx=as=for(i=i<=ni){x=xhs=s(*p)(x)*h}return(s)}floatfsin(floatx){returnsin(x)}floatfcos(floatx){returncos(x)}floatfexp(floatx){returnexp(x)}题*将n个数输入时顺序的逆序排列用函数实现*#include<stdioh>voidmain(){voidsort(char*p,intm)inti,nchar*p,numprintf("inputn:")scanf("d",n)printf("inputthesenumbers:n")for(i=i<ni)scanf("d",numi)p=numsort(p,n)printf("Now,thesequenceis:n")for(i=i<ni)printf("d",numi)printf("n")}voidsort(char*p,intm){intichartemp,*p,*pfor(i=i<mi){p=pip=p(mi)temp=*p*p=*p*p=temp}}题*有一个班的个学生有门课程。、求第一门课的平均分、找出有两门以上课程不及格的学生输出他们的学号和全部课程成绩及平均分、找出平均分在分以上或全部课程成绩在分以上的学生。分别编写三个函数来实现以上三个要求*#include<stdioh>voidmain(){voidavsco(float*,float*)voidavcour(char(*),float*)voidfali(charcourse,intnum,float*pscor,floataver)voidgood(charcourse,intnum,float*pscor,floataver)inti,j,*pnum,numfloatscore,aver,*pscore,*pavercharcourse,(*pcourse)printf("inputcourse:n")pcourse=coursefor(i=i<i)scanf("s",coursei)printf("inputNoandscorse:n")printf("No")for(i=i<i)printf(",s",coursei)printf("n")pscore=scorepnum=numfor(i=i<i){scanf("d",pnumi)for(j=j<j)scanf("f",pscore*ij)}paver=averprintf("nn")avsco(pscore,paver)avcour(pcourse,pscore)printf("nn")fali(pcourse,pnum,pscore,paver)printf("nn")good(pcourse,pnum,pscore,paver)}voidavsor(float*pscore,float*paver)求每个学生的平均成绩的函数{inti,jfloatsum,averagefor(i=i<i){sum=for(j=j<j)sum=sum(*(pscore*ij))average=sum*(paveri)=average}}voidavcour(char(*pcourse),float*pscore)求第一课程的平均成绩的函数{intifloatsum,averagesum=for(i=i<i){sum=sum(*(pscore*i))average=sumprintf("course:s,averagecourse:fn",*pcourse,average)}}voidfali(charcourse,intnum,float*pscore,floataver)找两门以上的课程不及格的学生的函数{inti,j,k,labelprintf("=============studetwhoisfail=======================n")printf("No")for(i=i<i)printf("s",coursei)printf("averagen")for(i=i<i){label=for(j=j<j)if(*(pscore*ij)<){label}if(label>=){printf("d",numi)for(k=k<k)printf("f",*(pscore*ij))printf("fn",averi)}}}voidgood(charcourse,intnum,float*pscore,floataver)找成绩优秀学生(各门以上或平均分以上)的函数{inti,j,k,nprintf("=========studentswhosescoreisgood==================n")printf("No")for(i=i<i)printf("s",coursei)printf("averagen")for(i=i<i){n=for(j=j<j)if(*(pscore*ij)>)nif((n==)||(averi)>=){printf("d",numi)for(k=k<k)printf("f",*(pscore*ij))printf("fn",averi)}}}题*输入一个字符串内有数字和非数字字符。例如:ax,tab将其中连续的数字作为一个整数依次存放到数组的a中例如放到a,放到a统计其共有多少个整数并输出这些数*#include<stdioh>voidmain(){charstr,*pstrinti,j,k,m,e,digit,ndigit,a,*paprintf("inputastring:n")gets(str)pstr=str字符指针pstr置于数组str首地址pa=a指针pa置于a数组的首地址ndigit=ndigit代表有多少个整数i=j=while(*(pstri)!=''){if((*(pstri)>='')(*(pstri)<=''))jelse{if(j>){digit=*(pstri)将个数位赋予digitk=while(k<j)将含有两位以上数的其他位的数值累计于digit{e=for(m=m<=km)e=e*e代表该位数所应乘的因子digit=digit(*(pstrik))*ek位数k自增}*pa=digit将数值赋予数组andigitpa数组pa指向a数组下一元素j=}}i}if(j>)以数字结尾字符串的最后一个数据{digit=*(pstri)将个数位赋予digitk=while(k<j)将含有两位以上数的其他的数值累加于digit{e=for(m=m<=km)e=e*digit=digit(*(pstrik))*ek}*pa=digit将数值赋予数组andigitj=}printf("TherearednumbersinthislineTheyare:n",ndigit)j=输出数组pa=afor(j=j<ndigitj)printf("dn",*(paj))printf("n")}题*编写一个函数实现两个字符串的比较*#include<stdioh>voidmain(){intstrmp(char*p,char*p)intmcharstr,str,*p,*pprintf("inputtwostrings:n")scanf("s",str)scanf("s",str)p=strp=strm=strcmp(p,p)printf("result:dn",m)}intstrcmp(char*p,char*p){intii=while(*(pi)==*(pi)){if(*(pi)=='')return()}return(*(pi)*(pi))}题*编写一个程序打入月份号输出该月份的英文月名*#include<stdioh>voidmain(){char*monthname={"illegalmonth","January","February","March","April","May","June","July","August","Spetember","October","November","December"}intnprintf("inputmonth:n")scanf("d",n)if((n<=)(n>=))printf("Itissn",*(monthnamen))elseprintf("Itiswrongn")}题*用指向指针的指针的方法对个字符串排序并输出*#include<stdioh>#include<stringh>#defineLINEMAXvoidmain(){voidsort(char**p)intichar**p,*pstr,strLINEMAXfor(i=i<i)pstri=striprintf("inputstrings:n")for(i=i<i)scanf("s",pstri)p=pstrsort(p)printf("stringssorted:n")for(i=i<i)printf("sn",pstri)}voidsort(char**p){inti,jchar*tempfor(i=i<i){for(j=j<j){if(strcmp(*(pi),*(pj))>){temp=*(pi)*(pi)=*(pj)*(pj)=temp}}}}题*用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写一个函数n和整数在主函数中输入最后在主函数中输出*#include<stdioh>voidmain(){voidsort(int**p,intn)inti,n,digit,**p,*pstrprintf("inputn:")scanf("d",n)for(i=i<nn)pstri=digitiprintf("inputdintergernumbers:n",n)for(i=i<nn)scanf("d",pstri)p=pstrsort(p,n)printf("Now,thesequenceis:n")for(i=i<nn)printf("d",*pstri)printf("n")}voidsort(int**p,intn)指针排序{inti,j,*tempfor(i=i<nn){for(j=ij<nj){if(**(pi)>**(pj)){temp=*(pi)*(pi)=*(pj)*(pj)=temp}}}}

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/34

最新整理最新整理c指针练习题含答案

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利