PTA:C语言三大结构例题(期末复习用)

顺序结构(1)顺序结构基础实验

1.Welcome to You!

本题要求编写程序,输出一个短句“Welcome to You!”。

输出格式: “Welcome to You!”。

#include<stdio.h>
int main(void)
{
printf("Welcome to You!");
    return 0;
}

2.打印菜单

本题要求编写程序,在屏幕上打印5行菜单。

按照下列格式打印菜单,每行显示一句。注意除了每行的换行不能有任何多余字符。

输出样例:

[1] Select crisps

[2] Select popcorn

[3] Select chocolate

[4] Select cola

[0] Exit

#include<stdio.h>
int main(void)
{
    printf("[1] Select crisps\n");
    printf("[2] Select popcorn\n");
    printf("[3] Select chocolate\n");
    printf("[4] Select cola\n");
    printf("[0] Exit\n");
return 0;
}

3.计算华氏温度

本题要求编写程序,计算摄氏温度26°C 对应的华氏温度。计算公式:F=9×C/5+32,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。

输出格式:celsius = 26, fahr = 对应的华氏温度整数值

#include<stdio.h>
int main(void)
{
    int celsius,fahr;

    celsius=26,fahr=9*celsius/5+32;
    printf("celsius = %d, fahr = %d\n",celsius,fahr);
    return 0;
}

4.将x的平方赋值给y

假设x的值为3,计算x的平方并赋值给y,分别以“y = x ∗ x”和“x ∗ x = y”的形式输出x和y的值。

输出格式:按照下列格式输出代入x=3的结果:

y = x * x

x * x = y

#include<stdio.h>
int main(void)
{
    int x=3,y;

    y = x * x;
    printf("%d = %d * %d\n",y,x,x);
    printf("%d * %d = %d",x,x,y);
    return 0;
}

5.整数152的各位数字

本题要求编写程序,输出整数152的个位数字、十位数字和百位数字的值。

输出格式:152 = 个位数字 + 十位数字*10 + 百位数字*100

#include<stdio.h>
int main(void)
{
    int x=152;

    printf("%d = %d + %d*10 + %d*100",x,x%10,(x/10)%10,x/100);
    return 0;
}
 

顺序结构(1)-顺序结构拓展实验

1.输出倒三角图案

本题要求编写程序,输出指定的由“*”组成的倒三角图案。:

输出格式:

按照下列格式输出由“*”组成的倒三角图案。

* * * *

 * * *

  * *

   *

#include<stdio.h>
int main(void)
{
    printf("* * * *\n");
    printf(" * * *\n");
    printf("  * *\n");
    printf("   *");
    return 0;
}

2.计算物体自由下落的距离

一个物体从100米的高空自由落下。编写程序,求它在前3秒内下落的垂直距离。设重力加速度为10

输出格式: height = 垂直距离值(结果保留2位小数。)

#include<stdio.h>
int main(void)
{
    double height,t;

    t=3;
    height = 10*t*t/2;
printf("height = %.2lf\n",height);
    return 0;
}

3.计算平均分

已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均成绩(结果按整型输出)。

输出格式:math = 87, eng = 72, comp = 93, average = 计算所得的平均成绩

#include<stdio.h>
int main(void)
{
    int math,eng,comp,average;

    math = 87, eng = 72, comp = 93;
    average = math/3 + eng/3 + comp/3;
    printf("math = 87, eng = 72, comp = 93, average = %d",average);
    return 0;
}

4.计算存款利息

本题目要求计算存款利息,计算公式为interest=money×(1+rate)( year次方)−money

输入格式:输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。

输出格式:在一行中按“interest = 利息”的格式输出,其中利息保留两位小数。

输入样例:1000 3 0.025

输出样例:interest = 76.89

#include<stdio.h>
int main(void)
{
    double interest,year,money,rate;

    scanf("%lf %lf %lf",&money,&year,&rate);
    interest=money*pow(1+rate,year)-money;
    printf("interest = %.2lf\n",interest);
    return 0;
}

5.整数算术运算

本题要求编写程序,计算并输出2个正整数的和、差、积、商与余数。题目保证输入和输出全部在整型范围内。

输入样例: 5 3

输出样例: 在这里给出相应的输出。例如:

5 + 3 = 8

