我想知道有关杨辉三角的C程序算法,GCC编译器的具体用法。如果答案好的话,另追加分。
#include
int main()
{
int c[10][10]={0},i,j;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(i==j||j==0)c[i][j]=1;
else c[i][j]=c[i-1][j]+c[i-1][j-1];
}
}
return 0;
}
杨辉三角在编程实现中较为容易。最常见的算法便是用上一行递推计算;也有运用和组合的对应关系而使用阶乘计算的,然而后者速度较慢且阶乘容易溢出。编程的输出大多相类,此处并不过多添加截图。C、C++、C#、Java 语言之间的语法也大多相类,因此这里也不会将每一种算法都在这些语言中各实现一遍。要在这些语言的版本间修改,实际上只需注意一些简单的语法和函数名称的改变,如 C 的 int yh[M][M] 应改写为 Java 的 int[][] yh = new int[M][M]、C# 的 int[,] yh=new int[M,M];C printf 应使用 Java 的 System.out.print、C# 的 Console.Write 、C++ 中更智能的 cout 来替换。 以下的代码均用标准 C 语言写成,可以被包括 MSVC(含 VC6)、GCC 的多种 C 编译器编译。这个算法使用只行列位置和左侧的数值算出数值: /* yh-rt1.c - 时间和空间最优算法 */#include #include int main(){ int s = 1, h; // 数值和高度 int i, j; // 循环计数 scanf(%d, &h); // 输入层数 printf(1
); // 输出第一个 1 for (i = 2; i #define M 10 // 行数// #define PYRAMID // 金字塔,会额外填充空格// #define REVERSE // 反向再来一次,得到菱形int main(void){ int a [M][M], i, j; // 二维数组和循环变量,a[行][列] for (i = 0; i= 0; i--) {#ifdef PYRAMID for (j = 0;j #include string.hint main(){ int a[10000]; //容器,由n*(n+1)/2=2;i--) //从倒数第一个数开始加 a[i]=a[i]+a[i-1]; //杨辉三角的规律,没有值的数组默认为0 for(i=1;i#include #define EMPTY 1#define OFLOW 2#define INVAL 3#define MAX_Q 100typedef int DataType; // 数据类型选择typedef struct{ DataType elem[MAX_Q]; int front, rear; } LinkQ;// 队列及检查宏#define InitQ(Q) LinkQ Q; Q.front=Q.rear=-1;#define _EQ(Q,e) Q.elem[(Q.rear=(Q.rear+1)%MAX_Q)]=e#define EnQ(Q,e) if((Q.rear+1)%MAX_Q==Q.front) Exit(OFLOW,Overflow); _EQ(Q,e)#define DeQ(Q,e) e=Q.elem[(Q.front=(Q.front+1)%MAX_Q)]#define Front(Q) Q.elem[(Q.front+1)%MAX_Q]// 退出int Exit(int err, char msg[]) { puts(msg); exit(err); return err; }int main(void){ int n=1,i,j,k,t; InitQ(Q); printf(please enter a number:); scanf(%d,&n); if (n 20) 询问返回 = 信息框 (“您输入的数值过大,处理数据时程序将会有一段时间无响应,是否继续?”, #是否钮 + #询问图标, “请问:”) .如果真 (询问返回 = #是钮) ' 如果确定,调用求帕斯卡三角 求帕斯卡三角 () .如果真结束 ' 数据较小时调用求帕斯卡三角 .判断 (编辑框1.内容 ≠ “” 且 到数值 (编辑框1.内容) ≤ 20) 求帕斯卡三角 () .默认.判断结束 .子程序 求帕斯卡三角 .局部变量 行数, 整数型, , , 帕斯卡三角行数 .局部变量 列数, 整数型, , , 帕斯卡三角列数' 要求的帕斯卡三角的总行数 帕斯卡三角阶数 = 到数值 (编辑框1.内容) - 1 .变量循环首 (0, 帕斯卡三角阶数, 1, 行数) .变量循环首 (0, 行数, 1, 列数) ' 取帕斯卡三角元素放到当前行里 帕斯卡三角 = 帕斯卡三角 + 到文本 (取帕斯卡三角元素 (行数 + 1, 列数 + 1)) + “,” .变量循环尾 () 帕斯卡三角 = 取文本左边 (帕斯卡三角, 取文本长度 (帕斯卡三角) - 1) + #换行符 ' 没层需去尾都好加换行符 .变量循环尾 () ' 显示结果 编辑框2.内容 = 帕斯卡三角 .子程序 取帕斯卡三角元素, 整数型, , 取帕斯卡三角中元素的子程序 .参数 行数, 整数型, , 帕斯卡三角行数 .参数 列数, 整数型, , 帕斯卡三角列数.如果 (列数 = 1 或 行数 = 列数) ' 每行的外围两个元素为1 返回 (1) .否则 ' 其余的部分为上一行的(行数 - 1)和(行数)元素之和 返回 (取帕斯卡三角元素 (行数 - 1, 列数 - 1) + 取帕斯卡三角元素 (行数 - 1, 列数)) .如果结束 # -*- coding: utf-8 -*-#!/usr/bin/env pythondef pas_triangles(): a = [1] while True: yield a a = [sum(i) for i in zip([0] + a, a + [0])]if __name__ == __main__: g = pas_triangles() for n in range(10): print(next(g))
目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。GCC不仅功能非常强大,结构也异常灵活。最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Modula-3和Ada等。
先举一个例子,便于理解。
hello.c
#include <stdio.h>
int main(void)
{
printf ("Hello world, Linux programming!\n");
return 0;
}
然后执行下面的命令编译和运行这段程序:
# gcc hello.c -o hello
# ./hello
Hello world, Linux programming!
GCC默认将.i文件看成是预处理后的C语言源代码,因此上述命令将自动跳过预处理步骤而开始执行编译过程,也可以使用-x参数让GCC从指定的步骤开始编译。最后一步是将生成的目标文件链接成可执行文件:
# gcc hello.o -o hello
在采用模块化的设计思想进行软件开发时,通常整个程序是由多个源文件组成的,相应地也就形成了多个编译单元,使用GCC能够很好地管理这些编译单元。假设有一个由foo1.c和foo2.c两个源文件组成的程序,为了对它们进行编译,并最终生成可执行程序foo,可以使用下面这条命令:
# gcc foo1.c foo2.c -o foo
如果同时处理的文件不止一个,GCC仍然会按照预处理、编译和链接的过程依次进行。如果深究起来,上面这条命令大致相当于依次执行如下三条命令:
# gcc -c foo1.c -o foo1.o
# gcc -c foo2.c -o foo2.o
# gcc foo1.o foo2.o -o foo
在编译一个包含许多源文件的工程时,若只用一条GCC命令来完成编译是非常浪费时间的。假设项目中有100个源文件需要编译,并且每个源文件中都包含10000行代码,如果像上面那样仅用一条GCC命令来完成编译工作,那么GCC需要将每个源文件都重新编译一遍,然后再全部连接起来。很显然,这样浪费的时间相当多,尤其是当用户只是修改了其中某一个文件的时候,完全没有必要将每个文件都重新编译一遍,因为很多已经生成的目标文件是不会改变的。要解决这个问题,关键是要灵活运用GCC,同时还要借助像Make这样的工具。
GCC包含完整的出错检查和警告提示功能,它们可以帮助Linux程序员写出更加专业和优美的代码。
举一个例子:
illcode.c
#include <stdio.h>
void main(void)
{
long long int var = 1;
printf("It is not standard C code!\n");
}
下面来看看GCC是如何帮助程序员来发现这些错误的。当GCC在编译不符合ANSI/ISO C语言标准的源代码时,如果加上了-pedantic选项,那么使用了扩展语法的地方将产生相应的警告信息:
# gcc -pedantic illcode.c -o illcode
illcode.c: In function `main':
illcode.c:9: ISO C89 does not support `long long'
illcode.c:8: return type of `main' is not `int'
需要注意的是,-pedantic编译选项并不能保证被编译程序与ANSI/ISO C标准的完全兼容,它仅仅只能用来帮助Linux程序员离这个目标越来越近。或者换句话说,-pedantic选项能够帮助程序员发现一些不符合ANSI/ISO C标准的代码,但不是全部,事实上只有ANSI/ISO C语言标准中要求进行编译器诊断的那些情况,才有可能被GCC发现并提出警告。
对Linux程序员来讲,GCC给出的警告信息是很有价值的,它们不仅可以帮助程序员写出更加健壮的程序,而且还是跟踪和调试程序的有力工具。建议在用GCC编译源代码时始终带上-Wall选项,并把它逐渐培养成为一种习惯,这对找出常见的隐式编程错误很有帮助。
有关与杨辉三角算法的程序,你可以去“c贴吧”的这一个专题贴子http://tieba.baidu.com/f?z=84246535&ct=335544320&lm=0&sc=0&rn=30&tn=baiduPostBrowser&word=c&pn=0去看一下。
关於杨辉三角的数学题(初一下册)请大家给点题,要加答案的
如图满足:(1)第n行首尾两数均为n;(2)表中的递推关系类似于杨辉三角,求第n行(n>=2) 的第2个数。1 2 2 3 4 3 4 7 7 4 5 11 14 11 5 6 16 25 25 16 6 答案 1 2 2 3 4 3 4 7 7 4 5 11 14 11 5 6 16 25 25 16 6 ...n [(1+2+...+n-1)+1]注...
一道关于杨辉三角的题。
解:由题得,全行的数都为1的分别是第1行,第3行,第7行,第15行…又因为数1,3,7,15…的通项为2^n-1 所以第n次全行的数都为1的是第2^n-1行 所以第63行全部为1 然后你写一下第64行 只有第一个和最后一个是1 第65行只有前两个和后两个是1,故由4个 ...
关于杨辉三角的倒数三角
一般的科学计算器都能进行计算,不必代入上述阶乘式---下面两个的和是上面那个 1\/30=1\/12-1\/20 再看我这个 http:\/\/hi.baidu.com\/xiaozhaotaitai\/album\/item\/420d4bdbce8d6a76d1164e23.html ---其实这个叫莱布尼兹三角形
杨辉三角的有关问题,求高手相助!
第二行,第三行,第七行具有该性质。P都是质数(素数)。
国际上以中国人名字命名的数学物理成果有什么
国际上以中国人名字命名的数学物理成果有:李善兰恒等式、黄(昆)方程、吴文俊公式、华(罗庚)--王(元)方法、吴氏(仲华)通用理论、陈氏(景润)定理。
数学的历史
杨辉在《九章算法纂类》中载有贾宪“增乘开平方法”、“增乘开立方法”;在《详解九章算法》中载有贾宪的“开方作法本源”图、“增乘方法求廉草”和用增乘开方法开四次方的例子。根据这些记录可以确定贾宪已发现二项系数表,创造了增乘开方法。这两项成就对整个宋元数学发生重大的影响,其中贾宪三角比西方的帕斯卡...
中国古代有哪些著名数学家
《四元玉鉴》则是中国宋元数学高峰的又一个标志,其中最杰出的数学创作有“四元术”(多元高次方程列式与消元解法)、“垛积法”(高阶等差数列求和)与“招差术”(高次内插法) ▲贾宪:〈〈黄帝九章算经细草〉〉 中国古典数学家在宋元时期达到了高峰,这一发展的序幕是“贾宪三角”(二项展开系数表)的发现...
战神山任务所有题目答案
1.《九章算术》共有(246)个问题的解法 2.“筑房”不属于《九章算术》的章节 3.“积多”不属于《九章算术》的章节 4.“杨辉三角”出现在《详解九章算法》 5. 《九章算术》不是沈括的作品 6.与沈括相关的表叙中不正确的是(沈括解决了球体体积的计算问题) 7.与数学家程大立相关的表叙中不正确的是(程大立...
如图是与杨辉三角有关类似性质的三角形数垒,a、b是某行的前两个数,那 ...
2 2 3 4 3 4 7 7 4 5 11 14 11 5 6 16 25 25 16 6 7 22 41 50 41 22 7 a=7时,d=50
有关二项式的问题,问题如图,为什么n是5
因为题目说了:展开式中【第三项与第四项】的二项式系数最大。若二项展开式中只有一项系数最大,则二项式指数为偶数,若最大系数项为a,则二项式指数为 n=2(a-1);若二项展开式有两项【同时】系数最大,则指数为奇数,若为b、(<) c,则二项式指数为 n=2b-1=2c-3 。故这个二项式指数为 ...
严池帕夫: #include <stdio.h> double jc(int n) { double ret= 1; while(n) ret*= n--; return ret; } double jc(int n, int m) { double ret= 1; while(m--) ret*= n--; return ret; } void yanghuisanjiao(int n) { int i, j, m, k; for(i= 0; i <= n; i++) { for(k=0; k < n-i; k++) printf(" "); for(j= 0...
五通桥区15289187621: 杨辉三角的c语言程序怎么编写,谢谢~ - ?
严池帕夫: #include <stdio.h> main() { int i,j,n=0,a[17][17]={0}; while(n<1 || n>16) { printf("请输入杨辉三角形的行数:"); scanf("%d",&n); } for(i=0;i<n;i++) a[i][0]=1; /*第一列全置为一*/ for(i=1;i<n;i++) for(j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j];/*每个数...
五通桥区15289187621: 杨辉三角用C程序怎么编写(不用数组,只用for循环) - ?
严池帕夫: #include <stdio.h> int Yh(int x,int y) //取在x行y列的 { int z; if((y==1)||(y==x+1)) return 1; z=Yh(x-1,y-1)+Yh(x-1,y); return z; } main(){ int i,j; for(i=0;i<=4;i++) { for(j=1;j<i+2;j++) printf("%d",Yh(i,j)); //输出第i行j列的值 printf("\n"); } return 0; }
五通桥区15289187621: C语言杨辉三角的程序 - ?
严池帕夫: #include<stdio.h> main(){ int a[10][10],i,j,k; /*k是用来控制缩进长度的*/ for(i=0;i<10;i++){for(j=0;j<=i;j++){if(j==0||j==i){a[i][j]=1;} else{a[i][j]=a[i-1][j-1]+a[i-1][j];}} }for(i=0;i<10;i++){for(k=1;k<=(10-i);++k)printf(" ");/*有三个空格,根据后面输...
五通桥区15289187621: 求c语言输出杨辉三角形的完整程序 - ?
严池帕夫: 你看看这个,这个是我编译运行通过的#include <stdio.h> int main() { int arr[2][11], n, i, j; n=10; for (i=0; i<=10; i++) arr[0][i] = arr[1][i] = 0; arr[0][1] = 1; for (i=1; i<=n; i++) { for (j=1; j<=i; j++) arr[i%2][j] = arr[(i-1)%2][j-1]+arr[(i-1)%2][j];for (j=1; j<=i; j++) ...
五通桥区15289187621: 怎样用C语言编杨辉三角?谢谢啦!!?
严池帕夫: 下面是杨辉三角最简单的算法:(等腰三角形形式显示) #include<stdio.h> #include<conio.h> int main(void) { int row,pos=1; printf("需打印杨辉三角行数:"); scanf("%d",&row); for(int i=0;i<row;i++) { printf("%*s%-6d",(row-i-1)*3,"",pos); for(int j=1;j<=i;j++) { pos=pos*(i-j+1)/j; printf("%-6d",pos); } printf("\n"); } getch(); return 0; }
五通桥区15289187621: 杨辉三角用C语言怎么编?
严池帕夫: 代码: #include <stdio.h> #include <iostream>int main() { long i,j,n,k; printf("Please input the number: "); scanf("%ld",&n); printf("\n"); for(i=1;i<=n;i++) { k=1; for(j=1;j<i;j++) { printf("%ld ",k); k=k*(i-j)/j; }printf("1\n"); } system("pause"); return 0; } 结果:
五通桥区15289187621: 怎样用C语言写出等腰的杨辉三角? - ?
严池帕夫: #include <stdio.h>#define N 14 main() { int i, j, k, n=0, a[N][N]; /*定义二维数组a[14][14]*/ while(n<=0||n>=13) { /*控制打印的行数不要太大,过大会造成显示不规范*/ printf("请输入要打印的行数:"); scanf("%d",&n); } printf("%d行杨辉三...
五通桥区15289187621: 一道用C程求杨辉三角的题, - ?
严池帕夫: { int i,j,row,yang[15][15]={0}; scanf("%d",&row); for(i=0;i<=row;i++) { yang[i][0]=yang[i][i]=1; } for(i=2;i { for(j=1;j { yang[i][j]=yang[i-1][j-1]+yang[i-1][j]; } } for(i=0;i { for(j=0;j<=i;j++) { printf("%d\t",yang[i][j]); } printf("\n"); } return 0; } 你的程序,开头...
五通桥区15289187621: 最简单C语言编写“杨辉三角” - ?
严池帕夫: #include <iostream.h> const n=15; void main() {int i,j;int a[n][n];for (i=0;i<n;i++)a[i][0]=1;for (i=1;i<n;i++)for (j=1;j<=i;j++){if(i==j)a[i][j]=1;elsea[i][j]=a[i-1][j-1]+a[i-1][j];}for(i=0;i<n;i++){for(j=0;j<=i;j++) if(a[i][j]<10)cout<<a[i][j]<<" ";else ...