//输入一行字符1,统计单词个数,单词用空格隔开
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<ctype.h>
int main() {
char str[100];
fgets(str, 100, stdin);//能读取空格,scanf不能读空格
int n=0;
for (int i = 0; str[i] != '\0'; i++) {
if (isalpha(str[i]) && !isalpha(str[i + 1])) {//判断单词的标准:前面是字母+下一个不是字母
n++;
}
}
printf("%d\n", n);
return 0;
}
//有三个字符串,找出其中最大者
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
char str[3][20];//最大长度不超过19
char max[20]="";//保存最大字符串,必须初始化
int i;
for (i = 0; i < 3; i++) {
fgets(str[i], 20, stdin);//这个输入必须用换行
}
//依次比较
for (i = 0; i < 3; i++) {
if (strcmp(max, str[i]) < 0) {//前者比后者小
strcpy(max, str[i]);//整体复制过去
}
}
printf("最大字符串为%s\n", max);
return 0;
}
//习题4,输入一行字符,分别统计出英文字母,空格,数字和其他字符的个数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<ctype.h>
int main() {
char str[100];
int alpha = 0;
int digit = 0;
int space = 0;
int other = 0;
fgets(str, 100, stdin);
//scanf("%s", str);//不能用这个,把空格当做分隔符了
for (int i = 0; str[i] != '\n'; i++) {
if (isalpha(str[i])) {
alpha++;
}
else if (isdigit(str[i])) {
digit++;
}
else if (isspace(str[i])) {
space++;
}
else {
other++;
}
}
printf("字母:%d 数字:%d 空格:%d 其他:%d", alpha, digit, space, other);
return 0;
}
//习题五求Sn的和 Sn=a+aa+aaa……n个a
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int a;
scanf("%d", &a);//输入要重复的数
int n;
scanf("%d", &n);//输入重复几次
int sum = 0;
int a_1=a;//保存a的数使其后期都加这个数
for (int i = 0; i < n; i++) {
sum = sum + a;
a = a * 10 + a_1;//变成下一个要加的数
}
printf("%d", sum);//输出总结果
return 0;
}
//习题六求1!+2!+3!……20!
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int sum = 0;//保存总值
int here ;//保存当前阶乘值
for (int i = 1; i<21; i++) {
here = 1;//每次循环前都要重置
for (int j = 1; j <= i; j++) {
here = here * j;//当前的阶乘值
}
sum = sum + here;//当前的和现在的值
}
printf("%d", sum);
return 0;
}
//习题7,求1到100的和+1到50的平方和+1到10的倒数和
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
double sum1, sum2,sum3;
sum1 = sum2 = sum3 = 0;
//sum1 = (100 / 2)*(1 + 100);//公式计算
for (double k = 1; k < 101; k++) {//到100的和
sum1 = sum1 + k;
}
for (double i = 1; i < 51; i++) {//1到50的平方和
sum2 = sum2 + i * i;
}
for (double j=1; j < 11; j++) {//1到10的倒数和
sum3 = sum3 + 1.0 / j;
}
double sum;
sum = sum1 + sum2 + sum3;
printf("%.2lf\n", sum1);
printf("%.2lf\n", sum2);
printf("%.2lf\n", sum3);
printf("%.2lf\n", sum);//保留两位小数
return 0;
}
//习题8,输出水仙花数
//水仙花数:三位数=个位三次方+十位三次方+百位三次方
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Ge(int f) {
f = f % 10;
return f;
}
int main() {
int sum = 0;
int ge, shi, bai;//个位,十位,百位
printf("水仙花数为:");
for (int i = 100; i < 1000; i++) {
int flag = i;
//ge = flag % 10;//该写个函数的
//flag = flag / 10;
//shi = flag % 10;
//flag = flag / 10;
//bai = flag;
ge = Ge(flag);//写了函数并没有少几行,甚至还多写了
flag = flag / 10;
shi = Ge(flag);
flag = flag / 10;
bai = Ge(flag);
if (i == ge * ge * ge + shi * shi * shi + bai * bai * bai) {
printf("%d ", i);
}
}
return 0;
}
//习题九,找出1000之内的所有完数
//完数:所有因子数相加等于这个数,例6=1+2+3
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main() {
int sum = 0;
int str[100];//数组保存已找到的完数
int m=0;//数组下标
for (int i = 2; i < 1001; i++) {//2-1000
sum = 0;//这个sum每次都要重置
for (int j = 1; j < i; j++) {
if (i % j == 0) {//如果是完数因子
sum = sum + j;//保存所有因子和
}
if (i == sum) {
//printf("%d ",i);
str[m] = i;//把找到的完数传给数组保存
m++;
break;//找到了就退出循环
}
}
}
for (int i = 0; i < m; i++) {
int j = str[i];
sum = 0;
printf("%d its factors are ",j);
for (int n = 1; n < j; n++) {
if (j % n == 0) {
sum = sum + n;
printf("%d,", n);//输出完数和他的因子
}
if (j == sum) {
printf("\n");//每输完一组就换行
break;
}
}
}
return 0;
}
//习题十,求数列前20项和2/1+3/2+5/3+8/5……(斐波那契数列规律)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {//up是上,down是下,first是前,late是后
double up_first=2, up_late=3;//分子的前两项
double down_first = 1, down_late = 2;//分母的前两项
double here = 0;//当前项
double here_up, here_down;//当前项分子和当前项分母
double sum = 0;//总值
sum =up_first / down_first +up_late / down_late;//先算出前两项
for (int i = 0; i < 18; i++) {
here_up = up_first + up_late;//分子和
here_down = down_first + down_late;//分母和
here = here_up / here_down; //当前数
sum = sum + here;//总和
up_first = up_late;//移
up_late = here_up;//动
down_first = down_late;//位
down_late = here_down; //置
}
printf("%.3lf", sum);//输出总数
return 0;
}