5 - 3 = 2

5 * 3 = 15

5 / 3 = 1

5 % 3 = 2

#include<stdio.h>
int main(void)
{
    int A,B,C,D,E,F,G;

    scanf("%d %d",&A,&B);
    C=A + B;
    D=A - B;
    E=A * B;
    F=A / B;
    G=A % B;
    printf("%d + %d = %d\n",A,B,C);
    printf("%d - %d = %d\n",A,B,D);
    printf("%d * %d = %d\n",A,B,E);
    printf("%d / %d = %d\n",A,B,F);
    printf("%d %% %d = %d",A,B,G);//注意表示%需要使用%%
    return 0;
}

选择结构(1)-if-else基础实验

1.计算分段函数[1]

本题目要求计算下列分段函数f(x)的值:

输入格式:输入在一行中给出实数x。

输出格式:在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。

输入样例1: 10   

输出样例1: f(10.0) = 0.1

输入样例2: 0    

输出样例2: f(0.0) = 0.0

#include <stdio.h>
int main()
{
    float x,y;

    scanf("%f",&x);
    if(x!=0)
    {
        y=1/x;
    }
    else
    {
        y=0;
    }
    printf("f(%.1f) = %.1f\n",x,y);
    return 0;
}

2.计算分段函数[2]

本题目要求计算下列分段函数f(x)的值:

注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。

输入格式:输入在一行中给出实数x。

输出格式:在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。

输入样例1: 10

输出样例1: f(10.00) = 3.16

输入样例2: -0.5

输出样例2: f(-0.50) = -2.75

​#include<stdio.h>
#include<math.h>
int main(void)
{
    double x,y;

    scanf("%lf",&x);
    if(x>=0)
    {
        y=sqrt(x);
    }
    else
    {
        y=pow(x+1,2)+2*x+1/x;
    }
    printf("f(%.2f) = %.2f\n",x,y);
    return 0;
}

3.阶梯电价

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

输入格式: 输入在一行中给出某用户的月用电量(单位:千瓦时)。

输出格式: 在一行中输出该用户应支付的电费(元),结果保留两位小数,

格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。

输入样例1: 10  输出样例1: cost = 5.30

输入样例2: 100 输出样例2: cost = 55.50

#include<stdio.h>
int main(void)
{
    double x,cost;

    scanf("%lf",&x);
    if(x>0)
    {
        if(x<=50 && x>=0)
        {
            cost=0.53*x;
        }
        else
        {
            cost=0.53*50+0.58*x-0.58*50;
        }
         printf("cost = %.2f",cost);
    }
    else
        {
        printf("Invalid Value!");
        }
    return 0;
}

4.计算火车运行时间

本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。

输入格式:

输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。

输出格式:在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。

输入样例:1201 1530   输出样例:03:29

#include<stdio.h>
int main(void)
{
    int a,b,x,y,min;

    scanf("%d %d",&a,&b);
    min=b/100*60+b%100-a/100*60-a%100;
    x=min/60;
    y=min%60;
    printf("%.2d:%.2d\n",x,y);
    return 0;
}

5.判断一个三位数是否为水仙花数

本题要求编写程序,判断一个给定的三位数是否为水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。

输入格式: 输入在一行中给出一个需要判断的整数 N(100≤N≤999)。

输出格式: 如果N是水仙花数,则在一行中输出Yes,否则输出No。如果N不是三位数,则输出Invalid Value.。

输入样例1: 153 输出样例1: Yes

输入样例2: 500 输出样例2: No

输入样例3: -2  输出样例3: Invalid Value.

#include<stdio.h>
#include<math.h>
int main(void)
{
    int n;

    scanf("%d",&n);
    if(n>=100 && n<=999)
    {
        if(n==pow(n/100,3)+pow(n%100/10,3)+pow(n%10,3))
        {
            printf("Yes\n");
        }
        else
        {
            printf("No\n");
        }
    }
    else
    {        
        printf("Invalid Value.");
    }
        return 0;
}
 

选择结构(1)-if-else拓展实验

1.奇偶数判断

从键盘上输入一个整数,判断其是奇数还是偶数,如果是奇数则输出"Odd",如果是偶数则输出"Even",最后换行。

输入格式:键盘上输入一个整数。

