表达式求值
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
魔方阵
• • • • • • • • 魔方阵:每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2 要求打印出1~n2的自然数构成的魔方阵。 解:魔方阵的阶数只能为奇数。魔方阵中各数的排列规律如下: 1)将1放在第一行中间一列; 2)从2开始直到n*n止各数一次按下列规则存放:每一个数存放的行 比前一个数的行数减1,列数加1;(例如上面魔方阵中,5在4的上一 行后一列) • 3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行); (例如1在第一行,则2应放在最下一行,列数同样加1) • 4)当上一个数的列数为n时,下一个数的列数应为1,行数减1;(例 如2在第3行最后一列,则3应放在第2行第1列) • 5)如果按上面的规则确定的位置上已有数,或上一个数是第1行第n 列时,则把下一个数放在上一个数的下面。(例如按上面规定,4应 该放在第1行第2列,但该位置已被1占据,所以4就放在3的下面。由 于6是第1行第3列(即最后一列),故7放在6下面)
递归
• 用递归方法求n阶勒让德多项式的值,递归公式为:
1 Pn ( x ) x (( 2 n 1) xP ( x ) ( n 1) P ( x )) / n n 1 n2 (n = 0 ) (n = 1 ) (n > 1 )
• • • • • • • • • • •
• • • • • • • • • • • • • • • • • • • • • • • • • • •
main() { int a[16][16],i,j,k,p,m,n; //第0行第0列不用来放数据 p=1; while(p==1) //要求阶数为1~15的奇数 {scanf(“%d”,&n); if((n!=0)&&(n<=15)&&(n%2!=0)) p=0;} for(i=1;i<=n;i++) //初始化 for(j=1;j<=n;j++) a[i][j]=0; /*建立魔方阵*/ j=n/2+1; a[1][j]=1; for(k=2;k<=n*n;k++) { i=i-1; j=j+1; if((i<1)&&(j>n)) {i=i+2; j=j-1;} //上一个数在第1行第n列,则放在上一个数的下面 else {if(i<1) i=n; if(j>n) j=1;} if(a[i][j]==0) a[i][j]=k; //位置上没有数 else {i=i+2;j=j-1;a[i][j]=k;} //位置上已有数,则放在上一个数的下面 } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf(“%4d”,a[i][j]); printf(“\n”); } }
答案:1
答案:1,1
答案:13
源自文库
答案:3
答案:4
答案:11
答案:97或‘a‟
答案:1,-13,-7
答案:3,2,3,3
• 假设所有的变量均为整型,则表达式(a = 2,b = 5,b++,a+b)的值是 。 • A、7 B、8 C、6 D、2
• 答案:B
• 1、若有以下定义,则执行表达式y+=y-=m*=y后 的y值是 。 • int m=5, y=2; • 答案: -16 2、若有定义:char c=‟\010‟;则变量c中包含的字 符个数为 。
• void main(int argc, char *argv[]) • { while(argc-->1) • printf(”%s\n”,*++argv); • } • 命令行: • ./a.out China Beijing↙ • 这里argc=3,argv[0]指向./a.out,argv[1]指向China,argv[2] 指向Beijing,所以输出为: • China • Beijing
带形参的main函数
• void main(int arge, char *argv[]) • Main函数的实参是和命令一起给出的,也 就是再一个命令行中包括命令名和需要传 给main函数的参数。 • 命令名 参数1 参数2……参数n • argc是指命令行中参数的个数,包括命令名 在内;argv是一个指向字符串的指针数组。
x=0 x=1 x=0 x=0 x=15 x=2 x=3 x=1 x=1 x=32
矩阵鞍点
• • • • • • • • • • • • • • • • • • • • • • • 元素在该行上最大,在该列上最小。 #define N 10 #define M 10 main() { int i,j,k,m,n,flag1,flag2,a[N][M],max,maxj; printf(“输入行数n和列数m:”); scanf(“%d%d”,&n,&m); for(i=0;i<n;i++) for(j=0;j<m;j++) scanf(“%d”,&a[i][j]); //输入矩阵元素 flag2=0; for(i=0;i<n;i++) {max=a[i][0]; for(j=0;j<m;j++) if(a[i][j]>max) {max=a[i][j]; maxj=j;} //找到一行中最大的元素 for(k=0,flag1=1;k<n&&flag1;k++) if(max>a[k][maxj]) flag1=0; //该列中有比该元素小的,说明不是鞍点,则flag1置0 if(flag1) {printf(“\n第%d行,第%d列的%d是鞍点\n”,i,maxj,max); flag2=1; } //flag1为1,说明是鞍点,则输出鞍点,并将flag2置1 } If(!flag2) printf(“\n矩阵中无鞍点!\n”); //flag2始终为0,说明无鞍点 }
• • • • • • • • • • •
int x=3,y=2,z=1; 1)x=y==z; 2)x=!(z>y)&&!x||1; 3)x=(y++*1/3); 4)x=((x>y>z)?1:0); 5)x*=2+3; 6)x=(++z*y,y++,z%y); 7)y=--z&&--x; 8)x=5||x!=y; 9)x=1.5+7%3*(int)(2.5+4.7)%2/4; 10) x=„a‟-‟A‟;
答案: 1 (代表一个ASCII码为八进制数010的字符)
3、当a=3,b=2,c=1时,表达式f=a>b>c 的值 是 。 答案: 0
• 4、若有说明语句:char c='72'; 则变量 c 。 • A. 包含1个字符 • B. 2个字符 • C. 包含3个字符 • D. 说明不合法,c的值不确定 • 答案: D
表达式求值
表达式求值
• 运算符的优先级 • 初等运算符(() [] -> .)>单目 运算符>算术运算符>关系运算符>逻辑运算 符(除了!)>条件运算符>赋值运算符>逗 号运算符 • 运算符的结合性 • 算术运算符(+,-,×,/,%):左结合性 • 赋值运算符(=,+=,×=……),条件运 算符,单目运算符:右结合性
float p(int n, int x) { if(n==0) return(1); else if(n==1) return(x); else return((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n); } main() { int x,n; scanf(“%d%d”,&n,&x); printf(“P%d(%d)=%6.2f”,n,x,p(n,x)); }