两道c语言题目求解

第一题:有以下程序
#define f(x)(x*x)
main()
{int i1,i2;
i1=f(8)/(4);
i2=f(4+4)/(2+2);
printf("%d,%d\n",i1,i2);
}
程序运行的输出结果是_____
A.64,28 B.4,4 C.4,3 D.64,64
答案是C,我很奇怪,为什么i2会变小呢?
第二题:以下程序输出的结果是_______
main()
{struct cmplx{int x,int y} cnum[2]={2,4,3,1};
printf("%d\n,cnum[0].y/cnum[0].x*cnum[1].y");
}
A.0 B.2 C.3 D.6
这题选B。我奇怪的是cnum[2]这不是一个只有两个元素的一维数组么,为什么数组中有四个元素;还有前面的struct cmplx,不是只声明了 一个结构体类型么,结构变量都没有~~~最后~~~为什么会有这么一个答案我也不清楚。
另外加个小问题。
include<stdio.h>
main()
{char c1='1',c2='2';
c1=getchar();c2=getchar();
putchar(c1);putchar(c2);}
我奇怪的是,char类型后面跟的如果是整形,不是不能加''么,只有字符的时候才能加''么~~
对不起了各位,第一题是我写错了。应该是i1=f(8)/f(4);
i2=f(4+4)/f(2+2);

第一题可能是题目印错了,如果的确是你所写的那样;答案是16,6
#define f(x)(x*x)
main()
{int i1,i2;
i1=f(8)/f(4); //看一下除数
i2=f(4+4)/f(2+2);//除数
printf("%d,%d\n",i1,i2);
}
这样答案就是C,

第二道题,题目可以这样看
main()
{
struct cmplx
{
int x;
int y;
}cnum[2];

cnum[0].x=2;
cnum[0].y=4;
cnum[1].x=3;
cnum[1].y=1;

printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].y);
}

第三题 c1='1'对应的是字符1,对应的十进制为49;
如果c1=49,则等同于c1='1'字符;
而c1=1对应的是ASCII第二个字符,也就是这个“☺”
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-03-18
第一题:i1=(8*8)/(4)=16 i2=(4+4*4+4)/(2+2)=6
我看原题的意思应该是
#define f(x)(x*x)
main()
{int i1,i2;
i1=f(8)/f(4);
i2=f(4+4)/f(2+2);
printf("%d,%d\n",i1,i2);
}
结果才会选c
实践就是最好的证明,我运行过了。结果就是16,6
第二题不能运行,乱七八糟的错误一大堆。
第三题:include前面要加 # .
至于你问的问题??
你是不是想说char类型变量赋值如果是数字就不能用‘’括起来(记住,字符串的话用双引号,单个字符都是用单引号的)?ASCLL码里面有0-9这几个数字,他们可以是字符,也可以是数值。原题有加单引号,是字符。
第2个回答  2010-03-18
第一道:#define f(x)(x*x)这个宏替换将i1=f(8)/(4)替换为:i1=(8*8)/(4*4);i2=f(4+4)/(2+2)=4;替换成:i2=(4+4*4+4)/(2+2*2+2)=3;其实,宏替换就好比复制,它只是机械性负责复制,而不会识别运算符的优先级之类,所以用的时候要特别小心
第二道问题是问题,cnum[2]={2,4,3,1}结构不明,不知道是你抄错还是什么原因;
第三,在C语言中,是把双引号中的数据看成字符的,而不数据,就比如"1",这样的表示说明它只是一个字符,而不是表示大小的数据。。。
第3个回答  2010-03-18
1.

i1=f(8)/(4);
经过宏替换后就成了:
i1=(8*8)/(4);
所以i1=16

i2=f(4+4)/(2+2);
经过宏替换后就成了:
i2=(4+4*4+4)/(2+2);
所以,i2=6

所以i2<i1,而且答案是错的.

2.

struct cmplx{int x,int y} cnum[2]={2,4,3,1}

这个式子定义了一个struct cmplx类型的结构体数组cnum,它有两个该结构体类型的元素,cnum[0]和cnum[1],cnum[0]有两个成员变量,分别是cnum[0].x和cnum[0].y,而且在定义时分别被初始化为2和4,cnum[1]也有x和y两个成员变量并且在定义时被初始化为3和1

