关于二级C语言公共基础知识的几道题~~~急~~~~!!

在做二级C语言的那个南开100题~第一套就有好几道不会的~~因为是自学又是刚学的~~所以希望大家帮忙解答时能说的详细些通俗些~~~先谢谢了~~~
1)main()
{
unsigned a=32768;int b;
b=a;
printf("b=%d\n",b);
} 程序执行后的输出结果是:
A)b=32768 B)b=32767 C)b=-32768 D)b=-1
PS:这道题我看到书上是有类似的 说什么b的范围是-32768~32767 具体解释没看太懂

2)void main()
{
int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);
} 执行后的输出的结果是:
A.2 B.3 C.4 D.编译时有错,无结果
PS:这道题第一个if成立,不就应该输出d的值么?后面两个else if和else不就不用执行了么?怎么会选B呢?

3)void main()
{
int x,i;
for(i=1;i<=100;i++)
{
x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
printf("%d",x);
}
} 程序的输出结果是:
A.39 81 B.42 84 C.26 68 D.28 70
PS:这道题的那个if(++x%2==0)是先算++还是先算%?应该是先算%的吧?可是先算%之后那个++还有什么用?还用算么?

4)void main()
{
char *s[]={"man","woman","both"},*p;
p=s[1];
printf("%s,%c\n",*(p+1),s[0]);
} 执行后输出结果是:
A.a,woman B.w,man C.o,man D.程序报错
PS:程序怎么会报错呢?哪里编辑错了?

5)fun(char *s1,char *s2)
{
int i=0;
while(s1[i]==s2[i]&&s2[i]!='\0')i++;
return(s1[i]=='\0'&&s2[i]=='\0');
} 此函数的功能是:
A.将s2所指字符串赋给s1
B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值喂1,否则函数值为0
C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0
D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0
PS:我怎么觉得应该选C呢?s1[i]与s2[i]比较不就是比较两个串中相同下标的元素是否相同么?

6)typedef struct ST
{ long a;int b;char c[2];}NEW;
则下面叙述中正确的的是:
A.以上的说明形式非法 B.ST是一个结构体类型
C.NEW是一个结构体类型 D.NEW是一个结构体变量
PS:书上不是写struct ST是一个结构体类型么?答案不应该是B么?为什么是C呢?

7)void main()
{
int a=1,b;
for(b=1;b<=10;b++)
{
if(a>=8)break;
if(a%3!=1){a+=5;continue;}
a+=3;
}
printf("%d\n",b);
} 程序运行后的输出结果是:
A.3 B.4 C.5 D.6
PS:这道题的过程应该怎么读?

7)
#include<stdlib.h>
main()
{
char *p,*q;
p=(char*)malloc(sizeof(char)*20);q=p;
scanf("%s %s",p,q); printf("%s %s\n",p,q);
} 若从键盘输入:abc def<回车>,则输出结果是:
A.def def B.abc def C.def d D.d d
PS:关于那个malloc我在书上看的是按字节数分配内存空间,返回空间起始地址,在这程序里又什么用?还是不太明白。

就这几道题~请大家帮帮忙吧~~~马上就考级了~~这公共基础知识还不太会了~~着急啊~~~大家当初这公共基础知识都怎么复习的~~~

第一题 选D

每种数据类型都有存储范围的,你想象成一个瓶子吧,
这个瓶子只能存10个数,你如果给了11个数就会溢出

第二题 选B

第一个a>b>c其实是一个表达式,是需要顺序计算的,
先计算a>b,因为为真,所以结果为1,接着计算1>c
结果就不用我说了吧,下面的也是类似的

第三题 选D

单目运算符优先级最高,也就是说先计算++,这是一个连着的if
判断,也就是说求的是这么一个i,这个i加1后能被2整除,再加1后
能被3整除,再加1后能被7整除,所以结果i是25和77,x最后等于28和70

第四题 选D

*(p+1)指向的是一个char,不能用%s打印的,这个题我是这样理解的,
不知道对不对

第五题 选C

我觉得就是选C啊

第六题 选C

我觉得他要考的意思是struct ST才是一个结构体类型,ST不是,反正NEW肯定是了

第七题 选B
顺着来就是,首先开始a=1,第一次循环后a=4,b=1 第二次循环a=7,b=2
第三次循环a=10,b=3,第四次 因为a>8,退出循环,b=4,打印b=3

第八题 选A

这里也是分配空间,p和q指向同一个空间,scanf首先给p赋值abc,又给
q赋值def,但p和q指向同一个地址,把abc给覆盖了,所以p也为def

