2014-2015年度C语言试验

本文是一系列C语言编程实验的集合,涵盖了数字操作、分段函数计算、循环序列求和、鸡兔同笼问题、套服价格计算、最大最小值寻找、回纹数生成、数字字符累加、长整数相加、学生成绩管理、服务员评分统计等多个经典算法与问题的解决方案。通过这些实例,读者可以深入理解C语言的运算逻辑和控制结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*

1. 输入一个三位数,求其反转后形成的数并输出。输入输出示例如下(运行二次)

Enter n:127 

Output: 721

Enter n:520 

Output: 025

提示:( 1、分离n的个位、十位和百位;2、若m=25,printf(%03d,m)

*/

#include <stdio.h>

void cs(int n);

int main()

{

int n;

printf("请您输入一个三位数n=");

do

  {

    scanf("%d",&n);

      }while(n<100||n>999);

cs(n);

return 0;

}

void cs(n)

{

    int s=0;

    while(n)

    {

        s=s*10+n%10;

        n=n/10;

    }

    printf("%03d",s);

}

 

/*

2. 编写程序,输入x,计算并输出下列分段函数f(x)的值(保留两位小数),

请调用sqrt()函数求平方根,调用pow()函数求幂。

结果示例如下:

Enter x10 

f(10.00)  =  3.16

 

*/

#include <stdio.h>

#include <math.h>

double cs(int n);

int main()

{

    int n;

    printf("请输入一个数n=");

    scanf("%d",&n);

    printf("输出结果为%.2lf",cs(n));

return 0;

}

double cs(int n)

{

    if(n>=0)

         return sqrt(n);

    else

         return pow(n+1,2)+2*n+(double)1/n;

}

 

/*

3. 输入一个正整数n,计算1-2/3+3/5-4/7+5/9-6/11+…的前n项之和,输出时保留3位小数。

结果示例如下:

Enter n

sum  =  0.333

*/

#include <stdio.h>

double output(int n);

int main()

{

    int n;

    printf("Enter n:");

    scanf("%d",&n);

    printf("sum=%.3lf",output(n));

    return 0;

 

}

double output(int n)

{

    double sum=1.0;

    int flag=-1,fz=2,fm=3;

    n--;

    while(n)

    {

        sum+=(double)((fz*1.0)/fm)*flag;

        fm=fm+fz;

        fz=fm-fz;

        flag=-flag;

        n--;

    }

    return sum;

}

 

/*

1.鸡兔同笼问题,已知鸡和兔总数量为n,总腿数为m。依次输出鸡的数目和兔的数目。如果无解,则输出“No answer”。

Input:14 32 

Output:12 2

Input:10 16 

Output: No answer

*/

#include <stdio.h>

void output(int n,int m);

int main()

{

int flag=1,m,n;

do

{

    printf("Input :");

    scanf("%d%d",&n,&m);

    output(n,m);

    printf("是否继续?请输入 是(非0),否(0):");

    scanf("%d",&flag);

    }while(flag);

return 0;

}

void output(int n,int m)

{

 

    float ckxs,ckzs,ra;

    ckxs=(float)((4*n-m)*1.0/2);

    ckzs=(int)((4*n-m)/2);

    ra=(m-2*n)/2;

    if((ckxs-ckzs)||ckxs>n||ra>n)

        printf("\nNO answer!\n");

    else

        printf("\noutput : %d  %d\n",(4*n-m)/2,(m-2*n)/2);

}

 

/*

2. 某服装店经营套服,也单件出售,若买的不少于50套,每套80元,不足50套,每套90元,若只买上衣每件60元,只买裤子每条45元,从键盘读入所买上衣coat和裤子trousers件数,计算应付款money?

提示1)先计算成套的衣服多少钱?

2)再计算剩下的单件的上衣、单件的裤子多少钱;

3)计算总付款

Input coat & trousers:55 70 

Money = 5075

Input coat & trousers:55 40 

Money = 4500

Input coat & trousers:-5 3 

Error:coat number less than 0

*/

#include <stdio.h>

int t_money(int t);

int main()

{

int s,coat,trousers,flag=1;

do

{

    printf("Input coat & trousers:");

    s=0;

    do

    {

        scanf("%d%d",&coat,&trousers);

    }while(coat<0||trousers<0);

    s+=t_money(coat>trousers?trousers:coat);

    if(coat>trousers&&coat!=trousers)

        s+=(coat-trousers)*60;

        else

            s+=(trousers-coat)*45;

        printf("\nMONEY=%d\n",s);

    printf("是否继续?请输入 是(非0),否(0):");

    scanf("%d",&flag);

    }while(flag);

return 0;

}

int t_money(int t)

{

    if(t<50)

        return t*50;

    else

        return t*80;

}

 

/*

3. 3n+1问题。猜想:对于任意一个大于1的自然数n,n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换,一定会使n变为1。例如3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1。输入n,输出变换的次数。

Enter n: 3 

Output:7

*/

#include <stdio.h>

int output(int n);

int main()

{

    int n;

    printf("Enter n: ");

    scanf("%d",&n);

    printf("%d",output(n));

return 0;

}

int output(int n)

{

    int t=0;

    do

    {

        if(n%2)

            n=3*n+1;

        else

            n=n/2;

        t++;

    }while(n!=1);

    return t;

 

}

 

/*

4. aaaaaaaa?a。输入个正整数n, a+aa+aaa+aa?a(n a)之和。注:求取每一项时可以利用前后项之间的关系。

例:下面括号内是说明

Enter m and n8 5 (a=8, n=5)

Output:98760 (8+88+888+8888+88888)

*/

#include <stdio.h>

long output(int a,int n);

int main()

{

int a,n;

        printf("Enter a and n:");

        scanf("%d%d",&a,&n);

        printf("\noutput :%ld",output(a,n));

return 0;

}

long output(int a,int n)

{

        long s=0,mx=a;

        while(n)

        {

         s=s+mx;

         mx=mx*10+a;

         n--;

        }

        return s;

}

 

/*

5. 求最大最小值。输入一个正整数n, 再输入个整数,输出最大及最小值,求最大及最小值。下面括号内是说明

Enter n and the corresponding integers: 4 2 123 -100 0 (n=4,后面是4个整数)

max=123min=-100

*/

#include <stdio.h>

void output(int n);

int main()

{

int n;

printf("Enter n and the corresponding integers :");

do

{

    scanf("%d",&n);

}while(!n);

output(n);

return 0;

}

void output(int n)

{

    int max,min,t;

    scanf("%d",&max);

    min=max;

    n--;

    while(n)

    {

        scanf("%d",&t);

        if(t>max)

            max=t;

        if(t<min)

            min=t;

        n--;

    }

    printf("max=%d  min=%d",max,min);

}

 

/*

1.利用下面的级数求cos(x)的值,直到级数的第n项的绝对值小于等于10-6为止。

    n=012,…

提示:设前一项t = 可以分离成 ,后一项t =  可以分离成 ,依次分离下去,即后一项总能分离出其前一项,后一项与前一项的关系(结合n)       t = -t * x *x / ((2 * n) * (2 * n - 1))

 

要求:将求cosx)功能设计成自定义函数double  myCosdouble  x);

 

例:下面括号内是说明

Enter x:1.0471↙  (弧度为 3.1415/3 = 1.0471,对应角度为60度)

cos60) = 0.500

*/

#include <stdio.h>

#include <math.h>

#define over 1e-6

double mycos(double x);

int main()

{

double x ;

        printf("Enter x :");

        scanf("%lf",&x);

        printf("\ncos(%d)=%.3lf\n",180/(int)(3.1415/x),mycos(x));

return 0;

}

double mycos(double x)

{

        double s=1.0,t=-x*x/2;

        int n=1;

        do

        {

          s+=t;

          n++;

          t=-t*x*x/((2*n)*(2*n-1));

        }while(fabs(t)>over);

        return s;

}

 

/*

2、由键盘输入一行字符(总字符个数从1个至80 个均有可能,以回车符表示结束),将其中每个数字字符所代表的数值累加起来,输出结果。

Enter: abc123 

Output: 6

Enter: A6H7T+65 

Output: 24

 

 

提示:

1)可以使用下面程序段逐个读入键盘输入的一行字符

char ch;

while((ch=getchar())!='\n')

{ ……}

2)数字字符转为对应的数值可用a = ch -0;

*/

#include <stdio.h>

int main()

{

char ch;

        int s=0;

        printf("Enter :");

        while((ch=getchar())!='\n')

            if(isdigit(ch))

                s=s+ch-'0';

        printf("\noutput:%d",s);

return 0;

}

 

/*

3.输入一个两位数,个位大于5,十位大于4小于8,利用该数生成回纹数,回纹数:(两端数字对称的数,例如533527472等),生成过程见下列:

Enter79 

Output44044

 

生成过程:

79+97=176

176+671=847

847+748=1595

1595+5951=7546

7546+6457=14003

14003+30041=44044

 

*/

#include <stdio.h>

long out_hw(n);

long handle(long n);

int main()

{

        long n;

        int flag=0;

        printf("Enter :");

        do

        {

            scanf("%d",&n);

            if(n/10<=4||n/10>=8||n%10<=5)

                flag=1;

        }while(flag);

        printf("\noutput:%ld",handle(n));

return 0;

}

long out_hw(long n)

{

        long s=0;

        while(n)

        {

            s=s*10+n%10;

            n=n/10;

        }

        return s;

}

long handle(long n)

{

        while(n!=out_hw(n))

            n+=out_hw(n);

        return n;

}

 

/*

1. 输入一个正整数n (1<n<=100),再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的个数。示例如下:

Input n: 5 

Input 5 integers: 8 2 5 1 4 

After swapped:1 2 5 4 8

*/

#include <stdio.h>

long handle(int sj[],int n);

int main()

{

        int sj[100],n,i;

        printf("Input n:");

        scanf("%d",&n);

        printf("Input %d integers :",n);

        for(i=0;i<n;i++)

            scanf("%d",&sj[i]);

        handle(sj,n);

        printf("After swapped:");

        for(i=0;i<n;i++)

            printf("%2d",sj[i]);

return 0;

}

long handle(int sj[],int n)

{

        int max,min,i,t;

        max=min=0;

        for(i=1;i<n;i++)

        {

            if(sj[i]>sj[max])

                max=i;

            if(sj[i]<sj[min])

                min=i;

        }

        t=sj[0];

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值