C语言指针精选习题和答案_第1页
C语言指针精选习题和答案_第2页
C语言指针精选习题和答案_第3页
C语言指针精选习题和答案_第4页
C语言指针精选习题和答案_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、用指针方法编写一个程序,输入 3个整数,将它们按由小到大的顺序输出#include <stdio.h>void swap(int *pa,int *pb)(int temp;temp = *pa;*pa = *pb;*pb = temp;void main()(int a,b,c,temp;scanf("%d%d%d",&a,&b,&c);if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf(&q

2、uot;%d,%d,%d,a,b,c);二、C语言用指针方法输入3个字符串按由小到大顺序输出#include "stdio.h"#include "string.h"int main(int argc, char* argv)(char *t;char *p仁NULL,*p2=NULL,*p3=NULL;char ch120=0,ch220=0,ch320=0;p1=ch1;p2=ch2;p3=ch3;printf("No1:");scanf("%s",p1);fflush(stdin);printf("

3、No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s,p3);fflush(stdin);if(strcmp(p1,p2)>0)(t=p1;p1=p2;p2=t;if(strcmp(p1,p3)>0)(t=p1;p1=p3;p3=t;if(strcmp(p2,p3)>0)(t=p2;p2=p3;p3=t;printf("%sn%sn%sn,p1,p2,p3);return 0;9.4 编程输入一行文字,找出其中的大写字母,小写字母,空格,数

4、字,及其他字符的个数#include<stdio.h>void main()(int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s20;while(si=getchar()!='n')i+;p=s;while(*p!=10)(if(*p>='A'&&*p<='Z')a+;else if(*p>='a'&&*p<='z')b+;else if(*p='')c+;else if(*p>='0'

5、&&*p<='9')d+;else e+;p+;printf("大写字母%d小写字母%dn",a,b);printf(" 空格 %d 数字 %d 非字符 %dn",c,d,e);)9.5 写一个函数,将33矩阵转置#include "stdio.h"void Transpose(int (*matrix)3)(int temp;int i, j;for(i=1;i<3;i+)/* 转置 */(for(j=0;j<i;j+)(temp = *(*(matrix+j)+i);*(*(mat

6、rix+j)+i) = *(*(matrix+i)+j);*(*(matrix+i)+j) = temp; void main()(int a33 = 1,2,3,4,5,6,7,8,9;Transpose(a);for(int i = 0;i<3;i+)for(int j=0;j<3;j+)printf("%d ",aij);printf("n");9.6 用指向一维数组的指针做函数参数#include<stdio.h> #include<string.h>int main()void sort(char (*s)6

7、);/维数组的指针做函数参数int i;char str106;char (*p)6;/定义一维数组的指针做函数参数printf("please input string:/n");for(i=0;i<10;i+)scanf("%s,&stri);p=str;/将str 一维数组指针,赋值给 p;sort(p);printf("the output sequence :/n");for(i=0;i<10;i+)printf("%s/n,stri);return 0;void sort(char (*s)6)/s指向

8、一维数组的指针做函数参数;int i,j;char temp6, *t;t=temp;for(i=0;i<9;i+)/i应该小于9;如果小于10,那么就比拟了 9+1次;根据冒泡法那么,for(j=0;j<9-i;j+)/第一次比拟需要 9次就是i=0到i=8共九次;第二次需要比拟 8次;依次 类推;if(strcmp(sj,sj+1)>0)strcpy(t,sj);strcpy(sj,sj+1);strcpy(sj+1,t);9.7 编一程序,用指针数组在主函数中输入十个等长的字符申.用另一函数对它们排序,然后在主函数中输出10个已排好序的字符申 用指针数组处理#inclu

9、de<stdio.h> #include<string.h>int main()(void sort(char *);int i;char str106, *p10;printf("please input 10 string:/n");for(i=0;i<10;i+)/首先将10个str的首地址赋值给10个pi;pi=stri;/将第i个字符串的首地址赋予指针数组p的第i个元素;for(i=0;i<10;i+)scanf("%s,pi);/scanf 输入到 &pisort(p);printf("the ou

10、tput 10 string:/n");for(i=0;i<10;i+)printf("%s/n",pi);/ 输出到 pi;void sort(char *s)(char *temp;int i,j;for(i=0;i<9;i+)for(j=0;j<9-i;j+)if(strcmp(*(s+j),*(s+j+1)>0)(temp=*(s+j);/*(s+j)指向数组指针,我想应该是字符串的首地址;所以可以直接赋值给temp指针;*(s+j)=*(s+j+1);*(s+j+1)=temp;9.8 指针将n个数按输入时顺序的逆序排列,用函数实

11、现#include <stdio.h>void reverse(int a,int n)( int *p;for(p=a+n-1;p>=a;p-)printf("%4d",*p);printf("n");main()( int a20,n;int i;printf("Input the length of array:");scanf("%d",&n);printf("Input the number of array:");for(i=0;i<n;i+)scan

