一道c语言问题

作者&投稿:潜枯 (若有异议请与网页底部的电邮联系)
一道c语言的问题~

关键在于
t=*s1++;
*s1=*s2--;
*s2=t;
它不是简单的对换,而是错位对换。
第一次循环时,把第一个字符写到第六个字符,而不是第七个;把第七个字符写到第二个字符,而不是第一个。后面的以此类推……

int (*f)();——声明f是个指向函数的指针,这个被指向的函数没有形式参数,并返回一个int型值。
A就是用指针f调用它指向的函数add,C是用f指向的目标add调用;所以这二者没有实质区别,A是用指针调用,C是用函数名调用,结果是一样的。
关键是此题有误:声明的f指向的函数是没有形式参数的,而add函数有两个int型形参,所以f=add;这一句的=两边类型不兼容,连编译都不会过的!正确的声明应该是int (*f)(int,int);。

呵呵这个句子挺有意思!老汉看看!等会给你结果

结果出来了!我给你最准确的答案!因为我是在汇编级调试出来的!
代码,printf("%3x\n",(x%y,x-y,x+y)); 意思是输出一个16进制数
这个数一共占3位,这个数不够3位时,在其前面补空格。
如果改成printf("%03x\n",(x%y,x-y,x+y));那么就是在前面补0了不是空格了,改成后者比较直观一些。

代码的具体执行情况是这样的,(x%y,x-y,x+y)这个代码中编译器只
识别其中的"x+y"其他的全部省略到。所以这个式子实际上就是等于
printf("%3x\n,(x+y)); 而已。

这是分析的代码:
218: int x=10,y=20; //c代码
004010A2 mov dword ptr [ebp-4],0Ah //向x赋值
004010A9 mov dword ptr [ebp-8],14h //向y赋值
219: printf("%04x\n",(x%y,x-y,x+y));
004010B0 mov eax,dword ptr [ebp-4] //取x值
004010B3 add eax,dword ptr [ebp-8] //用x值+上y的值
004010B6 push eax //把上面运算的和压入
004010B7 push offset string "%03x\n" (0043119c)
004010BC call printf (004084b0) //调用printf
004010C1 add esp,8 ///平栈

以上有问题可以联系我!用短消息!

danycive别瞎扯了:
其实很简单,3x表示输出3位的16进制数,printf参数1里的格式只有一个输出即:%x 所以就是说输出(x%y,x-y,x+y)这个表达式的值,而由于是","运算符,所以结果是最后一个表达式,即x+y,而x+y=30,30的16进制数结果就是3E.因为需要3位输出,所以结果就是" 3E",记得有个空格哦.

我觉得答案应该是3e1
(x%y,x-y,x+y)是要输出的计算式 这是逗号运算符 前面两个式子并不影响或者说改变x y的值,而真正输出的应该是x+y的值30 指数形式表现出来应该是3*10(1次方) 所以我认为结果应该是3e1

结果不错,他输出用的是16进制,程序逗号表达式输出荚果是30,用16进制就是1E了,呵呵.


三道C语言题目,求大神(用指针的方法)。
=1 || n<1 || n>9999){printf("%d is out of range of valid values.\\n",n);return 0;}k=0; for(i=1;i<=n;i++)k=(k+3)%i;printf("Last No. is: %d\\n",k%n+1);return 0;}运行样例:(2)include "stdio.h"char *delchar(char *s,char c){int i,j;for(j=i=...

2道C语言题不会,请哥哥们帮忙!
{ switch(c=getchar()){case'a':v1+=1;case't':case'T':v2+=1;default:v1+=1;v2+=1;} 这样又执行了 case'a':v1+=1; case't': case'T':v2+=1; default:v1+=1;v2+=1;所以v1=7,v2=9 按照这样的步骤最后v1=7,v2=9 case't':case'T':v2+=1;相当于 case't':ca...

C语言问题 2道
1.首先记住一点:x是一个变量,在声明时,编译器给它分配了存储空间,所以对于x的任何处理,不论是x++还是++x,也不论处理了几次,都是对于同一块存储空间的处理 int x=3;x=3,\/\/x的初值为3 y=++x*++x*++x;先从左向右处理:++x*++x 先计算++,再计算 ++x \/\/将x=3代入,x=4 ++x ...

两道C语言题目,求答案和解析,谢谢~
第9题:【C】核心知识点:1、逗号表达式,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。2、++a与a++的区别,前者为先自加1而后引用当前值参与计算,后者为先引用当前值参与计算而后自加1。x=(a=3,b=++a);1)执行a=3,此时a值为3;2)执行++a,此时a值为4;3)执行b=++a...

C语言程序两道题目
初始化完毕,a=10,b=c=d=5,i=j=k=0 for(;a>b;++b)i++;没有初始条件,当a=b时结束循环,a与b之间相差5,因此会执行5次循环,也就是i有5次自加1的机会,因此i=5,因为在for语句中++b和a>b属于不同两条语句,因此++b的自增和b++的自增效果是一样的。while(a>++c)j++;当...

