五、C语言指针

编程入门 行业动态 更新时间:2024-10-12 12:30:25

五、C语言<a href=https://www.elefans.com/category/jswz/34/1768268.html style=指针"/>

五、C语言指针

  1. 使用指针实现字符串拷贝

#include <stdio.h>
void MyStrcpy(char *p,char *q){while(*q != '\0'){*p = *q;p++;q++;}*p = '\0';
}
int main(int argc, const char *argv[])
{char dest[20] = {0};char str[20] = {0};gets(str);MyStrcpy(dest,str);printf("%s\n",dest);return 0;
}

  1. 使用指针实现字符串比较

#include <stdio.h>
int MyStrcmp(char *p,char *q){int ret = 0;while(*q!='\0' && *p!='\0' && *p==*q){p++;q++;}ret = *p - *q;if(ret==0){printf("str1=str2\n");}else if(ret>0){printf("str1>str2\n");}else{printf("str1<str2\n");}
}
int main(int argc, const char *argv[])
{char str1[20] = {0};char str2[20] = {0};gets(str1);gets(str2);MyStrcmp(str1,str2);return 0;
}

  1. 使用指针实现计算单词的个数,返回单词的个数

#include <stdio.h>
int StrNum(char *p){int count = 0;while(*p!='\0'){if(*p==32){count++;}p++;}printf("单词个数为%d\n",count+1);
}
int main(int argc, const char *argv[])
{char s[32] = {0};gets(s);StrNum(s);return 0;
}

  1. 使用指针实现两个数的交换

#include <stdio.h>
void change(int *p,int *q){int temp = 0;temp = *p;*p = *q;*q = temp;printf("交换后%d %d\n",*p,*q);
}
int main(int argc, const char *argv[])
{int a=30;int b=20;change(&a,&b);return 0;
}

  1. 计算一维数组的最大值,并返回最大值

#include <stdio.h>
int My_max(int *p,int n){int max = *p;int i = 0;for(i=0;i<n;i++){if(max<*(p+i)){max = *(p+i);}}printf("max %d\n",max);
}
int main(int argc, const char *argv[])
{int arr[5] = {10,20,32,12,45};My_max(arr,5);return 0;
}

  1. 指针实现一维数组冒泡排序

#include <stdio.h>
void Bubble(int *p,int n){int i = 0;int j = 0;int temp = 0;for(i=0;i<n-1;i++){for(j=0;j<n-1;j++){if(*(p+j)>*(p+i)){temp = *(p+j);*(p+j) = *(p+i);*(p+i) = temp;}}}for(i=0;i<n;i++){printf("%d\t",*(p+i));}putchar(10);
}
int main(int argc, const char *argv[])
{int arr[5] = {20,30,23,43,65};Bubble(arr,5);return 0;
}

  1. 在命令行输入表达式,实现计算器功能(直接在主函数实现就行)

#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{int value1 = atoi(argv[1]);char oper = *argv[2];int value2 = atoi(argv[3]);float ret = 0;switch (oper){case '+':ret = value1 + value2;break;case '-':ret = value1 - value2;break;case '*':ret = value1 * value2;break;case '/':ret = (float)value1 / (float)value2;break;}printf("%d %c %d = %f\n",value1,oper,value2,ret);return 0;
}

  1. 使用指针计算每一列的和

#include <stdio.h>
void Sum(int (*p)[3],int line,int row){int i = 0,j = 0;int sum = 0;for(i=0;i<line;i++){sum = 0;for(j=0;j<row;j++){sum += *(*(p+i)+j);}printf("第%d行的和为%d\n",i+1,sum);}
}
int main(int argc, const char *argv[])
{int arr[2][3] = {0};int i = 0,j = 0;for(i=0;i<2;i++){for(j=0;j<3;j++){scanf("%d",&arr[i][j]);}}Sum(arr,2,3);return 0;
}

  1. 使用指针计算每行最大值,每列最小值

#include <stdio.h>
void My_max(int (*p)[3],int line,int row){int i = 0,j = 0;int max = 0;for(i=0;i<line;i++){max = *(*(p+i));for(j=0;j<row;j++){if(max<*(*(p+i)+j)){max = *(*(p+i)+j);}}printf("第%d行的最大值为%d\n",i+1,max);}
}
void My_min(int (*p)[3],int line,int row){int i = 0,j = 0;int min = 0;for(i=0;i<row;i++){min = *(*(p)+i);for(j=0;j<line;j++){if(min>*(*(p+j)+i)){min = *(*(p+j)+i);}}printf("第%d列的最小值为%d\n",i+1,min);}
}
int main(int argc, const char *argv[])
{int arr[2][3] = {1,2,3,4,5,6};int i = 0,j = 0;for(i=0;i<2;i++){for(j=0;j<3;j++){scanf("%d",&arr[i][j]);}}My_max(arr,2,3);My_min(arr,2,3);return 0;
}

  1. 计算二维数组的最大值,返回最大值

