题目6-1 计算两数的和与差
1 设计思路
(1)主要描述题目算法
第一步:阅读题目,调用void sum_diff( float op1, float op2, float *psum, float *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)主要描述题目算法
第一步:阅读题目,理解大概关系,调用void splitfloat( float x, int *intpart, float *fracpart )
第二步:找到需要的变量,整数 intpart,小数:fracpart
第三步:找到计算整数的方法,使用int类型进行强制转换,用实数x 减去整数得到小数
第四步:编写代码
(2)流程图
2.实验代码
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int)x;
*fracpart=x-*intpart;
}
3.本题调试过程中遇到的问题及解决办法
暂时没有遇到问题,注意了上一个题目的问题了
第二次pta 6-1 在数组中查找指定元素
1.设计思路
(1)主要描述题目算法
第一步:通读题目,调用int search( int list[], int n, int x )
第二步:定义一个变量i来遍历数组,如果有存在list[]==x的情况就说明找到了这个元素为了防止多次遍历,此题用i返回的结果,i表示找到了改符合要求的数值,0表示没有找到该数值,只要找到了一个符合条件的数返回i,返回i,然后跳出循环
第三步:如果遍历完所有数组中的数仍然没有找到结果就要输返回-1
(2)流程图
2.实验代码
int search( int list[], int n, int x )
{
int i;
for(i = 0;i < n;i++)
{
if(list[i]==x){
return i;
}
}
return -1;
}
3.本题调试过程中遇到的问题及解决办法
错误原因:
虽然编程并没有错误,但是这个逻辑完全错误,如果第一个没有找到就会直接跳到else直接返回-1,事实上相当于并没有遍历数组
改正方法:不要写else, else表示每一个if没有实现都要进行else,这样就会导致后面的即使存在也不会找到
第二次pta 6-2找最大值及其下标
1.设计思路
(1)主要描述题目算法
第一步:阅读题目理解大概关系,头脑中存在这个逻辑,引用int fun(int *a,int *b,int n)
第二步:定义一个变量i利用i遍历数组
第三步:定义最大值max,先令数组的首项位最大值,然后一一用后面的项与其作比较,如果后面的比首项大就将这个较大的项的值赋给max,以此类推,遍历完整个数组,找到最大值及其下标
(2)流程图
2.实验代码
int fun(int *a,int *b,int n)
{
int i;
int max=a[0];
for(i=1;i<n;i++)
{
if(max<a[i])
{
max=a[i];
*b=i;
}
}
return max;
}
3.本题调试过程中遇到的问题及解决办法
没有错误
第三次pta作业
1.设计思路
(1)主要描述题目算法
第一步:仔细阅读题目,理解题意
第二步:调用第一个函数void input(int *arr,int n),利用for循环读入数组
第三步:调用第二个函数: void max_min(int *arr,int n) 先初始化最大值最小值,都为a[0],然后利用for循环遍历数组与最大值与最小值比较,如果有发现比最小值小或者比最大值大的数值,就直接利用一个t进行交换
第四步:调用第三个函数:void output(int *arr,int n),进行数据的输出:定义一个变量i输出交换后的数组
(2)流程图
2.实验代码
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 indexm=0,indexn=0;
for(i=0;i<n;i++){
if(min>*(arr+i)){
min=*(arr+i);
indexn=i;
}
if(max<*(arr+i)){
max=*(arr+i);
indexm=i;
}
}
t=*arr;*arr=*(arr+indexn);*(arr+indexn)=t;
t=*(arr+n-1);*(arr+n-1)=*(arr+indexm);*(arr+indexm)=t;
}
void output(int *arr,int n){
int i;
for(i=0;i<n;i++){
printf("%3d",*(arr+i));
}
}
3.本题调试过程中遇到的问题和解决方法
错误信息:忘记把最大值与最后一个数还有最小值与第一个值交换了
改正方法:进行交换
第三次pta作业6-2
1.设计思路
(1)主要描述题目算法
第一步:仔细阅读题目,理解题意,调用函数void sort(int *x,int n)
第二步:利用选择排序法进行排序
(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[i]>x[k]) k=j;
if(k!=i)
{
t=x[i];x[i]=x[k];x[k]=t;
}
}
}
3.总结错误信息
没有错误
pta第四次作业6-1 判断回文
1.设计思路
(1).主要描述题目算法
第一步:阅读题目,理解题意
第二步:调用函数。定义变量i,l;
第三步:计算字符串的长度l,利用for循环遍历数组,如果(s+i)!=(s-i+n-1)即返回false,否则返回true
(2)流程图
2.实验代码
bool palindrome( char *s )
{
int l,i;
l=strlen(s);
for(i=0;i<=l/2;i++){
if(!s[i]=s[l-i-1]){
return false;
}
}
return true;
}
3.错误信及改正方法
错误信息:return true放到for循环里面了
改正:要放到for循环外面,因为只要最终返回一个true即可
pta第四次作业6-2使用函数实现部分字符串复制
1.设计思路
(1)主要描述算法
第一步:阅读题目,理解大意
第二步:调用函数,定义变量i,用i遍历数组将所需字符串复制过来
(2).流程图
2.实验代码
void strmcpy( char *t, int m, char *s )
{
int i;
for(i=m;s[i-1]!=\'\\0\';i++)
{
s[i-m]=t[i-1];
}
s[i-m]=\'\\0\';
}
3.错误信息
暂无错误
学习总结和进度
1.总结两周以来所有pta作业中每个题目所使用的知识点
第一次作业6-1:函数的调用,指针的表示
第一次作业6-2:指针的表示及其使用,强制类型的转换,函数知识
第二次作业6-1:函数的使用,数组在函数中的遍历,确定常量,if语句,for循环,break的使用,指针的使用
第二次作业6-2:函数的使用,指针的使用,(p的不同作用),函数的传参,for循环,if条件句
第三次作业6-1: 函数的使用,指针的使用,(arr+i)=arr[i]
第三次作业6-2:函数的使用,选择排序法
第四次作业6-1:计算字符串的长度
第四次作业6-2:复制字符串
2.将pta作业源代码使用git提交到托管平台上
https://github.com/lxh666666/homework-C-
3.作业点评情况
李伍壹
袁中
申怡苗
李洪海
杨金坤
马钰娟
4.记录学习进度
感觉代码打的还是有点少,没有足够的数量,就没有特别熟练,虽然写博客比较费时间,不过好像对问题的理解更加深入了些,掌握了一些技巧,以后应该会快一些吧!