C语言指针练习

  • 王阳明说过“知行合一”。相信大家都听老师讲过指针,讲的时候听懂了,自己写代码就不会了。所以整理了一些题目供大家练习!

一、指针指向地址和赋值

  • &:取址操作符
  • *:取值操作符
  • p1指向变量a的地址,所以a前面要加地址符&
  • p2指向变量b的地址
  • *p1指向变量a的地址中的元素(值)
  • *p2指向变量b的地址中的元素(值)
#include <stdio.h>
int main(){
  int a, b;
  int *pointer_1, *pointer_2;
  a=100;
  b=200;
  pointer_1 = &a;//将a的地址赋给p1
  pointer_2 = &b;//将b的地址赋给p2
  printf("%d,%d\n", a, b);
  printf("%d,%d\n", &a, &b);
  printf("%d,%d\n", *pointer_1, *pointer_2);//取指针指向的值
  printf("%d,%d\n", &pointer_1, &pointer_2);
  printf("%d,%d\n", pointer_1, pointer_2);
}
//输出
100,200
-751756,-751760
100,200
-751764,-751768
-751756,-751760

二、修改指针指向的地址

#include"stdio.h"
int main(){
  int a=12,*p;
  p=&a;//指向a的地址
  printf("%d\n",*p);//输出p指向a的地址中的值12
  int b=56;
  p=&b;//改变指针p指向的地址为b的地址
  printf("%d\n",*p);//输出p指向b的地址中的值56
  printf("%d %d\n",a,b);//原变量值不变,输出12 56
}
//输出
12
56
12 56

三、指针字符串

#include"stdio.h"
#include "string.h"
int main(){
  char *word = "MrFlySand.github.io";
  for(int i = 0; i < strlen(word); i++){
    printf("%c ",*(word+i));
  }
}  
//输出
M r F l y S a n d . g i t h u b . i o
  • strlen()获取字符串的长度,strlen(word)=19.
#include"stdio.h"
#include "string.h"
int main(){
  char *word = "MrFlySand.github.io";
  while(*word){
    printf("%c ",*(word++));
  }
}  
  • while(p) 等价于while(p !=0) 检查的是p值是不是0,或者是不是空指针,如果是,则跳出循环,不再继续循环体
  • while( * p) 相当于while( * p != 0) 检查的是p所指向的地址中的数据是否为0,但前提是p不能为NULL
#include"stdio.h"
#include "string.h"
int main(){
  char *word = "mr fly sand";
  printf("%c",*(word)-32);
  for(int i = 1; i < strlen(word); i++){
    if(*(word+i-1)==' '){
      printf("%c",*(word+i)-32);
    }else{
      printf("%c",*(word+i));
    }
  }
}  
//输出
Mr Fly Sand

四、编程:句子的第一个字母,','之后的字母,空格之后的字母都是大写。

#include"stdio.h"
#include "string.h"
void stringConversion(char *word){
  for(int i = 0; i < strlen(word); i++){
    if(i==0 || *(word+i-1)==' ' || *(word+i-1)==','){
      if(*(word+i)>='a' && *(word+i)<='z'){
         printf("%c",*(word+i)-32);
      }else{
         printf("%c",*(word+i));
      }
    }else{
      if(*(word+i)>='A' && *(word+i)<='Z'){
         printf("%c",*(word+i)+32);
      }else{
         printf("%c",*(word+i));
      }
    }
  }
}
int main(){
  char *word = "hello,mY namE Is mr FLY sAnD";
  stringConversion(word);
}  
//输出
Hello,My Name Is Mr Fly Sand

五、找最大最小值

#include"stdio.h"
void findMaxMin(int *pa){
  int max=*pa,min=*pa;
  for(int i=0; i<=sizeof(pa); i++,pa++){   
    if(*pa > max){
        max = *pa;
    }else if(*pa < min){
        min = *pa;
    }
  }
  printf("max = %d,min = %d",max,min);
}
int main(){
  int arr[5] = {12,46,37,74,2}, *pa = arr;
  findMaxMin(pa);
  return 0;
}

六、字母排序

#include"stdio.h"
#include "string.h"
int main(){
  char *word= "MrFlySandgithubio";
  int i,j;
  char temp;
  for(i=0; *word; i++){
    for(j=0; *word; j++){
      printf("",*word(i)>*word(i+1));
      if(*word(i)>*word(i+1)){
        temp = *word(i);
        *word(i) = *word(i+1);
        *word(i+1) = temp;
      }
      printf("%d ",*word++);   
    }
  }
  return 0;
}  

七、统计字符串中每个字母出现的次数

八、括号相同

  • 检查字符串是否满足下列条件:①从字符串首字符起,在顺序检查字符的过程中,遇到的右括号')'的个数在任何时候均不超过左括号'('的个数;②左括号'('的个数与右括号')'的个数相同。
#include <stdio.h>
int check(char *s){
  int left,right;
  left=right=0;
  for(;*s;*s++){
    if(*s=='('){
      left++;
    }else if(*s==')'){
      right++;
      if(right>left){
        return 1;
      }
    }
  }
  return right-left;
}
int main(){    
  char s[80];
  gets(s);
  int i;
  i=check(s);
  if(i==0){
    printf("括号数满足");
  } 
  else{
    printf("括号数不满足");
  }     
}

九、插入排序

posted @ 2020-08-31 13:49  MrFlySand-飞沙  阅读(407)  评论(0编辑  收藏  举报