#include <stdio.h>
int Max(int (*p)[4],int line,int row){int i = 0,j = 0;int max = *(*(p));for(i=0;i<line;i++){for(j=0;j<row;j++){if(max<*(*(p+i)+j)){max = *(*(p+i)+j);}}}return max;
}
int main(int argc, const char *argv[])
{int arr[2][4] = {0};int i = 0,j = 0;for(i=0;i<2;i++){for(j=0;j<4;j++){scanf("%d",&arr[i][j]);}}int max = Max(arr,2,4);printf("最大值为%d\n",max);return 0;
}

  1. 杨辉三角,使用指针实现

#include <stdio.h>
void Yanghui(int (*p)[5],int n){int i = 0,j = 0;for(i=0;i<n;i++){for(j=0;j<n-i;j++){printf(" ");}for(j=0;j<i+1;j++){if(j==0 || i==j){*(*(p+i)+j) = 1;}else{*(*(p+i)+j) = *(*(p+i-1)+j-1) + *(*(p+i-1)+j);}printf("%2d",*(*(p+i)+j));}putchar(10);}
}
int main(int argc, const char *argv[])
{int s[5][5] = {0};Yanghui(s,5);return 0;
}

  1. 计算每一行的和

#include <stdio.h>
void Sum(int (*p)[3],int line,int row){int i = 0,j = 0;int sum = 0;for(i=0;i<line;i++){sum = 0;for(j=0;j<row;j++){sum += *(*(p+i)+j);}printf("第%d行的和为%d\n",i+1,sum);}
}            
int main(int argc, const char *argv[])
{int arr[3][3] = {0};int i =0,j = 0;for(i=0;i<3;i++){for(j=0;j<3;j++){scanf("%d",&arr[i][j]);}}Sum(arr,3,3);return 0;
}

  1. 二维数组转置: 行变列,列变行

#include <stdio.h>
void Transp(int (*p)[3],int line,int row){int temp = 0;int i = 0,j = 0;for(i=0;i<line;i++){for(j=0;j<row;j++){if(i!=j && i<j){temp = *(*(p+i)+j);*(*(p+i)+j) = *(*(p+j)+i);*(*(p+j)+i) = temp;}printf("%d\t",*(*(p+i)+j));}putchar(10);}
}
int main(int argc, const char *argv[])
{int arr[3][3] = {0};int i =0,j = 0;for(i=0;i<3;i++){for(j=0;j<3;j++){scanf("%d",&arr[i][j]);}}Transp(arr,3,3);return 0;
}

  1. 自定义函数,实现字符串连接

#include <stdio.h>
char *strcat(char *dest, char *src){while(*dest != '\0'){dest++;}while(*src != '\0'){*dest = *src;dest++;src++;}*dest = '\0';return dest;
}
int main(int argc, const char *argv[])
{char dest[20] = {0};char src[20] = {0};printf("请输入目标字符串");gets(dest);printf("请输入源字符串");gets(src);strcat(dest,src);printf("结果为%s\n",dest);return 0;
}

  1. 实现字符串的排序[升序、降序都实现][使用函数指针调用]

#include <stdio.h>
void sort(char *str,int n,int flag){int i = 0,j = 0;char temp = 0;if(flag==1){for(i=0;i<n-1;i++){for(j=0;j<n-1;j++){if(*(str+i)>*(str+j)){temp = *(str+i);*(str+i) = *(str+j);*(str+j) = temp;}}}}else{for(i=0;i<n-1;i++){for(j=0;j<n-1;j++){if(*(str+i)<*(str+j)){temp = *(str+i);*(str+i) = *(str+j);*(str+j) = temp;}}}}printf("%s\n",str);
}
int main(int argc, const char *argv[])
{char str[20] = {0};int flag = 0;printf("请输入要排序的字符串\n");gets(str);printf("升序为0,降序为1\n");scanf("%d",&flag);sort(str,5,flag);return 0;
}

  1. 使用字符数组指针指向二维字符数组,通过字符指针数组实现每个字符串的输出