输出格式:如果输入的整数是奇数则输出"Odd",如果是偶数则输出"Even",最后换行。

输入样例1: 4

输出样例1: Even

输入样例2: 155

输出样例2: Odd

#include<stdio.h>
int main(void)
{
    int x;

    scanf("%d",&x);
    if(x%2==0)
    {
        printf("Even\n");
    }
    else
    {
        printf("Odd\n");
    }
    return 0;
}

2.输出三角形面积和周长

本题要求编写程序,根据输入的三角形的三条边abc,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=sqrt(s(sa)(sb)(sc)​),其中s=(a+b+c)/2。

输入格式:输入为3个正整数,分别代表三角形的3条边abc

输出格式:

如果输入的边能构成一个三角形,则在一行内,

按照area = 面积; perimeter = 周长的格式输出,保留两位小数。

否则,输出These sides do not correspond to a valid triangle

输入样例1:5 5 3

输出样例1:area = 7.15; perimeter = 13.00

输入样例2:1 4 1

输出样例2:These sides do not correspond to a valid triangle

#include<stdio.h>
#include<math.h>
int main(void)
{
    double a,b,c,s,area,perimeter;

    scanf("%lf %lf %lf",&a,&b,&c);
    s=(a+b+c)/2;
    if(a+b>c && a+c>b && b+c>a)
    {
        area=sqrt(s*(s-a)*(s-b)*(s-c));
        perimeter=a+b+c;
        printf("area = %.2lf; perimeter = %.2lf",area,perimeter);
    }
    else
    {
        printf("These sides do not correspond to a valid triangle");
    }
    return 0;
}

3.比较大小

本题要求将输入的任意3个整数从小到大输出。

输入格式: 输入在一行中给出3个整数,其间以空格分隔。

输出格式: 在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例: 4 2 8  输出样例: 2->4->8

#include<stdio.h>
int main(void)
{
    int a,b,c;
   
     scanf("%d %d %d",&a,&b,&c);
    if(a<b && b<c)
        printf("%d->%d->%d",a,b,c);
    else if(a<c && c<b)
        printf("%d->%d->%d",a,c,b);
    else if(b<a && a<c)
        printf("%d->%d->%d",b,a,c);
    else if(b<c && c<a)
        printf("%d->%d->%d",b,c,a);
    else if(c<a && a<b)
        printf("%d->%d->%d",c,a,b);
    else if(c<b && b<a)
        printf("%d->%d->%d",c,b,a);
    else
        printf("%d->%d->%d",a,b,c);
    return 0;
}

4.求三个数中的最大值

从键盘上输入3个整数,求其中的最大值并输出。

输入格式: 输入三个整数,中间用空格分隔。  输出格式: 输出一个整数,最后换行。

输入样例1: 1  2  3  输出样例1: 3

#include<stdio.h>
int main(void)
{
    int a,b,c;
   
    scanf("%d %d %d",&a,&b,&c);
    if(a<b && b<c)
        printf("%d",c);
    else if(a<c && c<b)
        printf("%d",b);
    else if(b<a && a<c)
        printf("%d",c);
    else if(b<c && c<a)
        printf("%d",a);
    else if(c<a && a<b)
        printf("%d",b);
    else if(c<b && b<a)
        printf("%d",a);
    else
        printf("%d",a);
    return 0;
}

5.字母转换

从键盘上输入一个小写字母,将其转换为循环字母表中的下一个字母并输出;若输入字母'a'到'y',则输出字母表中的下一个字母;若输入'z',则输出'a';最后换行。

输入格式: 从键盘上输入一个小写字母。

输出格式: 输出转换后的字母,最后换行。

输入样例1: a

输出样例1: b

输入样例2: z

输出样例2: a

#include<stdio.h>
int main(void)
{
    char ch,chr;

    scanf("%c",&ch);
    if(ch>=97 && ch<122)
    {
        chr=ch+1;
        printf("%c\n",chr);
    }
    else if(ch=122)
    {
        printf("a");
    }
    return 0;
}
 

选择结构(2)-多分支基础实验

1. 计算符号函数的值

对于任一整数n,符号函数sign(n)的定义如下:

请编写程序计算该函数对任一输入整数的值。

输入格式:      输入在一行中给出整数n。

