C语言中的混合运算

1 混合运算

类型强制转换场景

整型数进行除法运算时,如果运算结果为小数,那么存储浮点数时一定要进行强制转换。例子:

#include <stdio.h>
//运算强制转换
int main(void) {
    int i=5;//整型
    float j=i/2;//这里做的是整型运算,因为左右操作数都是整型,其中“/”表示取整数部分
    float k=(float)i/2; //将(float)i作为一个整体,称之为强制类型转换后的表达式
    printf("%f\n",j);
    printf("%f\n",k);
    return 0;
}

#include <stdio.h>
//运算强制转换
int main(void) {
    int i=5;//整型
    float j=i/2;//这里做的是整型运算,因为左右操作数都是整型,其中“/”表示取整数部分
    float k=(float)i/2; //将(float)i作为一个整体,称之为强制类型转换后的表达式
    float c=1/3;//“/“取整符号,得到0,将整型0转换为float类型
    float d=(float)1/3;//float类型的变量返回值就包含小数部分,如果定义的变量是int类型,则只能返回整数部分
    printf("float j=i/2: \n  j=%f\n",j)
    printf("float k=(float)i/2: \n k=%f\n",k);
    printf("float d=1/3: \n c=%f\n",c);
    printf("float d=(float)1/3: \n d=%f\n",d);
    return 0;
}

2 printf函数的介绍

printf函数可以输出各种类型的数据,包括整型,浮点型,字符型,字符串型等,实际原理是printf函数将这些类型的数据格式化为字符串后,放入标准输出缓冲区,然后将结果显示到屏幕上。

语法上:

 #include <stdio.h>

//不声明也可以运行,但是编译器会给警告

int printf(const char *format,...);

printf函数根据format给出的格式打印输出到stdout(标准输出)和其他参数中。

字符串格式(format)由两部分组成:显示到屏幕上的字符和定义printf函数显示的其他参数,我们可以指定一个包含文本在内的format自负床,也可以是映射到printf的其他参数的特殊字符

#include <stdio.h>
//练习printf
int main(void) {
    int age=21;
    printf("hello %s,you are %d years old\n","Bob",age);
    return 0;
}

其中,%s表示在该位置插入首个参数(一个字符串),%d表示第二个参数(一个整数)应该放在哪里。不同的%codes表示不同的变量类型,也可以限制变量的长度。printf函数的具体代码格式:

%c  字符

%d 带符号整数

%f  浮点数

%s  一串字符

%u  无符号整数

%x  无符号十六进制数,用小写字母

 位于%和格式化命令之间的一个整数被称为最小字段宽度说明符,通常会加上空格来控制格式。

·用%f精度修饰符指定想要的小数位数。例如,%5.2f会至少显示5位数字并带有2位小数的浮点数。

·用%s精度修饰符简单地表示一个最大的长度,以补充句点前的最小字段长度。

printf函数的所有输出都是右对齐的,除非在%符号后放置了符号,例如:%5.2f会显示5位字符,两位小数位的浮点数并且左对齐。

例子:printf函数输出对齐

#include <stdio.h>
//练习printf
int main(void) {
    int a=10;
    float b=98.3;
    printf("student number=%d,score=%f\n",a,b);
    int i=100;
    float f=96.03;
    printf("student number=%d,score=%f\n",i,f);

    printf("\n");
    //如果我们知道最长的学号是3的位置,那我们%d哪里就可以加个3
    printf("student number=%3d score=%5.2f\n",a,b);
    printf("student number=%3d score=%5.2f\n",i,f);//5代表整个浮点数所占的是5个位置,2表示保留到小数点后2位
    printf("\n");
    printf("student number=%-3d score=%5.2f\n",a,b);//默认是右对齐,加一个负号表示左对齐
    printf("student number=%-3d score=%5.2f\n",i,f);
    printf("%10s\n","hello");

    return 0;
}

### 关于C语言实现支持混合运算的计算器 #### 设计思路 为了创建一个能够处理基本四则运算(加法、减法、乘法、除法)以及括号优先级的支持混合运算的简单命令行版计算器,可以采用栈结构来解析表达式并计算结果。下面是一个简单的例子。 #### 示例代码展示 ```c #include <ctype.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #define MAXOP 100 /* op的最大长度 */ #define NUMBER '0'/* 表明push number */ int sp = 0;/* 下一个空闲位置 */ double val[100];/* 值栈 */ void push(double f); double pop(void); // 获取操作数或操作符(可能是多位数) int getop(char s[]); // 处理输入的操作数和操作符 void process_input(); int main() { while (getchar() != EOF) { ungetc('\n', stdin); // 将换行符重新放回输入流以便被getop读取 break; } process_input(); } /* 接收用户输入并调用相应函数完成计算 */ void process_input(){ int type; double op2; char s[MAXOP]; while ((type = getop(s)) != EOF){ switch(type){ case NUMBER: push(atof(s)); break; case '+': push(pop() + pop()); break; case '*': push(pop() * pop()); break; case '-': op2 = pop(); // 提前弹出第二个操作数 push(pop() - op2); break; case '/': // 需要特别注意分母不为零的情况 op2 = pop(); if(op2 != 0.0) push(pop() / op2); else printf("error: zero divisor\n"); break; case '\n': printf("\t%.8g\n", pop()); // 输出最后的结果 break; default: printf("error: unknown command %s\n", s); break; } } } ``` 此段代码实现了基础功能[^1],即通过`if-else`判断不同的运算符来进行对应的数学运算,并且在遇到除法时检查是否存在除以零的风险。对于更复杂的表达式求值逻辑,则可能涉及到逆波兰表示法或其他高级算法的设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值