合肥工业大学宣城校区周波老师授17级本科生程序设计基础作业(全)

版权声明:分享、借鉴或使用刁肥宅的代码请务必注明出处!刁肥宅保留追究代码剽窃者的一切权利! https://blog.csdn.net/u25th_engineer/article/details/81940290

       秉着方便后来人的理念,刁肥宅已经将程序设计的所有实验上传到CSDN资源、豆丁文库与百度文库了,但是在CSDN上下载所有资源都至少需要1个积分,百度狗逼总会暗地里把刁肥宅设置的“免积分”改为2到8个积分,其中几个我昨天晚上都已经修改了,唯独8个积分的那个文档一直改不掉——百度真恶心!豆丁也是亦步亦趋。因此,刁肥宅索性花点时间将所有程序设计的作业与实验贴在此处,以供参考!参考的朋友请注意了,有一些题目刁肥宅已明显发现那么写是错的,但由于懒的原因有一些没有修正,大家自己注意哈。另外,每一届的作业内容多少都会有些不同,这一点万请注意~~~

     这些内容都很简单,但对于好学的初学者来说,刁肥宅愿意热情地为你们解答疑惑,欢迎直接联系刁肥宅Email:[email protected]

       作业1

       2.21  设计一个程序,从键盘输入一个小写字母,将它转换成大写字母。

#include <stdio.h>

int main()
{
    int c,ans;
    scanf("%c",&c);
    ans=c-32;
    printf("%c",ans);
    return 0;
}
图1.1 作业1.1程序运行截图

       2.22  设计一个程序,从键盘输入一个圆的半径,求其周长和面积。

#include <stdio.h>
#define PI 3.14


int main()
{
    double r;
    scanf("%lf",&r);
    printf("%lf\n%lf\n",2*PI*r,PI*r*r);
    return 0;
}
图1.2 作业1.2程序运行截图

       作业2 

       3.7  编写一个程序,测试十进制、八进制、十六进制格式整数值的输入,并分别按照3种不同的基数输出,测试数据为10、010、0x10。

#include <stdio.h>
#include <stdlib.h>


int main()
{
    printf("%d %o %x\n",10,10,10);
    printf("%d %o %x\n",010,010,010);
    printf("%d %o %x\n",0x10,0x10,0x10);
    return 0;
}
图2.1 作业2.1程序运行截图

       3.8  编写一个程序,分别用不同的域宽打印出整数12345和浮点数1.2345。当域宽小于数值的实际需要的域宽时,会发生什么情况?

#include <stdio.h>
#include <stdlib.h>


int main()
{
    printf("%1d\n%2d\n%3d\n%4d\n%5d\n%9d\n",12345,12345,12345,12345,12345,12345);
    printf("%.1f\n%.2f\n%.3f\n%.4f\n%.5f\n%.9f\n",1.2345,1.2345,1.2345,1.2345,1.2345,1.2345);
    return 0;
}
图2.2 作业2.2程序运行截图

       3.11 设计一个程序,判断从键盘输入的整数的正负性和奇偶性。

#include <stdio.h>
#include <stdlib.h>


int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    if(a>0)
    {
        if(a%2==0)
            printf("a(%d) is a positive even number\n",a);
        else
            printf("a(%d) is a positive odd number\n",a);
    }
    else if(a<0)
        printf("a(%d) is a negative number\n",a);
    else
        printf("a(%d) = 0(even)\n",a);

    if(b>0)
    {
        if(b%2==0)
            printf("b(%d) is a positive even number\n",b);
        else
            printf("b(%d) is a positive odd number\n",b);
    }
    else if(b<0)
        printf("b(%d) is a negative number\n",b);
    else
        printf("b(%d) = 0(even)\n",b);
    //if(
    return 0;
}
图2.3 作业2.3程序运行截图1
图2.4 作业2.3程序运行截图2
图2.5 作业2.3程序运行截图3
图2.6 作业2.3程序运行截图4

        3.12 编写一个程序,记录5个班的学生成绩,每个班有10个学生。要求用cin函数输入数据,然后按行列格式打印该表。

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <iomanip>

