HAUTOJ:1158——1162

博客围绕C语言指针专题展开,包含多个题目。如将4个整数排序、求n个整数中最大的两个元素、找出2×3矩阵最大值及其下标、求字符串长度(不计空格)、整数数组循环移动等,还给出了各题的输入输出要求及代码实现思路。

1158: 又是排序(指针专题)

题目描述

将输入的四个整数按由大到小的顺序输出。 
已定义如下swap函数,可实现形参pa和pb所指内存单元的内容交换。请务必使用本函数实现两个变量内容的互换。 
void swap( int *pa, int *pb) 

int t; 
t=*pa; *pa=*pb; *pb=t; 

输入

输入4个整数,用空格隔开。

输出

输出排序后的4个整数,由空格隔开。输出占一行。

样例输入 Copy

4 3 5 2

样例输出 Copy

5 4 3 2

代码实现:

#include<stdio.h>
void print(int *p){
    for(int i=0;i<4;i++){
        printf("%d ",p[i]);
    }
}
int main(){
    int a[4],*p=a;
    for(int i=0;i<4;i++){
        scanf("%d",&a[i]);
    }
    for(int i=0;i<3;i++){
        for(int j=i+1;j<4;j++){
            if(a[i]<a[j]){
                int temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    print(p);
    return 0;
}

 1159: 最大的两个数(指针专题)

题目描述

求n个整数中的最大的两个元素。要求定义一个函数LargestTow(),求数组a的最大的两个元素,分别存入形参指针pfirst和psecond所指存储单元,函数原型如下:

void LargestTow(int a[],int n,int *pfirst,int *psecond) 

/*数组a有n个元素,将数组中的最大值存入形参指针pfirst所指内存单元,将数组中第二大的值存入形参指针psecond所指内存单元。 */
}

输入

输入有两行,输入第一行是一个整数n,1<n<=1000;第二行是n个整数,由空格隔开。

输出

输出两个整数,表示数组中最大的两个值。输出占一行。

样例输入 Copy

5
6 3 4 9 8

样例输出 Copy

9 8

代码实现:

#include<stdio.h>
void print(int *p){
	 for(int i=0;i<2;i++){
        printf("%d ",p[i]);
    }
}
int main(){
    int n,*p,num[1000];
    p=num;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&num[i]);
    }
    for(int i=0;i<n-1;i++){
        for(int j=i+1;j<n;j++){
            if(num[i]<num[j]){
                int temp=num[i];
                num[i]=num[j];
                num[j]=temp;
            }
        }
    }
   print(p);
    return 0;
}

 1160: 矩阵的最大值(指针专题)

题目描述

找出一个2×3的整数矩阵中的最大值及其行下标和列下标,要求调用函数FindMax(int p[][3], int m, int n, int *pRow, int *pCol)实现,行下标和列下标在形参中以指针的形式返回。 
void FindMax(int p[][3], int m, int n, int *pRow, int *pCol){ 
//在m*n矩阵p中查找最大值,将其行下标存入pRow所指内存单元,将其列下标存入pCol所指内存单元 

输入

输入2行3列整数,共6个。

输出

输出3个整数,矩阵中的最大值及其行下标和列下标,数据之间用空格隔开。测试数据保证最大值唯一。

样例输入 Copy

100 3 6
0 87 65

样例输出 Copy

100 0 0

代码实现:

#include<stdio.h>
void FindMax(int p[][3],int m,int *pRow,int *pCol){
    for(int i=0;i<2;i++){
        for(int j=0;j<3;j++){
            if(p[i][j]>m){
                m=p[i][j];
                *pRow=i;
                *pCol=j;
            }
        }
    }
    printf("%d %d %d",m,*pRow,*pCol);
}
int main(){
    int a[2][3],row,col,(*p)[3]=a,*pRow=&row,*pCol=&col,max;
    for(int i=0;i<2;i++){
        for(int j=0;j<3;j++){
            scanf("%d",&a[i][j]);
        }
    }
    max=a[0][0];
    row=0;
    col=0;
    FindMax(p,max,pRow,pCol);
    return 0;
}

 1161: 字符串长度(指针专题)

题目描述

编写一函数len,求一个字符串的长度,注意该长度不计空格。要求用字符指针实现。在主函数中输入字符串,调用该len函数后输出其长度。 
int len(char *sp) 

//实现sp所指串的长度,不计空格。 

输入

输入一个字符串,以回车结束,长度不超过100。

输出

输出一个整数,单独占一行。

样例输入 Copy

What day is today?

样例输出 Copy

15

代码实现:

#include<stdio.h>
void len(char *p){
    int i=0,sum=0;
    while(p[i]!='\0'){
        if(p[i]!=' '){
            sum++;
        }
        i++;
    }
    printf("%d",sum);
}
int main(){
    char c[101];
    char *p=c;
    gets(c);
    len(p);
    return 0;
}

 1162: 循环移动(指针专题)

题目描述

有n个整数,使前面各数顺序向后移动k个位置,移出的数再从开头移入。输出移动后的数组元素。 
题目没有告诉你n的范围,希望你读入n之后用malloc()函数动态申请内存空间,不要提前定义数组的大小。不要偷懒哦。 
另外要求定义并使用函数ringShift() 
void ringShift(int *a, int n, int k) 

//循环移动后的数值仍然存入数组a中 
}

输入

输入分3行,第一行是一个整数n,第二行是n个整数,用空格隔开。第三行是一个整数k。

输出

输出n个整数,由空格隔开。输出占一行。

样例输入 Copy

6
1 2 3 4 5 6
2

样例输出 Copy

5 6 1 2 3 4

代码实现:

#include<stdio.h>
#include<stdlib.h>
void ringShift(int *a,int n,int k){
    int *b=(int *)malloc(sizeof(int)*n);
    for(int i=0;i<n;i++){
        b[(i+k)%n]=a[i];
    }
    for(int i=0;i<n;i++){
        printf("%d ",b[i]);
    }
}
int main(){
    int n;
    scanf("%d",&n);
    int *p=(int *)malloc(sizeof(int)*n);
    for(int i=0;i<n;i++){
        scanf("%d",&p[i]);
    }
    int k;
    scanf("%d",&k);
    ringShift(p,n,k);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值