三道c语言的程序题要求要步骤全、最好把思路写上 先上200分在线等_百 ...
第一题很简单,没啥好说的,就是输入数字,然后一个简单的 switch case 语句。include <stdio.h> int main(){ int a, b, opr;printf("输入两个数字,如 3 5 (数字用空格分开)\\n");scanf("%d %d", &a, &b);printf("选择计算方式:\\n");printf("1. 加, 2. 减, 3. 乘, ...

C语言的一道题,求大神详细解释下子。。。
这是一个很简单的C语言程序。include<stdio.h> \/\/引入必要的头文件,支持printf函数。main() \/\/主函数定义 {int x=15; \/\/声明整数类型x,并赋初值15 while(x>10&&x<50) \/\/当x大于10,并且x小于50的时候 {x++; \/\/x增1,变成16 if(x\/3) {x++;break;} \/\/注意这...

某道简单的C语言题目
这个程序有以下几个问题:1、可以改进的地方。for(i=100;i<=999;i++)实际循环的时候,i 最大的可能应该是:987\/3 =329。如果i 大于329肯定重复,而且当i 大于333时,z将超过1000,i 大于500时,y和z都将超出1000。这将导致数组a[]获得的y和z的百位数字为两位数。所以实际使用的时候可以写成...

几道C语言的入门问题,给过程,在线等
1、C A选项表示8进制的1;B选项表示十六进制的1;C选项错误,0开头的表示八进制的整数常量,范围是0-7,08显然超过了8进制的表示范围;D选项表示十进制的8;2、B f表示单精度,不写的话默认都是双精度;3、0X10;两个十六进制的数进行按位与运算,首先把两个十六进制数化成二进制OX14:0010 ...

C语言两道小题
每一条都会运算,但结果只取最后一条:X先-1得5,Y再+1得8,最后 x+y=((x-1)+(y-1))=((6-1)+(7+1))=13 所以括号内的最终值是13,就有func(13,8)给传递过去得结果 13+8=21(被输出)第二题就是个纯粹的循环问题 for(k=2;k<6;k++,k++) 中:k++,k++可以看成k=k+2;即...

铜山县13571956912: 一道C语言题 -
才旦英乌鸡: 答案D X=4 A)x*=x+1 =2*3 B)x++,2*x =2*3 C)x*=(1+x)同A D)2*x, x+=2

铜山县13571956912: 一道C语言问题 -
才旦英乌鸡: s1+4就是数组s1[4]的地址,也就是j 的地址,strcpy(s1+4,s2); 将"beijing"复制到s1 中j 开始的位置,因此执行后s1存放的是"tianbeijing",因此答案是B

铜山县13571956912: c语言的一道题 -
才旦英乌鸡: *(prt+0)=2,x=8,*(prt+y)<x成立.所以z取后面的*prt+y=2+0=2,所以z=2 第2轮循环:y=2,*(prt+1)=4,x=8,*(prt+y)<x成立.所以z取后面的*prt+y=2+1=3,所以z=3 第3轮循环:第1轮循环:y=1:y=0不多说了

铜山县13571956912: 一道非常简单的C语言题
才旦英乌鸡: min=(a[i]>a[i-1])?min:a[i]; 如果a[i]>a[i - 1],始终比较的是当前元素和上一个元素,这是最根本的错误,比如 3 2 4 3这条语句的运行过程就是,min = 24>2 -> min = 2;3 min = 3;最终结果,min = 3;显然是不对的. 正确的是要始终跟当前的min比较,而且不要刻意去追求语句简短,条件运算符并不一定具有更高的效率.min = (a[i]

铜山县13571956912: 一道C语言题目
才旦英乌鸡: 程序有错,第一,变量c未定义;第二,赋值语句缺少分号. 就算改正后输出的结果也不确定. 可能是a=123.449997 b=32.560001 c=123.449999 之类近似值.这与计算机中对浮点数的运算处理有关,详细解释起来就比较深了.这里就不再详细阐述. 如果你期望输出跟你赋值相符的值,最好在输出时指定输出格式,如保留几位小数啊 比如本例可写为的printf("a=%.2f b=%.2f c=%.2f",a,b,c);对其保留两位小数.

铜山县13571956912: c语言的一道问题 -
才旦英乌鸡: 首先char **s是一个指针的指针,你也可以把它看成一个二维数组,也就是char s[][] 这样就好辨别了.首先看A,s="ABCDEF"; 这个肯定就不对了,因为s是指向一个二维数组,而"ABCDEF"就是一个字符串,也可以看成是一维字符数组.在看B,*s="ABCDEF"; 这个就没有问题了,*s是对s这个二级指针取一级地址,这个取出来其实就是一个char s[] 再看C**s="ABCDEF"; 这个就不对了,对一个二级指针进行两次取地址,实际上取到的是这个二维数组的第一个元素,也就是等同于s[0][0] 再看D*s实际就是一个char s[]数组,所以不正确.

铜山县13571956912: 一道C语言题 -
才旦英乌鸡: 因为你输入的回车也被看车了一个字符#include void main() { int i,n,b; char a[10]; scanf("%d",getchar();\\这里加上这个函数 for(i=0;i<n+1;i++) s...

铜山县13571956912: 一道简单的c语言题目 -
才旦英乌鸡: 经过运行验证的,没错!# include void main () {int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1, temp2,number,end,I,j; printf("array a:\n"); for(I=0;I printf("%5d",a[I]); printf("\n"); printf("insert date:"); scanf("%d",&number); end=a[9]; if(...

铜山县13571956912: 一道C语言题目
才旦英乌鸡: 这里的大写的阿斯特码不是比小写的小吗?大写的Z与小写的a中间隔的不只是四个字符.所以,如果大写的不限定,那么小的从再怎么都满足那个条件,所以小写的的话无论是哪一个字母都会执行c=c-26;所以要加,而小写的那里就可以不用加了. 如果没有c<='Z'+4,小写的哪一个字母都会执行c=c-26;因为它们都满足c>'Z'

铜山县13571956912: C语言 一道题 -
才旦英乌鸡: #include main() { char *language[]={"BASIC", "FORTRAN", "PROLOG", "JAVA", "C++"}; char **q; int k; q=language; for(k=0;k<5;k++,q++) printf("%s\n",*q); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网