using namespace std;

int main()
{
    int s[5][10];
    memset(s,0,sizeof(s));
    //srand(time(NULL));
    for(int i=0;i<5;i++)
        for(int j=0;j<10;j++)
            //s[i][j]=(rand()%((100-0+1)+0));
            cin>>s[i][j];

    for(int i=0;i<5;i++)
    {
        cout<<"Class "<<i+1<<":";
        for(int j=0;j<10;j++)
            cout<<setw(4)<<s[i][j];
            //cout<<s[i][j]<<'  ';
        cout<<endl;
    }
    return 0;
}
图2.7 作业2.4程序运行截图

       3.13 假定你是一大学教师,需要给出10个学生的平均分数。编写一个程序,提示输入10个不同的成绩,然后将平均值显示在屏幕上。

#include <iostream>

using namespace std;

int main()
{
    int s[10+1];
    float ans=0.0;
    for(int i=0;i<10;i++)
        cin>>s[i];
    for(int i=0;i<10;i++)
        ans+=s[i];
    cout<<ans/10<<endl;

    return 0;
}
图2.8 作业2.5程序运行截图

       3.14 编写一个测试儿童算术的程序。要求输入两个数,然后算出第一个数加第二个数的和,当他准备好后(在告诉他怎么样做以后等着他按Enter键)打印结果,以便他核对答案。

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    double a,b,in,sum;

    printf("请输入两个数,用于做加法:\n");
    scanf("%lf %lf",&a,&b);
    sum=a+b;
    printf("请输入你的运算结果:\n");
    scanf("%lf",&in);
    printf("正确答案是:%lf\n",sum);
    if(sum==in)
        printf("恭喜你!结果正确!\n");
    else
        printf("很遗憾!结果错误!\n");

    return 0;
}
图2.9 作业2.6程序运行截图1
图2.10 作业2.6程序运行截图2
图2.11 作业2.6程序运行截图3

       3.16 从键盘输入一个3位数abc,从左到右用a、b、c表示各位的数字,现要求依次输出从右到左的各位数字,即输出另一个3位数cba,如输出123则输出321,试设计程序(算法提示:a=n/100,b=(n-a*100)/10,c=(n-a*100)%10,m=c*100+b*10+a)。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n;
    scanf("%d",&n);
    printf("%d%d%d\n",n%10,n/10%10,n/100);

    return 0;
}
图2.12 作业2.7程序运行截图

       作业3 

       4.10 设计一个程序,输入实型变量x和y,若x>y,则输出x-y;若x<y,则输出y-x。

#include <stdio.h>

int main()
{
    float x,y;
    scanf("%f%f",&x,&y);
    if(x>y)
        printf("%f\n",x-y);
    else
        printf("%f\n",y-x);

    return 0;
}
图3.1 作业3.1程序运行截图1
图3.2 作业3.1程序运行截图2

       4.16 输入4个整数,要求按从大到小的顺序输出。

#include <stdio.h>

int main()
{
    int a,b,c,d,tmp;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    if(a<b)
    {
        tmp=b;
        b=a;
        a=tmp;
    }
     if(a<c)
    {
        tmp=c;
        c=a;
        a=tmp;
    }
     if(a<d)
    {
        tmp=d;
        d=a;
        a=tmp;
    }
     if(b<c)
    {
        tmp=c;
        c=b;
        b=tmp;
    }
     if(b<d)
    {
        tmp=d;
        d=b;
        b=tmp;
    }
    if(c<d)
    {
        tmp=d;
        d=c;
        c=tmp;
    }

    printf("%d %d %d %d\n",a,b,c,d);

    return 0;
}
图3.3 作业3.3程序运行截图1
图3.4 作业3.3程序运行截图2

        3.11 编写一个程序打印如图4-19所示的图案。使用for循环分别打印每一个图案。所有星号(*)应在一条cout<<’*’的语句中打印(使星号紧靠在一起)。提示:最后两个图案要求每一行以适当空格数开始。附加部分:这4个问题的代码组合在一个程序中,利用嵌套for循环使4分图案并排打印。

