[C程序设计]第八章 善于利用指针

1.输入三个数,由大到小排序

#include<stdio.h>
int main()
{
	int *p1=NULL;
	int *p2=NULL;
	int *p3=NULL;
	int a,b,c;
	a=b=c=0;
	scanf("%d%d%d",&a,&b,&c);
	p1=&a;p2=&b;p3=&c;
	if(*p1<*p2)
	{
		int *t=p1;
		p1=p2;
		p2=t;
	}
	if(*p1<*p3)
	{
		int *t=p1;
		p1=p3;
		p3=t;
	}
	if(*p2<*p3)
	{
		int *t=p2;
		p2=p3;
		p3=t;
	}
	printf("%d\n%d\n%d\n",*p1,*p2,*p3);
	return 0;
}

2.输入三个字符串,按由小到大的顺序输出

#include<iostream>
using namespace std;
main()
{
	char x[10];
	char y[10];
	char z[10];
	cin.getline(x,10);
	cin.getline(y,10);
	cin.getline(z,10);
	char *p1=NULL;	char *p2=NULL;	char *p3=NULL;
	p1=x;p2=y;p3=z;
	if(strcmp(x,y)>=0)
	{
		char *t=p1;
		p1=p2;
		p2=t;
	}
	if(strcmp(x,z)>=0)
	{
		char *t=p1;
		p1=p3;
		p3=t;
	}
	if(strcmp(y,z)>=0)
	{
		char *t=p2;
		p2=p3;
		p3=t;
	}
	printf("%s\n%s\n%s\n",p1,p2,p3);
	return 0;
}

3.10个整数,最小的与第一位调换,最大的与最后一位调换

#include<stdio.h>
int main()
{
	int x[10];
	for(int i=0;i<10;i++)
		scanf("%d",&x[i]);
	int min,max;
	min=max=x[0];
	int *p1=NULL;
	int *p2=NULL;
	for(i=1;i<10;i++)
	{
		if(x[i]<min)
		{
			min=x[i];
			p1=&x[i];
		}
		if(x[i]>max)
		{
			max=x[i];
			p2=&x[i];
		}
	}
	int t=*p1;*p1=x[0];x[0]=t;
	t=*p2;*p2=x[9];x[9]=t;
	for(i=0;i<10;i++)
		printf("%d\n",x[i]);
	return 0;
}

4.循环移动

#include<stdio.h>  
int main()  
{  
    int n,m;  
    n=m=0;  
    int x[100]={0};  
    printf("输入n,m:");  
    scanf("%d%d",&n,&m);  
    for(int i=0;i<n;i++)  
    {  
        scanf("%d",&x[i]);  
    }  
    for(i=0;i<m;i++)  
    {  
        for(int j=1;j<n;j++)  
        {  
            int temp=0;  
            temp=x[n-j];  
            x[n-j]=x[n-1-j];  
            x[n-1-j]=temp;  
        }  
    }  
    for(i=0;i<n;i++)  
        printf("%d\n",x[i]);  
    return 0;  
}

7.一个字符串,从m开始换成其他字符串

#include<stdio.h>
#include<string>
int main()
{
	char x[10];
	char y[10];
	gets(x);
	gets(y);
	char *m=NULL;
	char *n=NULL;
	int c=0;
	scanf("%d",&c);
	m=x+c;
	n=y;
	strcpy(m,n);
	puts(m);
	return 0;
}

8.计算字符串字母空格数字其他字符多少

#include<iostream>  
using namespace std;  
int main()  
{  
    char x[50]={0};  
    int letter=0;  
    int space=0;  
    int num=0;  
    int other=0;  
    cin.getline(x,50);  
    for(int i=0;x[i]!='\0';i++)  
    {  
        if(x[i]>='a'&&x[i]<='z'||x[i]>='A'&&x[i]<='Z')  
            letter++;  
        else if(x[i]==' ')   space++;  
        else if(x[i]>='0'&&x[i]<='9')  num++;  
        else other++;  
    }  
    printf("%d\n%d\n%d\n%d\n",letter,space,num,other);  
    return 0;  
}  

9.3*3矩形转置

#include<stdio.h>  
void change(int x[3][3])  
{  
    for(int i=1;i<=2;i++)  
        for(int j=0;j<=1;j++)  
        {  
            int temp=x[i][j];  
            x[i][j]=x[j][i];  
            x[j][i]=temp;  
        }  
    for(i=0;i<3;i++)  
    {  
        for(int j=0;j<3;j++)  
            printf("%d",x[i][j]);  
        printf("\n");  
    }  
}  
int main()  
{  
    int a[3][3]={0};  
    for(int i=0;i<3;i++)  
        for(int j=0;j<3;j++)  
            scanf("%d",&a[i][j]);  
    change(a);  
    return 0;  
} 

11.十个等长的字符串,有小到大输出

#include<iostream>
using namespace std;
main()
{
	char x[10];
	char y[10];
	char z[10];
	cin.getline(x,10);
	cin.getline(y,10);
	cin.getline(z,10);
	char *p1=NULL;	char *p2=NULL;	char *p3=NULL;
	p1=x;p2=y;p3=z;
	if(strcmp(x,y)>=0)
	{
		char *t=p1;
		p1=p2;
		p2=t;
	}
	if(strcmp(x,z)>=0)
	{
		char *t=p1;
		p1=p3;
		p3=t;
	}
	if(strcmp(y,z)>=0)
	{
		char *t=p2;
		p2=p3;
		p3=t;
	}
	printf("%s\n%s\n%s\n",p1,p2,p3);
	return 0;
}

类似的题目,改用二维数组存放字符串,用char (*p)[10]指针指向一行数组


猜你喜欢

转载自blog.csdn.net/daisy_fight/article/details/80114865