c语言结构

一、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.枚举元素不是变量,而是常量,所以不能对枚举元素进行赋值。

递归

  • 1.原理就是先执后面再一起输出。

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;
}
posted @ 2017-12-23 14:40  ljy1139  阅读(440)  评论(1编辑  收藏  举报