C运算符、表达式和语句

运算符、表达式和语句

  1. 关键字 ---> whiletypedef
  2. 运算符 ---> =-*/%++--
  3. 复合语句、自动类型转换、强制类型转换
  4. 编写带有参数的函数

while循环

示例代码:

# include<stdio.h>
# define ADJUST 7.31
int main(void)
{
    const double SCALE = 0.333;
    double shoe, foot;

    printf("鞋宽, 脚长\n");
    shoe = 3.0;
    while (shoe < 18.5)
    {
        foot = SCALE * shoe + ADJUST;
        printf("%10.1f %15.2f inches\n", shoe, foot);
        shoe = shoe + 1.0;
    }

    printf("请参考上述内容选鞋.\n");

    getchar();

    return 0;
}

while循环结构:

关键字( 循环条件 ) {循环代码块}

基本运算符

+-*/% ---> 需要注意的是无法整除的数系统会自动截取整数部分舍弃小数部分

术语: 数据对象、左值(可修改左值)、右值、运算符

示例代码:

# include<stdio.h>

int main(void)
{
    int jane, tarzan, cheeta;

    cheeta = tarzan = jane = 68; // 三重赋值 ---> 可修改左值 = 赋值数

    printf("cheeta   tarrzan   jane\n");
    printf("%4d %8d %8d\n", cheeta, tarzan, jane);

    getchar();

    return 0;
}

指数增长:

示例代码:

# include<stdio.h>
# define SQUARES 64 // 棋盘中的方格数目

int main(void)
{
    const double CROP = 2E16; // 当时世界小麦年产谷粒数
    double current, total;
    int count = 1;

    printf("square    grains        total      ");
    printf("fraction of \n");
    printf("世界总产量\n");
    total = current = 1.0;

    printf("%4d %13.2e %12.2e %12.2e\n", count, current, total, total/CROP);

    while (count < SQUARES)
    {
        count += 1;
        current *= 2;
        total = total + current;
        printf("%4d %13.2e %12.2e %12.2e\n", count, current, total, total/CROP);
    }

    printf("这就全部的谷子数!\n");

    getchar();

    return 0;
}

sizeof运算符和size_t类型:

示例代码:

# include<stdio.h>

int main(void)
{
    int n = 0;
    size_t intsize;

    intsize = sizeof(int);

    printf("n = %d, n 占 %zd 字节; 所有的整数占 %zd 字节.\n", n, sizeof n, intsize);

    getchar();

    return 0;
}

特点:

  1. sizeof返回一个size_t类型的值,这是一个无符号整数类型

typedef的作用:

  1. 给某种类型定义别名

示例代码:

# include<stdio.h>

int main(void)
{
    typedef double real;
    real n;
    
    printf("你希望看到的单精度浮点数:\n");
    scanf("%f", &n);
    getchar();
    printf("你输入的数是: %.2f", n);
    
    getchar();
    
    return 0;
}

练习代码:

# include<stdio.h>
# define SEC_PER_MIN 60

int main(void)
{
    int sec, min, left;
    sec = -1;

    printf("输入你想要转变成时间的秒数:\n");

    do
    {
        scanf("%d", &sec);
        if (sec < 0)
        {
            printf("输入有误,请重新输入!\n");
        }else if (sec == 0)
        {
            break;
        }else {
            min = sec / SEC_PER_MIN;
            left = sec % SEC_PER_MIN;
            printf("输入的秒数转化成分钟数以后是: %d 分钟, %d 秒!\n", min, left);
            printf("输入下一个想转化的秒数: \n");
        }
        sec = -1;
    } while (sec < 0);
    
    printf("结束!");

    return 0;
}

递增/递减运算符:

示例代码:

# include<stdio.h>

int main(void)
{
    int a = 1, b = 1;
    int a_post, pre_b;

    a_post = a++; // 后缀递增 ---> 使用a之后给递增a
    pre_b = ++b; // 前缀递增 ---> 使用b之前递增b
    /* 
    需要注意的是这两种赋值结果完全不一样
    */

    printf("a  a_post      b      pre_b:\n");
    printf("%d, %3d, %8d, %7d", a, a_post, b, pre_b);

    getchar();

    return 0;
}

递增变式:

# include<stdio.h>

int main(void)
{
    int a = 1, b = 1;
    int a_post, pre_b;

    a_post = 2*++a; // 首先a先递增1,其次2*a赋值给a_post
    pre_b = 2*b++; // 首先2*b,其次b递增1
    /*
    需要注意递增这个操作不能简单地视为a + 1;因为在与乘算的时候前缀递增有限计算递增
    */

    printf("a  a_post      b      pre_b:\n");
    printf("%d, %3d, %8d, %7d", a, a_post, b, pre_b);

    getchar();

    return 0;
}

注意前缀递增与乘法运算符一起计算的时候的运算规律

前缀递增与其他符号的结合:

# include<stdio.h>
# define MAX 100

int main(void)
{
    int count = MAX - 98;
    int i = 0;

    while (--count > 0) // 先递减为1,在对测试条件求值
    {
        printf("%d", count);
        i += 1;
        printf("循环次数: %d \n", i);
    }
    
    getchar();

    return 0;
}

递增变式2:

# include<stdio.h>

int main(void)
{
    int num = 0;

    while (num < 21)
    {
        printf("%10d %10d \n", num, num*num++);
        /**
        第一次打印的结果是 1 0,因为先递增num在进行赋值,所以第一个num是1
        */
    }

    getchar();

    return 0;
}

语句:

示例代码:

# include<stdio.h>

int main(void)
{
    int count, sum;

    sum = 0;
    count = 0;

    while (count++ < 20)
    {
        sum = sum + count;
        printf("sum = %d\n", sum);
    }

    getchar();

    return 0;
}

类型转换

示例代码:

# include<stdio.h>

int main(void)
{
    char ch; // 8位
    int i; // 32位
    float fl;

    fl = i = ch = 'C'; // 'C'被作为1字节的ASCII值存储在ch中,i接受'C'转换的整数,4字节存储67,fl则是接受67转换的浮点数67.00
    printf("ch = %c, i = %d, fl = %2.2f\n", ch, i, fl);
    ch += 1; // 'C'被转换成了67,然后+1,变成68(4字节整数,被截断为1字节存储在ch中)最后根据ASCII值为'D'
    i = fl + 2 * ch; // ch->4字节整数68,68*2 = 136,转成浮点数(203.00f),转成int存储在i中
    fl = 2.0 * ch + i; // i为转成浮点数的203,ch转为整数68*2,最终的结果是203+136=339
    printf("ch = %c, i = %d, fl = %2.2f\n", ch, i, fl);
    ch = 1107; // 由于char类型是1位,1107已经超出,最终的打印的结果是1107%256=83,打印结果是83的ASCII码
    printf("Now ch = %c\n", ch);
    ch = 80.89; // 浮点数,被截断,阶段以后的值对应的ASCII码是'P'
    printf("Now ch = %c\n", ch);

    getchar();

    return 0;
}

强制类型转换

# include<stdio.h>

void pound(int n)
{
    while (n-- > 0)
    {
        printf("#");
    }
    printf("\n");
}

int main(void)
{
    int times = 5;
    char ch = '!';// ASCII码为33,1字节
    float f = 6.0;

    pound(times);
    pound(ch); // 变为4字节33传入
    pound(f); // = pound((int)f);

    getchar();

    return 0;
}
posted @ 2023-04-16 22:18  俊king  阅读(84)  评论(0)    收藏  举报