通过指针对5*5二维数组进行操作与检验输入的各种字符串

#include <stdio.h>
void counter(){//元素计数器
    int upper=0,lower=0,digit=0,space=0,other=0,i=0;
    char *p,s[20];
    printf("input string:");
    while ((s[i]=getchar())!='\n') {
        i++;
    }
    p=&s[0];
    while (*p!='\n') {
        if (('A'<=*p)&&(*p<='Z')) {
            ++upper;
        }
        else if (('a'<=*p)&&(*p<='z'))
        {
            ++lower;
        }
        else if(*p==' ')
        {
            ++space;
        }
        else if(('0'<=*p)&&(*p<='9'))
        {
            ++digit;
        }
        else
        {
            ++other;
        }
        p++;
    }
    printf("upper case:%d lower case:%d",upper,lower);
    printf("space:%d  digit:%d   other:%d\n",space,digit,other);
}
void cautious()
{
    char *p,a[]="ABCDEF";
    for (p=a; *p!='\0'; ) {
        printf("%s\n,",p);
        p++;
        if (*p!='\0') {
            p++;
        }
        else
        {
            break;
        }
    }
}
void mysterious(){
    int i,k;
    char a[10],b[80],*p;
    p=a;k=0;
    for (i=0; i<7; i++) {
        scanf("%c",p++);
    }
    while (*p)
        for (i=0; i<=3&&*p; p++,k++,i++){
            b[k]=*p;
    if (i==4) {
        b[k]='*';k++;
    }
    b[k]='\0';
    printf("%d\n",b[k]);
}
}
int main(int argc, const char * argv[]) {
    void change(int *);//函数声明
    /*
     将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小元素(顺序为从左到右从上到下顺序依次从小到大存放),
     在main函数中调用
     */
    int a[5][5],*p,i,j;//声明整形二维数组,指针,变量
    printf("input matrix:\n");//提示符
    for (i=0; i<5; i++)//外层循环遍历行数
        for (j=0; j<5; j++)//内层循环遍历列数
            scanf("%d",&a[i][j]);//输入二维数组的元素
    p=&a[0][0];//使p指向0行0列的元素
    change(p);//调用函数实现变换
    printf("now,matrix:\n");
    for (i=0; i<5; i++) {
        for (j=0; j<5; j++)
            printf("%3d",a[i][j]);
        printf("\n");
    }
    counter();
    cautious();
    mysterious();
    return 0;
}
void change(int *p){//交换函数
    int i,j,temp;
    int *pmax,*pmin;
    pmax=p;
    pmin=p;
    for (i=0; i<5; i++)//找出最大值和最小值的地址,并赋值给pmax,pmin
        for (j=i; j<5; j++){
            if (*pmax<*(p+5*i+j)) {
                pmax=p+5*+j;
            }
            if (*pmin>*(p+5*i+j)) {
                pmin=p+5*+j;
            }
        }
    temp=*(p+12);//将最大值换给中心元素
    *(p+12)=*pmax;
    *pmax=temp;
    temp=*p;//将最小值换给左上角的元素
    *p=*pmin;
    *pmin=temp;
    pmin=p+1;
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
            if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))
                pmin=p+5*i+j;
    temp=*pmin;//将第二个最小值换给右上角元素
    *pmin=*(p+4);
    *(p+4)=temp;
    pmin=p+1;
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
            if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))
                pmin=p+5*i+j;
    temp=*pmin;//将第三个最小值换给左下角的元素
    *pmin=*(p+20);
    *(p+20)=temp;
    pmin=p+1;
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
            if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j)))
                pmin=p+5*i+j;
    temp=*pmin;  //将第四个最小值换给右下角的元素
    *pmin=*(p+24);
    *(p+24)=temp;
}

output:

input matrix:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
now,matrix:
  1  5 13 25  2
  6  7  8  9 10
 11 12 21 14 15
 16 17 18 19 20
  3 22 23 24  4
input string:upper case:0 lower case:0space:0  digit:0   other:0
ABCDEF
,CDEF
,EF
,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GOD FOR JAVA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值