zoukankan      html  css  js  c++  java
  • 中国大学MOOC-翁恺-C语言程序设计习题集 05-0 到 06-3

    05-0. 求序列前N项和(15)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    张彤彧(浙江大学)

    本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

    输入格式:

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

    输出格式:

    在一行中输出部分和的值,精确到小数点后2位。题目保证计算结果不超过双精度范围。

    输入样例:
    20
    
    输出样例:
    32.66
    程序:

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        int N;
        while(scanf("%d",&N)==1)
        {
            double a=2,b=1;
            double sum=0.0;
            for(int i=1;i<=N;i++)
            {
                sum+=a*1.0/b;
                a=a+b;
                b=a-b;
            }
            printf("%.2lf
    ",sum);
        }
    }
    

    05-1. 约分最简分式(15)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    翁恺(浙江大学)

    分数可以表示为“分子/分母”的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。

    输入格式:

    输入在一行中给出一个分数,分子和分母中间以斜杠“/”分隔,如: 12/34 表示34分之12。分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。

    提示:在scanf的格式字符串中加入“/”,让scanf来处理这个斜杠。

    输出格式:

    在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用“分子/分母”的形式表示分数。如 5/6表示6分之5。

    输入样例:
    60/120
    
    输出样例:
    1/2
    代码:

    #include<stdio.h>
    #include<stdlib.h>
    int Div(int n,int m)
    {
        if(n<m)
        {
            int temp=n;
            n=m;
            m=temp;
        }
        int rem=n%m;
        while(rem)
        {
            n=m;
            m=rem;
            rem=n%m;
        }
        return m;
    }
    int main()
    {
        int n,m;
        char c;
        while(scanf("%d%c%d",&n,&c,&m)==3)
        {
            int div=Div(n,m);
            printf("%d/%d
    ",n/div,m/div);
        }
    }

    05-2. 念数字(15)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    翁恺(浙江大学)

    输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出“fu”字。十个数字对应的拼音如下:

    0: ling
    1: yi
    2: er
    3: san
    4: si
    5: wu
    6: liu
    7: qi
    8: ba
    9: jiu
    

    输入格式:

    输入在一行中给出一个整数,如: 1234 。

    提示:整数包括负数、零和正数。

    输出格式:

    在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si

    输入样例:
    -600
    
    输出样例:
    fu liu ling ling
    代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    char num[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    int main()
    {
        int n;
        while(scanf("%d",&n)==1)
        {
            int flag=0;
            if(n<0)
            {
                printf("fu");
                n=-n;
                flag=1;
            }
            char a[100];
            sprintf(a,"%d",n);
            for(int i=0;i<strlen(a);i++)
            {
                if(flag==1)
                {
                    printf(" %s",num[a[i]-48]);
                }
                if(flag==0)
                {
                     flag=1;
                     printf("%s",num[a[i]-48]);
                }
            }
            printf("
    ");
        }
    }
    

    05-3. 求a的连续和(15)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    翁恺(浙江大学)

    输入两个整数a和n,a的范围是[0,9],n的范围是[1,8],求数列之和S = a+aa+aaa+...+aaa...a(n个a)。 如a为2、n为8时输出的是2+22+222+...+22222222的和。

    输入格式:

    输入在一行中给出两个整数,先后表示a和n。

    输出格式:

    在一行中输出要求的数列之和。

    输入样例:
    2 4
    
    输出样例:
    2468
    代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
        int a,n;
        while(scanf("%d%d",&a,&n)==2)
        {
            int i,d=a*n,temp=0;
            int arr[100];
            for(i=0;i<n;i++)
            {
                d=a*(n-i)+temp;
                arr[i]=d%10;
                temp=d/10;
            }
            long long sum=0,pro=1;
            for(i=0;i<n;i++)
            {
                sum+=arr[i]*pro;
                pro*=10;
            }
            if(temp!=0)
                printf("%d",temp);
            printf("%lld
    ",sum);
        }
        return 0;
    }
    

    06-0. 混合类型数据格式化输入(5)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    乔林(清华大学)

    本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。

    输入格式:

    输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。

    输出格式:

    在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。

    输入样例:
    2.12 88 c 4.7
    
    输出样例:
    c 88 2.12 4.70
    代码:

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        double d1,d2;
        int i;
        char c,c1,c2;
        while(scanf("%lf%d%c%c%c%lf",&d1,&i,&c1,&c,&c2,&d2)==6)
        {
            printf("%c %d %.2lf %.2lf
    ",c,i,d1,d2);
        }
        return 0;
    }
    

    06-1. 简单计算器(20)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    张彤彧(浙江大学)

    模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。

    输入格式:

    输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。

    输出格式:

    在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

    输入样例:
    1+2*10-10/2=
    
    输出样例:
    10

    代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
        int a[10000];
        char b[10000];
        int i,num,c,cnt1=0,cnt2=0,flag=1;
        do
        {
            scanf("%d%c",&num,&c);
            a[cnt1++]=num;
            b[cnt2++]=c;
        }while(c!='=');
        int res=a[0],j=0;
        for(i=1;i<cnt1;i++)
        {
            j=i-1;
            if(b[j]!='+'&&b[j]!='-'&&b[j]!='*'&&b[j]!='/')
            {
                flag=0;
                break;
            }
            if(b[j]=='*')
            {
                res*=a[i];
            }
            else if(b[j]=='-')
            {
                res-=a[i];
            }
            else if(b[j]=='/')
            {
                if(a[i]==0)
                {
                    flag=0;
                    break;
                }
                res/=a[i];
            }
            else if(b[j]=='+')
            {
                res+=a[i];
            }
        }
        if(flag==0)
            printf("ERROR
    ");
        else
            printf("%d
    ",res);
    }
    


    06-2. 字符串字母大小写转换(10)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    张彤彧(浙江大学)

    输入一个以#结束的字符串,本题要求将小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其它字符不变。

    输入格式:

    输入在一行中给出一个长度不超过40的、以#结束的非空字符串。

    输出格式:

    在一行中按照要求输出转换后的字符串。

    输入样例:
    Hello World! 123#
    
    输出样例:
    hELLO wORLD! 123
    代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
        char a[100];
        char ch;
        int cnt=0,i;
        do
        {
            scanf("%c",&ch);
            a[cnt++]=ch;
        }while(ch!='#');
        for(i=0;i<cnt-1;i++)
        {
            if(a[i]>='A'&&a[i]<='Z')
            {
                a[i]=a[i]+32;
                continue;
            }
            if(a[i]>='a'&&a[i]<='z')
            {
                a[i]=a[i]-32;
                continue;
            }
        }
        for(i=0;i<cnt-1;i++)
            printf("%c",a[i]);
        printf("
    ");
    }
    


    06-3. 单词长度(15)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    翁恺(浙江大学)

    你的程序要读入一行文本,其中以空格分隔为若干个单词,以‘.’结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如“it's”算一个单词,长度为4。注意,行中可能出现连续的空格;最后的‘.’不计算在内。

    输入格式:

    输入在一行中给出一行文本,以‘.’结束。

    提示:用scanf("%c",...);来读入一个字符,直到读到‘.’为止。

    输出格式:

    在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

    输入样例:

    It's great to see you here.
    

    输出样例:

    4 5 2 3 3 4
    代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
        char a[100000];
        char ch;
        int cnt=0,i,j;
        scanf("%c",&ch);
        while(ch!='.')
        {
            a[cnt++]=ch;
            scanf("%c",&ch);
        }
        int len=strlen(a);
        int lea[1000],t=0;
        for(i=0;i<len;i++)
        {
            if(a[i]!=' ')
            {
                j=i+1;
                while(a[j]!=' '&&j<len)
                {
                    j++;
                }
                lea[t++]=j-i;
                i=j;
            }
        }
        for(i=0;i<t;i++)
        {
            if(i==0)
                printf("%d",lea[0]);
            else
                printf(" %d",lea[i]);
        }
        printf("
    ");
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    高等软工第三次作业——设计也可以按图索骥
    高等软工第二次作业-从需求分析看软件开发的挑战
    高等软工第一次作业——期望与笃信
    【ACM-ICPC 2018 徐州赛区网络预赛】D.Easy Math 杜教筛
    【HDU 6428】Calculate 莫比乌斯反演+线性筛
    【BZOJ 4199】[Noi2015]品酒大会 后缀自动机+DP
    【BZOJ 3238】差异 后缀自动机+树形DP
    【Codeforces Round #466】E. Cashback DP+ST表
    【BZOJ 4709】柠檬 斜率优化dp+单调栈
    Hello Tornado
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965270.html
Copyright © 2011-2022 走看看