麦粒c语言
❶ matlab编程
计算机程序就是计算机指令的集合,不同的编程语言指令与功能是不一样的.MATLAB语言是一种面向对象的高级语言,它具有编程效率高、易学易用的优点.
MATLAB与其它大部分高级语言一样,有它自己的控制流语句.控制流极其重要,因为它使过去的计算影响将来的运算。MATLAB提供如下几种控制流结构:For循环,While循环,If-Else-End结构和switch-case-end结构。由于这些结构经常包含大量的MATLAB命令,故经常出现在M文件中.MATLAB支持的控制流语句和c语言支持的控制流语句在调用格式上非常相似.
1.For 循环
For循环允许一条语句或一组语句被重复执行预先指定的次数。For循环的一般形式是:
for x =array
语句
end
在for和end语句之间的语句按数组中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:, n)。例如,
for n=1:10
x(n)=sin(n*pi/10);
end
x
x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
换句话,第一语句是说:对n等于1到10,执行所有语句,直至下一个end语句。第一次通过For循环n=1,第二次,n=2,如此继续,直至n=10。在n=10以后,For循环结束,然后执行end语句后面的任何命令.注意,该循环结束后,n=10.
For循环的其它重要方面是:
(1)For循环不能用For循环内重新赋值循环变量n来终止。
For n=1:10
x(n)=sin(n*pi/10);
n=9;
end
x
x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n
n=
9
执行过程是这样的:
n=1,
x(1)=sin(pi/10),
n=9,
n=2,
x(2)=sin(2*pi/10),
n=9,
n=3,
...,
n=10,
x(10)=sin(10*pi/10),
n=9.
循环结束后,n=9.
(2)在For循环内接受任何有效的MATLAB数组。
data=[3 9 45 6; 7 16 -1 5]
data =
3 9 45 6
7 16 -1 5
for n=data
x=n(1)-n(2)
end
x =
-4
x =
-7
x =
46
x =
1
(3)For循环可按需要嵌套。
For n=1:5
for m=1:5
A(n,m)=n^2+m^2;
end
disp(n)
end
1
2
3
4
5
A
A =
2 5 10 17 26
5 8 13 20 29
10 13 18 25 34
17 20 25 32 41
26 29 34 41 50
(4)当有一个等效的数组方法来解给定的问题时,应避免用For循环。例如,上面的第一个例子可被重写为
n=1:10;
x=sin(n*pi/10)
x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。
(5)为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。例如,前面所考虑的第一种情况,在For循环内每执行一次命令,变量x的大小增加1。迫使MATLAB每通过一次循环要花费时间对x分配更多的内存。为了消去这个步骤,For循环的例子应重写为
x=zeros(1,10);
for n=1:10
x(n)=sin(n*pi/10);
end
现在,只有x(n)的值需要改变。
例1 相传古代印度国王要褒奖他的聪明能干的宰相达依尔(国际象棋发明者),问他要什么?达依尔回答:“陛下只要在国际象棋棋盘的第一个格子上放一粒麦子,第二个格子上放二粒麦子,以后每个格子的麦子数都按前一格的两倍计算。如果陛下按此法给我64格的麦子,就感激不尽,其他什么也不要了。”国王想:“这还不容易!”让人扛了一袋麦子,但很快用光了,再扛出一袋还不够,请你为国王算一下共要给达依尔多少小麦?(1 小麦约 颗)
解: 麦粒总数为
程序如下:
a=1;
s=0
for i=1:64
s=s+a;
a=2*a;
end
s=s/1.4/10^8
运行后得:
s=
1.3176e+011
例2 公元前五世纪我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?
解 设 x:鸡翁数,则x的范围:0~19
y:鸡母数,则y的范围:0~33
z:鸡雏数,则z的范围:0~100
则:
x+y+z=100
5x+3y+z/3=100
这是一个不定方程。
for x=0:19
for y=0:33
for z=0:100
if (x+y+z==100)&(5*x+3*y+z/3==100)
d=[x,y,z]
end
end
end
end
运行后得结果:
d =
0 25 75
d =
4 18 78
d =
8 11 81
d =
12 4 84
2.While 循环
与For循环以固定次数求一组命令的值相反,While 循环以不定的次数重复执行一组语句。While循环的一般形式是:
while 表达式1
语句1
end
只要表达式1里的所有元素为真,就执行while和end之间的语句1,否则,就结束循环。通常,表达式的值给出一个标量值,但数组值也同样有效。在数组情况下,当数组的所有元素为真(值不等零)时,就执行语句1,数组中有一个元素为假(值为零),就结束循环。
例3按下面的公式计算:
使误差小于给定的 .
解: 把 作为误差,程序如下:
error=input('请输入误差:');
x=1;
y=0;
n=1;
while x>error
y=y+1;
x=x/n;
n=n+1;
end
e=y
运行如下:
请输入误差:0.001
e =
2.7181
3.IF-ELSE-END 结构
很多情况下,命令的序列必须根据关系的检验有条件地执行。在编程语言里,这种逻辑由某种If-Else-End结构来提供。最简单的If-Else-End结构是:
if 表达式1
语句1
end
如果在表达式1中的所有元素为真(非零),那么就执行if和end语言之间的语句1。
假如有两个选择,If-Else-End结构是:
if 表达式1
语句1
else
语句2
end
在这里,如果表达式1为真,则执行语句1;如果表达式是假,则执行语句2。
当有三个或更多的选择时,If-Else-End结构采用形式
if 表达式1
语句1
elseif 表达式2
语句2
elseif 表达式3
语句3
elseif 表达式4
语句4
elseif ……
.
.
.
else
语句
end
如果表达式1为真,则执行语句1,结束循环;如果表达式1为假,则检验表达式2,如果表达式2为真,则执行语句2,结束循环;如果表达式2为假,则检验表达式3,如此下去,如果所有表达式都为假时,则执行最后的语句。即只执行第一个真值表达式相关的语句;接下来的表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。
4.switch-case-end结构
如果在一个程序中,必须针对某个变量不同取值情况进行相应操作,switch语句比if else语句更方便。switch语句的一般形式为:
switch 分支条件(数值或字符串)
case 数值(或字符串)条件1
语句1
case 数值(或字符串)条件2
语句2
case 数值(或字符串)条件3
语句3
case ...
...
otherwise
语句
end
其中分支条件可以是一个函数、变量或者表达式.如果条件1与分支条件匹配就执行语句1,退出循环;否则,检验条件2,如果条件2与分支条件匹配执行语句2,退出循环;否则,检验条件3,...,当所有条件都不与分支条件匹配时就执行最后的语句。注意otherwise是可以省略的。
例4 在图形界面上放置一个弹出式菜,点击弹出式菜单可以设置曲线颜色。
解:程序如下:
x=linspace(-6,6,50);
y=sin(x);
h=plot(x,y,'linewidth',4);
h0=uicontrol('position',[600,500,100,30],...
'style','popupmenu',...
'string','红色|蓝色|黄色|黑色|青色',...
'callback',...
['v=get(h0,''value'');',...
'switch v;',...
'case 1;',...
'set(h,''color'',''r'');',...
'case 2;',...
'set(h,''color'',''b'');',...
'case 3;',...
'set(h,''color'',''y'');',...
'case 4;',...
'set(h,''color'',''k'');',...
'case 5;',...
'set(h,''color'',''c'');',...
'end;']);
❷ 用C语言编写
第启肢一:你没悄差世有给main函数添加返回值类型
第二:最最重要的是,麦粒总共要1844 6744 0737 0955 1615粒,而C语言int类型的数值的庆蔽范围太小,,这个小庙容不下这个大佛啊,即使是unsigned long int也不行
❸ C#编程题,大佬进
usingSystem;
namespaceq1
{
classProgram
{
staticvoidMain(string[]args)
{
ulongs=0;//麦粒总数
ulongn=4;//每格麦粒的数量,第一格为4粒
doubleg,v,a,h;
//循环累计,64格,累加64次
for(inti=0;i<64;++i)
{
s+=n;
//每格麦粒比前一格增加1倍
n*=2;
搜物}
//输出麦粒总数
Console.WriteLine("统治者要向发明者奖励的麦粒总数:"+s+"粒");
//小麦重量
g=s*5e-8;//每粒小麦50毫克=0.05克=0.00005千克=0.00000005吨
Console.WriteLine("小麦的重量为:"+g+"吨");
//输入区域面积
Console.Write("输入区域面积(平方千米):");
a=double.Parse(Console.ReadLine());
//计算小麦的体积(立方千米),每立方米小麦重量桥斗约0.75吨,换算为立方千米则为0.75e9吨
v=g*0.75e9;
//小麦的深世消液度为(千米)
h=v/a;
Console.WriteLine("深度:"+h+"千米");
Console.ReadKey();
}
}
}
❹ c语言中pow语句的问题
1/3是整除,在C中等于0,所以pow(h,1/3)=1
❺ 语言高手急救:象棋盘上有64个格子,第一个格子中放入一粒米,第二个格子中放入两粒米……
格子序耐山禅号, 米粒昌尘数
1 1=2^0
2 2=2^1
3 4=2^2
4 8=2^3
........
64 2^63
和为2^0+2^1+2^2+2^3+。。。。+2^62+2^63= 2^64-1=18446744073709551615
这唯局个数量相当于现在全世界人口吃1000多年的 粮食产量
❻ 在国际棋盘的64个格子放置小麦粒,第一格放1粒,第二格放2粒,第三格放4粒,第四格放8粒,以此类推,最后
int i;
long int y=1;
for(i=1;i++;i<64)
y=2*y;
加个mian函数和输出就ok了
(如果是总共的信册兄话,再用姿橡个sum作下累加就行了)滑袭
❼ 国王的小麦c语言编程
你已经给出了4种不同的编程。
//(1)
doublep,i,t;
p=1,t=1;
i=1;
while(i<64)
{p=p*2;
t=t+p;
i++;
}
//(2)
doublep,i,t;
i=1;
for(;i<64;)
{p=p*2;
t=t+p;
i++;
}
//(3)
doublep,i,t;
for(i=1,t=1;i<64;i++)
{p=p*2;
t=t+p;
}
//(4)
doublei,t;
while(i<64)
{t=t+pow(2,i);
i++;
}
❽ 指针地址数据为0读取错误
,用0作为一个数据结构的基地址,这样其中的成员变量的地址,就是其在数据结构中的偏移地址了。 这样做更容易获取数据结构中成员变量的偏移地址了。
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。) 想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单! 指针即地址。“地址又是啥?”“只能从汇编语言和计判尘蠢算机组成原理的角度去解释了。” 但我又不得不承认: 有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物; 而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。 不要企图依赖输出指针相关表达式的值【比如printf("%p
",...)】来理解指针的本质, 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=...】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本掘陪质。 这辈子不看内存地址和内存值;只画链表、指针示意图,画堆栈示意图,画各种示意图,甚至自己没画过而只看过书上的图能从本质上理解指针、理解函数参数传递吗?本人深表怀疑! 这辈子不种麦不收麦不将麦粒拿去磨面;只吃馒头、吃面条、吃面包、甚至从没看过别人怎么蒸馒头,压面条,烤面包,能从本质上理解面粉、理解面食吗?本人深表怀疑!! 提醒: “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、兄纳内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 (Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。) 想要从本质上理解C指针,必须学习C和汇编的对应关系。” 不是一回事! 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗? 不要写连自己也预测不了结果的代码! 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息 十字链表交换任意两个节点C源代码(C指针应用终极挑战)
❾ C语言求助
#include "stdio.h"
#include "conio.h"
/*舍罕是古印度的国王,据说他十分好玩,宰相达依尔为讨好国王,发明了现今的国际象棋献给国王。舍罕非常喜欢这项游戏,于是决定嘉奖达依尔,许诺可以满足达依尔提出的任何要求。达依尔指着舍罕王前面的棋盘提出了要求:“陛下,请您按棋盘的格子赏赐我一点麦子吧,第1个小格赏我一粒麦子,第2个小格赏我两粒,第3个小格赏四粒,以后每一小格都比前一个小格赏的麦粒数增加一倍,只要把棋盘上全部64个小格按这样的方法得到的麦粒都赏赐给我,我就心满意裤侍足了。”舍罕王听了达依尔这个“胡姿吵小小”的要求,想都没想就满口答应下来。
结果在给达依尔麦子时舍罕惊奇地发现它要给达依尔的麦子比自己想象的要多得多,于是他进行了计算,结果令他大惊失色。问题是:舍罕王的计算结果是多少粒麦子?
*/
void main()
{
//定义一个册伍变量,用来保存麦子的个数
double count=0;
//循环变量i
int i;
for(i=0;i<=64;i++){
//累加
count+=pow(2,i);
}
//输出
printf("%lf",count);
}
❿ C语言进新手问题
for语句后多写败饥了一个零,这样整个循环会变成空循环;当i等于n时循环才结束,再运行t=t*i和s=s+t这两条语句,最后s会等于n+1的值。最后的输出应该是s,不应该是n吧?循环的次数也少一次,察枣返当格数为2时,循环应该运行岩慧1次对吧?但是在这个程序中一次都没有运行。
综合上述整个程序可以改为:
#include "stdio.h"
void main()
{
int t,s,i,n;
printf("请输入格数\n");
scanf("%d",&n);
t=1,s=1;
for(i=2;i<=n;i++)
{
t=t*i;
s=s+t;
}
printf("%d\n",s);
}