一、PTA实验作业
题目1:6-1 计算两个复数之积
1. 本题PTA提交列表
2. 设计思路
struct complex product;定义一个新的结构用于存放结果
product.real=x.real*y.real-x.imag*y.imag;
product.imag=x.real*y.imag+x.imag*y.real;
根据公式计算两个复数之积;
return product;返回结果
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
题目2:6-3 结构体数组中查找指定编号人员
1. 本题PTA提交列表
2. 设计思路
for i=0 to 7
通过用库函数strcmp进行查找
count=1,说明有这位编号的人员,break.
return *std
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
题目3:7-2 时间换算
1. 本题PTA提交列表
2. 设计思路
定义结构体struct time{定义整形hour,minute,second;字符型s}
定义bg,bgm,bgh用于存放加n秒后的秒,分,时的结果
bg=(b.second+n)%60
bgm=(b.minute+(b.second+n)/60)%60;
bgh=b.hour+(b.minute+(b.second+n)/60)/60;
计算最后的值
if bgh等于24 令bgh=0;
输出最后的结果
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 在输出结果时直接将结果用%d输出而答案错误,应该用%02d来输出
二、截图本周题目集的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;
}
- 这题是删除字符的代码,不同的是这道题用的是递归的方法来解决。
- 先设置一个函数,在函数中定义一个指针p用于存放地址。
- 通过库函数strstr来在字符串s中查找字符串sub首次出现的地址。
- 若strtr!=NULL,那么再定义指针mark=p+strlen(sub);表示删除字符串后的地址
- 再用while( (p++=mark++) );p++=mark++重构数组表示删除一个字符串后的地址
- del(s,sub);递归进行下一次的删除。
void CountOff( int n, int m, int out[] ){
int off[n],rest[n],index=0;
for(int i=0;i<n;i++) rest[i]=i; //初始.
for(int i=0;i<n;i++){
index=(index+m-1)%(n-i); //退圈.
out[ rest[index] ]=i+1;
for(int u=index;u<=n-i-1;u++) rest[u]=rest[u+1]; //重构
}
}
- 这道题是指针报数的代码,通过循环来逐个找出其相应的位置。
- 思路新颖,高效
四、本周学习总结
1.总结本周学习内容。
结构体、共用体、枚举这种构造数据类型特点。
结构体
- 1.结构体就是一个可以包含不同数据类型的一个结构,结构体可以在一个结构中声明不同的数据类型,相同结构的结构体变量是可以相互赋值的
- 2.是一种自定义型变量,可以用于存储一个变量的个个属性,使他们整体化
- 3.它的使用可以用运算符引用结构中的变量,对于指针来说还可以用->运算符
共用体
- 1.共用体变量的地址和其成员地址都是同一地址,&a, &a.i都一样。
- 2.里面的变量会公用相同内存单元,必要的时候可以用它减少内存的使用。
- 3.不能将共用体变量作为函数参数,不能使函数返回共用体变量。但可以使用指向共用体变量的指针。
枚举
- 1.枚举法就是将变量的值一一列举出来
- 2.枚举元素不是变量,而是常量,所以不能对枚举元素进行赋值。
递归
2.罗列本周一些错题。
- 参考答案:
struct Worker s[10]
&s[i].num,s[i].name,&s[i].jbpay,&s[i]zwpay
max=i
min=i
- 我的答案:
strict Workers s[100];
&s[i].num,s[i].name[i],&s[i].jbpay[i],&s[i].zwpay[i]
s[max].jbpay+s[max].zwpay=s[i].jbpay+s[i].zwpay//跟前面的内容混杂,误以为输出的就是最大值。
s[min].jbpay+s[min].zwpay =s[i].jbpay+s[i].zwpay
参考答案:#include<stdio.h>
int main()
{
struct
{
char name[10];
float jbg;
float fdg;
float zc;
}emp[10]; //1
int i,n;
printf("n=");
scanf("%d",&n);
getchar(); //2
for(i=0;i<n;i++)
{
scanf("%s%f%f%f",emp[i].name,&emp[i].jbg,&emp[i].fdg,&emp[i].zc); //3
getchar();} //4
for(i=0;i<n;i++)
printf("%5s实发工资:%7.2f\n", emp[i].name,emp[i]. jbg+emp[i]. fdg-emp[i].zc);//5
return 0;
}
我的答案:#include<stdio.h>
int main()
{
struct
{
char name[10];
float jbg;
float fdg;
float zc;
}emp[10];
int i,n;
printf("n=");
scanf("%d\n",&n);
for(i=0;i<n;i++)
scanf("%s%f%f%f",emp[i].name,&emp[i].jbg,&emp[i].fdg,&emp[i].zc);
for(i=0;i<n;i++)
printf("%5s实发工资:%d\n", emp[i].name,emp[i].zc);//没有计算实发工资
return 0;
}