c语言在线答疑,求高人指导~~~谢谢了~~~

2 以下程序的输出结果是 -27 。
#include<stdio.h>
void main()
{ char c;
c=0345;
printf("%d\n",c);
}
为什么是得-27求具体过程~~~

6 若输入字符串:abcdefg<回车>,则以下while循环体将执行 0 次。
while((ch=getchar())=='g') printf("*");
为什么是0次啊,不明白~~~

15 运行下面程序,其输出结果是 321 。
#include <stdio.h>
main()
{ void printd()
int n=123;
printd(n);
}
void printd(int n)
{ int i;
if(n<0) { n=-n; putchar('-'); }
putchar(n%10+'0');
if((i=n/10)!=0) printd(i);
不太明白~~~
16 以下程序的输出结果是 abb 。
#include<stdio.h>
void main()
{ char ch[]="abc",x[3][3]; int i;
for(i=0;i<3;i++) strcpy(x[i],ch);
for(i=0;i<3;i++) printf("%s",&x[i][i]);
printf("\n");
}
17 运行下面程序,从键盘输入三个字符ab#,其输出是 ab##ba 。
#include <stdio.h>
void recursion()
{ char c;
c=getchar();
putchar(c);
if(c!='#') recursion();
putchar(c);
}
void main()
{ void recursion();
recursion();
}

18 以下程序的输出结果是__55__。
#define M 5
#define N M+M
main()
{ int k;
k=N*N*5; printf("%d\n",k);
}

19 以下程序的输出结果是 12 15 。
#include <stdio.h>
void swap(int *a, int *b)
{ int *t ;
t=a; a=b; b=t;
}
void main()
{ int i=12, j=15, *p=&i, *q=&j;
swap(p,q);
printf("%d %d\n", *p,*q);
}
谢谢高手们了~~~~

第一个:你定义的是char,其表示范围是-128到127;你的0345是八进制数,换算成十进制是229,原码是11100101,反码是10011010,补码是10011011,其表示的就是-27的二进制数在计算机里面的存储。

第二个:((ch=getchar())=='g') ,这个条件判断中的ch=getchar()这个表达式的值在你输入a的时候,不等于'g',循环终止。所以是0次。

第三个:putchar(n%10+'0');n=321,n%10+'0'=’1‘;if((i=n/10)!=0) printd(i)中,i=n/10 的值是32,后面递归调用函数本身。3次函数调用输出的字符分别是'3','2','1'。

第四个:抱歉,你给的答案是错误的。输出结果应该是abcabcabcbcabcc;原因如下:二维数组里面存的是abc,abc,abc这9个字符。循环3次输出分别从第一个,第五个,第九个字符输出。

第五个:这个是函数的递归调用。第一次输入a,并递归到下一层输入b,再递归到下一层输入#
条件符合退出递归,输出当前层的c,即#,退回上一层输出当前c,即b,再退回上一层输出当前c,即a。这就是ab##ba。

第六个:这个是由于define中的M+M没有加()。表达式经编译器编译后就是M+M*M+M*5,就是55。如果在define中加上括号,即(M+M),表达式就是(M+M)*(M+M)*5了。

第七个:你在swap中交换的是指针的值,不是指针指向的空间的值。所以没有交换成功。就是原来的12和15。

完了。。我真是闲的呵呵。。。。大半夜睡不着觉。。。。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-17
唉 没给红分就想解这么多怪怪题 谁叫我人好呢 没办法
1.c是用八进制表示的,那么十进制的话就是229,c的ASCII等于229,可是ASCII只表示到到128啊,所以应该模128,但是我不知道模的时候为什么不取正数101,而取了-27,也许是补码问题.
2.getchar()只接受一个字符,你都把条件定义为遇到‘g’才执行,很显然,第一次循环都因条件不满足直接跳过了,后面的哪还有机会啊。
3.putchar(n%10+'0');这里先求出个位数并输出,if((i=n/10)!=0) printd(i);这里求出除了个位之前的所有数,然后以这些数位参数继续递归 输出最后一位,直到为0,也就是之前的数全部输出。
4.这个跟地址有很大关系了,输出结果不是abb吧应该为:abcabcabcbcabcc
for(i=0;i<3;i++) strcpy(x[i],ch);这个语句把数组x赋值为abcabcabc, printf("%s",&x[i][i]);第一次循环时从数组第【0】【0】个地址处开始输出:abcabcabc,第二次循环时从数组第【1】【1】个地址处开始输出:bcabc,第三次从数组第【2】【2】个地址处开始输出:c 所以最后输出应该为:abcabcabcbcabcc
5.这是个递归调用问题,当你输入的不是‘#’就递归,一层一层地递归,但是别忘了后面还有个putchar(c)一直保存着你当前的输入,当你条件不满足时退出递归,程序又会一层层输出原来保存的值 所以自然会对称输出。
6.这是因为你在M+M这没打上括号,所以最后执行为:M+M*M+M*5 先乘除后加减,所以就会输出55了
7.你虽然传了地址,交换了地址,但是并没有交换值啊,就像两个人手中分别拿着两个盒子,盒子里面装有不同的东西,你现在把他们的盒子交换了,但是里面的东西还是一样的啊,所以你应该这样写:
void swap(int *a, int *b)
{ int t ;
t=*a; *a=*b; *b=t;
}
这样才是交换了合子里面的东西追问

谢谢嘎

第2个回答  2012-06-17
为什么是-27呢?
因为0345转化成二进制是111001101,负数在计算机存储是高位不变,反码+1,你把111001101减一取反,保持高位不变就是-27了。
第6题 每次getchar只是读取一个字符,无论你输入多少个字符按回车,这个函数只是读取一个,所以ch=‘a’怎么可能会有循环呢?
15题
printd是个递归函数,每次if(i !=0)就调用下,这样每次打印出3 2 1 。这个函数谁写的,还是错误的,函数都没申明。而且参数都错了,一塌糊涂写的,
晚上只是帮你解决这么多,有事情明天再说,我睡觉了,晚安本回答被网友采纳

c语言在线答疑,求高人指导~~~谢谢了~~~
第一个:你定义的是char,其表示范围是-128到127;你的0345是八进制数,换算成十进制是229,原码是11100101,反码是10011010,补码是10011011,其表示的就是-27的二进制数在计算机里面的存储。第二个:((ch=getchar())=='g') ,这个条件判断中的ch=getchar()这个表达式的值在你输入a的时候,不...

C语言问题,求大神解答
\/\/Node* head表示头指针 \/\/头指针指向头结点,头结点的值无用,头结点的指针指向链表内第一个元素 \/\/当NULL == head->next时链表为空,当NULL == head时链表为无效链表 include <stdio.h> include <stdlib.h> typedef struct Node { int val;struct Node* next;}Node;void* _malloc(size_...

这个C语言编程不会,求高人指导下,谢谢、主函数sumA,B,C我该怎么用?
请注意,我在函数定义中使用了`int *sum`来传递求和结果的指针,这样可以在`main`函数中获取最终的求和结果。同时,我也包括了函数原型声明,这是C语言编程中的一个好习惯,它有助于编译器在编译时进行类型检查。此外,我修正了一些语法错误,比如`scanf`的格式字符串中的`%d`应匹配`int`类型的变量...

一些C语言题目!求高手答疑!谢谢了!!!
1,int和char虽然可以转换,但是如果互相转换了,想得到的原值就不一样了。2,第一条语句语法上应该是错误的;第二条把float类型的f模以int类型的i后,把他们的结果转换成(int)3.double是占8个字节,folat和int都占4个字节,char占一个字节,所以double比她们高位,所以低位向高位进行自动类型提升、...

C语言问题,求大神解决,谢谢拉。。我是小白,解释下原因
主要考察你c语言三目运算符的结合方向 是自右向左的 所以a<b?a:c<d?c:d 可以看成 a<b?a: (c<d?c:d) 1 < 4 ? a : (c < d ? c:d)括号内的表达式也可以看做是一个元素 因为 a = 1 b = 4 所以 条件 a < b 成立 所以选前者 a 答案就是 A) 1 ...

C语言,求解答,谢谢
您好,很高兴回答您的问题。其实这个题目主要是考察运算符的优先级别。在C语言中,赋值运算符=的优先级别高于逗号运算符;,所以这个题目其实是先把3*5=15先赋值给变量a,然后再运算逗号表达式15,a*4,a+5。因为最后是要输出a的值,而除了赋值之外,a的值并没有再发生变化,所以最后a的值为15。

C语言问题,求大神解决,谢谢拉。。我是小白,解释下原因
x<<=3:把x的二进制位向左移动3位 因为x=1,所以 x的二进制为:0000 0001 向左移动3位后为:0000 1000 0000 1000转为10进制位:2^3 = 8 所以,选:D

c语言问题 问题很多啊 谢谢指导
int data1(int c,int d);int data2(int c,int d);\/\/函数的定义在主函数之后应该在主函数之前定义。int a[]={31,28,31,30,31,30,31,31,30,31,30,31};int b[]={31,29,31,30,31,30,31,31,30,31,30,31};\/\/因为你在函数的定义中使用了这两个数组,所以他们是全局变量,应在...

C语言求救~~~
void main (){ int x;printf("input x:");scanf("%d",&x);if (x>0) printf("y=1\\n");if (x==0) printf("y=0\\n");if (x<0) printf("y=-1\\n");} else if的 include<stdio.h> void main (){ int x;printf("input x:");scanf("%d",&x);if (x>0) printf("y...

C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下。
B.float add(float x,y) \/\/第二个参数,没有数据类型说明,应该是float add(float x, float y){return(x+y);} C.int add(x,y) \/\/两个参数,都没有数据类型说明,而且花括号内的float x,y \/\/是定义的临时变量,不是形参类型 {float x,y;return(x+y);} D.int add(x,y...

相似回答