c语言程序解释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言程序解释相关的知识,希望对你有一定的参考价值。

下面试一段C语言程序 模拟简单计算器的功能
请帮忙把每句的意思都翻译一下 写在后面
分可以更多!!!只要你写的清楚!!!请速度写 本人急着用 在线等到11点半!!!
#include "stdio.h"
#define M 77
void logo()

printf ("\n");
printf ("********************************************************************************");
printf ("********************************************************************************");

printf ("********************************** 简单计算器 **********************************");
printf ("**************************************** ***************************************");
printf ("*********************** 支持整数小数正数负数乘除加减括号 ***********************");
printf ("**************************************** ***************************************");

printf ("**************************************** ***************************************");
printf ("********************************** 张栋琪制作 **********************************");
printf ("**************************************** ***************************************");

printf ("********************************************************************************");
printf ("\n");


float calculation (float *num, char *sign)

int i,j;
float y;
for (i=0,j=0;*(sign+i);i++)
for (j=i;*(sign+i)>5;i++)

if (*(sign+i)==6) *(num+j)=*(num+j)**(num+i+1);
if (*(sign+i)==7) *(num+j)=*(num+j)/(*(num+i+1));

for (i=0,y=*num;*(sign+i);i++)

if (*(sign+i)==1) y+=*(num+i+1)**(sign+i);
if (*(sign+i)==-1) y+=*(num+i+1)**(sign+i);

return (y);


float ctod (char pm[M],float *py)

char sign[M]=0,tem[M]=0,i,j,k;
float num[M]=0,t;
for (i=0,j=0;*pm;pm++)

if (*pm&&*pm<40||*pm>57&&*pm<61||*pm>61)
return (0);

if (*pm=='=') break;

if (*pm>='0'&&*pm<='9')

for (;*pm>='0'&&*pm<='9';pm++)
num[i]=num[i]*10+*pm-'0';
if (*pm=='.')
for (t=0.1,++pm;*pm>='0'&&*pm<='9';t*=t,pm++)
num[i]+=t*(*pm-48);

else if (*pm=='(')

for (k=0,++pm;*pm!=')';k++,pm++)
tem[k]=*(pm);
num[i]=ctod (tem,py);
pm++;

i++;

if (*pm=='*') sign[j++]=6;
else if (*pm=='/') sign[j++]=7;
else if (*pm=='+') sign[j++]=1;
else if (*pm=='-') sign[j++]=-1;

*py=calculation (num,sign);
return (1);


void main ()

char pm[M]=0;
float y;
logo();
printf ("\n\n警告:此程序是模拟简单计算器\n 只能计算简单的加减乘除运算\n\n\n\n\n\t");
gets (pm);
if (ctod (pm,&y))
printf ("\n答案: %g",y);
else
printf ("\n\nerror!!!\n你输入的已超过本简单计算器的计算范围\n");
getchar ();

我学过c语言的 但是指针这方面总是不太懂
这是作业 明天要交 所以还请大家多帮帮忙
分不是问题!

#include "stdio.h"
#define M 77
void logo()

printf ("\n");
printf ("********************************************************************************");
printf ("********************************************************************************");

printf ("********************************** 简单计算器 **********************************");
printf ("**************************************** ***************************************");
printf ("*********************** 支持整数小数正数负数乘除加减括号 ***********************");
printf ("**************************************** ***************************************");

printf ("**************************************** ***************************************");
printf ("********************************** 张栋琪制作 **********************************");
printf ("**************************************** ***************************************");

printf ("********************************************************************************");
printf ("\n");


float calculation (float *num, char *sign)

int i,j;
float y;
//计算乘除法
for (i=0,j=0;*(sign+i);i++)
for (j=i;*(sign+i)>5;i++) //如果是乘或除

if (*(sign+i)==6) *(num+j)=*(num+j)**(num+i+1); //将计算出来的值赋值到本次第一个出现的数字
if (*(sign+i)==7) *(num+j)=*(num+j)/(*(num+i+1));