#include <stdio.h>
void StrPrint(char *p[3],int n){int i = 0;while(i<n){printf("%s\n",*p);p++;i++;}
}
int main(int argc, const char *argv[])
{char str[3][3] = {"bcd","ade","sas"};StrPrint(str,3);return 0;
}

  1. 计算字符指针数组中最大字符串

void StrMax(char *p[3],int n)
{int i = 0;char max = *p;for(i=0;i<n;i++){if(i==0){strcpy(max,*(p+i));}if(strcmp(max,*(p+i))<0){strcpy(max,*(p+i));}}printf("最大值是:%s\n",max);
}
int main(int argc, const char *argv[])
{char a[3][10]={"asdf","wert","zaa"};StrMax(a,3);
}

  1. 判断一个字符串是否是回文字符串。例如“asdsa” 回文字符串的特点对称

#include <stdio.h>
#include <string.h>
int palin(char *p){char *q = p+strlen(p)-1;while(p<q){if(*p != *q){return 0;}p++;q--;}return 1;
}
int main(int argc, const char *argv[])
{char str[20] = {0};gets(str);if(palin(str) == 1){printf("是回文字符串\n");}else{printf("不是回文字符串\n");}return 0;
}

  1. 删除字符串中的空格

#include <stdio.h>
void DeleteSpace(char *p){char *q = p;while(*p != '\0'){if(*p != ' '){*q = *p;q++;}p++;}*q = '\0';
}
int main(int argc, const char *argv[])
{char str[20] = {0};gets(str);DeleteSpace(str);puts(str);return 0;
}

  1. 自己封装strcpy函数,返回目标字符串的地址

#include <stdio.h>
char *my_strcpy(char *str,char *dest){char *k = dest;while(*str != '\0'){*dest = *str;str++;dest++;}*dest = '\0';return k;
}
int main(int argc, const char *argv[])
{char str[20] = {0};char dest[20] = {1};gets(str);char *p = my_strcpy(str,dest);printf("%s",p);putchar(10);return 0;
}

  1. 输入n个元素,计算最大值,最小值,最大值的位置,最小值的位置

#include <stdio.h>
void find_max(int *p,int n){int i = 0;int max_l = 0;int max = *p;for(i=0;i<n;i++){if(max < *(p+i)){max = *(p+i);max_l = i;}}printf("最大值是%d,它的下标为%d\n",max,max_l);
}
void find_min(int *p,int n){int i = 0;int min_l = 0;int min = *p;for(i=0;i<n;i++){if(min > *(p+i)){min = *(p+i);min_l = i;}}printf("最小值是%d,它的下标为%d\n",min,min_l);
}
int main(int argc, const char *argv[])
{int n = 0;int i = 0;int arr[10] = {0};printf("请输入您要输入的数组数量\n");scanf("%d",&n);printf("请输入数组\n");for(i=0;i<n;i++){scanf("%d",&arr[i]);}find_max(arr,n);find_min(arr,n);return 0;
}

  1. 冒泡

#include <stdio.h>
#include <string.h>
void sel_sort(int (*p),int size,int n){int i = 0,j = 0;int temp = 0;for(i=0;i<size-1;i++){for(j=0;j<size-1;j++){if(n == 1){if(*(p+i) > *(p+j)){temp = *(p+i);*(p+i) = *(p+j);*(p+j) = temp;}}else{if(*(p+i) < *(p+j)){temp = *(p+i);*(p+i) = *(p+j);*(p+j) = temp;}}}}for(i=0;i<size;i++){printf("%d\t",*(p+i));}putchar(10);
}
int main(int argc, const char *argv[])
{int arr[4] = {0};int i = 0;int n = 0;printf("升序请输入1,降序请输入2\n");scanf("%d",&n);printf("请输入要排序的数组\n");for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++){scanf("%d",&arr[i]);}sel_sort(arr,sizeof(arr)/sizeof(arr[0]),n);return 0;
}

  1. 简单选择排序

#include <stdio.h>
#include <string.h>
void sel_sort(int (*p),int size,int n){int i = 0,j = 0;int temp = 0;for(i=0;i<size-1;i++){for(j=i+1;j<size;j++){if(n == 1){if(*(p+i) > *(p+j)){temp = *(p+i);*(p+i) = *(p+j);*(p+j) = temp;}}else{if(*(p+i) < *(p+j)){temp = *(p+i);*(p+i) = *(p+j);*(p+j) = temp;}}}}for(i=0;i<size;i++){printf("%d\t",*(p+i));}putchar(10);
}
int main(int argc, const char *argv[])
{int arr[4] = {0};int i = 0;int n = 0;printf("升序请输入1,降序请输入2\n");scanf("%d",&n);printf("请输入要排序的数组\n");for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++){scanf("%d",&arr[i]);}sel_sort(arr,sizeof(arr)/sizeof(arr[0]),n);return 0;
}

  1. 杨辉三角