3.
后面的'1'和'2'都是字符,不是整数1和2

C语言常量,两道题求详解
第一题:D 解释:A:0不存在正负 B:‘’中间只能有一个字符,字符串要用“”C:同B 第二题:A 解释:B、C:同上题B、C D:16进制数数要在前面加0x

两道C语言求详细过程
1、A 要获取指针p指向的结构体变量的某个成员的地址(或数组成员首元素的地址)有两种方法:&p->membername或&(*p).membername(当成员是非数组时),p->membername或(*p).membername(当成员是数组时),所以答案是A。2、sum=335 整个程序的作用就是计算某一年的从第1月起一直到输入的某个月的...

C语言练习题两道并解释下原因
第一题:选D 是整除取余,参与运算的两个数都是整型。(int)表示强制取整。对于本题,正确格式:(int)f%i,因此其它三个选项都是错误的。第二题:i的值是30 逗号运算符,按顺序逐一执行表达式,并以最后一个表达式的值作为结果。执行a=2*3,得到a=6,执行a*5,得到30,并将30赋值给i,i的值...

两道很基础的C语言题 求求好心人帮忙给出答案和解析
第一题,从题目看,main中输入了一个字符数组到item,并把这个item传给delnum处理,delnum中的那个循环,是逐个判断s[i]是否是小于'0'或者大于9,即判断s[i]是否非数字,如果非数字,则用s[j++]=s[i]来将内容保存,举个例子,比如输入a9,在delnum中,第一次循环i=0,s[0]为'a',满足if...

两道c语言编程,能不能帮忙分析一下结果为什么不同?
第二道:因为STU中的char name[10]声明的name是个数组,当b=a操作后b就是a的拷贝,但后面对b中的数组的操作不会影响对a中的数组。所以输出结果应该是Zhao,m,290,Qian,f,350。余同上。指针和数组拷贝后都有两个实体,但数组是对两个实体操作,而两个实体指针指向的目标却是同一个。尽管f中对...

c语言选择题,这两道题求c语言大哥解答,详细点哈,谢谢
第一题 和++运算优先级相等,运算自右向左 p++; 相当于p++后再*p,所以p指向&a[1], *p等于11 比+的运算优先级高 p+=1;相当于*p=*p + 1;答案为C 第二题 答案为A S是数组首地址,不是指针,不可移动

C语言简单编程题目两道,求高手做一下。高分!!!
第1题 :include <stdio.h> include <stdlib.h> define MAX 200 int main(void){ int a[MAX], i = 0;srand(time(NULL)); \/\/ 时间种子, 保证真随机, 每次不会相同 while (i < MAX) { a[i] = rand() % 10000; \/\/ 随机获得10000以下数字, 0-9999 if (a[i] < 1000) { ...

C语言两道小题
1:第一题中的r = func((x--,y++,x+y),z--)这一步大家有的说X+Y=6+7 有的说是5+8 到底哪个正确啊 回答:5+8是正确的 你思考的方向有点偏差 ( x--,y++,x+y)是一个逗号表达式,他的求解顺序是从左至右执行,即先求解x-- 再求解 y++ 『(注意!)这里并没有取x和y的...

两道C语言题目,编程实现。1.求8的阶乘。2.求1到8的阶乘和。
1~8的阶乘 include<stdio.h> void main(){ int i,j,m;long int sum;for(i=1;i<=8;i++){ m=1;sum=0;for(j=1;j<=i;j++){ m=m*j;} sum+=m;printf("%d!=%ld\\n",i,sum);} } 8的阶乘:include<stdio.h> void main(){ int i,j=1;for(i=1;i<=8;i++){ j=j...

问两道有关c语言字符指针的问题,请将程序每一步的意思告诉我,谢谢啦...
第一题答案:B。理由:*s与*t都是取出此时地址存储的值,while()语句里面的意思是,当指针s与t都不为空并且s指向的值等于t指向的值。。。当s或者t为空或者t与s指向的值不同时,while()结束,返回此时s指向的值减去t指向的值,所以为比较两个字符串的大小;第二题答案:A。理由:x的地址赋值...

相似回答