以上是我自己的理解,不知道对不对,同样期待高手
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-05
第一题A unsigned 和 int都是4字节32768没有溢出
第二题B if(a>b>c) 是if((a>b)>c)如果 a>b为真就是1,然后1再和c比较,不成立,所以会执行下面的,不会是2
第三题D if(++x%2==0) 等价于:if(((++x)%2)==0) 其他一样
第四题D 指针访问出错
第五题C 这个就是比较字符串的写法
第六题C struct ST 两个才能表示类型,NEW一个就可以表示类型
第七题B
void main()
{
int a=1,b;
for(b=1;b<=10;b++)
{
if(a>=8)break;//如果a>=8跳出循环
if(a%3!=1){a+=5;continue;}//如果a对3取模,不等于1,a=a+5,继续下面的。
a+=3;//a=a+3
}
printf("%d\n",b);//输出b

第八题A
char *p,*q;表示将p,q定义为指向字符串的指针
malloc(sizeof(char)*20); 分配20个char类型大小(20字节)的空间,并返回一个void*类型的指针指向这段内存区域的开始地址
p=(char *)malloc(sizeof(char)*20); 表示先将void*类型转换为char* 类型,既p的类型,再将p指向这段内存区域的开始地址
q=p:将q也指向这段内存的开始地址
开始的地址相同,后者输入将前者覆盖,所以输出一样
第2个回答  2009-08-05
1)main()
{
unsigned a=32768;int b;
b=a;
printf("b=%d\n",b);
} 程序执行后的输出结果是:
A)b=32768 B)b=32767 C)b=-32768 D)b=-1
PS:这道题我看到书上是有类似的 说什么b的范围是-32768~32767 具体解释没看太懂
-----说实话我现在觉得,原来哥们我在大学考这个东西真后悔,题目本身就是个垃圾题。破答案给的是 -1 ,靠它。不知道谁出的。现在工作了真后悔考那东西。不过我还是给你讲讲。兄弟你要多上机练习啊 ,光看那个破玩意,一点用都没有。
这个题目在TC环境下,确实是-1,因为在TC中一个int 占用2个字节,所以它的范围是+/-2^15,即是-32768~32767,但是它在VC++6.0中,int 是占用4个字节,肯定是不会溢出,答案是32768。两个答案你自己选哈哈

2)void main()
{
int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1)
printf("%d\n",d+1);
else
printf("%d\n",d+2);
} 执行后的输出的结果是:
A.2 B.3 C.4 D.编译时有错,无结果
PS:这道题第一个if成立,不就应该输出d的值么?后面两个else if和else不就不用执行了么?怎么会选B呢?
//------------
if(a>b>c) //仔细看这个表达式a>b为真,结果为1。 1>c,为假结果为0,肯定不会进第一个if 哈哈

3)void main()
{
int x,i;
for(i=1;i<=100;i++)
{
x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
printf("%d",x);
}
} 程序的输出结果是:
A.39 81 B.42 84 C.26 68 D.28 70
PS:这道题的那个if(++x%2==0)是先算++还是先算%?应该是先算%的吧?可是先算%之后那个++还有什么用?还用算么?

//------------------
先看看C语言后面的运算符优先级嘛,++的优先级肯定比 % 要高,且++x,++在变量前,先会执行++ ,在做% 运算
4)void main()
{
char *s[]={"man","woman","both"},*p;
p=s[1];
printf("%s,%c\n",*(p+1),s[0]);
} 执行后输出结果是:
A.a,woman B.w,man C.o,man D.程序报错
PS:程序怎么会报错呢?哪里编辑错了?

//--------------
printf("%s,%c\n",*(p+1),s[0]);
*(p+1) 表示的是一个字符,却用%s来输出
S[0]标示的是一个字符串,却用%c来输出,不对吧

5)fun(char *s1,char *s2)
{
int i=0;
while(s1[i]==s2[i]&&s2[i]!='\0')i++;
return(s1[i]=='\0'&&s2[i]=='\0');
} 此函数的功能是:
A.将s2所指字符串赋给s1
B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值喂1,否则函数值为0
C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0
D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0
PS:我怎么觉得应该选C呢?s1[i]与s2[i]比较不就是比较两个串中相同下标的元素是否相同么?
//个人认为你是对的。

6)typedef struct ST
{ long a;int b;char c[2];}NEW;
则下面叙述中正确的的是:
A.以上的说明形式非法 B.ST是一个结构体类型
C.NEW是一个结构体类型 D.NEW是一个结构体变量
PS:书上不是写struct ST是一个结构体类型么?答案不应该是B么?为什么是C呢?
//看看结构体那章喽 struct ST才是一个结构体类型 =》NEW

7)void main()
{
int a=1,b;
for(b=1;b<=10;b++)
{
if(a>=8)break;
if(a%3!=1){a+=5;continue;}
a+=3;
}
printf("%d\n",b);
} 程序运行后的输出结果是:
A.3 B.4 C.5 D.6
PS:这道题的过程应该怎么读?
//-----------------------
1.a = 1; b= 1;
2.a = 4; b = 2;
3 a = 7; b= 3;
4 a = 10; b = 4;
7)
#include<stdlib.h>
main()
{
char *p,*q;
p=(char*)malloc(sizeof(char)*20);q=p;
scanf("%s %s",p,q); printf("%s %s\n",p,q);
} 若从键盘输入:abc def<回车>,则输出结果是:
A.def def B.abc def C.def d D.d d
PS:关于那个malloc我在书上看的是按字节数分配内存空间,返回空间起始地址,在这程序里又什么用?还是不太明白。
//--------------------------------------
A ,p=(char*)malloc(sizeof(char)*20);//p,q 都指向一块20个字节大小的内存就相当于一个20个字节的数组了,它是用来保存数组的,要不然你的数据放哪里
第3个回答  2009-08-05
1) 选C,int类型的范围-32768——32767,unsigned类型范围在0——65535
题中a=b,a=32768 b溢出,所以b=-32768
2)哈,觉得题目有问题,要不就是我学的有问题
3)应该是先++ ,后%即求余。
5)应该选D吧,不确定,指针学的不好
7)通过a的运算,控制b输出,a=1,执行a+=3,a=4,b=2,然后a=4%3=1执行a+=5,a=9.b=3.再然后a=9>8,break 输出b
第4个回答  2009-08-05
第一题是计算机中最大的数就是32767 结果超出最大的表示范围了
第5个回答  2009-08-05
第一题选a
相似回答