//#include <stdio.h>    //用printf语句就是不行 Why?
#include <iostream>

using namespace std;

int main()
{
    //freopen("x1.out","w",stdout);
    /*for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)

            if(j<=i)
                printf("*");
        printf("\n");
    }
    printf("\n");

    for(int i=0;i<10;i++)
    {
         for(int j=0;j<10;j++)
            if(j<10-i)
                printf("*");
        printf("\n");
    }
    printf("\n");

    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
            if(j<i)
                printf(" ");
            else
                printf("*");
        printf("\n");
    }
    printf("\n");

    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
            if(j<9-i)
                printf(" ");
            else
                printf("*");
        printf("\n");
    }
    printf("\n");*/

    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            if(j<=i)
                //printf("*");
                cout<<"*";
            else
                cout<<" ";

        }
        cout<<"\t";

        for(int j=0;j<10;j++)
            if(j<10-i)
                //printf("*");
                cout<<"*";
            else
                cout<<" ";
        //printf("\n");
            cout<<"\t";

        for(int j=0;j<10;j++)
            if(j<i)
                //printf(" ");
                cout<<" ";
            else
                cout<<"*";
                //printf("*");
        //printf("\n");
        cout<<"\t";

        for(int j=0;j<10;j++)
            if(j<9-i)
                //printf(" ");
                cout<<" ";
            else
                cout<<"*";
                //printf("*");

        //printf("\n");
        cout<<"\n";
    }
    return 0;
}
图3.5 作业3.4程序运行截图

       4.29 设用100元钱买100支笔,其中钢笔每支3元,圆珠笔每支2元,铅笔每支0.5元,问钢笔、圆珠笔和铅笔可以各买多少支(每种笔至少买一支)?

       提示:设钢笔、圆珠笔和铅笔各买i、j、k只,则应有下列式子成立。

       3*i+2*j+0.5*k=100

       i+j+k=100

       用穷举法将购买钢笔、圆珠笔的数量用二重循环遍历一遍。从中找出符合上述条件的购买方案。

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    for(int i=1;i<=100;i++)
        for(int j=1;j<=100;j++)
            for(int k=1;k<=100;k++)
                if(3*i+2*j+0.5*k==100&&(i+j+k==100))
                    cout<<"钢笔:"<<setw(2)<<i<<" "<<"铅笔:"<<setw(2)<<j<<" "<<"铅笔:"<<setw(2)<<k<<endl;

    return 0;
}
图3.6 作业3.5程序运行截图

       作业四       

       1.、题目:

       

       (1)从键盘上输入10个浮点数,求出它们的和以及平均值,要求用函数实现。

       (2)设计一个函数,实现把输入的一个十进制数转换为十二进制数。

       (3)设计一个程序,用重载函数实现计算两个数的平方和,分别实现整形和浮点数的计算。

       (4)根据斐波那契数列的计算公式,用递归的方法计算该数列。

       (5)写出下列程序的运算结果。

        #include <iostream.h>

        #define A b*b-b

        #define C A-A

        int main()

        {

            int b=1;

            cout<<"C="<<C;

            cout<<endl<<"The screen will be closed in 30s.";

            return 0;

        }

       2、程序结果贴图(注意标明对应题号和进行简短说明):

图4.1 作业4.1程序运行截图

 

图4.2 作业4.2程序运行截图1

 

图4.3 作业4.2程序运行截图2(数组版)

 

图4.4 作业4.2程序运行截图3(数组版)

 

 

图4.5 作业4.2程序运行截图4(递归版)

 

 

图4.6 作业4.3程序运行截图1

 

图4.7 作业4.3程序运行截图2

 

