第十次实验任务

任务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


我的程序:

  1. #include"stdio.h"     
  2. #include"string.h"     
  3. void getx(char *c1);    
  4. void getr(char *c2);    
  5. int main()    
  6. {    
  7.     char str1[20];       
  8.     printf("Enter a string:");      
  9.     gets(str1);     
  10.     printf("Enter an integer:");      
  11.     getx(str1);    
  12.     return 0;    
  13. }    
  14.     
  15. void getx(char *c1)    
  16. {    
  17.     int n,i,j=0,r=0;    
  18.     char str2[20];    
  19.     scanf("%d",&n);    
  20.     while(*(c1+j)!='\0')      
  21.     {      
  22.         j++;      
  23.     }      
  24.     
  25.     for(i=j-n;i<j;i++)      
  26.     {      
  27.       str2[r]=*(c1+i);    
  28.       r++;    
  29.     }      
  30.     str2[r]='\0';    
  31.     getr(str2);    
  32.     puts("The new string is ");      
  33.     puts(str2);    
  34. }    
  35. void getr(char *c2)       
  36. {    
  37.     int i=0;        
  38.     char str2[20];        
  39.     while(*(c2+i)!='\0')        
  40.     {    
  41.         i++;    
  42.     }        
  43.     for(int j=0;j<i;j++)        
  44.     {    
  45.         str2[i-j-1]=*(c2+j);    
  46.     }        
  47.         for(int r=0;r<i;r++)        
  48.         {    
  49.         *(c2+r)=str2[r];    
  50.         }     
  51. }     
#include"stdio.h"  
#include"string.h"  
void getx(char *c1);  
void getr(char *c2);  
int main()  
{  
    char str1[20];     
    printf("Enter a string:");    
    gets(str1);   
    printf("Enter an integer:");    
    getx(str1);  
    return 0;  
}  
  
void getx(char *c1)  
{  
    int n,i,j=0,r=0;  
    char str2[20];  
    scanf("%d",&n);  
    while(*(c1+j)!='\0')    
    {    
        j++;    
    }    
  
    for(i=j-n;i<j;i++)    
    {    
      str2[r]=*(c1+i);  
      r++;  
    }    
    str2[r]='\0';  
    getr(str2);  
    puts("The new string is ");    
    puts(str2);  
}  
void getr(char *c2)     
{  
    int i=0;      
    char str2[20];      
    while(*(c2+i)!='\0')      
    {  
        i++;  
    }      
    for(int j=0;j<i;j++)      
    {  
        str2[i-j-1]=*(c2+j);  
    }      
        for(int r=0;r<i;r++)      
        {  
        *(c2+r)=str2[r];  
        }   
}   


运行结果截图:


----------------------分割线----------------------



任务2:

定义一维整形数组,对数组分别进行“由大到小”和"由小到大"排序并输出。

要求:用函数和指针实现排序


我的程序:

  1. #include<stdio.h>     
  2. void r(int *a,int n) ;     
  3. void p(int *a,int n) ;      
  4.     
  5. void main()     
  6. {     
  7. int n=5,i,a[30];      
  8.     for(i=0;i<n;i++)      
  9.     {      
  10.         scanf("%d",&a[i]);      
  11.     }      
  12.         r(a,n);     
  13.         for(i=0;i<n;i++)      
  14.         {      
  15.         printf("%d\t",a[i]);    
  16.             
  17.         }    
  18.         printf("\n");    
  19.         p(a,n);    
  20.         for(i=0;i<n;i++)      
  21.         {      
  22.         printf("%d\t",a[i]);      
  23.         }     
  24.     
  25. }      
  26.     
  27.      
  28. void r(int *a,int n)       
  29. {      
  30. int i,j,temp;       
  31. for(i=1;i<n;i++)       
  32. {       
  33.     temp=*(a+i);      
  34.     j=i-1;       
  35.     while(j>=0&&temp<*(a+j))       
  36.    {       
  37.        *(a+j+1)=*(a+j);       
  38.        j--;       
  39.     }       
  40.     *(a+j+1)=temp;       
  41. }      
  42. }    
  43. void p(int *a,int n)       
  44. {      
  45. int i,j,temp;       
  46. for(i=1;i<n;i++)       
  47. {       
  48.     temp=*(a+i);      
  49.     j=i-1;       
  50.     while(j>=0&&temp>*(a+j))       
  51.    {       
  52.        *(a+j+1)=*(a+j);       
  53.        j--;       
  54.     }       
  55.     *(a+j+1)=temp;       
  56. }      
  57. }    
#include<stdio.h>  
void r(int *a,int n) ;   
void p(int *a,int n) ;    
  
void main()   
{   
int n=5,i,a[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]);  
          
        }  
        printf("\n");  
        p(a,n);  
        for(i=0;i<n;i++)    
        {    
        printf("%d\t",a[i]);    
        }   
  
}    
  
   
void r(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;     
}    
}  
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


我的程序:

  1. #include<stdio.h>     
  2.     
  3. void main()      
  4. {      
  5.     char a[100],*p1=a,b[100],*p2=b;      
  6.     printf("请输入字符串\n");      
  7.     gets(a);      
  8.     for(;*p1!=0;p1++)      
  9.     {      
  10.         if(*p1<47||*p1>58)      
  11.         {      
  12.             *p2=*p1;      
  13.             p2++;      
  14.         }      
  15.     }      
  16.     *p2='\0';      
  17.     printf("输出字符串:");      
  18.     puts(b);      
  19. }    
#include<stdio.h>  
  
void main()    
{    
    char a[100],*p1=a,b[100],*p2=b;    
    printf("请输入字符串\n");    
    gets(a);    
    for(;*p1!=0;p1++)    
    {    
        if(*p1<47||*p1>58)    
        {    
            *p2=*p1;    
            p2++;    
        }    
    }    
    *p2='\0';    
    printf("输出字符串:");    
    puts(b);    
}  


运行结果截图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值