第六次作业:指针
(以下题目如无特殊声明,请使用指针技术实现,尽量不要使用数组作为形参,也尽量避免使用数组下标引用数组元素)
1.数组元素循环移位
有n个整数,使前面的各整数顺序向后移动m个位置,后面的m个整数则变成最前面的m个数。写一函数实现以上功能。
在主函数中输入n及n个整数,输入m (m<n),调用编写的上述函数,然后输出调整后的n个整数。
#include<stdio.h>
void main()
{
    void inv(int *p,int n,int m);
    int n,m,a[20],*p;
    printf("please input n=");
    scanf("%d",&n);
    printf("please input %d numbers:",n);
    p=a;
    while(p<a+n)
        scanf("%d",p++);
    printf("please input m=");
    scanf("%d",&m);
    p=a;
    inv(a,n,m);
    printf("the new array:\n");
    while(p<a+n)
        printf("%d ",*p++);
    putchar('\n');
}
void inv(int *p,int n,int m)
{
    int i;
    for(i=1;i<=n;i++)
        *(p+n-i+m)=*(p+n-i);
    for(i=0;i<m;i++)
        *(p+i)=*(p+n+i);
}
2.矩阵元素的排序
将一个5×5的整数型矩阵中各元素重新排序。排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即 。要求编写一个函数实现上述排序功能。
在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。
#include<stdio.h>
void main()
{
    void inv(int (*x)[5]);
    int i,j,a[5][5];
    int (*p)[5];
    printf("please input an 5*5 array:\n");
    p=a;
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
            scanf("%d",*(p+i)+j);
    inv(p);
    printf("the new array:\n");
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
            printf("%4d",*(*(p+i)+j));
        putchar('\n');
    }
    putchar('\n');
}
void inv(int (*x)[5])
{
    int i,j,t;
    for(i=0;i<24;i++)
        for(j=i+1;j<25;j++)
        {
            if(*(*x+i)>*(*x+j))
            {t=*(*x+i);*(*x+i)=*(*x+j);*(*x+j)=t;}
        }
    return;
}
3.星期的查
编写一个程序,输入一个1~7之间的整数,表示星期几,然后输出相应的文字。
例如:如用户输入3,则输出“星期三”。
要求:用指针数组的方法来实现。
#include<stdio.h>
void main()
{
    int n;
    char (*p)[3];
    char a[7][3]={"一","二","三","四","五","六","七"};
    printf("please input n=");
    scanf("%d",&n);scanf输入整型数组
    p=a;
    printf("星期%s\n",p+n-1);
}
4.字符串库函数的实现
请使用指针的方法来实现如下的库函数:
Char * strncpy( char *s, char * t, int n)  //复制t的前n个字符至s
Char * strncat( char *s, char * t, int n)  //连接t的前n个字符至s的末尾
int strncmp( char *s, char * t, int n)  //比较s和t的前n个字符
并请编写一个主函数来调用并测试自己编写的库函数。
#include<stdio.h>
#include<string.h>
char *strncpy(char *s,char *t,int n)
{
    int i,length;
    length=strlen(s);
    for(i=0;i<n;i++)
        *(s+i)=*(t+i);
    if(length<n)*(s+n)='\0';
    return(s);
}
char *strncat(char *s,char *t,int n)
{
    int i,length;
    length=strlen(s);
    for(i=0;i<n;i++)
        *(s+i+length)=*(t+i);
    *(s+length+n)='\0';
    return(s);
}
int strncmp(char *s,char *t,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        if(*(s+i)==*(t+i))continue;
        else if(*(s+i)>*(t+i)){return(1);break;}
        else {return(-1);break;}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。