图4.8 作业4.4程序运行截图1

 

图4.9 作业4.4程序运行截图2

 

图4.10 作业4.5程序运行截图

       3.编程碰到的问题及总结

       ①适当使用全局变量可以降低编写程序的复杂度;一定要谨慎使用全局变量。  

       ②题目(2)(习题5.6)不用数组或许也能实现,但我暂时没有想到算法。(现在想到了,递归)

       ③要熟悉C++的特性;阅读相关书籍,要逐渐学会灵活使用C++的新特性。

       ④递归可以解决的问题,都能化为循环迭代;普通的递归会消耗大量的内存与运行时间,可以考虑使用记忆化搜索等方法改进。

       ⑤题目(5)第一次判断时,我错判结果为0。要掌握一些基本定义与概念,在实践逐渐学会灵活运用。

        4、 附源代码:

       作业4.1源代码:

/*4.1*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

float sum();
void average(float);

float _sum=0.0;

int main()
{
    sum();
    average(_sum);
    Sleep(1000*30);
    return 0;
}

float sum()
{
    float m;
    int i;
    for(i=0;i<10;i++)
    {
        scanf("%f",&m);
        _sum+=m;
    }
    printf("%f\n",_sum);
    return _sum;
}

void average(float sum_)
{
    printf("%f\n",sum_/10);
    printf("\nThe screen will be closed in 30s.");
}

       作业4.2源代码:

       version 1:

//version1:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

void DecToDuo(int);
int times(int);    //空间节约一点吧

char s[536870911+1000000000];
static int _times;

int main()     //十二进制 duodecimal
{
    int n,i=0;
    printf("n可接受的最大值为2147483647\n");
    printf("                 ");
    scanf("%d",&n);
    _times=times(n)-1;

    DecToDuo(n);
    printf("%d的十二进制数为:",n);
    for(i=_times;i>=0;i--)
        printf("%c",s[i]);
    printf("\nThe screen will be closed in 30s.");
    Sleep(1000*30);
    return 0;
}

int times(int n)
{
    int _count=0;
    while(n)
    {
        n/=12;
        _count++;
    }
    return _count;
}

void DecToDuo(int n)
{
    int i=0,p;
    char ans;
    while(n)
    {
        p=n%12;
        n/=12;
        if(p==10)
            ans='a';
        else if(p==11)
            ans='b';
        else
            ans=p+'0';
        s[i++]=ans;
    }
}

       version 2:

//version2:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void f(int);

int main()
{
    int n,i;
    /*while(scanf("%d",&n)==1)
    {
        f(n);
        printf("\n");
    }*/
    srand(time(NULL));
    for(i=0;i<50;i++)
    {
        printf("decimal:");
        n=rand()%(100000-1000)+1000;
        printf("%d",n);
        printf("\nduodecimal:");
        f(n);
        printf("\n");
    }
    return 0;
}

void f(int n)
{
    if(n/12)
        f(n/12);
    if(n%12==10)
        printf("A");
    else if(n%12==11)
        printf("B");
    else
        printf("%d",n%12);
}

        作业4.3源代码:

#include <iostream>
#include <windows.h>

using namespace std;

void sum_square(int,int);
void sum_square(double,double);

int main()
{
    int a,b;
    double x,y;
    //cout<<"Please enter two integers:"<<endl;
    cin>>a>>b;
    //cout<<"Please enter two floating point numbers:"<<endl;
    cin>>x>>y;
    sum_square(a,b);
    sum_square(x,y);
    Sleep(1000*30);
    return 0;
}

void sum_square(int a,int b)
{
    //cout<<"The quadratic sum of these two integers:"<<a*a+b*b<<endl;
    cout<<a*a+b*b<<endl;
}

void sum_square(double a,double b)
{
    cout<<a*a+b*b<<endl;
    cout<<endl<<"The screen will be closed in 30s.";
}

       作业4.4源代码:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int Fibonacci(int);

