PTA第一次做业html
第一题:计算两个数的和与差。
1 设计思路
(1)主要描述题目算法
第一步:阅读题目与函数。
第二步:先定义四个标识符a,b,sum,diff,对a,b赋值,而后把a的值给op1,把b的值给op2,将sum的地址给psum,将diff的地址给pdiff,而后输出两个数的和与差。
第三步:输出两数的和与差。
第四步:a+b是两个数的sum,a-b是两个数的差,所以在调用函数sum_diff中两个数的和psum等于op1+op2,两个数的差diff等于op1-op2。git
void sum_diff( float op1, float op2, float *psum, float *pdiff ){*pdiff=op1-op2; *psum=op1+op2; }
(2)本题调试过程碰到问题及解决办法算法
无编程
第二题:拆分实数的整数与小数部分数组
(1). 主要描述题目算法函数
第一步:阅读题目并了解函数及其定义。学习
第二步:找到对应函数中的实参和形参。.net
第三步:将X分为整数而后赋值给intpart,用x减去整数就是小数部分,而后将小数部分的值赋值给fracpart.设计
void splitfloat( float x, int *intpart, float *fracpart ) { *intpart=(int)x; *fracpart=x-*intpart; }
(2)本题调试过程碰到问题及解决办法3d
问题:没有把x转化为整型。
改正方法:转化以后再赋给*intpart。
PTA第二次做业
第一题:在数组中查找指定元素
(1). 主要描述题目算法
第一步:阅读题目并了解函数及其定义,找到对应函数中的实参和形参并写出函数接口。
第二步:用变量i来遍历数组,若是有list[]==x的状况就表明了这个元素为了防止屡次遍历。
第三步:而后把数组中全部的元素与指定元素x进行判断,若是不符合要求return -1若是只要有一个符合要求就return i。
int search( int list[], int n, int x ) { int i; int subscript = 0; for(i=0;i<n;i++) { if(list[i]==x) { subscript=1; return i; break; } } if(subscript==0) return -1; }
(2)流程图
(3)本题调试过程碰到问题及解决办法
遍历概念不太清楚致使本身编译不少遍才所有正确,之后要多学多练。
第二题:寻找最大值及其下标
(1). 主要描述题目算法
第一步:阅读题目并了解函数及其定义
第二步:先定义变量i而后利用变量遍历数组。
第三步:而后定义一个最大值
int fun(int *a,int *b,int n) { int i; int max=a[0]; for(i=0;i<n;i++) { if(max<a[i]) { max=a[i]; *b=i; } } return max; }
(2)流程图
(3)本题调试过程碰到问题及解决办法
指针使用错误,数值和地址弄混。
*和&使用错误
PTA第三次做业
第一题:最小数放前最大数放后
(1). 主要描述题目算法
第一步:阅读题目并了解函数及其定义,定义接口函数。
第二步:找到对应函数中的实参和形参。
第三步:用for循环寻找出最大值与第一个数交换
(2)流程图
(3)实验代码
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,temp; int q=0,w=0; for(i=0;i<n;i++){ if(min>*(arr+i)){ min=*(arr+i); q=i; } if(max<*(arr+i)){ max=*(arr+i); w=i; } } temp=*(arr+0);*(arr+0)=*(arr+q);*(arr+q)=temp; temp=*(arr+n-1);*(arr+n-1)=*(arr+w);*(arr+w)=temp; } void output(int *arr,int n){ int i; for(i=0;i<n;i++){ printf("%3d",*(arr+i)); } }
(4)本题调试过程碰到问题及解决办法
无
第二题:指针选择法排序
(1). 主要描述题目算法
第一步:阅读题目并了解函数及其定义,定义接口函数。
第二步:定义两个for循环.而后把数组第一个元素小标0定为最大值
第三步:判断数组中是否存在比arr+max大的数,假若有则记录它的角标,而后把小标赋值给max.
第四步:在for循环里判断数组小标和最大值max小标是否相同,若是不一样,则交换俩数的小标。
第五步:用第一个数与最大值交换
(2)流程图
(3)实验代码
void sort(int *x,int n) { int q=0,b=0,temp=0,maxium=0; for(q=0;q<n-1;q++) { maxium=q; for(b=q;b<n;b++) { if(*(x+maxium)<*(x+b)) { maxium=b; } } if(maxium!=q) { temp=*(x+maxium); *(x+maxium)=*(x+q); *(x+q)=temp; } } }
PTA第四次做业
第一题:判断回文字符串
(1). 主要描述题目算法 第一步:阅读题目并了解函数及其定义,定义接口函数。
第二步:找出形参实参
第三步:用回文法求出字符串长度
第四步:用for循环比较出第一个和最后一个字符一不同
(2)流程图
(3)实验代码
bool palindrome( char *s ) { int x,i,cnt=0; x=strlen(s); for(i=0;i<x/2;i++) { if(s[i]==s[x-1-i]) { cnt++; } } if(cnt==x/2) { return true; }else { return false; } }
(4)本题调试过程碰到问题及解决办法
编译错误
地址符忘记加*(基本错误)
第二题:使用函数实现字符串部分复制
(1). 主要描述题目算法
第一步:阅读题目并了解函数及其定义,定义接口函数并找出形参实参。
第二步:调用函数strmcpy,而后再把函数i,a循环
第三步:结束
(2)流程图
(3)实验代码
void strmcpy(char *t,int m,char *s) { int i; int sum=0; for(i=0;t[i]!='\0';i++) {sum++;} if(sum<m) {s[0]='\0';} else { for(i=0;t[m-1]!='\0';i++,m++) { s[i]=t[m-1]; } s[i]='\0'; } }
(4)本题调试过程碰到问题及解决办法
编译错误
‘\0'也占一个字符须要*(s+a) = '\0'才能够执行
学习总结
(1)在这两周中对于指针的知识理解不透彻,本身也在看mooc弥补。还有就是编程时间较少,有些手生,打起代码不流畅。
(2)点评网址
(3)托管代码
(4)表格