#include <stdio.h>
void traingl(int (*p)[4],int n){int i = 0,j = 0,k = 0;for(i=0;i<n;i++){for(j=n-1-i;j>0;j--){printf(" ");}for(k=0;k<i+1;k++){if(k == 0 || i == k){*(*(p+i)+k) = 1;}else{*(*(p+i)+k) = *(*(p+i-1)+k-1) + *(*(p+i-1)+k);}printf("%2d",*(*(p+i)+k));}putchar(10);}
}
int main(int argc, const char *argv[])
{int n = 0;int arr[4][4] = {0};scanf("%d",&n);traingl(arr,n);return 0;
}

  1. 二维数组转置:行变列,列变行

#include <stdio.h>
void reversal(int (*p)[3],int l,int h){int i = 0,j = 0;int temp = 0;for(i=0;i<l;i++){for(j=0;j<h;j++){temp = *(*(p+i)+j);*(*(p+i)+j) = *(*(p+j)+i);*(*(p+j)+i) = temp;}}for(i=0;i<h;i++){for(j=0;j<l;j++){printf("%d\t",*(*(p+i)+j));}printf("\n");}
}
int main(int argc, const char *argv[])
{int i = 0,j = 0;int arr[3][3] = {0};for(i=0;i<3;i++){for(j=0;j<3;j++){scanf("%d",&arr[i][j]);}}reversal(arr,3,3);return 0;
}

  1. 计算二维数组的行和、列和

#include <stdio.h>
void sum_h(int (*p)[2],int h,int l){int i= 0,j =  0;int sum = 0;for(i=0;i<h;i++){sum = 0;for(j=0;j<l;j++){sum += *(*(p+i)+j);}printf("第%d行的和为%d\n",i+1,sum);}
}
void sum_l(int (*p)[2],int h,int l){int i = 0,j = 0;int sum = 0;for(i=0;i<l;i++){sum = 0;for(j=0;j<h;j++){sum += *(*(p+j)+i);}printf("第%d列的和为%d\n",i+1,sum);}
}
int main(int argc, const char *argv[])
{int arr[2][2] = {0};int i = 0,j = 0;for(i=0;i<2;i++){for(j=0;j<2;j++){scanf("%d",&arr[i][j]);}}sum_l(arr,2,2);sum_h(arr,2,2);return 0;
}

  1. 计算二维数组的行最大值、列最小值

#include <stdio.h>
void seekarr(int (*p)[3],int h,int l){int max = *(*(p));int min = *(*(p));int i = 0,j = 0;for(i=0;i<h;i++){max = *(*p+i);for(j=0;j<l;j++){if(max < *(*(p+i)+j)){max = *(*(p+i)+j);}}printf("第%d行的最大值是%d\n",i+1,max);}for(i=0;i<l;i++){min = (*(*p)+j);for(j=0;j<h;j++){if(min > *(*(p+j)+i)){min = *(*(p+j)+i);}}printf("第%d列的最小值是%d\n",i+1,min);}
}
int main(int argc, const char *argv[])
{int a[2][3] = {0};int i = 0,j = 0;for(i=0;i<2;i++){for(j=0;j<3;j++){scanf("%d",&a[i][j]);}}seekarr(a,2,3);return 0;
}

  1. 是一个对称矩阵,输出完美,否则输出不完美

9 2 3 4

2 8 1 6

3 1 8 7

4 6 7 9

#include <stdio.h>
void permat(int (*p)[4],int line){int i = 0,j = 0;int count = 0;for(i=0;i<line;i++){for(j=0;j<line;j++){if(*(*(p+i)+j) != *(*(p+j)+i)){count++;}if(*(*(p+i)+i) != *(*(p+line-1-i)+line-1-i)){count++;}}}if(count == 0){printf("完美矩阵!\n");}else{printf("不是完美矩阵\n");}
}
int main(int argc, const char *argv[])
{int arr[4][4] = {0};int i = 0,j = 0;for(i=0;i<4;i++){for(j=0;j<4;j++){scanf("%d",&arr[i][j]);}}permat(arr,4);return 0;
}

更多推荐

五、C语言指针

本文发布于:2024-03-12 21:37:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1732469.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:指针   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!