12、f("%d",&ai);reverse(a,n);9.9 写一函数,实现两个字符串的比拟.即自己写一个 strcmp函数,函数原型为:int stremp(char *p1,char *p2)设p1指向字符串s1, p2指向字符串s2.要求:当s1=s2时,返回值为0.当s1不等于s2时,返回它们二者的第一个不同字符的ASCII码差值(如“BOY与“BAD,第二字母不同,“O与“A之差为79-65=14);如果s1>s2,那么输出正值;如果 s1<s2,那么输出负值.#include <stdio.h>main()( int strcmp(c

13、har *p1,char *p2);int m;char str120,str220,*p1,*p2;printf("Input two strings:n");scanf("%s",str1);scanf("%s,str2);p1=&str10;p2=&str20;m=strcmp(p1,p2);printf("result: %dn",m);/*两个字符申比拟的函数*/*相等时返回结果0*/不等时返回结果为第一个不等字符int strcmp(char *p1,char *p2) int i;i=0;whi

14、le(*(p1+i)=*(p2+i)if(*(p1+i+)='0') return(0);return(*(p1+i)-*(p2+i);/*ASCII码的差值*/运行情况如下: Input two strings:CHIN*Chen/Result: -32 Input two strings:hello! /Hello! /Result: 0 Input two stings:dog/cat /result: 19.10 编一个程序,打入月份号,输出该月的英文月名.例如,输入“3,那么输出“March, 要求用指针数组处理.#include <stdio.h>mai

15、n()( char *month_name13=("illegalmonth,Januaiy',Februaiy',March,April,May,June,July,August,September,October,November,D ecember"int n;printf("Input month:");scanf("%d",&n);if(n<=12)&&(n>=1)printf("It is %s.n",*(month_name+n);elseprint

16、f("It is wrong.n");运行结果: Input month: 2/It is February. Input month: 8 /It is August. Input month: 13 /It is wrong.9.11c 语言:将字符串computer赋给一个字符数组,然后从第一个字母开始 间&地输出该串.请用指针实现#include <stdio.h>#include <string.h>#define MAX_LENGTH 32int main()char strMAX_LENGTH = 0;char *pStr =

17、(char*)&str;/1.将字符申computer赋给一个字符数组strcpy(str, "computer");/2.然后从第一个字母开始间隔地输出该申while(*pStr != '0')printf("%cn, *pStr);pStr+;return 1;9.12从键盘上输入一个字符串,按后根据下面要求输出一个新字符串,新的字符串是在原来字符串中,每两个字符之间插入一个空格,如原来的字符串为“abcd;'新产生的字符串应为 "a b c d "编写一个程序咯用C就是输出的字符是每两个字符之间有一个空格#

18、include<stdio.h>void main()char a10,b10,i=0,j=0;printf("输出字符申");scanf("%s",a);/ abcdeffor(i=0;ai!='0'i+)bj+=ai;bj+=''bj='0'printf("%s",b);9.13 设有一数列,包含io个数,已按升序排好.现要求编一程序,它能够把从指定位置开始的n个数按逆序重新排列并输出新的完整数列.进行逆序处理时要求使用指针方法(例如:原数列为2, 4, 6, 8, 10

19、, 12, 14,16, 18, 20,假设要求把从第 4个数开始的5个数按逆序重新排列,那么得到新数列为2, 4, 6, 16, 14, 12, 10, 8,18, 20.)#include <iostream.h>void method(int n,int m,int *a)int *p=a,*q=new intm;p=p+n-1;for(int i=0;i<m;i+)qi=*p;p+;p=p-m;for(i=0;i<m;i+)*p=qm-1-i;p+;int main()int a10=2,4,6,8,10,12,14,16,18,20;method(4,5,a)

20、;for(int i=0;i<10;i+)cout<<ai<<''return 0;9.3有一字符串,包含n个字符.写一个函数,将此字符串从第 m个字符开始的全部字符复制成为另一个字符串并输出void strcpyn(char *s,char *t, int n)(char *p=s+n;char *q=t;while(*p)(*q=*p;q+;p+;*q='0'main()(char s100=0;char t100=0;int n=0;printf("input string s:n");scanf(&quo

21、t;%s,s);printf("input start n:n");scanf("%d",&n);strcpyn(s,t,n);puts(t);-实验101.设计函数char *insert(s1,s2,n),用指针实现在字符串s1中的指定位置n处插入 字符串s2#include <stdio.h>char* insert(char* s1,char* s2,int n)int j=0;char* ss=new char100;char* tsptr=ss;for(int i=0;i<n;i+)*ss+=*s1+;while(*s2!='0')*ss+=*s2+;while(*s1!='0')*ss+=*s1+;*ss='0'return tsptr;void main()char s1="123456789"char s2="1234"char* ss=insert(s1,s2,4);printf("%s",ss);2.利用指针完成字符串复制函数 char *strcpy(char *s1,char *s2)#include "stdio.h"char* fun(char

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论