6-1 计算两数的和与差(10 分)
1.案例描述
需要写一个被题干调用的函数,被调用函数的作用是计算两个数的和与差,根据“函数接口定义”确定了变量,op1和op2是输入的两个实数,psum和pdiff是计算得出的和与差。
2.算法设计
(1)根据题干给*psum、 *pdiff
赋值
3.流程图
4. [代码]
(https://github.com/dangrui/dangrui.git)
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum = op1+op2;
*pdiff = op1-op2;
}
5.问题与解决方法
再调用函数中,此句后边加了分号void sum_diff( float op1, float op2, float *psum, float *pdiff )
在之前已经被声明了,不能重复声明。
6-2 拆分实数的整数与小数部分(15 分)
1.案例描述
需要写一个被题干调用的函数,被调用函数的作用是将这个数的小数和整数部分分开,根据“函数接口定义”确定了变量,x, intpart, fracpart其中x是被拆分的实数(0≤x<10000),intpart和fracpart分别是将实数x拆分出来的整数部分与小数部分。
2.算法设计
(1)将定义的float类型的X强制转换成int型取整
(2)取得整数部分后用X - 整数部分 = 小数部分
3.流程图
4.代码
(https://github.com/dangrui/dangrui.git)
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart = (int)x;
*fracpart = x - *intpart;
}
5.问题与解决方法
开始认为取余便可得到整数部分*intpart = x%10 -*fracpart;
无效操作数的二进制%(有“浮”和“int”)
之后又把程序改为*intpart = (int)x%10 -*fracpart;
结果只有个位数的数字才有用十位以上就不对了
之后遍去百度“如何取整”得到答案---[x]或INT(x)---
6-1 在数组中查找指定元素(15 分)
1.案例描述
需要写一个被题干调用的函数,被调用函数的作用是在输入的一串数字中查找指定元素,根据函数接口int search( int list[], int n, int x );
进行编译,确定输出结果。
2.算法设计
(1)做一个循环将所有的数查找一遍。
(2)用if语句进行判断,如果找到则函数search
返回相应元素的最小下标(下标从0开始),否则返回−1。
3.流程图
4.代码
(https://github.com/dangrui/dangrui.git)
int search(int list[],int n,int x) //如果找到一样的值,返回下标,下标是从0开始的,所以返回值不加1
{
int i;//i最小下标
for(i = 0;i <= n;i++)
{
if(list[i] == x)
return i;
}
return -1;
}
6-2 找最大值及其下标(10 分)
1.案例描述
需要写一个被题干调用的函数,被调用函数的作用是找出输入的数字中最大数及其下标,根据函数接口int fun(int *a,int *b,int n);
进行编译,确定输出结果。
2.算法设计
(1)将max的初始值定为*a
(2)定义一个循环找出最大值
(3)将最大值赋给max
(4)将下标i赋给b
3.流程图
4.代码
(https://github.com/dangrui/dangrui.git)
int fun(int *a,int *b,int n)
{
int max =*a,i;
for(i=1;i<n;i++)
if(*(a+i)>max)
{
max = *(a+i);
*b = i;
}
return max;
}
5.问题与解决方法
没给max赋初值,将一串数字的首位*a赋给max.
6-1 最小数放前最大数放后(10 分)
1.案例描述
需要写一个被题干调用的函数,被调用函数的作用是将其中最小的数与第一个数对换,将最大的数与最后一个数对换,根据函数接口
void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);
确定输出结果。
2.算法设计
(1)输入
(2)找出最大值和最小值并与首位、末位交换位置
(3)输出
3.流程图
4.代码
(https://github.com/dangrui/dangrui.git)
void input(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",arr+i);
}
void max_min(int *arr,int n)
{
int min =arr[0], max =arr[0] ;
int i,t;
int j=0,p=0;
for(i=0;i<n;i++)
{
if(*(arr+i)<min)
{
min = *(arr+i);
p =i ;
}
if(max<*(arr+i))
{
max = *(arr+i);
j = i ;
}
}
t=*(arr+0);
*(arr+0)=*(arr+p);
*(arr+p)=t;
t=*(arr+n-1);
*(arr+n-1)=*(arr+j);
*(arr+j)=t;
}
void output(int *arr,int n)
{
int i;
for(i = 0;i<n;i++)
printf("%3d",arr[i]);
}
5.问题与解决方法
(1)在input中输入下标时,不能加&否则数组下标类型无效
(2)“int arr [ 0 ]“阴影参数,要将它赋值到一个已知变量中
(3)错误的一元“*”类型的参数(有“int”),直接打arr【】既可
6-2 指针选择法排序(10 分)
1.案例描述
需要写一个被题干调用的函数,被调用函数的作用是将数字按从大到小的顺序依次排列,根据函数接口void sort(int *x,int n);
进行编译,确定输出结果。
2.算法设计
(1)设计一个循环,比较前后两个数的大小
(2)交换位置
3.流程图
4.代码
(https://github.com/dangrui/dangrui.git)
{
int i,j,s,t;
for(i=0;i<n-1;i++)
{
s=i;
for(j=i+1;j<n;j++)
{
if(*(x+s)<*(x+j))
{
s=j;
}
}
if(s!=i)
{
t=*(x+i);
*(x+i)=*(x+s);
*(x+s)=t;
}
}
}
6-1 判断回文字符串(20 分)
1.案例描述
需要写一个被题干调用的函数,被调用函数的作用是判断字符串两边是否对称,根据函数接口bool palindrome( char *s );
进行编译,确定输出结果。
2.算法设计
(1)for循环遍历数组
(2)不对称false,对称true
3.流程图
4.代码
(https://github.com/dangrui/dangrui.git)
bool palindrome(char *s) //定义返回值为布尔类型的函数
{
char *a = s;
int i = 0,j=0,k=0;
while (*a != '\0')
{
a++;
i++;
}
a--; //因为最后一为为'\0'所以减一位
while (*s != '\0') //进行两个比较
{
if (*s == *a)
{
k++;
}
else
{
return false;
}
s++;
a--;
}
if (k == i) //如果每个都相等 k=i返回true
{
return true;
}
}
5.问题与解决方法
(1)因为最后一为为'\0'所以减一位
(2)直接将两边的字符进行比对既可
6-2 使用函数实现字符串部分复制(20 分)
1.案例描述
需要写一个被题干调用的函数,被调用函数的作用是复制部分字符串,根据函数接口void strmcpy( char *t, int m, char *s );
进行编译,确定输出结果。
2.算法设计
(1)写一个循环,首先确保所给位置在输出的字符串中
(2)输出此位置之后的字符串
3.流程图
4.代码
(https://github.com/dangrui/dangrui.git)
void strmcpy( char *t, int m, char *s )
{
int i;
for(i=m;*(t+i-1)!='\0';i++)
{
*(s+i-m)=*(t+i-1);
}
*(s+i-m)='\0';
}
时间总结
托管代码
学习总结
以前写PTA如果懒了的话,就找同学的抄一下就好,但是现在不行了,上课之后要看书重新捋顺知识,之后做PTA,不懂的地方错误的原因都要标注出来,只有这样才能更好地完成博客作业,这也使得我对C语言的学习投入了更多的精力,和时间,也和我的懒惰做了对抗。
评论同学
王帅(http://www.cnblogs.com/moxiaoshuai/p/8633373.html)
张琪(http://www.cnblogs.com/zhang03/p/8641322.html#3933170)
邓欣茹(http://www.cnblogs.com/dxfish/p/8597352.html)
焦瑞君(http://www.cnblogs.com/jiaoruijun/p/8639383.html)
梁圣然(http://www.cnblogs.com/messi6/p/8626565.html)