山科大OJ-Promble 指针的运用

#include<stdio.h>
int compare(int *min,int *mid,int *max)
{
    int temp;
    if(*min>*mid)//我一开始所有的变量都没有加*,输出时候任何数据的位置都没有改变
    {
        temp=*min;
        *min=*mid;
        *mid=temp;
    }
    if(*min>*max)
    {
        temp=*min;
        *min=*max;
        *max=temp;
    }
    if(*mid>*max)
    {
        temp=*mid;
        *mid=*max;
        *max=temp;
    }
}
int main()
{
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    compare(&a, &b, &c);
    printf("%d %d %d", a, b, c);
    return 0;
}

Problem B: 编写函数:三个数的最大最小值 (Append Code)

Time Limit: 1 Sec   Memory Limit: 2 MB Submit: 8417   Solved: 5481[ Submit][ Status][ Web Board]

Description

给出三个数a,b,c,最大值是?最小值是?

-----------------------------------------------------------------------------

编写以下两个函数:

get_num()的功能是读取输入的三个整数a,b,c;

max_min()的功能是求出a,b,c的最大值和最小值。

以上函数的调用格式见“Append Code”。这里不给出函数原型,请通过main()函数自行确定。

Input

输入的第一个整数n,表示有n组测试数据,每组3个整数:a,b,c。a,b,c都在int类型范围内。

Output

每组测试数据对应输出一行:为a,b,c的最大值和最小值,格式见sample。

Sample Input

5
20 15 10
10 15 20
100 100 0
0 1 -1
0 0 0

Sample Output

case 1 : 20, 10
case 2 : 20, 10
case 3 : 100, 0
case 4 : 1, -1
case 5 : 0, 0

HINT

Append Code

[ Submit][ Status][ Web Board]
#include<stdio.h>
int get_num(int *a,int *b,int *c)
{
    scanf("%d %d %d",a,b,c);//和A题一样的问题,但是这个不加指针就能够输出正确答案
}
int max_min(int *mmax,int *mmin,int *a,int *b,int *c)
{
    int temp;
    if(a<b)
    {
        temp=a;
        a=b;
        b=temp;
    }
    if(a<c)
    {
        temp=a;
        a=c;
        c=temp;
    }
    if(b<c)
    {
        temp=b;
        b=c;
        c=temp;
    }
    *mmax=a;
    *mmin=c;

}
int main()
{
    int cases, i;
    int mmax, mmin, a, b, c;

    scanf("%d", &cases);
    for(i = 1; i <= cases; i++)
    {
        get_num(&a, &b, &c);
        max_min(&mmax, &mmin, a, b, c);
        printf("case %d : %d, %d\n", i, mmax, mmin);
    }
}

Problem A: A+B Problem (VIII) : Pointer Practice (Append Code)

Time Limit: 1 Sec   Memory Limit: 2 MB Submit: 4118   Solved: 3302[ Submit][ Status][ Web Board]

Description

计算a+b,0<=a,b<1000。

-----------------------------------------------------------------------------

编写一个函数get_int_sum()输入a,b的值,并计算a+b。

用C语言实现,函数原型为

int get_int_sum(int *, int *);

功能:函数的参数传入a和b的地址,用来存储输入两数的值,返回值是两数之和。

用C++实现,函数原型为

int get_int_sum(int &, int &);

功能:函数的参数传入a和b的引用,用来存储输入两数的值,返回值是两数之和。

get_int_sum()的调用格式见“Append Code”。

Input

输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。

Output

每行输出一个a+b的和,顺序与输入对应。

格式为“sum = a + b”,具体参见输出样例。

Sample Input

21 210 20

Sample Output

3 = 1 + 230 = 10 + 20

HINT

 参看系统首页上的“Append Code”使用说明,讨论版(Web Board)上也有。

Append Code

[ Submit][ Status][ Web Board]
#include<stdio.h>
#include<string.h>
int get_int_sum(int *a, int *b)
{
    int sum=0;
    scanf("%d %d",a,b);
    sum=*a+*b;
    return sum;
}
int main()
{
    int n, a, b, i;
    scanf("%d", &n);
    for(i = 1; i <= n; i++)
    {
        printf("%d = ", get_int_sum(&a, &b));
        printf("%d + %d\n", a, b);
    }
    return 0;
}



Problem C: 编写函数:字符串的复制 之一 (Append Code)

Time Limit: 1 Sec   Memory Limit: 2 MB Submit: 4972   Solved: 2958[ Submit][ Status][ Web Board]

Description

将输入的一个字符串s拷贝输出。

-----------------------------------------------------------------------------

编写一个函数str_cpy()求一个串的拷贝:

原型:char * str_cpy(char * t, char * s);

功能:把串s复制到串t中,返回值是串t。

函数的调用格式见“Append Code”。

-----------------------------------------------------------------------------

Invalid Word(禁用单词)错误:在解决这个题目时,某些关键词是不允许被使用的。如果提交的程序中包含了下列的关键词之一,就会产生这个错误。

被禁用的头文件:string.h、stdlib.h。被禁用的库函数:strcpy()、strncpy()、memcpy()等。

Input

输入为多行。每行为一个字符串s。s的字符总数不超过100个。

Output

串s的复制。

输出两遍,一遍是测试返回值,一遍是测试str。

Sample Input

2 Look!5 I love china!

Sample Output

2 Look!2 Look!5 I love china!5 I love china!

HINT

 str_cpy()的返回值参考标准库函数strcpy()、strstr()、strchr()的设计思路:返回指向目标串的指针。

Append Code

[ Submit][ Status][ Web Board]
#include<stdio.h>
#define MAX_STR_LEN 101
char * str_cpy(char * t, char * s)
{
    int i;
    for(i=0;*(s+i)!=0;i++)
        *(t+i)=*(s+i);
    *(t+i)='\0';
    return t;
}
int main()
{
    char s[MAX_STR_LEN], str[MAX_STR_LEN], *p;
    while(gets(s) != NULL)
    {
        p = str_cpy(str, s);
        puts(p);
        puts(str);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值