输出格式:      在一行中按照格式“sign(n) = 函数值”输出该整数n对应的函数值。

输入样例1:   10  

输出样例1:   sign(10) = 1 

输入样例2:   0

输出样例2:   sign(0) = 0

输入样例3:   -98

输出样例3:   sign(-98) = -1

#include<stdio.h>
int main(void)
{
    int n;

    scanf("%d",&n);
    if(n<0)
    {
        printf("sign(%d) = -1",n);
    }
    else if(n>0)
    {
        printf("sign(%d) = 1",n);
    }
    else
    {
        printf("sign(%d) = 0",n);
    }
    return 0;
}

2.计算油费

现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。

本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。

输入格式:    输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。

输出格式: 在一行中输出应付款额,保留小数点后2位。

输入样例:    40 97 m

输出样例:    301.34

#include<stdio.h>
int main(void)
{
    double a,b,p,q;
    char c,m,e;

    scanf("%lf %lf %c",&a,&b,&c);
    if(b==90) p=6.95*a;
    if(b==93) p=7.44*a;
    if(b==97) p=7.93*a;
    switch(c)
    {
        case 'm':q=0.95*p;
            break;
        case 'e':q=0.97*p;
            break;
    }
    printf("%.2lf",q);
    return 0;
}

3.字符变换

从键盘上输入一个字符,若是大写字母则转换为对应的小写字母,若是小写字母则转换为对应的大写字母,若是其他字符则保持不变,最后输出转换后的字符。

输入格式:      输入一个字符。

输出格式:      输出转换后的字符,最后换行。

输入样例1:   A     输出样例1:   a

输入样例2:   e     输出样例2:   E

输入样例3:   7     输出样例3:   7

​#include<stdio.h>
int main(void)
{
    char ch;

    ch=getchar();
    if(ch<=90 && ch>=65)
        putchar(ch+32);
    else if(ch>=97 && ch<=122)
        putchar(ch-32);
    else putchar(ch);
    printf("\n");
    return 0;
}

4. 查询水果价格

给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。

首先在屏幕上显示以下菜单:

[1] apple

[2] pear

[3] orange

[4] grape

[0] exit

用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。

输入格式:输入在一行中给出用户连续输入的若干个编号。

输出格式:

首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。

输入样例1:3 -1 0 2

输出样例1:

[1] apple

[2] pear

[3] orange

[4] grape

[0] exit

price = 4.10

price = 0.00

输入样例2:1 2 3 3 4 4 5 6 7 8

输出样例2:

[1] apple

[2] pear

[3] orange

[4] grape

[0] exit

price = 3.00

price = 2.50

price = 4.10

price = 4.10

price = 10.20

#include<stdio.h>
int main(void)
{
    int choice,i;
    double price;

    printf("[1] apple\n");
    printf("[2] pear\n");
    printf("[3] orange\n");
    printf("[4] grape\n");
    printf("[0] exit\n");
    for(i=1;i<=5;i++)
    {
        scanf("%d",&choice);
        if(choice==0)
        break;
    }
    switch(choice)
    {
        case 1:price=3.0;break;
        case 2:price=2.5;break;
        case 3:price=4.1;break;
        case 4:price=10.2;break;
        default:price=0;break;
    }
    printf("price = %.2f\n",price);
}
return 0;
}

选择结构(2)-多分支拓展实验

1.计算邮费

输入货物重量x(一个整数),计算对应的邮费y并输出,计算公式如下:

如果x介于区间(0,5],则y=10,如果x介于区间(5,10],则y=15,

如果x介于区间(10,20],则y=20。

输入格式:  输入一个整数。

输出格式:  输出一个整数。

输入样例1:       3      输出样例1:       10

输入样例2:       6      输出样例1:       15

输入样例3:       18    输出样例3:       20

#include<stdio.h>
int main(void)
{
    int x,y;

    scanf("%d",&x);
    if(x>0 && x<=5) 
    y=10;
    else if(x>5 && x<=10)
    y=15;
    else if(x>10 && x<=20)
    y=20;
    printf("%d",y);
    return 0;
}

2.出租车计价

本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:

起步里程为3公里,起步费10元;

超起步里程后10公里内,每公里2元;

超过10公里以上的部分加收50%的回空补贴费,即每公里3元;

营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。

输入格式:

