c学习第4天

今天讲了指针。*******呵呵

指针变量所占的内存大小取决于操作系统位数。(32位系统指针占4字节)

不同类型的指针区别主要决定指针自增运算,指针

printf("%zu",sizeof(int));

输出指针的时候

int a;

int *pi=&a;

printf("%p",pi);

///////////////////////////////////////////

1、输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换,写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。

 //在对数字进行操作的时候,我们可以传进去一个指针,指向这十个数。所以在对输入的十个数进行操作的时候,不是进行的数值的copy,而是用指针指向的同一段内存空间。所以说,是对原数组的操作。

//1、输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换,写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。
int num;
int main ()
{
    //void inputdata();
    //inputdata();
     void input(int *);
    void sorting(int *);
    int b[10];
    
    input(b);
    sorting(b);
        return  0;
}
//void inputdata(int *arr)
//{
//    
//    for (int i=0; i<10; i++) {
//        printf("请输入十个数:arr[%d]",i);
//        scanf("%d",&arr[i]);
//    }
//    for (int i=0; i<10; i++)
//    {
//        printf("%d	",arr[i]);
//    }
//}

void input(int *a)
{
    int i=0;
   
    for(i=0;i<10;i++)
    {
         printf("请输入arr[%d]个数:
",i);
        scanf("%d",&a[i]);
    }
    printf("原序列为:
");
    for(i=0;i<10;i++)
        printf("%d ", a[i]);
    printf("
");
}


void sorting(int *a)
{
    int i,max,min,maxnum,minnum,temp1,temp2;
    max = min = a[0];
    maxnum = minnum = 0;
    for(i=1;i<10;i++)
    {
        if(a[i] > max)
        {
            max = a[i];maxnum = i;
        }
        if(a[i] < min)
        {
            min = a[i];minnum = i;
        }
    }   printf("最大的数为%d,是第%d个数
",max,maxnum+1);
    printf("最小的数为%d,是第%d个数
",min,minnum+1);
    temp2=a[9],a[9]=max;a[maxnum]=temp2;
    temp1=a[0],a[0]=min,a[minnum]=temp1;
    printf("调整后数组序列为:
");
    for(i=0;i<10;i++)
        printf("%d ", a[i]);
}

 

2、在主函数中输入10个等长的字符串。用另一个函数对它们排序,然后在主函数输出10个已经排好的字符串。

 

//在主函数中输入10个等长的字符串。用另一个函数对它们排序,然后在主函数输出10个已经排好的字符串。

int main ()
{
    void qsorting1(char name[4][4],int);
    char  name[4][4]={"abc","xyz","mnq","def"};
    //name[0]存储的是“abc”字符串的首地址。
    qsorting1(name, 4);
    for (int i=0; i<4; i++) {
        for (int j=0; j<3; j++) {
            printf("%c",name[i][j]);
        }
        printf("
");
    }
    
    return 0;
}
void qsorting1(char name[4][4],int LENGTH)
{
//  char *pc1;
//    for (int i=0; i<len; i++) {
//        pc=name[i];
//        //pc1=name[i+1];
//        for (int j=len-1; j>i; j--) {
//            if ((strcmp(&pc[j-1], &pc[j]))>0) {
//                *temp =pc[j-1];
//                pc[j-1]=pc[j];
//               pc[j]=*temp;
//            }
//        }
//    }
    char temp[34];
    for (int i = 0; i < LENGTH; i++) {
        for (int j = LENGTH - 1; j > i; j--) {
            if (strcmp(name[j],name[j-1])<0 ) {
                strcpy(temp, name[j]);
                strcpy(name[j], name[j-1]);
                strcpy(name[j-1],temp);
            }
        }
    }
}

 

面试题:

有一字符串,包含数字与字母,编程去除数字。

1、要求在原字符串中操作

2、使用指针处理。

 方法一:

void deleteNumber(char *p){
    int count = 0;
    do {
        if ( *p >='0' && *p <= '9') {
            count++;
        }else{
            *(p-count) = *p;
        }
        p++;
    } while (*(p-1)); //刚好到‘’的位置。
}
方法2:
void
delnum(char * a) { int count=0; for(int i=0;i<strlen(a);i++) { while(a[i]>='0'&&a[i]<='9') { i ++; count++; } strcpy(a+i-count,a+i); count=0; } }

方法3:

   //有一字符串,包含数字与字母,编程去除数字。
    //1、要求在原字符串中操作
    //2、使用指针处理。
    char underdostrs[]={"ab123c4defghijklmnopqrs567tuvwxyz"};
    char *pi;
    int count=0;
    unsigned long len=strlen(underdostrs);
    pi=underdostrs;
    char str_num_arr[10]={'1','2','3','4','5','6','7','8','9','0'};
    for (int i=0; *pi!=''; i++) {
        for (int j=0;j<10; j++)
       {
            if (*pi==str_num_arr[j])
            {
                *pi++;
                count++;
            }
        }
        underdostrs[i]=*pi;
        *pi++;
    }
    for (int i=0; i<len-count; i++) {
        printf("%c",underdostrs[i]);
    }
    printf("
");
    return 0;
原文地址:https://www.cnblogs.com/yinyakun/p/3385572.html