代碼1.0
#include <stdio.h>
float a1,b1,a2,b2;//全局變量?
void relax(float o,float p,char s)
{
if(b1>0)//判斷b1正負(fù)號(hào),以正確輸出符號(hào)?
printf("(%.1f+%.1fi) %c ",a1,b1,s);
?else? printf("(%.1f%.1fi) %c ",a1,b1,s);
//若為負(fù)號(hào)則輸出b1自身符號(hào)?
if(b2>0)
//同上
?printf("(%.1f+%.1fi) ",a2,b2);
?else printf("(%.1f%.1fi) ",a2,b2);
?//同上
? if((int)(o*10)!=0&&(int)(p*10)!=0)
? //討論結(jié)果中的實(shí)數(shù)部分和虛數(shù)部分是否為0
{
? ?//將o,p強(qiáng)制轉(zhuǎn)化為整數(shù)型,乘10為了去除保留的一位小數(shù)?
? ?if(p>0)printf("= %.1f+%.1fi\n",o,p);
? ?else printf("= %.1f%.1fi\n",o,p);}
? ?else if((int)(o*10)==0&&(int)(p*10)!=0)
? ?printf("= %.1fi\n",p);
? ?else if((int)(o*10)!=0&&(int)(p*10)==0)
? ?printf("= %.1f\n",o);
? ?else printf("= 0.0\n");
}
void beam()
{
float d1,d2;
scanf("%f%f%f%f",&a1,&b1,&a2,&b2);
d1=a1+a2;
d2=b1+b2;
relax(d1,d2,'+');
d1=a1-a2;d2=b1-b2;
relax(d1,d2,'-');
d1=a1*a2-b1*b2;
d2=a1*b2+b1*a2;
relax(d1,d2,'*');
d1=(a1*a2+b1*b2)/(a2*a2+b2*b2);
d2=(b1*a2-a1*b2)/(a2*a2+b2*b2);
relax(d1,d2,'/');
}
int main()
{
beam();
return 0;
}
-------------------------------------
實(shí)習(xí)一? 抽象數(shù)據(jù)類(lèi)型實(shí)習(xí)
?
一、實(shí)習(xí)目的與要求
1、 理解數(shù)據(jù)類(lèi)型、抽象數(shù)據(jù)類(lèi)型、數(shù)據(jù)結(jié)構(gòu)三個(gè)基本概念及其相互關(guān)系;
2、 掌握抽象數(shù)據(jù)類(lèi)型的定義和實(shí)現(xiàn)方法,并理解其具體的實(shí)現(xiàn)依賴(lài)于所用語(yǔ)言;
3、 掌握抽象數(shù)據(jù)類(lèi)型的規(guī)格說(shuō)明(定義)及其在C語(yǔ)言中的實(shí)現(xiàn)方法技術(shù)。
二、示例
1.?? 實(shí)習(xí)題目
設(shè)計(jì)一個(gè)可進(jìn)行復(fù)數(shù)運(yùn)算的演示程序。
2.?????? 基本要求
能實(shí)現(xiàn)復(fù)數(shù)的相加、相減、相乘、取實(shí)部、虛部功能,運(yùn)算結(jié)果以復(fù)數(shù)的表示形式顯示。
3.?? 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
將復(fù)數(shù)定義為由兩個(gè)相互之間存在次序關(guān)系的實(shí)數(shù)構(gòu)成的抽象數(shù)據(jù)類(lèi)型,則可以利用實(shí)數(shù)的操作來(lái)實(shí)現(xiàn)復(fù)數(shù)的操作。
復(fù)數(shù)類(lèi)型定義如下:
typedef struct ComplexType{
float realPart,imagePart;
} ComplexType;
4.?? 算法
(1)復(fù)數(shù)相加算法如下:
add(ComplexType z1, ComplexType z2)
?A1.//分別對(duì)復(fù)數(shù)的實(shí)部和虛部進(jìn)行相加
[ z.a←z1.a+z2.a;
???????? z.b←z1.b+z2.b;
?????? ]
???? A2. 輸出“z.a+ z.bi”;
???? A3. 算法結(jié)束.
? ??(2)復(fù)數(shù)相減算法如下:
sub(ComplexType z1, ComplexType ?z2)
?A1.//分別對(duì)復(fù)數(shù)的實(shí)部和虛部進(jìn)行相減
[ z.a←z1.a-z2.a;
???????? z.b←z1.b-z2.b;
??????? ]
???? A2. 輸出“z.a+ z.bi”;
???? A3. 算法結(jié)束.
?(3)復(fù)數(shù)相乘算法如下:
multiply(ComplexType z1, ComplexType z2)
A1.//分別對(duì)復(fù)數(shù)的實(shí)部和虛部進(jìn)行相乘
[ z.a←z1.a*z2.a-z1.b*z2.b;
???????? z.b←z1.a*z2.b+z1.b*z2.a;
?????? ]
???? A2. 輸出“z.a+ z.bi”;
???? A3. 算法結(jié)束.
5.?? 程序運(yùn)行實(shí)例
輸入0;0?????????????? 輸出 xiangjia:0+0i
??????????????????????????? xiangjian:0+0i
??????????????????????????? xiangcheng:0+0i
輸入2.1,3.2;1.2,0???? 輸出 xiangjia:3.3+3.2i
??????????????????????????? xiangjian:1.0+3.2i
??????????????????????????? xiangcheng:2.52+3.84i
輸入-1.6,3.2;1.0,-0.5? 輸出 xiangjia:-0.6+2.7i
??????????????????????????? xiangjian:-2.6+3.7i
??????????????????????????? xiangcheng: 0+4.0i
6.?? 總結(jié)
(1) ?對(duì)抽象數(shù)據(jù)類(lèi)型的概念有了更深刻的理解。
(2) 理解了抽象數(shù)據(jù)類(lèi)型的表示和實(shí)現(xiàn),它是通過(guò)固有數(shù)據(jù)類(lèi)型來(lái)表示和實(shí)現(xiàn)的,即利用處理器中已存在的數(shù)據(jù)類(lèi)型來(lái)說(shuō)明新的結(jié)構(gòu),用已經(jīng)實(shí)現(xiàn)的操作來(lái)組合新的操作。
(3) ?理解了抽象數(shù)據(jù)類(lèi)型實(shí)際上是我們熟悉的基本數(shù)據(jù)類(lèi)型概念的引申和發(fā)展。
(4) ?用抽象數(shù)據(jù)類(lèi)型表述的程序具有很好的可維護(hù)性。
(5) 采用抽象數(shù)據(jù)類(lèi)型,算法和程序設(shè)計(jì)的復(fù)雜性降低了,條理性增強(qiáng)了。保證編出的程序有較高的可靠性。
(6) 采用抽象數(shù)據(jù)類(lèi)型,編出來(lái)的程序結(jié)構(gòu)清晰,層次分明,便于程序正確性的證明和復(fù)雜性的分析。
7.?? 源程序
?
?
三、實(shí)習(xí)報(bào)告格式
實(shí)習(xí)題目:
班級(jí):---------------------------_______________姓名:-----------------_____________學(xué)號(hào):___________完成日期:____________
1、 實(shí)習(xí)題目
2、 基本要求
3、 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
4、 算法設(shè)計(jì)
4、程序運(yùn)行實(shí)例
5、實(shí)習(xí)總結(jié)
6、附錄:源程序
?
字體要求: 中文采用宋體 五號(hào),行間距單倍行距
????????? 英文字體 ?Times New Roman, 五號(hào)字體