一、PTA实验作业
题目1:计算两个复数之积
1.本题PTA提交列表
2.设计思路
定义结构型变量prd
prd.real=x.real*y.real-x.imag*y.imag;
prd.imag=x.real*y.imag+x.imag*y.real;
返回prd
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 无问题
题目2:计算职工工资
1.本题PTA提交列表
2.设计思路
定义结构变量result
struct{
char name[10];
float base,flt,out;
}result[9999];
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 一开始数组不够大
题目3:有理数比较
1.本题PTA提交列表
2.设计思路
定义结构体变量a和b
struct{
float zi,mu;
}a,b;
输入两个有理数的分子和分母 a.zi,a.mu , b.zi,b.mu
输出有理数a
判断 ( a.zi/a.mu-b.zi/b.mu )
大于0,则输出 '>'
等于0,则输出 '<'
等于0,则输出 '='
end
输出有理数b
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 无问题
二、截图本周题目集的PTA最后排名。
三、阅读代码
#include<stdio.h>
#include<string.h>
void del(char s[],char sub[]){
char *p;
if( ( p=strstr(s,sub) )!=NULL ){
char *mark=p+strlen(sub); //记录子串位置.
while( (*p++=*mark++) ); //从子串位置开始重构.
del(s,sub);
}
}
int main(){
char s[81],sub[81];
gets(s);
gets(sub);
del(s,sub);
puts(s);
return 0;
}
- 换用了递归,但是想改成可以一次循环删除多个子串有点麻烦.
二分查找
int research(int *a, int key, int length){
int *p = a;
int *b = p + length - 1;
while (b >= p){
int c = (b - p) / 2;
if (*(p + c) == key) return key;
else if (*(p + c) < key) p = p+c+1;
else b = b-c-1;
}
return -1;
}
- 代码利用指针改变上下界,达到二分的目的
四、本周学习总结
-
共用体:
定义:
union 共用体名
{
成员表列
} 变量表列;
共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用 -
枚举型
定义:
type
<标识符1>=<类型1>;
<标识符2>=<类型2>;
……
<标识符n>=<类型n>;
递归
递归满足两个条件:
- 1.有反复执行的过程 (递归式子)
- 2.有跳出反复执行过程的条件 (递归出口)
基本思想:
- 将一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
在函数实现时,解决大问题和解决小问题用同一种方法,所以就产生了函数调用自身的情况。
要点
- 想清楚递归出口
- 想清楚层与层之间的关系