作业比赛编号 : 100000571 - 《算法笔记》2.7小节——C/C++快速入门->指针

指针

    • 问题 A: C语言10.1
    • 问题 B: C语言10.2
    • 问题 C: C语言10.10
    • 问题 D: C语言10.15
    • 问题 E: C语言10.16

问题 A: C语言10.1

题目描述
输入a和b两个整数,按先大后小的顺序输出a和b。注意请使用指针变量的方式进行比较和输出。
输入
两个用空格隔开的整数a和b。
输出
按先大后小的顺序输出a和b,用空格隔开。
请注意行尾输出换行。
样例输入 Copy
5 9
样例输出 Copy
9 5

#include 

int main()
{
    int a,b,c;
    int *p,*q;
    scanf("%d%d",&a,&b);
    p=&a;
    q=&b;
    if(*p<*q){
        c=*p;
        *p=*q;
        *q=c;
    }
    printf("%d %d\n",*p,*q);
    return 0;
}

问题 B: C语言10.2

题目描述
输入a、b、c三个整数,按先大后小的顺序输出a、b和c。注意请使用指针变量的方式进行比较和输出。
输入
三个用空格隔开的整数a、b和c。
输出
按先大后小的顺序输出a、b和c,用空格隔开。
请注意行尾输出换行。
样例输入 Copy
9 0 10
样例输出 Copy
10 9 0

#include 

int main()
{
    int a,b,c,temp;
    int *p,*q,*r;
    scanf("%d%d%d",&a,&b,&c);
    p=&a;
    q=&b;
    r=&c;
    if(*p<*q){
        temp=*p;
        *p=*q;
        *q=temp;
    }
    if(*p<*r){
        temp=*p;
        *p=*r;
        *r=temp;
    }
    if(*q<*r){
        temp=*q;
        *q=*r;
        *r=temp;
    }
    printf("%d %d %d\n",*p,*q,*r);
    return 0;
}

问题 C: C语言10.10

题目描述
给定字符串定义char *a = “I love China!”,读入整数n,输出在进行了a = a + n这个赋值操作以后字符指针a对应的字符串。
输入
一个整数n,保证0<=n<13.
输出
输出进行了题目描述中赋值操作之后a对应的字符串。
请注意行尾输出换行。
样例输入 Copy
7
样例输出 Copy
China!

#include 

int main()
{
    int n;
    char *a="I love China!";
    scanf("%d",&n);
    printf("%s\n",a+n);
    return 0;
}

问题 D: C语言10.15

题目描述
输入3个字符串,按从小到大的顺序输出。要求使用指针的方法进行处理。
输入
3行,每行一个用字符串。保证每个字符串的长度不超过20。
输出
按从小到大的顺序输出这3个字符串,每个字符串一行。
请注意行尾输出换行。
样例输入 Copy
China
CLOCK
deal
样例输出 Copy
CLOCK
China
deal

#include 
#include 
int main()
{
     void swap(char *,char *);
     char str1[20],str2[20],str3[20];
     scanf("%s%s%s",str1,str2,str3);
     if(strcmp(str1,str2)>0)  swap(str1,str2);
     if(strcmp(str1,str3)>0)  swap(str1,str3);
     if(strcmp(str2,str3)>0)  swap(str2,str3);
     printf("%s\n%s\n%s\n",str1,str2,str3);
     return 0;
 }

 void swap(char *p1,char *p2)
 {
    char p[20];
    strcpy(p,p1);
    strcpy(p1,p2);
    strcpy(p2,p);
 }
#include 
#include

void swap(char **a, char **b) {
    char *temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    char a[30], b[30], c[30];
    scanf("%s%s%s", a, b, c);
    char *p1 = a, *p2 = b, *p3 = c;
    if (strcmp(p1, p2) > 0) swap(&p1, &p2);
    if (strcmp(p1, p3) > 0) swap(&p1, &p3);
    if (strcmp(p2, p3) > 0) swap(&p2, &p3);
    printf("%s\n%s\n%s\n", p1, p2, p3);
    return 0;
}
#include 
#include

void swap(char **a, char **b) {
    char *temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    char str[3][20], *p[3];
    for (int i = 0; i < 3; i++) {
        gets(str[i]);
        p[i] = str[i];
    }
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 2 - i; j++) {
            if (strcmp(p[j], p[j + 1]) > 0) {
                swap(&p[j], &p[j + 1]);
            }
        }
    }
    for (int i = 0; i < 3; i++) {
        printf("%s\n", p[i]);
    }
    return 0;
}

问题 E: C语言10.16

题目描述
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。
输入
用空格隔开的10个整数。
输出
输出进行题目描述操作之后的10个整数,每个整数之后输出一个空格。
请注意行尾输出换行。
样例输入 Copy
1 5 2 4 9 0 3 8 7 6
样例输出 Copy
0 5 2 4 6 1 3 8 7 9

#include 

int main()
{
    void input(int *);
	void output(int *);
	void process(int *);
	int num[10];
	input(num);
	process(num);
	output(num);

    return 0;
}

void input(int *num){
	for (int i=0;i<10;i++){
		scanf("%d",&num[i]);
	}
}

void process(int *num){
	int *min,*max,temp;
	min=max=&num[0];
	for (int i=0;i<10;++i)
	{
		if (*min>num[i])
			min = &num[i];
		if(*max<num[i])
			max= &num[i];
	}
	
	temp= num[0];
	num[0]=*min;
	*min= temp;
	
	temp= num[9];
	num[9]=*max;
	*max= temp;
}

void output(int *num){
	for (int i=0;i<10;++i){     
	    if(i==9)
            printf("%d\n",num[i]);
        else
		    printf("%d ",num[i]);
	}
}

你可能感兴趣的:(算法笔记,c语言,c++,算法)