int main()
{
    int n,i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        printf("%20d",Fibonacci(i));
        if(i%4==0)
            printf("\n");
    }
    printf("\nThe screen will be closed in 30s.");
    Sleep(1000*30);
    return 0;
}

int Fibonacci(int n)
{
    return n==1||n==2?1:(Fibonacci(n-1)+Fibonacci(n-2));
}

       作业五 

       1、题目:

       (1)使用结构体变量来表示每个学生的数据:姓名、学号和3门课的成绩。从键盘上输入10个学生的数据,要求打印出每个学生的姓名和3门课的平均成绩。

      (2)定义描述复数类型的结构体变量,编写减法函数sub()与乘法函数mul(),分别完成复数的减法与乘法运算。在主函数中定义四个复数类型变量c1、c2、c3、c4,输入c1、c2的复数值,调用sub()完成c3=c1-c2操作,调用mul()完成c4=c1*c2操作。最后输出c3、c4复数值。

      (3)定义两个操作结构worker的函数input和display。结构worker用于表示职工的信息,如姓名,工龄,工资等。函数input输入一个职工的有关数据。函数display显示这些信息。并设计一个使用这两个函数的程序,该程序可以处理10个职工的数据。

       (4)回答问题:

       ①什么是指针?指针的值和类型与一般变量有何不同?

       ②指针具有哪些运算?

       ③给指针赋值时应注意些什么?使用没用赋过值的指针有什么危险?

       ④指针作为函数的参数有什么特点?

       ⑤一维数组和二维数组的元素如何用指针表示?

       ⑥试述引用和指针的异同。

       ⑦设有声明:

       int i=50,*ip=&i;

       并设变量i存放在起始地址为2500的存储单元中,则ip和*ip的值各是多少?

       2. 程序结果贴图(注意标明对应题号和进行简短说明):

图5.1 作业5.1程序输入数据截图1

 

 

图5.2 作业5.1程序输出数据截图(C语言版)

 

 

图5.3 作业5.1程序输入数据截图2

 

 

图5.4 作业5.1程序输出数据截图(C++版)

 

图5.5 作业5.2程序运行截图

 

图5.6 作业5.3程序输入数据截图1

 

图5.7 作业5.3程序输出数据截图(C语言版)

 

图5.8 作业5.3程序输入数据截图2

 

 

图5.9 作业5.3程序输出数据截图(C++版)

       作业五题目(4)的解答:

       

①什么是指针?指针的值和类型与一般变量有何不同?

答:指针变量(简称指针)是存放另一变量地址的变量。指针的值:指针与其他变量的不同之处在于,指针所对应的存储单元存放的是地址,而不是一般的数据;指针的类型:指针存放的是某个指定类型变量的地址,即:指向某类型值的指针。

②指针具有哪些运算?

答:&运算符,称为“取地址运算符”,是一元运算符,它返回操作数的地址。*运算符,称为“间接引用运算符”、“复引用运算符”或“取目标运算符”,它返回操作数(指针)所指向的对象。算术运算:加和减。指针作为操作数每加上或减去一个整数n,其运算结果是指向指针当前指向的变量的后方或前方的第n个变量。关系运算:在关系表达式中可对相同类型的两个指针进行各种关系运算,其结果可以反映两指针所指向的地址之间的位置前后关系。赋值运算:为指针变量赋值时,赋的值必须是地址常量或变量,而不能是普通整数。

③给指针赋值时应注意些什么?使用没用赋过值的指针有什么危险?

答:为指针变量赋值时,赋的值必须是地址常量或变量,而不能是普通整数。没有分配空间的指针,即它是随机指向的,系统自动对其初始化,所谓的“野指针”,最严重的可能造成内存泄漏。

④指针作为函数的参数有什么特点?

答:主调函数和被调函数操作的是同一段内存空间(同一个地址)上的内容。传递效率高:如果所需要传的是一个很大结构体之类变量,通过地址传递因为不用向变量所属的栈拷贝数据,远比传值快得多,也比传引用快。

