目录
1.国王的麦子
2. 求完数。
3.打印九九乘法表
4.求1!+2!+3!+…+20!;
5.(1)输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
(2)在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其它字符的个数。
6.输入两个正整数m和n,求其最大公约数和最小公倍数。
1.国王的麦子
1.相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。舍罕王让人扛来一袋麦子,他要兑现他的许诺。 国王能兑现他的许诺吗?
程序1:试编程计算舍罕王共要多少粒麦子赏赐他的宰相,这些麦子合多少立方米?(已知1立方米麦子约1.42e8粒) 总粒数为:sum=1+2+22+23+…+263
#include<stdio.h>
int main()
{int i = 0;double t = 1, sum = 1, v; for (i = 1; i <= 63; i++) //计算麦子的数量{t = t * 2;sum += t;}v = sum / 1.42e8;printf("合:%.2lf立方米\n", v);return 0;}
2. 求完数。
程序2:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程找出1000之内的所有完数,输出所有的完数(要求:一行显示2个数);
#include<stdio.h>
int main()
{int t = 0,num = 0;int i = 0, j = 0;for (i = 2; i <= 1000; i++) //1不是完数{int sum = 0;for (j = 1; j < i; j++){t = i % j;//判断是否为因子if (t == 0)sum += j;//因子的和}if (sum == i)//判断因子的和是否等于它本身{printf("%4d", i);num++;if (num % 2 == 0)//根据i的值判断一行打印两个printf("\n");}}return 0;
}
3.打印九九乘法表
程序3:编程输出如下上三角形式的九九乘法表。
#include<stdio.h>
int main()
{int i = 1, j;for (j = 1; j <= 9; j++){printf("%3d", i * j);}printf("\n");for (j = 1; j <= 9; j++){printf("%3c", '-');}printf("\n");for (i = 1; i <= 9; i++){for (int k = 1; k < i; k++)printf(" ");for (j = i; j <= 9; j++){printf("%3d", i * j);}printf("\n");}return 0;
}
4.求1!+2!+3!+…+20!;
#include<stdio.h>
int main()
{int num = 0;int i = 0;long long j = 1, sum = 0;for (num = 1; num <= 20; num++){j = 1;for (i = 1; i <= num; i++){j *= i;}sum += j;}printf("%lld", sum);return 0;
}
5.(1)输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
(2)在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其它字符的个数。
#include <stdio.h>int main()
{char c;int english_letters = 0, space = 0, digit = 0, other = 0;printf("请输入一行字符:");while ((c = getchar()) != '\n'){if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'){english_letters++;}else if (c == ' '){space++;}else if (c >= '0' && c <= '9'){digit++;}else{other++;}}printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符:%d\n", english_letters, space, digit, other);return 0;
}
修改后
#include <stdio.h>int main()
{char c;int english_letters = 0, english_LETTERS = 0,space = 0, digit = 0, other = 0;printf("请输入一行字符:");while ((c = getchar()) != '\n'){if ( c >= 'A' && c <= 'Z'){english_LETTERS++;}if (c >= 'a' && c <= 'z' ){english_letters++;}else if (c == ' '){space++;}else if (c >= '0' && c <= '9'){digit++;}else{other++;}}printf("大字母数:%d\n小字母数:%d\n空格数:%d\n数字数:%d\n其他字符:%d\n", english_LETTERS,english_letters, space, digit, other);return 0;}
输入两个正整数m和n,求其最大公约数和最小公倍数。
#include<stdio.h> int GCD(int num1, int num2) {if (num1 > num2){int tmp = num1;num1 = num2;num2 = tmp;}if (num2 % num1 == 0){return num1;}for (int i = num1 - 1; num1 > 1; i--) {if (num1 % i == 0 && num2 % i == 0) {return i;}} }int main() {int num1 = 0;int num2 = 0;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);int ret = GCD(num1, num2);//最大公约数printf("最大公约数为:%d\n", ret);printf("最小公倍数为:%d\n", (num1*num2)/ret);return 0; }