SCAUoj实验5_循环结构(一)_堂上练习&&单元测试

文章提供了一系列C语言编程练习题,包括将句子中的大写字母转为小写、计算斐波那契数列的和、求最大公约数、统计单词个数以及计算特定条件下百万富翁亏钱的天数。这些题目涉及到基本的输入输出、字符串操作、循环与条件判断以及数学算法的应用。
摘要由CSDN通过智能技术生成

一、堂上练习

1.由键盘输入一个句子(字符个数不定,最多不超过80个,以’\n’结束),将其中的大写字符变成小写(其它类型的字符不变),
最后输出变换后的句子。
输入样例 ThiS IS My fIrSt C ProgrAm!
输出样例 this is my first c program!

代码如下(示例):

#include<stdio.h>
int main ()
{
    char c;
    while((c=getchar()) != '\n')
    {
        if( c>='A' && c<='Z')
            c = c + 'a' - 'A';
        putchar(c);
    }
    return 0;
}

或者

#include<stdio.h>
#include<string.h>
int main()
{
    char arr[81];
    gets(arr);
    strlwr(arr);//相对应的就有strupr
    printf("%s\n",arr);//或者puts(arr);
    return 0;
}

2.计算数列的和:2/1+3/2+5/3+8/5+13/8+21/13…
编程实现,由键盘输入n,计算输出数列前n项和。(结果保留四位小数,提示:要使用double,否则精度不够)
输入样例:20
输出样例:32.6603

代码如下(示例):

#include<stdio.h>
int main()
{
    int i,n;
    double a=2,b=1,s=0;
    scanf("%d",&n);
    for(i=1; i<=n; i++)
    {
        s=s+a/b;
        a=a+b;
        b=a-b;
    }
    printf("%.4lf\n",s);
    return 0;
}

3.由键盘输入两个正整数m、n(m、n<1000000),计算它们的最大公约数。
输入样例 16,24
输出样例 8

代码如下(示例):

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

这里求最大公约数用的是辗转相除法(但是这并不是最好的解法)。辗转相除法就是,先选定其中一个数作为被除数,另一个作为除数,然后不断把上一次的除数作为下一次的被除数,余数作为下一次的除数,直到余数为0,下面红色框的就是最大公约数,同时我们可以发现无需一定要把较大的数放在被除数的位置。
在这里插入图片描述
4.写一个函数实现:输入一行字符,以空格分割单词,回车结束输入,输出单词的个数
输入样例 There are many students and many trees!
输出样例 7

代码如下(示例):

#include<stdio.h>
int main ()
{
    int num=0,flag=1,i;
    char c;
    for(i=0;(c=getchar())!='\n';i++)
    {//遍历,同时判断输入结束了。
        if(flag == 1)
        {
            if(c != ' ')
            {//单词的起始,如果有连续空格或者句子开头就又空格,不计算单词数。
                num++;
                flag = 0;
            }
        }
        else if(c == ' ')//判断单词的结束位置。
            flag = 1;//遇到单词结尾,flag为1
    }
    printf("%d\n",num);
    return 0;
}

5.一个百万富翁遇到一个陌生人,陌生人找他谈了一个换钱的计划。该计划如下:我每天给你m元,而你第一天只需给我一分钱。第二天我仍给你m元,你给我2分钱。第三天,我仍给你m元,你给我4分钱。依次类推,你每天给我的钱是前一天的两倍,直到一个月(30天)。百万富翁很高兴,欣然接受这个契约。现要求,编写一个程序,由键盘输入m,计算多少天后,百万富翁开始亏钱。
输入样例
100
输出样例
18

代码如下(示例):

#include<stdio.h>
int main()
{
    int n,m,count = 0;//count表示天数
    double ret = 0.01;//表示1分钱
    scanf("%d",&m);
    while((m+m*count)>ret)
    {
        ret *= 2;
        count++;
    }
    printf("%d\n",count);
    return 0;
}

二、单元测试

1.由键盘输入一个int类型的正整数n,求n有多少个不同的正整数因子。注:能整除N的数称为N的因子
输入格式 正整数
输入样例 24
输出样例 8

代码如下(示例):

#include<stdio.h>
int main()
{
    int n = 0,count = 0,i = 1;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        if(n%i==0)
        {
            count++;
        }
    }
    printf("%d\n",count);
    return 0;
}

总结

想多介绍点方法,但是好懒~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值