一道简单的C语言程序设计题,我们是大一的!刚学!在100行之间!

一道简单的C语言程序设计题,我们是大一的!刚学!在100行之间!,第1张

你们都不是学生吧这么问的还好啊

你看看这个行不

我们刚学的,一个表达式求值的小程序

#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语言程序设计题, 选择结构程序设计,在线等,急 答案要详细全面等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zz/9492941.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存