第十次上机实验

来源:互联网 发布:刚开始做淘宝,卖什么好 编辑:程序博客网 时间:2024/04/28 00:13

任务1:

输入一个字符串和一个正整数x,将该字符串中的后x个字符复制到另一个字符串y中,再对y串的内容前后倒置后存入数组z中并输出。
要求:用指针访问数组元素、用函数getx(char *c1)实现复制、用函数getr(char *c2)实现倒置。
运行示例
Enter a string: abcABCD
Enter an integer: 4
The new string is DCBA

拷贝之程序(加理解):

#include<stdio.h>   #include<string.h>   //包含字符串处理函数的头文件,可直接调用现有的字符串处理函数void getx(char *c1);  void getr(char *c2);  int main()  {      char str1[20];  // 长度为20,strlen        printf("Enter a string:");        gets(str1);  //输入字符串,存入str表示的空间     printf("Enter an integer:");     getx(str1);  // ???     return 0;  }    void getx(char *c1) //实现复制{      int n,i,j=0,r=0;      char str2[20];  //定义str2    scanf("%d",&n);  //n是什么    while(*(c1+j)!='\0') //指针指向了输入的字符串所在的地址;判断字符串是否到头       {            j++;        }          for(i=j-n;i<j;i++) //循环 ???    {          str2[r]=*(c1+i); // 将str1赋给str2      r++;      }        str2[r]='\0'; //???     getr(str2);  // 调用倒置函数     puts("The new string is ");        puts(str2);//输出复制且倒置好的str2  }  void getr(char *c2) //实现倒置    {      int i=0;          char str2[20];          while(*(c2+i)!='\0')          {          i++;  //i达到最大    }          for(int j=0;j<i;j++)          {          str2[i-j-1]=*(c2+j); //实现倒置,将j给i-(j+1)     }              for(int r=0;r<i;r++)              {          *(c2+r)=str2[r]; //将字符串2给指针*(c2+r)         }   }   


生成结果:

任务2:
定义一维整形数组,对数组分别进行“由大到小”和"由小到大"排序并输出。
要求:用函数和指针实现排序

拷贝程序:

#include<stdio.h>   void r(int *a,int n) ;   void p(int *a,int n) ;      void main()   {   int n=5,i,a[30];  //为何已经是5了,还要30      for(i=0;i<n;i++)        {            scanf("%d",&a[i]);        }            r(a,n);   //何用        for(i=0;i<n;i++)            {            printf("%d\t",a[i]); //水平输出5个a                   }          printf("\n");          p(a,n);  //何用        for(i=0;i<n;i++)            {            printf("%d\t",a[i]); //有何不同           }     }         void r(int *a,int n)  //n=5,从小到大排序   {    int i,j,temp;     for(i=1;i<n;i++)     {         temp=*(a+i);        j=i-1;         while(j>=0&&temp<*(a+j)) //即*(a+i)<*(a+i-1)        {            *(a+j+1)=*(a+j);            j--;   //为何越来越小      }         *(a+j+1)=temp; //将初值赋给大的    }    }  void p(int *a,int n)//从大到小排序  {    int i,j,temp;     for(i=1;i<n;i++)     {         temp=*(a+i);        j=i-1;         while(j>=0&&temp>*(a+j))        {            *(a+j+1)=*(a+j);            j--;         }         *(a+j+1)=temp;     }    }  


 


任务3:
 输入字符串s,将字符放入d数组中,最后输出d中的字符串。
要求:用函数和指针实现
 运行示例
 输入字符串:abc123edf456gh
 输出字符串:abcedfgh

程序:

#include<stdio.h>   #include<string.h>   #define N 20     int main(void){       char a[N];       char *p=a; //将字符串a给指针      gets(a);  //表示从键盘上接受一个字符串,放到数组a中     while(*p!='\0')       {          if((*p>=48&&*p<=57))  //  ????        strcpy(p,p+1);          else p++;       }              puts(a);   }