当前位置:   article > 正文

C语言 指针经典例题案例详解

c语言指针例题
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <conio.h>
  5. #include <ctype.h>
  6. #include <math.h>
  7. #include <time.h>
  8. #define IO 996
  9. #define N 10
  10. #define input "%d,%d,%d,%d\n\n"
  11. void product();
  12. void sortReplication();
  13. void sort();
  14. void swap(int *,int);
  15. void exchange();
  16. void frequency();
  17. int subString(char *,char *);
  18. int main(int argc,char *argv[]){
  19. //product();
  20. //sortReplication();
  21. //sort();
  22. //exchange();
  23. //frequency();
  24. }
  25. void product(){
  26. //已知一个整形数组X[4],其元素值分别为3/10/4/20,使用指针求个数字元素的积。
  27. int x[]={3,10,4,20},i,product=1,*xp=&x[0];
  28. for(i=0;i<4;i++){
  29. product*=*(xp+i);//*xp+i
  30. //printf("%d\n",i);
  31. //printf("%d\n",*xp);
  32. //printf("%d\n",*xp+i);
  33. //printf("%d\n\n",product);
  34. }
  35. printf("%d\n\n",product);
  36. }
  37. void sortReplication(){
  38. //有四个字符串,实现将他们按照字符串中的字符个数从小到大排序,
  39. //再分别取出每个字符串的第三个字母形成一个新的字符串输出(若少于三个字符的输出*),
  40. //要求:利用字符串指针和指针数组完成。
  41. char *array[5]={"yangmufa","shuai","de","chaojishuai",}\
  42. ,(*tem)=NULL,t[5]={NULL};
  43. int i=0,j=0,k=0;
  44. for(i=0;i<4;i++){//i<4-1表示从第一个开始到倒数第二个结束(4个数组)
  45. k=i;//记录小串
  46. for(j=0;j<4;j++){//表示从第二个开始到倒数第一个结束,每一次比上一次比较次数减一
  47. if(strlen(array[k])>strlen(array[j])){
  48. k=j;//记录小串
  49. }
  50. if(i!=k){//交换
  51. tem=array[i];
  52. array[i]=array[k];
  53. array[k]=tem;
  54. }
  55. }
  56. }
  57. //分别取出每个字符串的第三个字母形成一个新的字符串
  58. for(i=0;i<4;i++){
  59. puts(*(array+i));
  60. if(strlen(*(array+i))>2){
  61. //*(*(array+4)+i)=*(*(array+1)+2);
  62. //此方法不可取因为"String"是存在静态存储区的,这个地址中的值不能被修改。
  63. t[i]=*(*(array+i)+2);
  64. }else if(strlen(*(array+i))<3){
  65. t[i]='*';
  66. }
  67. }
  68. printf("\n新字符串:%s\n\n",t);
  69. }
  70. void sort(){
  71. //定义一个动态数组长度为n,用随机数给各数组元素赋值,
  72. //然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。
  73. int n,i,*array;
  74. printf("输入长度:");
  75. scanf_s("%d",&n);
  76. array=(int*)malloc(n*sizeof(int));//以N为基数动态反配N个int类型大小的内存
  77. srand((unsigned)time(NULL));//设置以时间为随机种子
  78. printf("随机数排序前:");
  79. for(i=0;i<n;i++){
  80. array[i]=rand();//获取以时间为种子得来的随机数后赋值给array
  81. printf(" %d ",array[i]);
  82. }
  83. printf("\n");
  84. swap(array,n);
  85. }
  86. void swap(int * array,int lenth){
  87. int i=0,j=0,k=0,temp;
  88. printf("\n随机数排序后:");
  89. for(i;i<lenth;i++){
  90. k=i;
  91. for(j=0;j<lenth;j++){
  92. if(array[k]<array[j]){k=j;}
  93. if(k!=i){
  94. temp=array[k];
  95. array[k]=array[i];
  96. array[i]=temp;
  97. }
  98. }
  99. }
  100. for(i=0;i<lenth;i++){
  101. printf(" %d ",array[i]);
  102. }
  103. printf("\n\n");
  104. }
  105. void exchange(){
  106. //输入N个整数,将其中最小的数与第一个数对换,将自重最大的数与与最大的数交换。
  107. int array[8],i,j,k,temp=0,max=0,min=0;
  108. srand((unsigned)time(NULL));//设置时间种子
  109. printf("随机数:");
  110. for(i=0;i<8;i++){
  111. array[i]=rand();//获取以时间为种子得来的随机数后赋值给array
  112. printf(" %d ",array[i]);
  113. }
  114. printf("\n交换后:");
  115. max=array[0];
  116. min=array[0];
  117. for(i=0;i<8-1;i++){
  118. if(max<array[i]){
  119. max=array[i];
  120. }//求出最大元素
  121. if(min>array[i]){
  122. min=array[i];
  123. }//求出最小元素
  124. }
  125. array[0]=min;//将其中最小的数与第一个数对换,
  126. array[7]=max;//将其中最大的数与与最大的数交换。
  127. for(i=0;i<8;i++){
  128. printf(" %d ",array[i]);
  129. }
  130. for(i=0;i<8;i++){
  131. k=i;
  132. for(j=0;j<8;j++){
  133. if(array[k]<array[j]){k=j;}
  134. if(k!=i){
  135. temp=array[k];
  136. array[k]=array[i];
  137. array[i]=temp;
  138. }
  139. }
  140. }
  141. printf("\n排序后:");
  142. for(i=0;i<8;i++){
  143. printf(" %d ",array[i]);
  144. }
  145. printf("\nmax:%d\nmin:%d\n",max,min);
  146. }
  147. void frequency(){
  148. //计算字符串中子串出现的次数,要求用一个subString函数实现,
  149. //参数为指向字符串和子字符串的指针,返回次数。
  150. char array[]={"yangmufchaojiwudidashuaigeyangmufachaojishuai"},\
  151. SubString[]={"chaoji"};
  152. printf("字符串:");
  153. puts(SubString);
  154. printf("在字符串:");
  155. puts(array);
  156. printf("中出现了: ");
  157. printf(" %d 次\n",subString(array,SubString));
  158. }
  159. int subString(char *a,char *s){
  160. int i=0,j=0,count=0,alen=strlen(a),slen=strlen(s);
  161. while(i<alen){
  162. if(a[i]==s[j]){
  163. //如果子串第j个元素和母串的第i个元素相等则都继续指向下一个元素进行比较
  164. i++;
  165. j++;
  166. }else{
  167. //如果子串和母串出现不匹配则母串回到挡轮比较之前,子串归零
  168. i=i-j+1;
  169. j=0;
  170. }
  171. if(j==slen){
  172. //如果出现子串到最后一个元素均与母串相等的情况则出现次数加一,子串归零继续下一轮比较。
  173. count++;
  174. j=0;
  175. }
  176. }
  177. return count;
  178. }

Result:

product();

43e70f9db242c831c5525cf4c89e7367b25.jpg


sortReplication();

eb4218bbdfc1a9af32fc64844a992b911a0.jpg


sort();

3f1109fa96b022b69c004956329587c8fa2.jpg


exchange();

abc5f4d4c3fb292496eb6b444367166e653.jpg


frequency();

bcd1c4aef0e570068ec9765d25a7789f9d6.jpg

 

作者:东方神祇 
本文链接:https://my.oschina.net/yangmufa/blog/3090031

版权声明:
      本文为博主原创文章,转载请附上源文链接!

 如果觉得我的论文对您有用,您的请评论点赞与
 合理优质的转发也将是鼓励支持我继续创作的动力!
---------------------*/

转载于:https://my.oschina.net/yangmufa/blog/3090031

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/164671
推荐阅读
相关标签
  

闽ICP备14008679号