输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。

输出格式:

在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。

输入样例1:       2.6 2         输出样例1:       10

输入样例2:       5.1 4         输出样例2:       14

输入样例3:       12.5 9       输出样例3:       34

#include<stdio.h>
int main(void)
{
    double s;
    int t,x,m,n;

    scanf("%lf %d",&s,&t);
    if(t>=5) n=t/5*2;
    {   
        if(s<=3) m=10;
        if(s>3 && s<=10) m=10+2*s-6;
        if(s>10) m=24+3*s-29;
    }
    x=m+n;
    printf("%d",x);
    return 0;
}

3.高速公路超速处罚

按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

输入格式:

输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

输出格式:

在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

输入样例1:  65 60            输出样例1:  OK

输入样例2:  110 100        输出样例2:Exceed 10%. Ticket 200

输入样例3:  200 120

输出样例3:  Exceed 67%. License Revoked

​#include<stdio.h>
int main(void)
{
    double m,v,x,n;

    scanf("%lf %lf",&v,&x);
    m=v/x-1;
    n=100*m;
    if(m<0.1) 
    {
        printf("OK\n");
    }
    else if(m>=0.1 && m<0.5) 
    {
        printf("Exceed %.lf%%. Ticket 200\n",n);
    }
    else if(m>=0.5) 
    {
        printf("Exceed %.lf%%. License Revoked\n",n);
    }
    return 0;
}

4.成绩转换

本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:

大于等于90分为A;

小于90且大于等于80为B;

小于80且大于等于70为C;

小于70且大于等于60为D;

小于60为E。

输入格式:  输入在一行中给出一个整数的百分制成绩。

输出格式:  在一行中输出对应的五分制成绩。

输入样例:  90

输出样例:  A

#include<stdio.h>
int main(void)
{
    int score;
    char grade;

    scanf("%d",&score);
    switch(score/10)
    {
        case 10:case 9:
            printf("A\n",grade);
            break;
        case 8:
            printf("B\n",grade);
            break;
        case 7:
            printf("C\n",grade);
            break;
        case 6:
            printf("D\n",grade);
            break;
        case 5:case 4:case 3:case 2:case 1:case 0:
            printf("E\n",grade);
            break;
    }
    return 0;
}

5. 根据输入的数字,输出需要上课的节数

本题目要求读入一个整数1~7之间(不考虑输入错误的情况),然后输出需要上课的节数,对应如下:

1 星期一 8节课

2 星期二 10节课

3 星期三 6节课

4 星期四 8节课

5 星期五 6节课

6 今天没有课,可以好好休息一下啦!

7 今天没有课,可以好好休息一下啦!

输入格式:

例如:1

输出格式:

星期一 8节课(一和8之间有一个空格)

输入样例:  1     

输出样例:  星期一 8节课

#include<stdio.h>
int main(void)
{
    int x,y;

    scanf("%d",&x);
    switch(x)
    {
        case 1:
            printf("星期一 8节课");
            break;
        case 2:
            printf("星期二 10节课");
            break;
        case 3:
            printf("星期三 6节课");
            break;
        case 4:
            printf("星期四 8节课");
            break;
        case 5:
            printf("星期五 6节课");
            break;
        case 6: case 7:
            printf("今天没有课,可以好好休息一下啦!");
    }
    return 0;
}

循环结构(1)-for循环基础实验

1. 求N分之一序列前N项和

计算序列 1 + 1/2 + 1/3 + ... 的前N项之和。

输入格式:  输入在一行中给出一个正整数N。

输出格式:在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:  6               输出样例:  sum = 2.450000

#include<stdio.h>
int main(void)
{
    int i,n;
    double sum=0;

    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
    sum=sum+1.0/i;
    }
    printf("sum = %.6lf\n",sum);
    return 0;
}

2. 求奇数分之一序列前N项和

计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。

输入格式:  输入在一行中给出一个正整数N。

输出格式:在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:  23             输出样例:  sum = 2.549541

#include<stdio.h>
int main(void)
{
    int i,j,n;
    double sum;
   
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
    sum=sum+1.0/(2*i-1);
    }
    printf("sum = %.6lf\n",sum);
    return 0;
}

3.求简单交错序列前N项和

本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。

