请帮我做这几道C语言选择题?
13.1有以下程序:#include<stdio.h>#defineMIN(x,y)(x)<(y)?(x):(y)main(){inti,j,k;i=10;j=15;k=...
13.1有以下程序:
#include<stdio.h>
#define MIN(x,y) (x)<(y)?(x):(y)
main()
{ int i,j,k;
i=10;j=15;k=10*MIN(i,j); printf("%d\n",k);
}
程序的运行结果是:15 为什么是15的呢?不是k=10*10=100的吗?
13.2 有以下程序:
#include<stdio.h>
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{ int i;
for(i=1;i<=NUM;i++); printf("%d\n",i);
}
程序中的for循环执行的次数是:
答案:8 不是NUM=(M+1)*M/2=(3+1)*3/2=6的吗?
13.6 有以下程序:
#include<stdio.h>
#define <stdlib.h>
void fun(float *p1,float *p2,float *s)
{ s=(float *)calloc(1,sizeof(float));
*s=*p1+*p2++;
}
main()
{ float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s);printf("%5.2f\n",*s);
}
程序的运行结果是:
A 11.10 B 12.00 C 21.10 D 1.10
答案:D1.10
不懂1.10怎么计算出来的?
13.8 以下程序运行后的输出结果是:
#include<stdio.h>
#define PR(ar) printf("ar=%d",ar)
main()
{ int j,a[]={1,3,5,7,9,11,13,15},*p=a+5;
for(j=3;j;j--)
switch(j)
{ case 1:
case 2:PR(*p++);break;
case 3:PR(*(--p));
}
}
答案:ar=9 ar=9 ar=11
第二个ar是9不明白? 展开
#include<stdio.h>
#define MIN(x,y) (x)<(y)?(x):(y)
main()
{ int i,j,k;
i=10;j=15;k=10*MIN(i,j); printf("%d\n",k);
}
程序的运行结果是:15 为什么是15的呢?不是k=10*10=100的吗?
13.2 有以下程序:
#include<stdio.h>
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{ int i;
for(i=1;i<=NUM;i++); printf("%d\n",i);
}
程序中的for循环执行的次数是:
答案:8 不是NUM=(M+1)*M/2=(3+1)*3/2=6的吗?
13.6 有以下程序:
#include<stdio.h>
#define <stdlib.h>
void fun(float *p1,float *p2,float *s)
{ s=(float *)calloc(1,sizeof(float));
*s=*p1+*p2++;
}
main()
{ float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s);printf("%5.2f\n",*s);
}
程序的运行结果是:
A 11.10 B 12.00 C 21.10 D 1.10
答案:D1.10
不懂1.10怎么计算出来的?
13.8 以下程序运行后的输出结果是:
#include<stdio.h>
#define PR(ar) printf("ar=%d",ar)
main()
{ int j,a[]={1,3,5,7,9,11,13,15},*p=a+5;
for(j=3;j;j--)
switch(j)
{ case 1:
case 2:PR(*p++);break;
case 3:PR(*(--p));
}
}
答案:ar=9 ar=9 ar=11
第二个ar是9不明白? 展开
2个回答
展开全部
第一题:记着#define 始终是文本替换,k=10*MIN(i,j); 等价于 k=10 * (x)<(y)?(x):(y); 而乘号的优先级高于< 号,所以,就变成了 k=10 * (10) <(15)?(10):(15) =100 < (15)?(10):(10);这样100<15为假,所以k=15。
第二题:还是#define 文本替换,首先将NUM 替换为(M+1)*M/2,在将前面的M替换为N+1,(注意:将M替换为N+1时,没有括号的!!),(N+1+1)*N+1/2,在将N替换为2,由于1/2取整为零,所以答案为8。
第三题:由于void fun();这个函数是无返回值的,所以在它里面的任何操作都不影响主函数中的输出,而*s=a,指向的是a数组的首地址,*s=a[0]=1.1,由于输出时%5.2f,所以输出要保存两位小数,答案就是1.10。
第四题:看循环,j=3,条件成立,执行case3 ,*(--p),由于-- 在p的前面所以先--,后取值,所以 就为p开始指向的a[5],先向前移一位,指向a[4],所以打印输出ar=9,j--,j成为2;
在执行循环,执行case2,(*p++),由于++在p 的后面,所以先取*p,在执行完所有操作后p在向后面移,因而,p还是指向a[4]的,所以打印输出是ar=9,j--,j为1,(注意,此时p在执行p++,所以此时的p指向a[5]);
在执行循环,执行case1, 为空,在执行case2,先执行*p,打印输出后为ar=11,在执行p++,此时p指向a[6] .
所以答案是:ar=9,ar=9,ar=11。
第二题:还是#define 文本替换,首先将NUM 替换为(M+1)*M/2,在将前面的M替换为N+1,(注意:将M替换为N+1时,没有括号的!!),(N+1+1)*N+1/2,在将N替换为2,由于1/2取整为零,所以答案为8。
第三题:由于void fun();这个函数是无返回值的,所以在它里面的任何操作都不影响主函数中的输出,而*s=a,指向的是a数组的首地址,*s=a[0]=1.1,由于输出时%5.2f,所以输出要保存两位小数,答案就是1.10。
第四题:看循环,j=3,条件成立,执行case3 ,*(--p),由于-- 在p的前面所以先--,后取值,所以 就为p开始指向的a[5],先向前移一位,指向a[4],所以打印输出ar=9,j--,j成为2;
在执行循环,执行case2,(*p++),由于++在p 的后面,所以先取*p,在执行完所有操作后p在向后面移,因而,p还是指向a[4]的,所以打印输出是ar=9,j--,j为1,(注意,此时p在执行p++,所以此时的p指向a[5]);
在执行循环,执行case1, 为空,在执行case2,先执行*p,打印输出后为ar=11,在执行p++,此时p指向a[6] .
所以答案是:ar=9,ar=9,ar=11。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询