C语言 一个数学程序求解释

C语言 一个数学程序求解释,第1张

x[32]也是存放结果的。

模重复平方法求的是a^m%n

当m=13,即二进制的 1101 = 1 2^3 + 1 2^2 + 0 2^1 + 1 2^0时,最终结果

ans =a^m % n

= a^(1 2^3 + 1 2^2 + 0 2^1 + 1 2^0) %n

= [a^(1 2^3)] [a^(1 2^2)] [(a ^ (0 2^1)] [a ^ (1 2^0)] % n

也就是说,从低到高,在第 i 位的时候,将a^(bin[i] 2^i) %n 乘到结果中即可。这里可以稍微变换一下:仅当bin[i] == 1的时候,将a^(2^i) % n乘进去即可。所以这里可以用一个辅助的变量 b 来保存 a^(2^i) % n,在每次迭代的过程中 b = b^2 % n 。

你自己修改修改:

#include <stdioh>

#include <ctypeh>

#include <timeh>

#include <stdlibh>

#include <windowsh>

#define IDNO_LENGTH 6

#define CALC_KIND 4

#define CALC_NUM 10

bool checkNo(char idNo[]);

char getSignal();

int getResult(int,int,char);

void takeTest();

//main函数

void main()

{

printf("Please input your four digit ID no(begin with two letters):");

char idNo[IDNO_LENGTH];

do

{

scanf("%s",&idNo);

fflush(stdin);

} while(checkNo(idNo)==false);

printf("1Start a test\t2Exitb\n");

int choose;

do

{

printf("选择:");

scanf("%d",&choose);

fflush(stdin);

} while(choose!=1 && choose!=2);

if(choose==1)

takeTest();

else

exit(0);

}

//获取随机运算符

char getSignal()

{

char signal[CALC_KIND]={'+','-','','/'};

srand((unsigned)time(NULL));

return signal[rand()%4];

}

//获取随机数

int random(double start, double end)

{

return (int)(start+(end-start)rand()/(RAND_MAX+ 10));

}

//运算

int getResult(int num1,int num2,char signal)

{

int res;

switch(signal)

{

case '+':

res=num1+num2;break;

case '-':

res=num1-num2;break;

case '':

res=num1num2;break;

case '/':

res=num1/num2;break;

default:

res=0;

printf("运算符不符合规则\n");

}

return res;

}

//列出10道题

void takeTest()

{

clock_t startTime;

startTime=clock();

int index;

int giveRes;

int num1;

int num2;

char signal;

for(index=0;index<CALC_NUM;index++)

{

srand((unsigned)time(NULL));

signal=getSignal();

num1=random(0,100);

num2=random(1,100);

printf("%d%c%d=",num1,signal,num2);

scanf("%d",&giveRes);

fflush(stdin);

if(getResult(num1,num2,signal)==giveRes)

{

printf("correct\n");

}

else

{

printf("wrong\n");

}

}

printf("解10道题用了%lf秒\n",(double)(clock()- startTime)/CLOCKS_PER_SEC);

}

//检测idNo是否合规则,合规则返回true

bool checkNo(char idNo[])

{

int index;

bool flag;

flag=true;

for(index=0;index<IDNO_LENGTH;index++)

{

if(index<2)

{

if(!isalpha(idNo[index]))

{

flag=false;

printf("ID no 不符合规则,重新输入:");

break;

}

}

else

{

if(!isdigit(idNo[index]))

{

flag=false;

printf("ID no 不符合规则,重新输入:");

break;

}

}

}

return flag;

}

我理解的简单的数学表达式:纯数字+运算符+纯数字+(回车)

而且这里的运算符指 +,-,,/ 四种之一,纯数字是指整数

如下:

#include <stdioh>

#define NUMSIZE 10 // *** 作数长度

int ch_to_num(char a[]); //多位数字符到数值的转换

void main()

{

char var1[NUMSIZE+1]; //存放第一个 *** 作数字符串,最后一位存放结束符'\0'

char var2[NUMSIZE+1]; //存放第二个 *** 作数字符串,最后一位存放结束符'\0'

char var_op; //存放 *** 作数字符

bool flag1 = false; //用来标记是否已经输入第一个 *** 作数字符串

bool flag2 = false; //用来标记是否已经输入第二个 *** 作数字符串

bool flag_op = false; //用来标记是否已经输入 *** 作符

int num1; //存放第一个 *** 作数值

int num2; //存放第二个 *** 作数值

double result0; //存放运算结果

char current_char;

int i = 0;

printf("请输入简单表达式!\n");

scanf("%c", &current_char);

while (current_char >= '0' && current_char <= '9')

{//输入第一个变量

var1[i++] = current_char;

scanf("%c", &current_char);

}

if ( i > 0 )

{//第一个 *** 作数合格

flag1 = true; //保存好第一个 *** 作数,改变标记

var1[i] = '\0'; //加入结束符

}

else

{

printf("输入格式有错!");

return;

}

if (current_char =='+'||current_char =='-'||current_char ==''||current_char =='/')

{// *** 作符为加减乘除,合格

var_op = current_char; //保存 *** 作符

flag_op = true; //改变标记符

}

else

{

printf("输入格式有错!");

return;

}

scanf("%c", &current_char);

i = 0;

while (current_char >= '0' && current_char <= '9')

{//输入第二个变量

var2[i++] = current_char;

scanf("%c", &current_char);

}

if ( i > 0 )

{//第二个 *** 作数合格

flag2 = true; //保存好第二个 *** 作数,改变标记

var2[i] = '\0'; //加入结束符

}

else

{

printf("输入格式有错!");

return;

}

//计算:

num1 = ch_to_num(var1);

num2 = ch_to_num(var2);

switch(var_op)

{

case '+' :

result0 = num1 + num2;

printf("\n%d+%d=%f\n",num1,num2,result0);

break;

case '-' :

result0 = num1 - num2;

printf("\n%d-%d=%f\n",num1,num2,result0);

break;

case '' :

result0 = num1 num2;

printf("\n%d%d=%f\n",num1,num2,result0);

break;

case '/' :

result0 = (num1 + 00) / num2;

printf("\n%d/%d=%f\n",num1,num2,result0);

break;

default:

break;

}

}

int ch_to_num(char input[])

{

int sum = 0;

int i = 0;

char ch;

ch = input[i];

while ( ch != '\0')

{

sum = sum 10 +ch - '0';

i++;

ch = input[i];

}

return sum;

}

一般来说学习数学建模,常用的软件有四种,分别是:matlab、lingo、Mathematica和SAS下面简单介绍一下这四种。

1MATLAB的概况

MATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处

理,可视化建模仿真和实时控制等功能。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等

语言完相同的事情简捷得多

当前流行的MATLAB 53/Simulink 30包括拥有数百个内部函数的主包和三十几种工具包(Toolbox)工具包又可以分为功能性工具

包和学科工具包功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能学科工具包是专业性比较强

的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类

开放性使MATLAB广受用户欢迎除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改

或加入自己编写程序构造新的专用工具包

2Mathematica的概况

Wolfram Research 是高科技计算机运算( Technical computing )的先趋,由复杂理论的发明者 Stephen Wolfram 成立于

1987年,在1988年推出高科技计算机运算软件Mathematica,是一个足以媲美诺贝尔奖的天才产品。Mathematica 是一套整合数字以

及符号运算的数学工具软件,提供了全球超过百万的研究人员,工程师,物理学家,分析师以及其它技术专业人员容易使用的顶级

科学运算环境。目前已在学术界、电机、机械、化学、土木、信息工程、财务金融、医学、物理、统计、教育出版、OEM 等领域广

泛使用。

Mathematica 的特色

·具有高阶的演算方法和丰富的数学函数库和庞大的数学知识库,让 Mathematica 5 在线性代数方面的数值运算,例如特征向量、 反矩阵等,皆比Matlab R13做得更快更好,提供业界最精确的数值运算结果。

·Mathematica不但可以做数值计算,还提供最优秀的可设计的符号运算。

·丰富的数学函数库,可以快速的解答微积分、线性代数、微分方程、复变函数、数值分析、机率统计等等问题。

·Mathematica可以绘制各专业领域专业函数图形,提供丰富的图形表示方法,结果呈现可视化。

·Mathematica可编排专业的科学论文期刊,让运算与排版在同一环境下完成,提供高品质可编辑的排版公式与表格,屏幕与打印的 自动最佳化排版,组织由初始概念到最后报告的计划,并且对 txt、html、pdf 等格式的输出提供了最好的兼容性。

·可与 C、C++ 、Fortran、Perl、Visual Basic、以及 Java 结合,提供强大高级语言接口功能,使得程序开发更方便。

·Mathematica本身就是一个方便学习的程序语言。 Mathematica提供互动且丰富的帮助功能,让使用者现学现卖。强大的功能,简 单的 *** 作,非常容易学习特点,可以最有效的缩短研发时间。

3lingo的概况

LINGO则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP—QUARATIC PROGRAMING)其中

