SCAU高级语言程序设计--实验5 循环结构(一)(2)

SCAU高级语言程序设计--实验5 循环结构(一)(2)

二、堂下练习

1、字符变换

题目:由键盘输入一个句子(字符个数不定,最多不超过80个,以'\n'结束),将其中的大写字符变成小写(其它类型的字符不变), 最后输出变换后的句子。

思路:循环取每一个字符,如果取到\n,就结束循环。判断是否为大写。getchar()函数是仅取一个字符。

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

2、计算数列和

题目:编程实现,由键盘输入n,计算输出数列前n项和。(结果保留四位小数,提示:要使用double,否则精度不够) 

 

思路: 观察数列可以知道,下一个数的分子=上一个数的分子+分母,下一个数的分母=上一个数的分子。变量t为中间数,过渡作用。

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

3、*统计单词个数

题目:写一个函数实现:输入一行字符,以空格分割单词,回车结束输入,输出单词的个数

思路:一般单词之间会有空格,但是可能出现两个问题:

          1)句子开头就有单个或者多个空格。例如:__This_is_\n

          2)单词后有连续多个空格。例如:This__is_______a____\n

          故需要复杂一些的算法。

方法:1.我们核心思想是通过一个flag来确定单词的起始。

          2.flag起始为1,然后开始遍历每一个字符。如果遇到flag为1而且取到的字符c不为空格的时候,才计算这是单词的开始位置,同时flag=0设置单词的起始位置。

          3.起始位判定为flag=1,c不为空格;结束位判定为flag=0,c为空格。(好好体会一下,可以自己画个流程图)

#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;
}

4、*百万富翁

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

思路:1、计算陌生人累加给的。2、计算富翁累加给的。3、每天比较,到富翁亏的那天就输出天数。

#include<stdio.h>
#include<math.h>
int main (){
    int n=0,m,i;
    scanf("%d",&m);
    for(i=1;i<=30;i++){//计算天数
        n += 0.01*pow(2,i-1);//富翁累加的钱
        if(n-i*m >= 0)//比较陌生人与富翁给的钱
            break;//如果富翁开始亏了,就跳出循环
    }
    printf("%d\n",i);
    return 0;
}
  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值