指针类编程题
来源:互联网 发布:sublime text mac破解 编辑:程序博客网 时间:2024/05/17 08:47
1.编写一函数,完成一个字符串的拷贝,要求用字符指针实现。在主函数中输入任意字符串,并显示原字符串,调用该函数之后输出拷贝后的字符串。
#include<stdio.h>#include<string.h>void my_copy(char *p,char *q){ while(*p != '\0') { *q = *p; q++; p++; } *q = '\0';}int main(int argc, const char *argv[]){ char str1[100],str2[100]; gets(str1); puts(str1); my_copy(str1,str2); puts(str2); return 0;}
2.编写一函数,求一个字符串的长度,要求用字符指针实现。在主函数中输入字符串,调用该函数输出其长度。
#include<stdio.h>#include<string.h>int my_strlen(char *p){ int tot=0; while(*p != '\0') { tot++; p++; } return tot+1; //包含 '\0'}int main(int argc, const char *argv[]){ char str[100]; gets(str); printf("tot:%d\n",my_strlen(str)); return 0;}
3.从键盘上输入10个数据到一维数组中,然后找出数组中的最大值和该值所在的元素下标。
#include<stdio.h>int max(int *p){ int max; int i,j; int index; for(i=0;i<9;i++) { max = *(p+i); index = i; for(j=1;j<10;j++) { if(max < *(p+j)) { max = *(p+j); index = j; } } } return index;}int min(int *p){ int min; int i,j; int index; for(i=0;i<10;i++) { min = *(p+i); index = i; for(j=1;j<10;j++) { if(min > *(p+j)) { min = *(p+j); index = j; } } } return index;}int main(int argc, const char *argv[]){ int a[10]; int i; for(i=0;i<10;i++) { scanf("%d",&a[i]); } printf("max下标:%d,min下标:%d\n",max(a),min(a)); return 0;}
4.从键盘上输入10个整数存放到一维数组中,将其中最小的数与第一个数对换,最大的数与最后一个数对换。要求进行数据交换的处理过程编写成一个函数,函数中对数据的处理要用指针方法实现。输入数据为:35,20,94,-23,39,-56,100,87,49,12.
#include<stdio.h>void max(int *p){ int max,temp; int i,j; int index; for(i=0;i<9;i++) { max = *(p+i); index = i; for(j=1;j<10;j++) { if(max < *(p+j)) { max = *(p+j); index = j; } } } temp = *(p + index); *(p + index) = *(p + 9); *(p + 9) = temp;}void min(int *p){ int min,temp; int i,j; int index; for(i=0;i<10;i++) { min = *(p+i); index = i; for(j=1;j<10;j++) { if(min > *(p+j)) { min = *(p+j); index = j; } } } temp = *(p + index); *(p + index) = *(p + 0); *(p + 0) = temp;}int main(int argc, const char *argv[]){ int a[10]; int i; for(i=0;i<10;i++) { scanf("%d",&a[i]); } min(a); max(a); for(i=0;i<10;i++) { printf("%d\t",a[i]); } printf("\n"); return 0;}
5.编写一个函数(参数用指针)将一个3×3矩阵转置。
#include<stdio.h>void zhuanzhi(int (*p)[3],int (*q)[3]){ int i,j,k; for(i=0;i<3;i++) { for(j=0;j<3;j++) { for(k=0;k<3;k++) { *(*(q+i)+k) = *(*(p +k) + i); } } }}int main(int argc, const char *argv[]){ int a[3][3],b[3][3]; int i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) { scanf("%d",&a[i][j]); } } zhuanzhi(a,b); for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("%d ",b[i][j]); } } printf("\n"); return 0;}
6.利用指向行的指针变量求5×3数组各行元素之和
#include<stdio.h>void my_tot(int (*p)[3]){ int tot; int i,j; for(i=0;i<5;i++) { tot = 0; for(j=0;j<3;j++) { tot += *(*(p+i) + j); } printf("第%d行元素之和为:%d\n",i+1,tot); }}int main(int argc, const char *argv[]){ int a[5][3]; int i,j; for(i=0;i<5;i++) { for(j=0;j<3;j++) { scanf("%d",&a[i][j]); } } //printf("tot:%d\n",my_tot(a)); my_tot(a); return 0;}
7.从键盘上输入10个整数存放到一维数组中,用函数实现将10个整数按输入时的顺序逆序排列,函数中对数据的处理要用指针方法实现。
#include<stdio.h>void my_nixu(int *head,int *tail){ char temp; while(head < tail) { temp = *head; *head = *tail; *tail = temp; head ++; tail --; }}int main(int argc, const char *argv[]){ int a[10]; int i; int *head,*tail; for(i=0;i<10;i++) { scanf("%d",&a[i]); } head = &a[0]; tail = &a[9]; my_nixu(head,tail); for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); return 0;}
8.用指针法编程,从键盘上输入多个字符串(每个串不超过5个字符且没有空格),用”*”作为输入结束的标记。从所输入的若干字符串中,找出一个最大的串,并输出该串。要求串的输入以及最大串的查找通过调用编写的函数实现。
#include<stdio.h>#include<string.h>int main(int argc, const char *argv[]){ //通过调用系统库函数来写的 char s[6]; char max[6]; gets(s); strcpy(max,s); while(1) { gets(s); if(strncmp(s,"*****",5) == 0) break; if(strcmp(max,s) < 0) strcpy(max,s); } printf("%s\n",max); return 0;}
9、编写一个函数,函数的功能是移动字符串中的内容。移动的规则如下:把第1到第m个字符,平移到字符串的最后;再把第m+1到最后的字符移动到字符串的前部。例如,字符串中原由的内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是DEFGHIJKABC。在主函数中输入一个长度不大于20的字符串和平移的值m,调用函数完成字符串的平移。要求用指针方法处理字符串。
#include<stdio.h>#include<string.h>void fun(char *head,char *tail,char *p,int m,int n){ int i; for(i = 0;i < n-m-1 ;i ++) //去掉 '\0' 的位置 { *p = *(tail+i); p++; } for(i = 0;i < m;i++) { *p = *(head + i); p++; } *p = '\0';}int main(int argc, const char *argv[]){ char str1[20],str2[40]; int m,n; char *head,*tail; gets(str1); n = strlen(str1); scanf("%d",&m); head = str1 + 0; tail = str1 + m; fun(head,tail,str2,m,n); puts(str2); return 0;}
10、输入一个长度不大于30的字符串,将此字符串中从第m个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针方法处理字符串。
#include<stdio.h>#include<string.h>void my_copy(char *p,char *q,int m,int n){ int i; for(i = m - 1;i < n;i ++) { *q = *(p + i); q++; } *q = '\0';}int main(int argc, const char *argv[]){ char str1[30],str2[30]; int m,n ; gets(str1); scanf("%d",&m); n = strlen(str1); my_copy(str1,str2,m,n); puts(str2); return 0;}
- 指针类编程题
- 指针编程题
- C++编程实例-类与指针
- 指针编程之道
- 指针编程艺术
- 面向指针编程
- 面向指针编程
- #文件编程#------文件类型指针
- 面向指针编程
- 面向指针编程
- 指针编程错误
- 菜鸟编程 指针初步
- 菜鸟编程 指针初步
- 2011华为编程大赛第一道题 指针常量与常量指针
- 编程练习思考[4]---从一道两年前的指针题再理解理解指针
- 上海华为的一道关于指针方面的编程题
- C与指针第八章数组编程练习第四题
- 上海华为的一道关于指针方面的编程题
- C++搜索与回溯算法之单词接龙
- 传输链路异常倒换导致组播业务直播频道黑屏现象
- [2017-7-9]英语语法学习
- java运算符与自动类型转换
- POJ1323 Game Prediction(贪心)
- 指针类编程题
- Android Activity 横竖屏切换的生命周期
- 网络学习笔记(开篇)
- DP? HDU
- CSS3边框和圆角
- 02读书笔记之创建android studio项目及线性布局
- 面试题 19: 数的镜像
- 线程调度
- 【代码生成】java-swing代码生成器分享