指针---练习题

编写一个C程序,输入一些数字,然后按照从大到小的方式输出,要求使用指针实现


void func2();
int main(int argc, const char * argv[]) {
    int a[10];
    int *x,*y;
    x=a;
    int i;
    for (i=0; i<10; i++) {
        printf("请输入第%d个数的值(以0结束):\n",i+1);
        scanf("%d",x+i);
        if (a[i]==0) {
            i-=1;
            break;
        }
    }
    for(int k=0;k<i;k++){
        for (int j=0; j<i-k-1; j++) {
            if(a[j]>a[j+1]){
                x=&a[j];
                y=&a[j+1];
                func2(x, y);
            }
        }
    }
    printf("排序后:\n");
     for (int k=0; k<=i; k++) {
         printf("%d\n",a[k]);
     }
    printf("------------------------\n");
    return 0;
}
void func2(int *x,int *y){     //交换值
    int temp;
    temp=*x;
    *x=*y;
    *y=temp;
}

给定两个数组,然后编写一个数组拷贝函数,有两个参数,形式为数组类型。函数中实现将第二个数组的内容复制到第一个数组中。

void func1(){
    int arr1[10];
    int arr2[20];
    myCopy(arr1, arr2);
    printf("把arr2复制到arr1:\n");
    for (int i=0;i<10;i++) {
        printf("%d\n",arr1[i]);
    }
}
void myCopy(int arr1[],int arr2[]){
    int *p1=arr1;
    int *p2=arr2;
    int i;
    for (i=0; i<20; i++) {
        printf("请输入第%d个整数(以0结束输入)\n",i+1);
        scanf("%d",p2+i);
        if (arr2[i]==0) {
            break;
        }
    }
    for(int t=0;t<10;t++){
        if(t<i){
            *(p1+t)=*(p2+t);
        }else{
            *(p1+t)=0;
        }
     }
}
int main(int argc, const char * argv[]) {
    func1();
    return 0;
} 

去空格

int mystrlen(char *p);//求出给定字符串的长度(不包括末端字符)。
int mystrtrim(char *p);//求出去掉给定字符串两边的空格的长度(中间的不去除)
int mystrltrim(char *p);//求出去掉左边的空格的长度
int mystrrtrim(char *p);//求出去掉右边的空格的长度
int main(int argc, const char * argv[]) {
    char ch[]="  abc defg  ";
    int lenght1=mystrlen(ch);
    printf("字符串的长度为:(不包括末端字符)\n");
    printf("%d\n",lenght1);
    int lenght2=mystrtrim(ch);
    printf("字符串的长度为:(去掉字符串两边的空格,中间的不去除)\n");
    printf("%d\n",lenght2);
    int lenght3=mystrltrim(ch);
    printf("字符串的长度为:(去掉左边的空格)\n");
    printf("%d\n",lenght3);
    int lenght4=mystrrtrim(ch);
    printf("字符串的长度为:(去掉右边的空格)\n");
    printf("%d\n",lenght4);
    printf("-----------------------------\n");
    return 0;
}
int mystrlen(char *p){      //不包括末端字符
    int t=0;
    while (*(p+t)!='\0') {
        t++;
    }
    return t;
}
int mystrtrim(char *p){    //去掉字符串两边的空格,中间的不去除
    int t=mystrlen(p);
    int l=mystrlen(p)-mystrltrim(p);
    int r=mystrlen(p)-mystrrtrim(p);
    t=t-l-r;
    return t;
}
int mystrltrim(char *p){    //去掉左边的空格
    int t=mystrlen(p);
    int c=0;
    while (*(p+c)==' ') {
        c++;
        if (*(p+c)!=' ') {
            break;
        }
    }
    t=t-c;
    return t;
}
int mystrrtrim(char *p){    //去掉右边的空格
    int t=mystrlen(p);
    int c=0;
    while (*(p+(t-c-1))==' ') {
        c++;
        if (*(p+(t-c-1))!=' ') {
            break;
        }
    }
    t-=c;
    return t;
}


简要描述使用指针的优点:
-提高程序效率
-可以间接实现一个函数返回多个值
-可以进行内存动态分配



随堂笔记为个人学习笔记,若有错误,望指出,谢谢!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值