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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/75601.html