⑤一维数组和二维数组的元素如何用指针表示?

答:假设有如下一维数组和指向整形变量指的针定义:

int a[size];     //size为一固定正的整形变量

int *pa;     

pa = a;     

则可以这样表示数组元素:

*p, *(p+1),………*(p+i);

假设有如下定义:

int A[M][N], i, j, max;

int (*p)[N];

则可以这样表示二维数组的元素:

*(*(A+i)+j);

⑥试述引用和指针的异同。

同:

它们都是和地址有关系的,指针指向一块内存,而引用是一块内存的别名。

异:

a. 指针是一个实体它在栈中有自己使用的空间,但是引用没有;

b. 引用必须初始化,指针不用但是最好初始化

c. 指针使用时必须加*,引用不用;

d. 引用只能初始化一次,指针不受此限制;

e. 引用不用const去修饰,但是指针可以

f. 指针和地址运用自增(++)不同,引用是值进行自增,而指针是地址进行自增。

联系

a. 引用的内部使用指针实现的;

b. 引用是受了限制的指针。

(⑥的回答基于此CSDN博客:https://blog.csdn.net/study__linux/article/details/51352206

⑦设有声明:

int i=50,*ip=&i;

并设变量i存放在起始地址为2500的存储单元中,则ip和*ip的值各是多少?

答:ip的值为2500,*ip的值为50。

       4. 附源代码:

       作业5.1源代码:

       C version:

//C version:
#include <stdio.h>
#include <stdlib.h>

//name&number&the grade of 3 courses
typedef struct student
{
    char name[20];
    int num;
    int grade[3];
}stu,*st;

st init(stu *);
//void dispaly(st);
float dispaly(st);

int main()
{
    freopen("x1.in","r",stdin);
    freopen("x1.out","w",stdout);
    st p,q;
    p=init(q);
    display(p);
    return 0;
}

st init(stu* p)
{
    int i;
    p=(stu*)malloc(sizeof(stu)*10);
    for(i=0;i<10;i++)
    {
        //scanf("%s",p[i].name);
        gets(p[i].name);//如果用上面这句话运行时就会出错
        scanf("%d%d%d%d",p[i].num,p[i].grade[0],p[i].grade[1],p[i].grade[2]);
    }
    return p;
}

//float display(st p)
void display(st p)
{
    int i;
    float aver=0.0;
    for(i=0;i<10;i++)
    {
        //aver=(p[i]->grade[i][0]+p[i]->grade[i][1]+p[i]->grade[i][2])/3;
        aver=(float)(p[i].grade[0]+p[i].grade[1]+p[i].grade[2])/3;
        //puts(p[i].name);
        printf("%s\n",p[i].name);//上面这句话和这句话输出结果无差别
        printf(" ---- %.2f\n",aver);
        //printf("%s\n",p[i].name);
    }
    //return aver;
}

       C++version:

//C++ version:
#include <cstdio>
#include <iomanip>
#include <iostream>
//#include <windows.h>

using namespace std;
//name&number&the grade of 3 courses
typedef struct student
{
    char name[20];
    int num;
    int grade[10][3];
}stu,*st;

st init(stu *);
void display(st);

int main()
{
    freopen("x1.in","r",stdin);
    freopen("x1.out","w",stdout);
    st p,q;
    p=init(q);
    display(p);
    //Sleep(1000*60);
    return 0;
}

st init(stu* p)
{
    int i;
    p=new stu[10];
    for(i=0;i<10;i++)
        cin>>p[i].name>>p[i].num>>p[i].grade[i][0]>>p[i].grade[i][1]>>p[i].grade[i][2];
    return p;
}

void display(st p)
{
    int i;
    float aver=0.0;
    for(i=0;i<10;i++)
    {
        aver=(float)(p[i].grade[i][0]+p[i].grade[i][1]+p[i].grade[i][2])/3;
        cout<<p[i].name<<" "<<fixed<<setprecision(2)<<aver<<endl;
    }
}

       作业5.2源代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct complex_number
{
    double re;
    double im;
}Im_m,*Ima;

Ima sub(Im_m*,Im_m*);
Ima mul(Im_m*,Im_m*);
Ima init(Im_m*);
void display(Ima);

int main()
{
    //freopen("x1.in","r",stdin);
    //freopen("x1.out","w",stdout);
    Ima c1=init(c1),c2=init(c2),c3,c4;
    c3=sub(c1,c2);
    c4=mul(c1,c2);//c3=c1-c2,c4=c1*c2
    display(c3);
    display(c4);
    return 0;
}

Ima init(Im_m* s)
{
    s=(Im_m*)malloc(sizeof(Im_m));
    scanf("%lf%lf",&s->re,&s->im);
    return s;
}

Ima sub(Im_m* a,Im_m* b)
{
    Ima c=(Im_m*)malloc(sizeof(Im_m));
    c->re=a->re-b->re;
    c->im=a->im-b->im;
    return c;
}

//Set two complex Numbers A= a+bi,B=c+di,where a,c is the real part,c,d is the imaginary part,
//then A¡ÁB=ac-bd+(ad+bc)i.

Ima mul(Im_m* a,Im_m* b)
{
   Ima c=(Im_m*)malloc(sizeof(Im_m));
   c->re=(a->re)*(b->re)-(a->im)*(b->im);
   c->im=(a->re)*(b->im) + (a->im)*(b->re);
   return c;
}

void display(Ima s)
{
    if(s->im<0)
        printf("%.2lf%.2lfi\n",s->re,s->im);
    else
        printf("%.2lf+%.2lfi\n",s->re,s->im);
}

       作业5.3源代码:

       C version:

//C version
#include <stdio.h>
#include <stdlib.h>

typedef struct worker
{
    char name[20];
    int work_years;
    int salary;
}Worker,*PWorker;

PWorker input(Worker*);
void display(Worker*);

int main()
{
    freopen("x1.in","r",stdin);
    freopen("x1.out","w",stdout);
    Worker* w=input(w);
    display(w);
    printf("%p\n",w);
    free(w);
    printf("%p\n",w);
    /*if(w==NULL)
        printf("yes\n");
    else
        printf("no\n");*/
    return 0;
}

PWorker input(Worker* s)
{
    s=(Worker*)malloc(sizeof(Worker)*10);
    int i;
    for(i=0;i<10;i++)
    {
        gets(s[i].name);
        scanf("%d%d",s[i].work_years,s[i].salary);
    }
    return s;
}

void display(Worker* p)
{
    int i;
    for(i=0;i<10;i++)
    {
        puts(p[i].name);
        printf("%d%d\n",p[i].work_years,p[i].salary);
    }
    free(p);
}

       C++ version:

//C++ version
#include <iostream>
#include <cstdio>

//ÐÕÃû¡¢¹¤Áä¡¢¹¤×Ê
typedef struct worker
{
    char name[50];
    int work_years;
    int salary;
}Work,*PWorker;

using namespace std;

PWorker input(Work*);
void display(Work*);

int main()
{
    freopen("x1.in","r",stdin);
    freopen("x1.out","w",stdout);
    Work* wrk;
    wrk=input(wrk);
    display(wrk);
    return 0;
}

PWorker input(Work* wrk)
{
    wrk=new Work[10];
    for(int i=0;i<10;i++)
        cin>>wrk[i].name>>wrk[i].work_years>>wrk[i].salary;
    return wrk;
}

void display(Work* wrk)
{
    for(int i=0;i<10;i++)
    {
        cout<<wrk[i].name<<" "<<wrk[i].work_years<<" "<<wrk[i].salary<<endl;
    }
    delete wrk;
}

猜你喜欢

转载自blog.csdn.net/u25th_engineer/article/details/81940290