输入格式:  输入在一行中给出一个正整数N。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。题目保证计算结果不超过双精度范围。

输入样例:  10             输出样例:  sum = 0.819

#include<stdio.h>
int main(void)
{
    int i,x,y,n;
    double sum;

    scanf("%d",&n);
    y=1;
    sum=0;
    for(i=1,x=1;i<=n;i++,x+=3)
    {
        sum+=y*1.0/x;
        y=-y;
    }
    printf("sum = %.3lf",sum);
    return 0;
}

4. 输出华氏-摄氏温度转换表

输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。

温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。

输入格式:  在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。

输出格式:  第一行输出:"fahr celsius"

接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。

若输入的范围不合法,则输出"Invalid."。

输入样例1:       32 35

输出样例1:

fahr celsius

32   0.0

34   1.1

输入样例2:       40 30

输出样例2:       Invalid.

#include<stdio.h>
int main(void)
{
    int lower,upper,fahr;
    double celsius;

    scanf("%d %d",&lower,&upper);
    if(lower<=upper && upper<=100)
    {
        printf("fahr celsius\n");
        for(fahr=lower;fahr<=upper&&fahr>=lower;fahr+=2)
        {
            celsius=5.0*(fahr-32)/9;
            printf("%d%6.1lf\n",fahr,celsius);
        }
    }
    else if(lower>upper || upper>100)
    {
        printf("Invalid.");
    }
        return 0;
}

循环结构(1)-for循环拓展实验

1. 求交错序列前N项和

本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。

输入格式:  输入在一行中给出一个正整数N。

输出格式:  在一行中输出部分和的值,结果保留三位小数。

输入样例:  5      输出样例:  0.917

#include<stdio.h>
int main(void)
{
    int n,i;
    double x,y,z,sum;

    scanf("%d",&n);
    z=1;
    sum=0;
    x=1;
    y=1;
    for(i=1;i<=n;i++)
    {
        sum=z*x/y+sum;
        z=-z;
        y+=2;
        x++;
    }
    printf("%.3lf",sum);
    return 0;
}

2. 找出三位水仙花数

本题要求编写程序,输出给定正整数M和N区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。

输入格式:

输入在一行中给出两个正整数M和N(100≤M≤N≤999)。

输出格式:

顺序输出M和N区间内所有三位水仙花数,每一行输出一个数。若该区间内没有三位水仙花数,则无输出。

如果M或者N不符合题目的要求,则输出Invalid Value.。

输入样例1:       100 400   

输出样例1:      

153

370

371

输入样例2:       500 600

输出样例2:

输入样例3:    990 101

输出样例3:

Invalid Value.

#include<stdio.h>
#include<math.h>
int main(void)
{
    int x,y,n;

    scanf("%d %d",&x,&y);
    if(y>x && x>=100 && y<=999)
    {
        for(n=x;n<=y;n++)
        {
            if(n==pow(n/100,3)+pow(n%100/10,3)+pow(n%10,3))
            printf("%d\n",n);
        }
    }
    else
        printf("Invalid Value.\n");
    return 0;
}

3.找出最小值

本题要求编写程序,找出给定一系列整数中的最小值。

输入格式:输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。

输出格式:在一行中按照“min = 最小值”的格式输出n个整数中的最小值。

输入样例:       4 -2 -123 100 0

输出样例:       min = -123

#include<stdio.h>
int main(void)
{
    int n,i,number,min;

    scanf("%d ",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d ",&number);
        if(i==1)
            {
            min=number;
            }
        else
        {
        if(min>=number)
            {
            min=number;
            }
        }
    }
    printf("min = %d",min);
    return 0;
}

4.奇偶分家

给定N个正整数,请统计奇数和偶数各有多少个?

输入格式:

输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。

输出格式:在一行中先后输出奇数的个数、偶数的个数。中间以1个空格分隔。

输入样例:

9

88 74 101 26 15 0 34 22 77

输出样例:

3 6

#include<stdio.h>
int main(void)

{
    int n,i,x,y,a;

    x=0;
    y=0;
    scanf("%d\n",&n);
    if(n==0)
    {
        x=0;
        y=0;
        printf("%d %d",x,y);
    }
    else
    {
        for(i=1;i<=n;i++)
        {
            scanf("%d ",&a);
            if(a%2==0) y++;
            else x++;
        }
        printf("%d %d",x,y);
    }
    return 0;
}