LINGO 60学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦再10^4量级以上。虽然LINDO和

LINGO不能直接求解目标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。

模型建立语言和求解引擎的整合

LINGO是使建立和求解线性、非线性和整数最佳化模型更快更简单更有效率的综合工具。LINGO提供强大的语言和快速的求解引擎来阐述和求解最佳化模型。

■ 简单的模型表示

LINGO可以将线性、非线性和整数问题迅速得予以公式表示,并且容易阅读、了解和修改。

■ 方便的数据输入和输出选择

LINGO建立的模型可以直接从数据库或工作表获取资料。同样地, LINGO可以将求解结果直接输出到数据库或工作表。

■ 强大的求解引擎

LINGO内建的求解引擎有线性、非线性(convex and nonconvex)、二次、二次限制和整数最佳化。

■ Model Interactively or Create Turn-key Applications

LINGO提供完全互动的环境供您建立、求解和分析模型。LINGO也提供DLL和OLE界面可供使用者由撰写的程序中呼叫。

■ 广泛的文件和HELP功能

LINGO提供的所有工具和文件可使你迅速入门和上手。LINGO使用者手册有详细的功能定义。

4SAS软件概况

SAS系统全称为Statistics Analysis System,最早由北卡罗来纳大学的两位生物统计学研究生编制,并于1976年成立了SAS软件研究所,正式推出了SAS软件。SAS是用于决策支持的大型集成信息系统,但该软件系统最早的功能限于统计分析,至今,统计分析功能也仍是它的重要组成部分和核心功能。SAS现在的版本为90版,大小约为1G。经过多年的发展,SAS已被全世界120多个国家和地区的近三万家机构所采用,直接用户则超过三百万人,遍及金融、医药卫生、生产、运输、通讯、政府和教育科研等领域。在英美等国,能熟练使用SAS进行统计分析是许多公司和科研机构选材的条件之一。在数据处理和统计分析领域,SAS系统被誉为国际上的标准软件系统,并在96~97年度被评选为建立数据库的首选产品。堪称统计软件界的巨无霸。在此仅举一例如下:在以苛刻严格著称于世的美国FDA新药审批程序中,新药试验结果的统计分析规定只能用SAS进行,其他软件的计算结果一律无效!哪怕只是简单的均数和标准差也不行!由此可见SAS的权威地位。

