C语言高手请进啊,高分哦,详细的解释!!!

1.若int a,b=9,d=8;表达式:
a=(--b==d++)?d++:--b;则a的结果是( )
2.已知有定义:int a=1,b=2,c=3,d=4,m=1,n=1,k;
则语句:k=(m=a>b)&&(n=c>d);运算结束后,m的值为( ),n的值为( ),k的值为()
3.已知有定义:char *p[]={"Chinese","France","America","Russia"};则语句printf("%s",p[1]);printf("%c",p[1][2]);的输出结果分别是( ),( )
希望给出详细的解释过程啊,谢谢,给高分哦!!!!

1. a = 10
2. m = 0 n = 0 k = 0
3. France r
第一题 考 -- ++ 运算符优先级,以及 c?a:b 运算 翻译成中文
a= b(9)自减 判断b(8)是否等于d(8) d自加变成9 判断成功执行前面语句 d自加变成10
所以a=10

第二题 考 条件运算 判断成功 结果为1 不成功为0
a>b不成功 为0 m为0 c>d不成功 为0 n为0 k= 0&&0 结果为0

第三题 考 二维数组 以及 数组概念
数组的行列是从 0 开始的, 即 第一个元素为 p[0][0]
定义的数组为二维。所以 p[1] 是第二行的全部元素 即 France 另外它不是省略的 p[1][0],两者不同,前者是一行,后者是一个
另外,你可以从c语言的打印方式看出,前者 %s 是打印字符串 后者 %c 是打印字符(一个)
希望对你有帮助啊!
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-16
1.
a的结果是9,因为(--b==d++)翻译过来就相当于(--9==8++),因为前一个是先减,后一个就后加的,所以运算后等价于(8==8,运算结果为1,此时b的值为8,d的值为9,因为那个判断的运算结果为1,所以就执行的是 ?后面的d++,因为是后减,此时的d值为9,所以返回的结果为9赋值给a,所以a的结果是9.

2.
m=0,n=1,k=0;
因为:(m=a>b),a值为1,b值为2,a>b返回0,m=0,所以(m=a>b)这个整体的值为0,因为后面的是&&,只要前一个判断为0后,后面的就不会再执行了,所以n的值还是保持不变,依然是n=1,再因为(m=a>b)值为0了,所以(m=a>b)&&(n=c>d)的值也为0了,即k=0.

3.
给出结果是:Francea
这个相当于是一个二维数组,下标从0开始,所以printf("%s",p[1]);这一句执行后输出数组下标为1的,即为数组第二行的字符串France,而后面一句printf("%c",p[1][2]);输出数组下标为1(第二行字符串)的字符串的下标为2的(第三个字符)a,所以输出结果为Francea.
第2个回答  2012-12-16
1 --b=8 d++=8 所以--b==d++ 为真 取d++ d++=9 所以a=9
2 a>b 为假 m=false=0 0&&任何值=0 所以n=1 k=0
3 p是指针 p[0]=Chinese p[1]=France ... 第一个输出 France
p[1][2]指的是p[1]的第2+1个(0是第一个)字符 所以第二个输出 a

C语言高手请进啊,高分哦,详细的解释!!!
定义的数组为二维。所以 p[1] 是第二行的全部元素 即 France 另外它不是省略的 p[1][0],两者不同,前者是一行,后者是一个 另外,你可以从c语言的打印方式看出,前者 %s 是打印字符串 后者 %c 是打印字符(一个)希望对你有帮助啊!

C语言语句解释,高手请进!
void jsVal(){ int i, thou, hun, ten, data, j;int ab, cd;for (i=0; i<200; i++){ thou = a[i]\/1000; \/\/千位数字,因为是整形数,4位数除以1000取整就是千位上的数字。 下同。hun = a[i]%1000\/100; \/\/ 百位数字,这里先用%求余,如:6543%1000余543再除以100取整得...

高分C语言问题~~·高手请进
思路:A[n]中,n代表有多少堆果子,A中的元素代表各堆的果子数目 int getValue(int A[]){ 初始 int S=0 1. (数组A)n个数字从小到大排序 (例如:1,2,9)2. 取上步中最小的两个数相加之和为一个M , S=S+M 3. 数组A中除去最小的两个数,然后将M加进去形成一个新数组A元素个数为 n...

C语言高手请进~~~
a[2]={3,&a[0]},后面ptr = &a[1];就是让ptr指向a[1],所以ptr的值就是{2,&a[2]},也就是ptr->i1=2,答案d又给他做了自增1,结果为3了。

c语言问题,高手请进谢谢!!!
即i+i--->这两个i些时都是3;而不是一个2,一个3;4。再一个++i 此时i加1得到i,i=3+1=4;由上面的理解知道i此时已经是4,5、由上面四步得到一个i=4,i+i+i的式子,写入数据得到12 今天上课还在纠结这个问题,一看到你的问题突然想起来了!呵呵 ...

编程高手请进!(C语言)
scanf("%c",&yes);} } 2.include <stdio.h> void main(){ int gj, mj, xj, t1, t2;for (gj=1; gj<=20; gj++){ for (mj=1; mj<34; mj++){ xj=100-gj-mj;t1=xj%3;t2=5*gj+3*mj+xj\/3;if (t1==0&&t2==100)printf("gj=%d,mj=%d,xj=%d\\n",gj,mj,xj);} }...

写C语言程序 高手请进...跪求!!!
void main(){ int a[10],b[10],i,j;printf("输入数组a");for(i=0; i<10; i++)scanf("%d",&a[i]);printf("输入数组b");for(i=0; i<10; i++)scanf("%d",&b[i]);printf("相同元素:");for(i=0; i<10; i++)for(j=0; j<10; j++)if(a[i]==b[j]) ...

C语言编程问题.请高手进(附源码)!!!HELP
default:printf("输入错误,请重新打开程序输入!");} } void sr(void){ int b=0,d=0,f=0;float e=0.0;char A[20],c[20];FILE *g;g=fopen("fdsj.dat","a+");\/\/---a方式好,是追加 printf("请输入菜的类别:(数字)\\n");printf("1.主食\\t2.热菜\\t3.凉菜\\t4.汤\\t");s...

关于C语言的一个问题,高手请进
解释一下,a.c文件中调用了b()函数,a.c包含了b.h头文件,所以a.c文件能正常调用b()函数,这点大家应该都没有问题,但main()中通过调用a()来间接调用b()函数需不需要b()的头文件呢,答案是不需要的,从编译过程中,我们知道,编译器把a.c、b.c和main.c分别编译成a.o、b.o和main.o的...

c语言高手请进来!
你打了多少错字呀。。。正确的应该是:int i=-1;printf("%d,%o\\n",i,i)上面那大哥说的差不多了,只是%d是表示10进制的,%o是表示8进制的,关于在内存中怎么存贮转化你可以参考下清华大学出版社的 计算机基础,。大一的学生用的。8进制的177777转化成10进制并不是-1,这和在内存中的存储有关系...

相似回答
大家正在搜