指针编程题

main.m文件

//1.输入10个整数,将其中最小的数与第一个数交换,把最大的数和最后一个数对换,写三个函数1.输入10个数,2.进行处理,3.输出10个数  
    int a[10] = {0};  
    int *p = NULL;  
    p = a;  
    //1.输入  
    inputArr(a, 10);  
    outputArr(a, 10);  
    printf("\n");  
    //2.处理函数  
    handleArr(a, 10);  
      
    //3.输出函数  
    printf("输出函数为:\n");  
    outputArr(a, 10);  
   printf("\n");  
      
    //2.在主函数中输入10个等长的字符串.用另一个函数对他们排序,然后主函数输出10个已经排好的字符串  
    char str[5][20] = {0};  
    char *p[5] = {0};  
       printf("请输入5个等长的字符串:\n");  
    for (int i = 0; i < 5; i++) {  
        p[i] = str[i];  
    }  
    for (int i = 0; i < 5; i++) {  
        scanf("%s", p[i]);  
    }  
    orderArr(p);  
        for (int i = 0; i < 5; i++) {  
       printf("%s ", *(p+i));  
    }  
      
    //3.有一个字符串,包含数字与字母,编程去除数字,要求:1.在原字符串操作2.使用指针处理  
    char str[] = "2a45abcd123sdafasdfasfasfasfasdfasfd9";  
    char *p = str;  
    int i = 0;  
//    char temp[255] = {0};  
    while (*(p + i) != ‘\0‘) {  
        if (*(p + i) >= ‘0‘ && *(p + i) <= ‘9‘) {  
            //判断当前的字符是否是数字,如果是数字,就做剔除操作  
            //(剔除,覆盖(使用后面的字符,将前面的字符覆盖掉))  
            //覆盖的开始位置,以及要使用的覆盖内容的开始位置  
            //p + i.   p + i + 1.  
            strcpy(p + i, temp);  
            strcpy1(p + i, p + i + 1);  
        }else{  
            i++;  
        }  
    }  
    printf("%s", p);

.h文件

//(1)输入函数

void inputArr(int *p, int count);

//(2)处理函数

void handleArr(int *p, int count);

//(3)输出函数

void outputArr(int *p, int count);

//(4)查找数组中最大值的下标

int maxIndexOfArr(int *p, int count);

//(5)查找数组中最小值的下标

int minIndexOfArr(int *p, int count);

//(6.交换两个数的值

void swap(int *x, int *y);

//2.字符串冒泡排序

void orderArr(char *p[]);

//实现strcpy

void strcpy1(char *p1, char *p2);

.m文件

//(1)输入函数

void inputArr(int *p, int count)

{

for (int i = 0; i< count; i++) {

*(p + i) = arc4random() % (20 - 10 + 1) + 10;

}

}

//(2)处理函数

void handleArr(int *p, int count)

{

int minIndex = minIndexOfArr(p, count);//存储最下值下标

int maxIndex = maxIndexOfArr(p, count);//存储最大值下标

//交换

if (minIndex != 0) {

if (maxIndex == 0) {

maxIndex = minIndex;

}

swap(p, (p + minIndex));

}

if(maxIndex != count - 1){

swap((p + count - 1), (p + maxIndex));

}

}

//(3)输出函数

void outputArr(int *p, int count)

{

for (int i = 0; i < 10; i++) {

printf("%d  ", *(p + i));

}

}

//(4)查找数组中最大值的下标

int maxIndexOfArr(int *p, int count)

{

int max = *p;//存储最大值

int maxIndex = 0;//记录最大值的下标

for (int i = 1; i < count; i++) {

if (max < *(p + i)) {

max = *(p + i);//存储最大值

maxIndex = i;//存储最大值的位置

}

}

return maxIndex;

}

//(5)查找数组中最小值的下标

int minIndexOfArr(int *p, int count)

{

int min = *p;//存储最小值

int minIndex = 0;//记录最小值的下标

for (int i = 1; i < count; i++) {

if (min > *(p + i)) {

min = *(p + i);//存储最小值

minIndex = i;//存储最小值的位置

}

}

return minIndex;

}

//(6)交换两个数的值  实参传地址

void swap(int *x, int *y)

{

int temp = *x;

*x = *y;

*y = temp;

}

