2018第一次作业。
作业要求一 (20分)
完成下列编程题目,每次上完课都会增加2-3道题目,并将编程过程记录在博客里:
1)C高级第一次PTA作业(1)
1-1 计算两数的和与差
设计思路
第一步:op1与op2相加得psum
第二步:op1与op2相减得pdiff
流程图
略
实验代码
void sum_diff( float op1, float op2, float psum, float pdiff ) { psum = op1+op2; pdiff = op1-op2; return 0; }
本题调试过程碰到问题及解决办法:无
1-2 拆分实数的整数与小数部分
设计思路
第一步:x取整数为整数部分
第二步:用x减去x的整数部分为小数部分
流程图
略
实验代码
void splitfloat( float x, int intpart, float fracpart ) { intpart=(int)x; fracpart=(float)(x-*intpart); return 0; }
本题调试过程碰到问题及解决办法:无
2)C高级第一次PTA作业(2)
2-1 在数组中查找指定元素
设计思路
第一步:设置一个for循环,从0到n,里面判断
第二步:如果数组有元素等于x,返回此元素的下标
第三步:没有则返回-1
流程图
实验代码
int search(int list[], int n, int x) { int i; for (i = 0; i < n; i++) { if (list[i] == x) { return i ; break; } } return -1; }
本题调试过程碰到问题及解决办法:无
2-2 找最大值及其下标
设计思路
第一步:让*a指向max
第二步:设置for循环,0到n,判断,若max小于数组内的下一个元素,则max等于此元素,i为此元素下标
第三步:返回max
流程图
实验代码
int fun(int *a,int *b,int n) { int i; int max = *a; for(i = 0;i < n;i++) { if(max < *(a+i)) { *b = i; max = *(a+i); } } return max; }
本题调试过程碰到问题及解决办法:对*(a+i)运用不熟,一开始是没有写*,后来询问同学后解决了
3)C高级第一次PTA作业(3)
3-1 最小数放前最大数放后
设计思路
第一步:输入数到数组arr中
第二步:设置for循环,0到n,循环条件为加一,逐个比较,如果数组内有更小的数,将此数下标赋予min
第三步:如果数组内有更大的数,将此数下标赋予max
第四步:将最大值移到最后,最小值移到最前(交换)
第五步:输出数组,而且每个元素三个位置
流程图
实验代码
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 i,max = 0,min = 0; for(i = 0;i < n;i++) { if(arr[min]>arr[i]) min=i; if(arr[max]<arr[i]) max=i; } i = *arr; *arr = arr[min]; arr[min] = i; i = arr[max]; arr[max] = arr[n-1]; arr[n-1] = i; } void output(int *arr,int n) { int i; for(i = 0;i < n;i++) { printf("%3d",*(arr+i)); } }
本题调试过程碰到问题及解决办法:输出格式我原本写的是多上两个空是错的所以使用了%3d的方式
3-2 指针选择法排序
设计思路
第一步:设置for循环,设min等于n-1
第二步:比较,如果min是比数组x【i】大,则调换位置
第三步:如果n大于0,则将n-1,重新执行sort函数
流程图
实验代码
void sort(int *x,int n) { int i,t,min = (n-1); for(i = 0;i < n;i++) { if(x[min] > x[i]) { t=x[min]; x[min]=x[i]; x[i]=t; } } if(n > 0) { n--; sort(x,n); } }
本题调试过程碰到问题及解决办法:;没有使用嵌套而是再一次使用sort
3)C高级第一次PTA作业(4)
}
4-1 判断回文字符串
设计思路
第一步:观察主函数,主函数有输入输出部分,主函数需要返回值,返回值为bool型
第二步:定义n用于记录字符串s长度,通过对比s[i]与s[n-i-1]确定字符串s是否为回文;
流程图
实验代码
bool palindrome( char *s ) { int i,n; for(i = 0,n = 0;s[i] != '\0';i ++) { n ++; } for(i = 0;i <= (n/2);i ++) { if(s[i] != s[n-i-1]) return 0; } return true; }
本题调试过程碰到问题及解决办法:本题在询问同学情况下知道思路,并未有调试错误
4-2 使用函数实现字符串部分复制
设计思路
第一步:将字符串t中从第m个字符开始的全部字符复制到字符串s中
第二步:主函数有输出部分与输入m部分,无输入t部分,主函数不需要返回值
第三步:观察函数ReadString作用为输入t
第四步:将数组s初始化为空串,定义n为字符串长度
第五步:判断m与n的关系确定s是否为空串,若不是则将t[i]赋值给s[i+1-m]
流程图
实验代码
void strmcpy( char *t, int m, char *s ) { *s = NULL; int i,n = 1; for(i = 0;*(t+i) != '\0';i ++) { n ++; } if(m >= n) { *s = NULL; } else { for(i = m-1;i <= n-1;i ++) { s[i-m+1] = t[i]; } } }
本题调试过程碰到问题及解决办法:本题在询问同学情况下知道思路,并未有调试错误
附加题
#include<stdio.h> #include<stdlib.h> int main() { char *a; int i; scanf("%s",a); for(i = 0;*(a+i) != '\0';i ++) { if(a[i] >= 'a'&&a[i] <= 'x') a[i] = a[i]+2; else if(a[i] == 'y') a[i] = 'a'; else if(a[i] == 'z') a[i] = 'b'; } printf("%s\n",a); system("pause"); return 0; }
设计思路
设定字符串*a储存字符串
用for函数历遍数组S元素并进行加密
输出数组a
运行结果
要求三、学习总结和进度
总结两周里所学的知识点有哪些学会了?哪些还没有学会?
在这两周中我们学习了关于指针的相关知识,并复习了一些上个学期的内容,在这两周的学习中我学到和复习到了一些有关于数组和指针关系的知识,并且对于指针通常的使用范围也有了一些了解,但如果没有长时间的回顾我觉得我可能会忘记一些内容,所以我感觉我对指针还是不够熟练,包括数组,许多用来表达的代码都忘了,在指针和数组的不同处这点有些不了解,需要加深了解。在做流程图方面我是做出来了才发现需要引用形参定义变量我都没有写,这有很大的不足之处,我本身对形参实参概念也不是很了解,希望在下学期的学习中可以加深这方面的了解。
2、Git地址:https://git.coding.net/ShiWithZhou/HI.git
点评3个同学的本周作业
刘炜旗:http://www.cnblogs.com/ryo-/p/8644256.html
高立彬:http://www.cnblogs.com/gao628526/p/8551285.html
冯子旋:http://www.cnblogs.com/fengzx/p/8612048.html
请用表格和折线图呈现你本周(3/12 8:00~3/26 8:00)的代码行数和所用时间、博客字数和所用时间