计算机科学-第14周模块化程序设计 题目及参考解答

《计算机科学》课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597


1、下面的两段程序体现了函数参数传值与传地址的区别,写出运行结果,上机时运行程序并记录结果,理解这两种机制的原理
(1)

#include <stdio.h>
void swap(int x, int y);
int main( )
{
    int a=0, b=0;
    a = 20;
    b = 45;
    if(a<b) swap(a, b);
    printf("%d,%d", a, b);
    return 0;
}
void swap(int x, int y)
{
    int tmp = 0;
    tmp = x;
    x = y;
    y = tmp;
}
你认为运行结果为:_________________
实际运行的结果为:_________________

(2)

#include <stdio.h>
void swap(int *x, int *y);
int main( )
{
    int a=0, b=0;
    a = 20;
    b = 45;
    if(a<b) swap(&a, &b);
    printf("%d,%d", a, b);
    return 0;
}
void swap(int *x, int *y)
{
    int tmp = 0;
    tmp = *x;
    *x = *y;
    *y = tmp;
}
你认为运行结果为:_________________
实际运行的结果为:_________________

2、下面是根据教材11.2中例11.1分析得到的一部分程序,请将尚未定义的函数写出来,运行程序得到每个方案的造价。
#include <stdio.h>
#include <math.h>
#define PI 3.1415926
float f(float c1,float c2,float t1,float t2,float s1,float s2,float r1,float r2,float h);
float f1(float c1,float c2,float h);
float f2(float t1,float t2,float h);
float f3(float s1,float s2,float h);
float f4(float r1,float r2,float h);
int main( )
{
    printf("方案一造价: %.2f元\n", f(3,6,4,12,4,12,5,10,3));
    printf("方案二造价: %.2f元\n", f(5,7,2,12,4,12,9,8,3.2));
    printf("方案三造价: %.2f元\n", f(2,8,3,4,10,9,4,10,3.25));
    return 0;
}
float f(float c1,float c2,float t1,float t2,float s1,float s2,float r1,float r2,float h)
{
    return f1(c1,c2,h)+f2(t1,t2,h)+f3(s1,s2,h)+f4(r1,r2,h);
}
float f1(float c1,float c2,float h)
{
    float a, s;
    a=PI*c2*c2*3000;
    s=2*PI*c2*h*2000;
    return c1*(a+s+400000);
}
//下面定义f2,f3和f4函数

参考解答:

#include <stdio.h>
#include <math.h>
#define PI 3.1415926
float f(float c1,float c2,float t1,float t2,float s1,float s2,float r1,float r2,float h);
float f1(float c1,float c2,float h);
float f2(float t1,float t2,float h);
float f3(float s1,float s2,float h);
float f4(float r1,float r2,float h);
int main( )
{
    printf("方案一造价: %.2f元\n", f(3,6,4,12,4,12,5,10,3));
    printf("方案二造价: %.2f元\n", f(5,7,2,12,4,12,9,8,3.2));
    printf("方案三造价: %.2f元\n", f(2,8,3,4,10,9,4,10,3.25));
    return 0;
}
float f(float c1,float c2,float t1,float t2,float s1,float s2,float r1,float r2,float h)
{
    return f1(c1,c2,h)+f2(t1,t2,h)+f3(s1,s2,h)+f4(r1,r2,h);
}
float f1(float c1,float c2,float h)
{
    float a, s;
    a=PI*c2*c2*3000;
    s=2*PI*c2*h*2000;
    return c1*(a+s+400000);
}
float f2(float t1,float t2,float h)
{
    float a, s;
    a=sqrt(3)*t2*t2*3000;
    s=3*t2*h*2000;
    return t1*(a+s+400000);
}
float f3(float s1,float s2,float h)
{
    float a, s;
    a=s2*s2*3000;
    s=4*s2*h*2000;
    return s1*(a+s+400000);
}
float f4(float r1,float r2,float h)
{
    float a, s;
    a=3*sqrt(3)*r2*r2*3000/2;
    s=6*r2*h*2000;
    return r1*(a+s+400000);
}

3、利用随机函数与自定义函数,制作一个帮助小学生学算术的程序,参考运行的部分截图:


下面是给出的main()函数,请写出自定义函数answer。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int answer(); 
int main()
{
    int i, sum=0;   //sum: 学生得分
    srand(time(0)); //初始化随机种子
    for(i=0; i<10; i++)
    {
        printf("第%d题: ",i+1);
        sum+=answer();
    }
    printf("共答对了%d道题. \n", sum);
    return 0;
}
提示:answer()函数中该做的事:
  • 产生两个随机数,分别作为被加数和加数;
  • 计算这两数的和作为答案;
  • 提示题目,并由小学生输入他/她计算的结果;
  • 将小学生的输入与答案比较;
  • 根据比较结果,提示小学生正误;
  • 返回结果,正确为1,错误为0
参考解答:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int answer(); //函数声明,完成一道题的测试并返回评判结果,正确1为,错误为0
int main()
{
    int i, sum=0;      //sum: 学生得分
    srand(time(0)); //初始化随机种子
    for(i=0; i<10; i++)
    {
        printf("第%d题: ",i+1);
        sum+=answer();
    }
    printf("共答对了%d道题. \n", sum);
    return 0;
}

int answer()
{
    int a,b,d,t;
    a=rand()%10+1;
    b=rand()%10+1;
    d=a+b;
    printf("%d + %d = ", a, b);
    scanf("%d", &t);
    if(t==d)
        printf("right! \n");
    else
        printf("wrong! \n");
    return (t==d);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值