C语言实验(七):循环结构(字符统计、求数列前n项和、完数输出)
实验内容
一、输入1行字符串,统计其中英文字母、数字、空格和其它字符的个数。
思路分解:
- 要统计字符串中字母、数字、空格和其他字符的个数,需要用循环遍历这个字符串。
- 判断英文字母、数字要通过与它们的Ascii码比较大小实现,判断是否在字母、数字Ascii码所在的区间内。
- 空格可以直接判断是否为空格,其他字符为剩余个数。
- 依次打印各种字符类型的个数。
实验代码
#include <stdio.h> #include <string.h> int main() { int letter=0,number=0,space=0,others=0; int i; char s[100]; gets(s); for(i=0;i<strlen(s);i++) if((s[i]>=A&&s[i]<=Z)||(s[i]>=a&&s[i]<z))//判断是否是字母 letter++; else if(s[i]>=0&&s[i]<=9)//判断是否是数字 number++; else if(s[i]== )//判断是否是空格 space++; else others++; printf("Letter:%d Number:%d Space:%d Others:%d",letter,number,space,others); return 0; }
运行结果
二、编写程序,求Sn=a+aa+aaa+aaaa+aaaaa…的前n项之和。
思路分解
- 观察通项,发现前后项之间的关系:后一项是前一项的10倍与a之和。
- 输入n,a的值。求前n项之和需要累加,将每一项累加起来。
- 最后输出前n项之和的结果。
实验代码
#include <stdio.h> #include <stdlib.h> int main() { int a = 0,n = 0,i = 0; int an = 0,Sn = 0; printf("Input a:"); scanf("%d",&a); printf("Input n:"); scanf("%d",&n); for (i=0; i<n; i++) { an = 10 * an + a; Sn += an; } printf("Sum is %d ", Sn); return 0; }
运行结果
三、用C语言输出1000以内所有的完数。
思路分解
- 求完数的方法:通过取模运算,判断是否可以整除;判断因子累加结果与原数是否相等。
- 首先要建立在1000以内的整数的循环。在这个循环中判断每个数是否是完数,并输出。
- 在循环中,要先判断是否是完数,确定完数再将因子和完数结果输出。
- 输出时因子再采用一个循环,求完数的因子输出。
实验代码
#include <stdio.h> #include <stdlib.h> int main() { int i,j,k; for(i=1;i<=1000;i++) { int sum = 0; for(j=1;j<i;j++) { if(i%j==0) sum+=j; } if(sum==i) { printf("%d its factors are ",i); for(k=1;k<i;k++) { if(i%k==0) printf("%d ",k); } printf(" "); } } return 0; }
运行结果
总结反思
-
本次实验主要练习循环结构的编程方法。完成了字符计数、求数列前n项和及求1000以内完数三个实验。 字符计数的实验,需要理解C语言中字符串的实质是一个数组,要通过循环遍历这个数组。在判断是否是字母或者数字的时候,通过ASCII码值(单引号)比较大小,可以得到结果。还练习使用了get()输入字符串的方法。 求前n项之和的实验,需要观察出前后项之间的关系。然后利用循环结构计算出第n项,在进行循环的时候可以同时累加,直接得到前n项之和。 求1000以内完数的实验,判断完数的过程之前做过:先取模求因子,再判断其和是否与原数相同。这次实验判断完成后,需要再输出完数的因子,故又加了一个循环输出因子(取模)。 这次实验的问题出现较少,其中最大的问题是在最后实验是输出因子,因为有三个循环,在编程的时候结构关系出现了问题。其次是在求数列前n项和的时候,开始想构造函数解决问题,尝试之后发现写得代码很复杂,参考之前做过的求和的问题,重新编程解决了问题。
上一篇:
多线程四大经典案例
下一篇:
我的第一个jdbc代码