几道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 展开
#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 展开
3个回答
展开全部
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,再等价于(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 · 知道合伙人互联网行家
关注
展开全部
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++)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一题12345678
选B
选B
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询