6-1 计算两数的和与差(10 分)
本题要求实现一个计算输入的两数的和与差的简单函数。
函数接口定义:
void sum_diff( float op1, float op2, float *psum, float *pdiff );
其中op1
和op2
是输入的两个实数,*psum
和*pdiff
是计算得出的和与差。
裁判测试程序样例:
#include <stdio.h>
void sum_diff( float op1, float op2, float *psum, float *pdiff );
int main()
{
float a, b, sum, diff;
scanf("%f %f", &a, &b);
sum_diff(a, b, &sum, &diff);
printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
4 6
输出样例:
The sum is 10.00 The diff is -2.00
1.本题PTA提交列表
2.设计思路(包括流程图),主要描述题目算法
本题很简单,只用写函数的代码,让两个数两加或者想减的结果等于指针就可以了
最终需要加入的代码是
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{ *psum=op1+op2;*pdiff=op1-op2;}
运行的结果是
6-5 利用指针找最大值(10 分)
本题要求实现一个简单函数,找出两个数中的最大值。
函数接口定义:
void findmax( int *px, int *py, int *pmax );
其中px
和px
是用户传入的两个整数的指针。函数findmax
应找出两个指针所指向的整数中的最大值,存放在pmax
指向的位置。
裁判测试程序样例:
#include <stdio.h>
void findmax( int *px, int *py, int *pmax );
int main()
{
int max, x, y;
scanf("%d %d", &x, &y);
findmax( &x, &y, &max );
printf("%d\n", max);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
3 5
输出样例:
5
1.本题PTA提交列表
2.设计思路(包括流程图),主要描述题目算法
在函数中用if语句比较两个数的大小给pamx指针
最后的子函数代码为
void findmax( int *px, int *py, int *pmax )
{
if(px>py)
{
pmax=px;}
else
{
pmax=py; }
}
执行的结果如下
发现少了指针的那个符号没有指向指针所指的值
修改后得到
void findmax( int *px, int *py, int *pmax )
{
if(*px>*py)
{
*pmax=*px;}
else
{
*pmax=*py; }
}
运行的结果如下
6-6 使用函数实现字符串部分复制(20 分)
本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。
函数接口定义:
void strmcpy( char *t, int m, char *s );
函数strmcpy
将输入字符串char *t
中从第m
个字符开始的全部字符复制到字符串char *s
中。若m
超过输入字符串的长度,则结果字符串应为空串。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 20
void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char t[MAXN], s[MAXN];
int m;
scanf("%d\n", &m);
ReadString(t);
strmcpy( t, m, s );
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
7
happy new year
输出样例:
new year
1.本题PTA提交列表
2.设计思路(包括流程图),主要描述题目算法
先把t的字符串全部复制到s中去,然后确定s的长度
然后通过循环一个一个将后面的字符往前移动,直到移动到m个字符处。
最终代码如下
void strmcpy( char *t, int m, char *s ){
int i,len;
strcpy(s, t);
len = strlen(s);
for(i=len-m-1;i>0;i--){
*(s+i-1)=*(s+i);
}
*(s+len-m+1)=‘\0‘;
}
发现想要通过一重循环不好实现
所以不正确
修改后的代码是
void strmcpy( char *t, int m, char *s ){
int i,j,len;
strcpy(s, t);
len = strlen(s);
for(i=m-1;i>0;i--){
for(j=i;j<len;j++){
*(s+j-1)=*(s+j);
}
}
*(s+len-m+1)=‘\0‘;
}