欢迎光临散文网 会员登陆 & 注册

C语言控制语句

2022-12-25 05:29 作者:虚云幻仙  | 我要投稿

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <ctype.h> //提供isupper() islower() isspace()等函数


void char_count(void); // 对输入的字符计数

void show_ascii(void); // 显示输入字符的ASCII码

void show_dual(void); // 统计输入队列中的偶数

void func2(void); // 对部分字符进行替换

void ei_count(void);

void tax1(void);

void char_count(void) {

char ch;

int s_count, n_count, o_count; // s_count记录空格的数量,n_count记录换行的数量,o_count记录其他字符的数量

s_count = n_count = o_count = 0; // 赋值运算从右向左执行,所以三个变量都赋值0

printf("输入任何内容,以#作为结束\n");

while ((ch = getchar()) != '#') // 表达式ch=getchar()的值是ch被赋予的值

{

    if (ch == ' ') // if语句,()内表达式为非0/true则执行{}内的语句,{}只有一句时可省略括号

    {

        s_count++;

    }

    else if (ch == '\n') // else if 在if语句 ()括号为0/false时执行判定

    {

        n_count++;

    }

    else  // if和else if都为0/false时执行,即ch不是空格也不是换行符

    {

        o_count++;

    }

}

printf("s_count=%d\tn_count=%d\to_count=%d\n", s_count, n_count, o_count);

}

void show_ascii(void) {

char ch;

printf("输入任何内容,以#作为结束\n");

for (int i = 1; (ch = getchar()) != '#'; i++)

{

    printf("\'%c\':%d\t", ch, ch);

    if (i % 8 == 0) // 每显示8个字符换行

    putchar('\n'); // putchar()打印字符,getchar()读取字符

}

while (getchar() != '\n') // 上一个循环读到#结束,如果#后面还有除\n以外的字符,通过getchar()舍弃整行内容,跳到新的一行

    continue; // continue跳过当前单次循环内的剩余内容进行下一次测试条件,由于continue后并没有其他语句,所以和只写分号;的空语句作用相同,但可读性高

}

void show_dual(void) {

int i,count, dual;

printf("请输入整数,输入0结束\n");

for (count = dual = 0; scanf("%d", &i) == 1; count++)

{

    if (i == 0)break; //break退出当前循环

    if (i % 2 == 1)

        continue; //continue跳过块内剩余部分进行下一次迭代、循环,即跳过下面直到for循环}括回的语句,执行count++和scanf()

    dual++;

}

printf("总数%d\t其中偶数%d\n", count, dual);

}

void func2(void) {

char ch;

int count = 0;

printf("请输入内容以#结束\n");

while ((ch = getchar()) != '#')

{

    switch (ch) // switch语句,计算()内表达式的值和{}内的case标签顺序比较,如果有值相同的case会执行:后面的语句,如果都不相同会执行default后的语句,如果没有default会结束switch,switch()括号内的值必须为整数

    {

        case '.': // case后面必须是整数常量或者由整数常量组成的表达式

            putchar('!');

            count++;

            break; // 使用break跳出switch,如果不使用会继续向下执行语句

        case '!':

            putchar('!');

            putchar('!');

            count++;

            break;

        default:

            putchar(ch); // default是最后一个,所以不需要写break也会结束

    }

}

printf("发生了%d次替换", count);

}

void ei_count(void) {

char prev, ch;

prev = '\0';

int count = 0;

int lc = 0;

int uc = 0;

int sc = 0;

printf("统计ei出现的次数,请输入任意内容以#或*结束\n");

while ((ch = getchar()) != '#' || ch != '*') // ||或逻辑运算符,两侧的表达式均为0时||运算结果才为0,运算从左往右,遇到1停止并返回1,后面的表达式不执行,逻辑运算符|| &&为序列点,左侧执行完后才会执行后面的,所以右侧的ch的值是左侧ch=getchar()执行后赋给ch的值

{

    if (ch == 'i' && prev == 'e') // &&与逻辑运算符,两侧的表达式均为非0时&&运算的结果才为1,否则为0,运算从左往右,遇到0停止并返回0,后面的表达式不执行

    {

        count++;

    }

    if (isupper(ch)) // isupper()判断参数ch是否为大写字母

        uc++;

    else if (islower(ch)) { // islower()判断是否为小写字母

        ch = toupper(ch); // toupper()将小写字母转换为大写字母

        lc++;

    }

    else if (isspace(ch)) // isspace()判断是否为空格\t\n

        sc++;

    prev = ch;

}

printf("count = %d", count);

}

void tax1(void) {

const int BASE1 = 17850;

const int BASE2 = 23900;

const int BASE3 = 29750;

const int BASE4 = 14875;

const double TAX1 = 0.15;

const double TAX2 = 0.28;

double tax;

printf("税率计算,请输入收入(正整数):");

for (int i = 0, j = 0; scanf("%d", &i) == 1 && !(i <= 0); ) // !非逻辑运算符,优先级仅次于括号,!(i<=0)等价于i>0

{

    printf("选择档位1-4(输入其他退出):");

    if (scanf("%d", &j) != 1)break;

    switch (j)

    {

        case 1:

            tax = i > BASE1 ? BASE1 * TAX1 + (i - BASE1) * TAX2 : i * TAX1; // 条件运算符?: 三元运算符, 判断条件?表达式2:表达式3 ,如果判断条件为非0/true则整个条件运算的值为表达式2的值,如果判断条件为0/false则整个条件运算的值为表达式3的值

            break;

        case 2:

            tax = i > BASE2 ? BASE2 * TAX1 + (i - BASE2) * TAX2 : i * TAX1;

            break;

        case 3:

            tax = i > BASE3 ? BASE3 * TAX1 + (i - BASE3) * TAX2 : i * TAX1;

            break;

        case 4:

            tax = i > BASE4 ? BASE4 * TAX1 + (i - BASE4) * TAX2 : i * TAX1;

            break;

        default:

            goto end; // goto语句,跳转到end对应的行,不推荐使用goto

    }

printf("tax = %.2f\n", tax);

printf("输入收入(正整数)以继续计算:");

}

end: printf("over\n");

}


C语言控制语句的评论 (共 条)

分享到微博请遵守国家法律