几道C语言基础的选择题,求解释,谢谢。

15、以下程序的执行结果是()。#include#defineN2#defineMN+1#defineNUM(M+1)*M/2main(){intI=1,n=0;whil... 15、以下程序的执行结果是( )。
#include
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main( )
{int I=1,n=0;
while(I<=NUM)
{ n++;
printf("%d",n);
I++;
}
printf("\n");
}

A、0123456
B、12345678
C、123
D、12
你的回答: A (×) 参考答案:B
19、已知:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则不能表示数组a中元素的表达式是。
A、*p
B、a[10]
C、*a
D、a[p-a]
你的回答: C (×) 参考答案:B
16、设有以下一段程序
char s[ ]="Hello";
char *p=s ;
执行完上面程序段后,*(p+5) 的值为 ( ) 。
A、'o'
B、'\0'
C、'o' 的地址
D、不确定的值
你的回答: A (×) 参考答案:B
15、若定义 int a[ ] ={1, 2, 3, 4, 5 , 6, 7 , 8 , 9 , 10}, *p=a ;
则值为 3 的表达式是 ( )。

A、p+=2,*(p++)
B、p+=2,*++p
C、p+=3,*p++
D、++*p
你的回答: D (×) 参考答案:A
14、若有定义和语句
char *s1="12345" , *s2="1234";
printf("%d\n" ,strlen(strcpy(s1,s2)));
则输出结果是( )。
A、4
B、5
C、9
D、10
你的回答: C (×) 参考答案:A

2、结构是C语言的构造数据类型。下面定义了一个职工结构employee、结构变量emp1和结构指针变量p:
struct employee{
int num; //职工编号
char name[10]; //职工姓名
}emp1,*p;
p=&emp1;
正确使用结构变量emp1的语句是:
A、scanf("%d%s",&p->num,p->name);
B、scanf("%d%s",&p->num,&p->name);
C、scanf("%d%s",&p.num,p.name);
D、scanf("%d%s",&p.num,&p.name);
你的回答: C (×) 参考答案:A
展开
 我来答
路易五十三
2013-06-23 · 超过15用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:44.1万
展开全部
1、首先我们知道宏只是简单的字符替换,那么宏NUM实际就等价于
(N+1+1)*N+1/2,再等价于(2+1+1)*2+1/2,然后要注意优先级的问题,NUM=8,那么循环就是1~8。
2、A、*p //就是a[0]
B、a[10] //这样就越界了,数组元素只有a[0]~a[9]
C、*a //就是a[0]
D、a[p-a] //就是a[0]
3、我们知道字符数组是以数字0(也就是'\0')为结束标识的。p指向的是字符数组第一个元素'H',那么p+1指向'e',p+2指向'l',p+3指向'l',p+4指向'o',p+5指向'\0'。
3、A、p+=2,*(p++) //p指向元素1,p+=2后p指向元素3,p++:先使用再自增,则*(p++)就是3
B、p+=2,*++p //++p先自增再使用,则*++p是4
C、p+=3,*p++ //p+=3后p指向元素4
D、++*p //值为2
4、strcpy(s1,s2)将s2复制到s1并返回s1,即之后s1与s2内容是一样的,strlen取长度值为4。
5、 A、scanf("%d%s",&p->num,p->name);
B、scanf("%d%s",&p->num,&p->name);
C、scanf("%d%s",&p.num,p.name);
D、scanf("%d%s",&p.num,&p.name);
以结构指针操作成员要用到成员运算符->,那么C、D排除;scanf需要的是一个内存地址,p->num是一个整型变量,要用取地址符&;结构中成员name是一个字符数组,p->name表示的是这个字符数组的首地址,不需要再用取地址符。
追问
(N 1 1)*N 1/2,为什么是这样,不懂,define不是直接赋值吗?为什么运算方式完全不同啊/2就是  1/2????究竟它的运算规律是怎样的,谢谢,其他懂了就这个不懂
追答
#define定义的是宏,宏如果出现在代码中不是直接赋值,而是字符内容的替换。
譬如,
#define N 2
#define M N+1
#define NUM (M+1)*M/2
我们把NUM展开,用N+1来替换M,那么就变成了(N+1+1)*N+1/2。注意,不要想当然地把N+1的值在脑海里算出来然后再替换,这个题目的考点就在这里。然后再把N的数值替换到新的表达式里,就成了(2+1+1)*2+1/2,剩下的就是计算的问题了,要注意的就是运算符的优先级,括号里面的没什么特别的,直接算出来,成了4*2+1/2,乘法和除法的优先级要高于加法,那么我们先算乘法就成了8+1/2,再说说C语言里的除法运算符“/”,它算出来的结果只考虑整除的部分,没有除尽的部分就不用考虑了,那么1/2的结果就是0余数是1,余数不考虑那么最后表达式就成了8+0,结果就出来了。
普洛智应
2013-06-23 · 知道合伙人互联网行家
普洛智应
知道合伙人互联网行家
采纳数:410 获赞数:1586
虚拟现实(VR/AR)以及游戏相关技术,物联网以及传感器技术

向TA提问 私信TA
展开全部

15,

#define NUM (M+1)*M/2

这个宏展开为

(N+1)*N+1/2

这就是为啥结果是B


16,

char s[ ]="Hello";
char *p=s ; 
执行完上面程序段后,*(p+5) 的值为 ( ) 。  
    A、'o'
    B、'\0' //正确答案
    C、'o' 的地址
   D、不确定的值

 p是指向字符串开头,p+1就指向第二个字符"e",一次类推,p+5指向结束位了

15,p+=2,指针指向第三个元素

*(p++)先取指针内容后做自加,所以答案是A


*(p++)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逐梦兮乐
2013-06-23 · TA获得超过6431个赞
知道大有可为答主
回答量:5151
采纳率:72%
帮助的人:1868万
展开全部
第一题12345678
选B
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式