SAS系统是一个组合软件系统,它由多个功能模块组合而成,其基本部分是BASE SAS模块。BASE SAS模块是SAS系统的核心,承担着主要的数据管理任务,并管理用户使用环境,进行用户语言的处理,调用其他SAS模块和产品。也就是说,SAS系统的运行,首先必须启动BASE SAS模块,它除了本身所具有数据管理、程序设计及描述统计计算功能以外,还是SAS系统的中央调度室。它除可单独存在外,也可与其他产品或模块共同构成一个完整的系统。各模块的安装及更新都可通过其安装程序非常方便地进行。SAS系统具有灵活的功能扩展接口和强大的功能模块,在BASE SAS的基础上,还可以增加如下不同的模块而增加不同的功能:SAS/STAT(统计分析模块)、SAS/GRAPH(绘图模块)、SAS/QC(质量控制模块)、SAS/ETS(经济计量学和时间序列分析模块)、SAS/OR(运筹学模块)、SAS/IML(交互式矩阵程序设计语言模块)、SAS/FSP(快速数据处理的交互式菜单系统模块)、SAS/AF(交互式全屏幕软件应用系统模块)等等。SAS有一个智能型绘图系统,不仅能绘各种统计图,还能绘出地图。SAS提供多个统计过程,每个过程均含有极丰富的任选项。用户还可以通过对数据集的一连串加工,实现更为复杂的统计分析。此外,SAS还提供了各类概率分析函数、分位数函数、样本统计函数和随机数生成函数,使用户能方便地实现特殊统计要求。

以上就是关于C语言 一个数学程序求解释全部的内容,包括:C语言 一个数学程序求解释、求大神用C语言设计一个程序帮助小学生练习数学。(具体要求见问题补充)、C语言 从键盘输入一个简单的数学表达式,计算并显示该表达式的值 求算法和程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10633159.html

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

发表评论

登录后才能评论

评论列表(0条)

保存