07.12C

函数应用

【项目1-k次方之和】
设计程序,计算:

解法:

#include <stdio.h>
#include <stdlib.h>
int mypow(int,int);
int main()
{
    printf("please enter two number n and k:");
    int f=0;
    int n,k;
    int i;
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;++i)
    {
       f += mypow(i,k);
    }
    printf("the result is:%d",f);
    return 0;
}
int mypow(int a,int k)
{
    int i=1;
    int m=1;
    for(i=1;i<=k;++i)
    {
      m=m*a;
    }
    return(m);

}
【项目2-歌手大奖赛计分系列】
(1)在歌手大奖赛中,有n位评委为参赛的选手打分,分数为0~10分(运行时由人输入)。选手最后得分为:去掉一个最高分和一个最低分后其余分数的平均值。请编写一个程序,完成相关的功能。
要求利用一个函数void calScore(int n),对一位选手成绩的输入成绩、计算和显示实现,其中n为评委人数。这样,在main函数调用时,需要将输入的评委人数n作为实参。
(2)进一步完善(1)的程序。输入时,难免有录入错误发生,如果输入的成绩不在0-10之间,要求用户立即重新输入(在函数calScore中修改);一次运行程序只计算一位选手成绩太麻烦,要求输出当前选手的最后得分后,提示“按任意键计算下一位选手的成绩,退出请选择N:”如果输入的不是N或n,可以为下一位选手计算成绩(在main函数中进行控制即可)。


解法:

#include <stdio.h>
#include <stdlib.h>
void calScore(int n);
int main()
{
    char ch;
    printf("please enter the amount of the judges:");
    int iM_judge;
    scanf("%d",&iM_judge);
    do
    {
       calScore(iM_judge);
       printf("if you want exit please press N or do press any other key to continue:\n");
       fflush(stdin);   //读入字符前,常要清空“输入缓存区”
       scanf("%c",&ch);
       printf("\n");
    }while(ch!='N'&&ch!='n');
    return 0;
}
void calScore(int m)
{
    int i=1;
    double dScore;
    double dMax=0,dMin=10;
    double dSum=0,dAverage=0;
    printf("please enter the singer's score\n");
    printf("\n");
    do
    {
        printf("please enter %dth singer's score(0-10):",i);
        scanf("%lf",&dScore);
        if(dScore>10||dScore<=0)
        {
            continue;
        }
        dSum += dScore;
        if(dMax<=dScore)
            dMax=dScore;
        if(dMin>=dScore)
            dMin=dScore;
            i++;
    }while(i<=m);

    dAverage=(dSum-dMax-dMin)/(m-2);
    printf("remove the highest score:%0.2lf ,",dMax);
    printf("remove the lowest score:%0.2lf \n",dMin);
    printf("the final score of the current singer:%0.2lf \n",dAverage);
    printf("*********************success!*********************\n");
    }
【项目3-编制三角函数表】
要求在main()函数中调用show_sin_table(min_angle, max_angle),显示角度值为min_angle到max_angle之间的所有角度(间隔为1度)的正弦值。要求不能用数学库函数,可以将 项目“太乐了” 中的mysin函数拷贝到这个程序中,用于计算sin值。例如show_sin_table(0, 90)可以显示出所有0到90度的正弦值。可以考虑以速查表格的形式(例, 单位转换对照表 )给出结果。
解法:

#include <stdio.h>
#include <stdlib.h>
#define pi 3.1415926
double mysin(double);
void show_sin_table(int,int);
double myabs(double);
int factorial(int);


int main()
{
    printf("please enter the range of the angel(min-max):");
    int iMax_a,iMin_a;
    scanf("%d%d",&iMin_a,&iMax_a);
    show_sin_table(iMin_a,iMax_a);
    return 0;
}
void show_sin_table(min_angle, max_angle)
{
    int i=1;
    double dRadian;
    double dValue;
    for (i=min_angle;i<=max_angle;++i)
    {
        dValue=0;
       dRadian=(pi/180)*i;
       dValue=mysin(dRadian);
       printf("sin(%d)=%0.2lf\t",i,dValue);
       if(i%4==0)
        printf("\n");
       }
    }
double mysin(double dRad)
{
  double dError;
  double dSum;
  double dPow;
  int n;
  int sign=-1;
  int i=1;
  double x=dRad;
    dSum=x;
    dPow=x;
  do
  {
      n=2*i+1;
      dError=(sign*(dPow*x*x))/factorial(n);
      dSum += dError;
      sign=-sign;
      ++i;
  }while(myabs(dError)>0.00001);
  return(dSum);
}
double myabs(double x)
{
    if(x<0)
        x=(-x);
    else
        x=x;
        return(x);
}
int factorial(int num)
{
    int iFac_m=1;
    int i;
    for(i=1;i<=num;++i)
    {
        iFac_m *= i;
    }
    return(iFac_m);
}

【项目4 - 让吃货失望的菜单】

计算机中的应用程序,常常用“菜单”的形式,提供给用户便捷的操作。当然, 里面没有菜。
下面的程序段给出了一些提示,请在此基础上拓展,使程序的运行如图所示(不限于此,可以拓展)

解法:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n;
    printf("***************************\n");
    printf("* 1 having dinner         *\n");
    printf("* 2 sleeping              *\n");
    printf("* 3 hit pees              *\n");
    printf("* 4 complain to pee's mom *\n");
    printf("* 0 exit                  *\n");
    printf("please make your choice:");
    scanf("%d",&n);
    switch (n)
    {
        case 0:break;
        case 1:
            printf("what can i get to eat");break;
        case 2:
            printf("i am so sleepy");break;
        case 3:
            printf("the pain come from the bottom of my heart");break;
        case 4:
            printf("mom hits me too");break;
    }
    return 0;
}














































































































































































































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值