C语言指针习题和答案.doc
《C语言指针习题和答案.doc》由会员分享,可在线阅读,更多相关《C语言指针习题和答案.doc(21页珍藏版)》请在咨信网上搜索。
一、用指针方法编写一个程序,输入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("%d,%d,%d",a,b,c); } 二、C语言 用指针方法 输入3个字符串 按由小到大顺序输出 #include "stdio.h" #include "string.h" int main(int argc, char* argv[]) { char *t; char *p1=NULL,*p2=NULL,*p3=NULL; char ch1[20]={0},ch2[20]={0},ch3[20]={0}; p1=ch1; p2=ch2; p3=ch3; printf("No1:"); scanf("%s",p1); fflush(stdin); printf("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("%s\n%s\n%s\n",p1,p2,p3); return 0; } 9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数 #include<stdio.h> void main() { int a=0,b=0,c=0,d=0,e=0,i=0; char *p,s[20]; while((s[i]=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'&&*p<='9') d++; else e++; p++; } printf("大写字母 %d 小写字母 %d\n",a,b); printf("空格 %d 数字 %d 非字符 %d\n",c,d,e); } 9.5写一个函数,将3 3矩阵转置 #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); *(*(matrix+j)+i) = *(*(matrix+i)+j); *(*(matrix+i)+j) = temp; } } } void main() { int a[3][3] = {{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 ",a[i][j]); } printf("\n"); } } } 9.6用指向一维数组的指针做函数参数 #include<stdio.h> #include<string.h> int main() { void sort(char (*s)[6]);//一维数组的指针做函数参数 int i; char str[10][6]; char (*p)[6];//定义一维数组的指针做函数参数 printf("please input string:/n"); for(i=0;i<10;i++) scanf("%s",&str[i]); p=str;//将str一维数组指针,赋值给p; sort(p); printf("the output sequence :/n"); for(i=0;i<10;i++) printf("%s/n",str[i]); return 0; } void sort(char (*s)[6])//s指向一维数组的指针做函数参数; { int i,j; char temp[6], *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(s[j],s[j+1])>0) { strcpy(t,s[j]); strcpy(s[j],s[j+1]); strcpy(s[j+1],t); } } 9.7编一程序,用指针数组在主函数中输入十个等长的字符串。用另一函数对它们排序,然后在主函数中输出10个已排好序的字符串 //用指针数组处理 #include<stdio.h> #include<string.h> int main() { void sort(char *[]); int i; char str[10][6], *p[10]; printf("please input 10 string:/n"); for(i=0;i<10;i++)//首先将10个str的首地址赋值给10个p[i]; p[i]=str[i];//将第i个字符串的首地址赋予指针数组p的第i个元素; for(i=0;i<10;i++) scanf("%s",p[i]);//scanf输入到&p[i] sort(p); printf("the output 10 string:/n"); for(i=0;i<10;i++) printf("%s/n",p[i]);//输出到p[i]; } 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个数按输入时顺序的逆序排列,用函数实现 #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 a[20],n; int i; printf("Input the length of array:"); scanf("%d",&n); printf("Input the number of array:"); for(i=0;i<n;i++) scanf("%d",&a[i]); 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(char *p1,char *p2); int m; char str1[20],str2[20],*p1,*p2; printf("Input two strings:\n"); scanf("%s",str1); scanf("%s",str2); p1=&str1[0]; p2=&str2[0]; m=strcmp(p1,p2); printf("result: %d\n",m); } int strcmp(char *p1,char *p2) /*两个字符串比较的函数*/ { int i; i=0; while(*(p1+i)==*(p2+i)) if(*(p1+i++)=='\0') return(0); /*相等时返回结果0*/ return(*(p1+i)-*(p2+i)); /*不等时返回结果为第一个不等字符ASCII码的差值*/ } 运行情况如下: ① Input two strings: CHINA↙ Chen↙ Result: -32 ② Input two strings: hello! ↙ Hello! ↙ Result: 0 ③ Input two stings: dog↙ cat↙ result: 1 9.10编一个程序,打入月份号,输出该月的英文月名。例如,输入“3”,则输出“March”,要求用指针数组处理。 #include <stdio.h> main() { char *month_name[13]={"illegal month","January","February","March","April", "May","June","July","August","September","October","November","December"}; int n; printf("Input month: "); scanf("%d",&n); if((n<=12)&&(n>=1)) printf("It is %s.\n",*(month_name+n)); else printf("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 32 int main() { char str[MAX_LENGTH] = {0}; char *pStr = (char*)&str; //1. 将字符串computer赋给一个字符数组 strcpy(str, "computer"); //2. 然后从第一个字母开始间隔地输出该串 while(*pStr != '\0' ) { printf("%c\n", *pStr); pStr++; } return 1; } 9.12从键盘上输入一个字符串,按后按照下面要求输出一个新字符串, 新的字符串是在原来字符串中, 每两个字符之间插入一个空格, 如原来的字符串为“abcd”, 新产生的字符串应为“a b c d” 编写一个程序咯 用C 就是输出的字符 是 每两个字符之间有一个空格 #include<stdio.h> void main() { char a[10],b[10],i=0,j=0; printf("输出字符串"); scanf("%s",a);// abcdef for(i=0;a[i]!='\0';i++) { b[j++]=a[i]; b[j++]=' '; } b[j]='\0'; printf("%s",b); } 9.13设有一数列,包含10 个数,已按升序排好。现要求编一程序,它能够把从指定位置开始的n个数按逆序重新排列并输出新的完整数列。进行逆序处理时要求使用指针方法(例如:原数列为2,4,6,8,10,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 int[m]; p=p+n-1; for(int i=0;i<m;i++) { q[i]=*p; p++; } p=p-m; for(i=0;i<m;i++) { *p=q[m-1-i]; p++; } } int main() { int a[10]={2,4,6,8,10,12,14,16,18,20}; method(4,5,a); for(int i=0;i<10;i++) { cout<<a[i]<<' '; } 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 s[100]={0}; char t[100]={0}; int n=0; printf("input string s:\n"); scanf("%s",s); printf("input start n:\n"); scanf("%d",&n); strcpyn(s,t,n); puts(t); } - 实验10 1. 设计函数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 char[100]; 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 *s1,char *s2) {char *p=s2; while((*s1)!='\0') { *s2=*s1; s1++,s2++; } return p; } void main(void) { char *p,*strcpy; char *s1="world cup!"; char *s2="good luck!"; printf("s1=%s\ns2=%s\n",s1,s2); p=fun(s1,s2); printf("s1=%s\ns2=%s\n",s1,s2) } 实验9 1. 编写一个使用指针的c函数,交换数组a和数组b中的对应元素 #include<stdio.h> #include<stdlib.h> void ex(int *a, int *b, int n){ int i,tmp; for (i=0;i<n;i++){ tmp=a[i];a[i]=b[i];b[i]=tmp; } } void main() { int x[5]={1,2,3,4,5}; int y[5]={6,7,8,9,10}; int i,n=5; ex(x,y,n); printf("\n X: "); for (i=0;i<n;i++)printf("%d ",x[i]); printf("\n Y: "); for (i=0;i<n;i++)printf("%d ",y[i]); system("pause"); }欢迎您的光临,Word文档下载后可修改编辑.双击可删除页眉页脚.谢谢!你的意见是我进步的动力,希望您提出您宝贵的意见!让我们共同学习共同进步!学无止境.更上一层楼。 .. ..- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 指针 习题 答案
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文