c语言第五章,循环2.0

//输入一行字符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;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值