5. 高空坠球

皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?

输入格式:

输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。

输出格式:

在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。

输入样例:  33 5          输出样例:  94.9 1.0

#include<stdio.h>
int main(void)
{
    int i,n;
    double a,h;

    scanf("%lf %d",&h,&n);
    a=0;
    if(n==0)
    {
        a=0;
        h=0;
        printf("%.1lf %.1lf",a,h);
    }
    else
    {
        for(i=1;i<=n;i++)
    {
        a=a+h;
        h=0.5*h;
        a=a+h;
    }
    a=a-h;//第一次落地时的高度,不用算升起,所以减去个h
    printf("%.1lf %.1lf",a,h);
    return 0;
    }
}

循环结构(2)-while和do while基础实验

1. 求整数的位数及各位数字之和

对于给定的正整数N,求它的位数及其各位数字之和。

输入格式:

输入在一行中给出一个不超过10的9次方的正整数N。

输出格式:

在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。

输入样例:321          输出样例:3 6

#include<stdio.h>
int main(void)
{
    int a,b,c;
    b=0;
    scanf("%d",&a);
    while(a>0)
    {
        b++;
        c+=a%10;
        a/=10;
    }
    printf("%d %d",b,c);
    return 0;
}

2. 求奇数和

本题要求计算给定的一系列正整数中奇数的和。

输入格式:

输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。

输出格式:  在一行中输出正整数序列中奇数的和。

输入样例:8 7 4 3 70 5 6 101 -1 输出样例:  116

#include<stdio.h>
int main(void)
{
    int n,sum=0;
    scanf("%d",&n);
    while(n>0)
    {
        if(n%2!=0) sum+=n;
        scanf("%d",&n);
    }
        printf("%d",sum);
    return 0;
}

3. 求给定精度的简单交错序列部分和

本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。

输入格式:  输入在一行中给出一个正实数eps。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

输入样例1:  4E-2            输出样例1: sum = 0.854457

输入样例2:  0.02             输出样例2: sum = 0.826310

​#include<stdio.h>
#include<math.h>
int main(void)
{
    int x=1;//分母
    double eps,a=0,sum=0,z=1.0;//a为单独一项,eps为输入数值,z表示正负,sum结果
    scanf("%lf",&eps);
    do{
        a=z*(1.0/x);
        z=-z;
        x+=3;
        sum+=a;
    }while(fabs(a)>eps);
    printf("sum = %lf",sum);
    return 0;
}

4. 韩信点兵

在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:

按从1至5报数,记下最末一个士兵报的数为1;

再按从1至6报数,记下最末一个士兵报的数为5;

再按从1至7报数,记下最末一个士兵报的数为4;

最后按从1至11报数,最末一个士兵报的数为10;

请编写程序计算韩信至少有多少兵。

输入格式:       本题无输入

输出格式:       输出韩信至少拥有的士兵人数。

#include<stdio.h>
int main(void)
{
    int a=1;
    while(a>0)
    {
        a++;
        if(a%5==1 && a%6==5 && a%7==4 && a%11==10)
        {
        break;
        }
    }
    printf("%d",a);
    return 0;
}

5.寻找250

输入格式:

输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。

输出格式:

在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。

输入样例:       888 666 123 -233 250 13 250 -222

输出样例:       5

#include<stdio.h>
#include<math.h>
int main(void)
{
    int a,n=1;//a为输入的数,x为输出的个数

    scanf("%d",&a);
    while(fabs(a)<1000)
    {
        if(a!=250)
        n++;
        scanf("%d",&a);
        if(a==250) break;
    }
    printf("%d",n);
}

6.打印九九乘法表

#include<stdio.h>
int main(void)
{
	int i=1,j=1;
	for(i=1;i<=9;i++)
		{
			printf("%4d",i);
		}
			printf("\n");
		
	for(i=1;i<=60;i++)
		{
			printf("%c",'.');
		}
			printf("\n");
		
	for(i=1;i<=9;i++)
		{	
		for(j=1;j<=i;j++)
			{
			printf("%4d",i*j);
			}
			printf("\n");
		}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是小鸭o

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

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

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

打赏作者

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

抵扣说明:

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

余额充值