//2.字符串冒泡排序

void orderArr(char *p[])

{

for (int i = 0; i < 5-1; i++) {

for (int j = 0; j < 5-1-i; j++) {

if (strcmp(*(p +j), *(p +j+1))>0) {

char *temp =NULL;

temp= *(p +j);

*(p +j)= *(p +j+1);

*(p +j+1)= temp;

}

}

}

}

//实现strcpy

void strcpy1(char *p1, char *p2)

{

while(((*(p1++)) = (*(p2++)))){

}

}

时间: 2024-11-04 21:04:23

指针编程题的相关文章

C和指针--编程题9.14第10小题--判断回文函数

题目: 编写函数 int palindrom( char *string); 如果参数字符串是个回文,函数就返回真,否则就返回假.回文就是指一个字符串从左向右读和从右向左读是一样的.函数应忽略所有的非字母字符,而且在进行字符比较时不用区分大小写. 前提是空白字符.标点符号和大小写状态被忽略,当Adam第1次遇到Eve时他可能会说的一句话:"Madam,I'm Adam"就是回文一例. 分析题目,题目中没有规定空字符串和全是非字母字符的情况是否属于回文,我私自将空字符串归为回文,将全是非

编程题:使用指向指针的指针

#include<stdio.h> void main() { static char *str[]={"How","are","you"}; char **p; p=str+1; printf("%s\n",*p); printf("%c\n",**p); } 编程题:使用指向指针的指针,布布扣,bubuko.com

编程题:返回指针值的函数,求两个数中较大的数。

#include<stdio.h> int *max(int *x,int *y) { int *q; if(*x>*y)  q=x; else  q=y; return q; } void main() { int a,b,*p; scanf("%d,%d",&a,&b); p=max(&a,&b); printf("%d,%d,max is %d\n",a,b,*p); } 编程题:返回指针值的函数,求两个数中较

编程题:指向变量的指针变量

#include<stdio.h> void main() { int a,b; int *p,*q; a=3;b=5; p=&a;q=&b; printf("%d,%d\n",*p,*q); } 编程题:指向变量的指针变量,布布扣,bubuko.com

编程题:指针变量,直接引用和间接引用的区别。

#include<stdio.h> void main() { int a,b; int *p;   /*定义指针变量p*/ p=&b;     /*将变量b的地址放在变量p中*/ a=3;      /*直接引用变量a*/ *p=5;     /* 间接引用变量b*/ printf("a=%d,b=%d\n",a,b); } 编程题:指针变量,直接引用和间接引用的区别.,布布扣,bubuko.com

编程题:指针变量指向结构体数组。

编程题:指针变量指向结构体数组. #include<stdio.h> void main() { struct person {char name[20]; char sex; int age; float height; }per[3]={{"Li Ping",'M',20,175},{"Wang Ling",'F',19,162.5}, {"Zhao Hui",'M',20,178}}; struct person *p; for

编程题:比较指向数组元素的指针变量和指向数组的指针变量的不同。

#include<stdio.h> void main() {int a[2][3]={1,2,3,4,5,6}; int *p1,(*p2)[3]; /*p1指向数组元素,p2指向包含3个元素的一维数组*/ p1=a[0];p2=a; /*用指向数组元素的指针变量输出二维数组元素*/ for(;p1<a[0]+6;p1++) printf("%4d",*p1); printf("\n"); /*用指向以为数组的指针变量输出二维数组元素*/ for

编程题:指向二维数组元素的指针变量。功能:已知二维数组a[2][3],输入输出全部元素。

#include<stdio.h> void main() { int a[2][3],i,j; int *p; /*用坐标法输入二维数组元素*/ for(i=0;i<2;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); /*用指针法输出二维数组元素*/ p=a[0];         /*等价于p&a[0][0];*/ for(;p<a[0]+6;p++)   printf("%4d&quo

编程题:指针数组实现,将多个字符串按字母顺序输出。

#include<stdio.h> void sort(char *str[],int n) { char *temp;int i,j,k; for(i=0;i<n-1;i++) {k=1; for(j=i+1;j<n;j++) if(strcmp(str[k],str[j])>0) k=j; if(k!=i) {temp=str[i];str[i]=str[k];str[k]=temp;} } } void main() { int i,n=4; char *string[