你们都不是学生吧这么问的还好啊
你看看这个行不
我们刚学的,一个表达式求值的小程序
#include <stdioh>
#include <conioh>
#include <stringh>
#include "stdlibh"
typedef struct symbal //运算符
{
char s;
struct symbal next;
}Node_sym,Link_sym;
typedef struct number // *** 作数
{
float n;
struct number next;
}Node_num,Link_num;
//
void initsym(Link_sym &L); //初始化符号栈
int pushsym(Link_sym &L,char c); //运算符进栈
int popsym (Link_sym &L,char c); //运算符出栈
int emptysym(Link_sym L); //判栈空
int gettopsym(Link_sym L,char &c); //取栈顶
int prior(char a); //确定运算符的优先级
void initnum(Link_num &L); //初始化 *** 作数栈
int pushnum(Link_num &N,float c); // *** 作数进栈
int popnum (Link_num &N,float &num); // *** 作数出栈
int emptynum(Link_num L); //判栈空
int gettopnum(Link_num L,int n); //取栈顶
float calculate(char numb[]);
int disp(Link_num L); //查看符号栈
//
void initsym(Link_sym &L)
{
L=new Node_sym;
L->s='#';
L->next=NULL;
}
void initnum(Link_num &N)
{
N=NULL;
}
int pushsym(Link_sym &L,char c)
{
Link_sym p;
if ((p=new Node_sym)==NULL)return 0;
p->s=c;
p->next=L;
L=p;
return 1;
}
int pushnum(Link_num &N,float c)
{
Link_num p;
p=new Node_num;
p->n=c;
p->next=N;
N=p;
return 1;
}
int popsym (Link_sym &N,char c)
{
if (emptysym(N)==0)
{
//printf ("栈空");
return 0;
}
Link_sym p;
p=N->next;
c=N->s;
N=p;
return 1;
}
int popnum (Link_num &N,float &num)
{
if (emptynum(N)==0)
{
// printf ("栈空");
return 0;
}
num=N->n;
N=N->next;
return 1;
}
int emptysym(Link_sym L)
{
if (L==NULL)return 0;
else return 1;
}
int emptynum(Link_num L)
{
if (L==NULL)return 0;
else return 1;
}
int gettopsym(Link_sym L,char &c)
{
if (emptysym(L)==0)
{
// printf ("栈空");
return 0;
}
c=L->s;
return 1;
}
int disp(Link_num L)
{
if (L==NULL)
{
// printf("栈空");
return 0;
}
Link_num p=L;
while (p!=NULL)
{
printf ("%f",p->n);
p=p->next;
}
return 1;
}
void transform(char s[],char numb[]) //转化为后缀表达式
{
int i=0,j=0,n=0;
char temp;
Link_sym L;
initsym(L);
while(s[i]!=0)
{ //printf("\n当前遇到的是:%c\n",s[i]);
if(s[i]>='0'&& s[i]<='9'||s[i]=='')//是数字 //或者是小数点
{numb[j++]=s[i];
// printf ("进入后缀式\n");
i++;
continue;}
numb[j++]=' '; //每两个数字之间用空格隔开
//是运算符
switch(s[i]){
case '(': pushsym(L,'('); break;
case ')': gettopsym(L,temp);
while( temp!='('){
numb[j++]=temp;
popsym(L,temp);
gettopsym(L,temp);
}
break;
default: while(gettopsym(L,temp)&&prior(temp)>=prior(s[i]))
{
if(temp!='#')numb[j++]=temp;
popsym(L,temp);
}
if(s[i]!='#')pushsym(L,s[i]);
}//else
i++;
// printf("当前的后缀式是:");
// for(n=0;n<j;n++)putchar(numb[n]);
// putchar('\n');
// printf("当前的运算符栈是:");
// disp(L);
// getch();
}
numb[j]='\0';
}
int prior(char a) //返回运算符优先级
{
if(a=='+'||a=='-') return 1;
if(a=='#') return -1;
if(a==''||a=='/') return 2;
if(a=='(') return 0;
}
float calculate (char numb[])
{
int flag=0;
float num1,num2,temp;
float sum;
Link_num num;
initnum(num);
int i=0;
while (numb[i]!=0)
{
if (numb[i]>='0'&&numb[i]<='9'||numb[i]=='')
{
flag=0;
sum=0;
while (numb[i]>='0'&&numb[i]<='9'||numb[i]=='')
{
if (numb[i]==''){flag=1;i++;continue;}
if (flag==0)
{
sum=sum10+(numb[i]-48);
}
else
{
sum=sum10+(numb[i]-48);
flag++;
}
i++;
}
while (flag>1)
{
sum=sum/100;
flag--;
}
pushnum(num,sum);
}
if (numb[i]=='+'||numb[i]=='-'||numb[i]==''||numb[i]=='/')
{
popnum(num,num2);
popnum(num,num1);
char sym=numb[i];
switch(sym)
{
case '+': temp=num1+num2;pushnum(num,temp);break;
case '-': temp=num1-num2;pushnum(num,temp);break;
case '': temp=num1num2;pushnum(num,temp);break;
case '/': temp=num1/num2;pushnum(num,temp);break;
}
}
i++;
}
popnum(num,temp);
return temp;
}
main ()
{
float result;
int i,j=0;
char temp;
char c;
char s[100],numb[100];
do
{
system("cls");
int b;
printf("\n\n\n\n\t\t\t\t表达式计算(链栈)\n");
printf("\n\t\t\t 1将表达式转化为后缀表达式计算\n");
printf("\n\t\t\t 2退出\n");
printf("\n\t\t\t 请选择(1/2):");
while (1)
{
scanf("%d",&b);
if (b>2||b<1)
{
printf ("序号错误,重新输入:");
scanf("%d",&b);
}
if (b==1||b==2)break;
}
if (b==2)return 0;
fflush(stdin);
printf ("请输入表达式:");
gets(s);
i=strlen(s);
s[i]='#';
s[i+1]=0;
transform(s,numb);
result=calculate(numb);
s[i]=0;
system("cls");
for (i=0;i<100;i++)
{
printf ("计算中,请稍后\n%d%",i);
// delay(100);
system("cls");
}
puts(s);
printf ("的计算结果是:%f ^_^",result);
getch();
}while (1);
}
这个原来我写的
不过好长时间了,估计现在让我弄都已经弄不明白了 呵呵o(∩_∩)o
假设第一年存n元,那么年终应当是n=n(1+032%)-200;
第二年也是n=n(1+032%)-200
第三年n=n(1+032%)-200
第四年n=n(1+032%)-200
第五年n=n(1+032%)-200为零
所以n=200/(1+032%)为第四年底,第五年初的数量
第四年初n=(200+第五年初的数量)/(1+032%)
第三年初n=(200+第四年初的数量)/(1+032%)
第二年初n=(200+第三年初的数量)/(1+032%)
第一年初n=(200+第二年初的数量)/(1+032%)
参考下:>
#include <stdioh>
#include <stdlibh>
#include <mathh>
/ run this program using the console pauser or add your own getch, system("pause") or input loop /
int main(int argc, char argv[])
{
int a,b,c;
int max,min,mid;
printf("请输入三角形的三边长度:");
scanf("%d%d%d",&a,&b,&c);
max=a>b(a>ca:c):(b>cb:c);
mid=a>b(b>cb:(a>cc:a)):(b>c(a>ca:c):b);
min=a>b(b>cc:b):(a>cc:a);
if(max<mid+min)
{
if(a==b||a==c||b==c)
{
if(a==b&&a==c)
printf("这是等边三角形。\n");
else
printf("这是等腰三角形。\n");
}
else
{
if(maxmax==minmin+midmid)
printf("这是一个直角三角形\n");
else
printf("这是一个一般的三角形\n");
}
}
else
printf("构不成三角形\n");
system("pause");
return 0;
}
以上就是关于一道简单的C语言程序设计题,我们是大一的!刚学!在100行之间!全部的内容,包括:一道简单的C语言程序设计题,我们是大一的!刚学!在100行之间!、大一C语言程序设计,关于存钱问题、大一C语言程序设计题, 选择结构程序设计,在线等,急 答案要详细全面等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)