//计算加减法
for (i=0,y=*num;*(sign+i);i++)

if (*(sign+i)==1) y+=*(num+i+1)**(sign+i);
if (*(sign+i)==-1) y+=*(num+i+1)**(sign+i);

return (y);


float ctod (char pm[M],float *py)

char sign[M]=0,tem[M]=0,i,j,k; //sign用于存储数字间的符号
float num[M]=0,t; //num用于存储得到的单独的数字
for (i=0,j=0;*pm;pm++)

if (*pm&&*pm<40||*pm>57&&*pm<61||*pm>61) //判断输入的字符是否符合要求,不符合返回
return (0);

if (*pm=='=') break; //出现'='时,认为表达式输入结束

if (*pm>='0'&&*pm<='9') //如果是数字,计算出是多少

for (;*pm>='0'&&*pm<='9';pm++)
num[i]=num[i]*10+*pm-'0';
if (*pm=='.') //出现小数点,后面的作为小数处理
for (t=0.1,++pm;*pm>='0'&&*pm<='9';t*=t,pm++)
num[i]+=t*(*pm-48);

else if (*pm=='(') //出现括号,把括号里面的表达式作为一个处理,并计算出结果

for (k=0,++pm;*pm!=')';k++,pm++) //找到括号的另一半,得到括号里面的表达式
tem[k]=*(pm);
num[i]=ctod (tem,py); //单独处理
pm++;

i++;
//记录字符间的符号
if (*pm=='*') sign[j++]=6;
else if (*pm=='/') sign[j++]=7;
else if (*pm=='+') sign[j++]=1;
else if (*pm=='-') sign[j++]=-1;

*py=calculation (num,sign); //计算结果
return (1);


void main ()

char pm[M]=0;
float y;
logo(); //程序logo
printf ("\n\n警告:此程序是模拟简单计算器\n 只能计算简单的加减乘除运算\n\n\n\n\n\t");
gets (pm); //获取输入的表达式
if (ctod (pm,&y))
printf ("\n答案: %g",y);
else
printf ("\n\nerror!!!\n你输入的已超过本简单计算器的计算范围\n");
getchar ();

不知道是不是符合你的要求,不懂得可以再问我,我不怎么上百度的那个软件,可以Q我,QQ:576608655
参考技术A 程序算法挺巧妙~大概来说就是ctod函数将输入的表达式转换成一步一步的运算存入num数组和sign数组,其中num存每步的运算数字,sign存算符+ - * / 然后calculate函数按数组顺序依次计算得出结果。M存的是最大运算深度。

其中用指针方便地存取数组的各个元素,因为*号什么的比较多所以显得不好懂,有C基础的细心读就能读懂了,没有的话即使给你写出每一句的意思也没法理解不是,再说这么繁琐的算法要一句一句写出来,估计有这份闲心的不多吧。。。
参考技术B LZ你把注释加起啊 参考技术C 都在看世界杯~~哈哈

关于R语言。。。能解释下啥意思

参考技术A %%表示求余数
小写的c() 表示一个向量,c(1,1,2,2,3,3)就是一个有6个元素的向量
后面的2:3 冒号就是表示步进1,从2到3的向量,所以2:3其实就等于c(2,3)
如果是1:5 那么就是c(1,2,3,4,5)

最后再讨论一下R的计算顺序 c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10 ) %% 2:3

也就是 c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10 ) %% c(2,3)
那么首先第一个1对2取余数等于1,然后第二个1对3取余数等于1,第三个2对2取余数等于0,第四个2对3取余数等于2 .....一直这么循环下去直到最后两个10分别对2和3取余数,为0和1

以上是关于c语言程序解释的主要内容,如果未能解决你的问题,请参考以下文章

c语言简单程序解释一下

c语言简单程序解释一下

帮助编写一个c语言程序 微型命令解释程序

c语言是怎么用的 具体解释是啥?

解释这个c语言程序的各行的功能

c语言解释一下枚举类型