C语言学习记录
前言
一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流!
不当之处请斧正!在此感谢!这边就先从学习C语言写起,自己本身对程序语言方面不擅长,所以决定对此从基础开始学习,
大牛们对此文可以忽略!
学校OJ上的题目
逆波兰表示法
题目描述
有些计算器使用逆波兰表示法来书写数学表达式。在这一表示法中,运算符放置在操作数的后面而不是放置在操作数中间。例如:在逆波兰表示法中1+2将表示为1 2 +,而1+23将表示为1 2 3 * +。
逆波兰表达式可以很方便地用栈求值。算法从左向右读取运算符和操作数,并执行下列步骤:
(1)当遇到操作数时,将其压入栈中。
(2)当遇到运算符时,从栈中弹出它的操作数,执行运算并把结果压入栈中。
编写程序对逆波兰表达式求值。操作数都是个位的整数,运算符为+、-、、/和=。
输入描述
在一行中输入逆波兰表达式。保证操作数都是个位的整数,运算符为+、-、、/和=。
输出描述
输出所求的值。
输入样例
123+=
输出样例
7
解题: 用数组代替栈。
ps:他的输入样例真是一点用都没有。你可能要试试563+*3/1-=
#include <stdio.h>
#include <string.h>
void reverse(char a[]);
int main(int argc, char *argv[]) {
char s[100];
gets(s);
reverse(s);
return 0;
}
void reverse(char a[])
{
int b[100],i,lenB=-1;
for( i=0; i<=strlen(a); i++ )
{
if( a[i]>='0' && a[i]<='9' )
{
lenB++;
b[lenB] = (int)a[i]-48;
}
else
{
switch( a[i] )
{
case '+': b[lenB-1] = b[lenB-1] + b[lenB]; lenB--; break;
case '-': b[lenB-1] = b[lenB-1] - b[lenB]; lenB--; break;
case '*': b[lenB-1] = b[lenB-1] * b[lenB]; lenB--; break;
case '/': b[lenB-1] = b[lenB-1] / b[lenB]; lenB--; break;
case '=': printf("%d",b[lenB]);
}
}
}
}