第一次作业
---恢复内容开始---
### C高级第一次PTA作业(1)6-1 计算两数的和与差
1.设计思路
(1)描述算法
第一步:阅读并找到函数接口。
第二步:计算 op1+op2,并赋给 *psum。
计算 op1-op2,并赋给 *pdiff。
(2)流程图
2.实验代码
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}
3.本题调试过程中碰到的问题及解决办法
错误原因:没有输入函数接口定义。
改正方法:输入函数接口定义。
6-2 拆分实数的整数与小数部分
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:定义浮点数 X. 将X中的整数传递给指针 *intpart,小数部分传递给指针 *fracpart.
(2)流程图
2.实验代码
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int)x;
*fracpart=x-*intpart;
}
3.本题调试过程中碰到的问题及解决办法
错误原因:编译错误。
解决办法:在x前加(int)。
C高级第一次PTA作业(2)
6-1 在数组中查找指定元素
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:定义数组list[],b=-1。
第四步:遍历数组list[]中的数,分别与待查找元素相比,如果相等则跳出循环,并将下角标赋给b。
第五步:输出b。
(2)流程图
2.实验代码
int search( int list[], int n, int x )
{
int i;
int b;
b=-1;
for(i=0;i<=n;i++)
{
if(list[i]==x)
{
b=i;
break;
}
}return b;
}
3.本题调试过程中碰到的问题及解决办法
错误原因:编译错误。
解决办法:在b=i;后加break;跳出循环。
6-2 找最大值及其下标
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:定义指针 a 与b,max,i.将*a赋给max。遍历指针内的元素,分别与max比较,如果指针内元素大于max,则将次元素赋给max,并将i赋给 *b。
第四步:输出max与 *b。
(2)流程图
2.实验代码
int fun(int *a,int *b,int n)
{
int i;
int max;
max= *a;
for(i=1;i<n;i++)
{
if(max< *(a+i))
{
max= *(a+i);
*b=i;
}
}return max;
}
3.本题调试过程中碰到的问题及解决办法
错误原因:编译错误。
解决办法:将 *b=i;后的break删去。
C高级第一次PTA作业(3)
6-1 最小数放前最大数放后
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:输入元素到指针 *arr.将arr[0]赋给max,min。
第四步:遍历指针内所有元素,分别与max,min比较。如果arr[i]>max,则将arr[i]赋给max。如果arr[i]<min,则将arr[i]赋给min。并分别记录下角标为k,m。
第五步:将arr[k]与arr[9]互换。将arr[m]与arr[0]互换。
第六步:输出数组arr。
(2)流程图
2.实验代码
void input(int *arr,int n)
{
int i;
for(i=0;i<10;i++)
{
scanf("%d",&arr[i]);
}
}
void max_min(int *arr,int n)
{
int i,max,min,j,k,m,y,t;
max=arr[0];
min=arr[0];
for(i=1;i<10;i++)
{
if(max<arr[i])
{
max=arr[i];
k=i;
}
if(min>arr[i])
{
min=arr[i];
m=i;
}
}
t=arr[k]; arr[k]=arr[9];arr[9]=t;
y=arr[m]; arr[m]=arr[0];arr[0]=y;
}
void output(int *arr,int n)
{
int j;
for(j=0;j<10;j++)
{
printf("%3d",arr[j]);
}
}
3.本题调试过程中碰到的问题及解决办法
错误原因:输出错误
解决办法:将"%d"改为"%3d"
6-2 指针选择法排序
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:定义指针x,使用双循环遍历指针内每个元素。比较前后两个元素的大小。
第四步:如果后一元素 j 大于前一元素 i ,则将j赋给k,如果k!=i,则将i于j互换。
第五步:输出。
(2)流程图
2.实验代码
void sort(int *x,int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(x[j]>x[k])
k=j;
if(k!=i)
{
t=x[i]; x[i]=x[k]; x[k]=t;
}
}
}
3.本题调试过程中碰到的问题及解决办法
无
C高级第一次PTA作业(4)
6-1 判断回文字符串
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:定义数组 *s,遍历数组中的元素,将 * (s+i)与 *(s+count-i-1)做比较。
第四步:如果相等,则b=1。
第五步:判断i与m是否相等。如果相等,则b=-1。
第六步:判断b,如果b=1,则输出true,否则输出false。
(2)流程图
2.实验代码
bool palindrome( char *s ){
int i,count=0,m;
int b=1;
count=strlen(s);
m=count/2;
for(i=0;i<m;i++){
if((*(s+i))!=(*(s+count-i-1))){
b=-1;
}
}
if(i==m){
b=1;
}
if(b=1)
{
return (true);
}if(b=-1)
{
return (false);
}
}
3.本题调试过程中碰到的问题及解决办法
错误原因:两个部分错误
解决办法:删去判断b的语句,在上两个if语句中加return语句。
6-2 使用函数实现字符串部分复制
1.设计思路
(1)描述算法
第一步:阅读题目,明确目的。
第二步:找到调用函数。
第三步:遍历指针 *t中从第m开始的元素。并将元素传递给指针 *s。
第四步:将最后的元素定义为'\0'。
第五步:输出*s。
(2)流程图
2.实验代码
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';
}
3.本题调试过程中碰到的问题及解决办法
这道题有点没看懂,借鉴了很多大神的作业,在此表示感谢!
学习总结和进度
1.知识总结
最近这两周学习了指针的各种调用,并复习了上学期数组与字符串的内容。指针数组适用于指向若干个字符串,是字符串处理更加灵活。指针是能通过他能找到以他为地址的内存单元。定义指针使用int语句。现阶段对指针的运用还不是很熟练,做PTA仍有些难度。
2.代码托管
3.点评
4.表格
---恢复内容结束---