请教C语言二级习题!

作者&投稿:保风 (若有异议请与网页底部的电邮联系)
请教~C语言二级习题~

第一题:我不知道什么是希尔排序法;

第二题:&是按位与操作;052是八进制
换算成二进制后 a=11011110 ,052=00101010;所以 结果是10(十进制的)

第三题:static的问题。用了static的变量,其值不会随着函数的结束而消失,会被保存,所以,3次调用fun的时候c的值分别为3,2,1。所以导致答案的结果。

看来你的语法知识还不过关啊,从头再好好认真补习下吧.
举例7题:"abc"是 字符串类型,不能传给 字符类型 形参,32对应的字符是' ',空字符。

第一题:
这个题主要考察共用体。main()函数体的第一行用union关键字定义了一个共用体结构,共用体结构的特点是
1、共用体变量所占的内存长度等于最长的共用体成员的长度;在这个共用体中最长的成员是结构体成员in,它占有两个int型的内存长度,a和b都只占有一个int型的内存长度,所有共用体变量e占有的内存是两个int型的内存长度。
2、共用体的成员都是从同一个内存地址开始存放。也就是说e.a,e.b,e.in.x都是占用的第一个int型的内存空间,e.in.y则占用第二个int型的内存空间;内存空间值的修改总是覆盖的!
这道题主要涉及这两点,下面逐条显示e的两个int型的内存空间值的变化:
e.a=1 //1,y
e.b=2 //2,y
e.int.x=e.a*e.b; //4,y
e.int.y=e.a+e.b; //4,8

第二题:
这个题主要考察对break和continue的理解。break是跳出当层循环,在此题中,只有一层循环即for循环,所以一旦遇到break,就会结束for循环;continue是跳出当次循环,此题中,遇到continue就会执行a++,然后判断a<=100,看是否循环继续。我把每次循环a,b的值写下来,你再思考一下。
a=1,b=1:第一个if不运行,第二个if运行,b=4,continue
a=2,b=4:第一个if不运行,第二个if运行,b=4,continue
//循环几次后,你发现只要b < 20,总是进第二个if的
a=3,b=7
a=4,b=10
a=5,b=13
a=6,b=16
a=7,b=19
a=8,b=21:第一个if运行,退出程序
这个题应该是要输出一共循环多少次吧?就是a的值。
在这个题中,b-=5是永远不会运行的!

第三题:
这个题主要考察static。用static申明的变量缺省状态下被初始化为0。如:
int b[8][8]; //没有初始化
static int a[8][8]; //所有单元均被初始化为0
这样,在第三个for循环里,你会发现虽然i被重置为0,但是j的值此时为3,所以x累加的其实是a[0...7][3]的值,而这些内存单元在函数中并没有被修改,仍为0.

第四题:
这个题你是不是抄错了。。。

第一题:
在共用体中,后一次赋值总是覆盖前一次的赋值即共用体中只保留最后一次赋值,这我想你该懂吧。
在e.a=1;e.b=2;中,e.b=2的值覆盖e.a=1的值,即e.a=2,所以e.in.x=e.a*e.b=2*2=4;而此后e.in.x=4的值有覆盖了e.b与e.a,即e.a==e.b==4,所以e.in.y=e.a+e.b=4+4=8.
你可能会问最后的输出为何是4,8而不是8,8,即e.in.y的值为何没有覆盖e.in.x的值,那时因为e.in.y与e.in.x都为结构体元素。

第二题:
你代码有误,没有输出,而且格式也有错误,你少了个大括号“}”,不知道“}”是在语句b-=5的前面还是后面,这关系到此语句能不能执行的问题。

第三题:
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=2*i+j;
语句只对部分元素赋值,即只对0-2行和0-2列赋值,其他未赋值的元素值为0,而且执行完这部分循环语句后j=3,
你仔细看看分析分析这个语句
for(i=0;i<8;i++)
x+=a[i][j];
其中的j其实是个定值3,即求a[i][3]的值,也即求i行第三列的值的和,而第三列的值始终为0所以求完和后x=0

第四题:
抱歉,暂没搞懂,运行起来结果确实是3,就是不知这3从何而来。

第一题.因为你用的union。这是一种数据格式,它可以存储不同的数据类型,但是他在某个时刻只能存储其中的一种,
比如
union abc
{
int a;
double b;
char c;
}temp;
在某个时刻temp只能是int,double,char中的某一种。它最大的一个特点是:union里的所有数据类型共用一个地址。
所以在你的题目中
e.a、e.b、e.in.x、e.a*e.b共用的是一个地址。那么不难得到正确答案。

第二题,关键是你对continue的理解。
continue是指本次循环结束,直接执行a++,然后进行下一次循环。不会走到b-=5; 。

第三题,用了static。你的数组会被初始赋值0。后面所做的所有操作没有意义,因为你加的时候,j=3(j此时是有值的)。而这列你没有对他赋值,所以全是0.所以最后结果是0.

第四题,把我给弄郁闷了。。你只有去问其他人了。我解释不了,没有返回值的函数,默认返回什么。。。。

第一题是考联合体,实际上e.a和e.b和e.in.x所占的内存是同一块,也就是说是同一个变量。所以e.in.x=e.a*e.b;这一句实际上是e.in.x=2*2。理解了这里,后面一句就简单了,就是e.in.y=4+4 。

第二题我不知道你要求的是什么,而且题目也不对,少了个 } 。

第三个是因为初始的static int a[8][8] 是全0矩阵,求x的时候,j 已经固定等于3了,而这一列还没有赋值,仍然是全0,所以求和之后还是0 。

第四个题目也不对,因为fun(a,10)计算出来是没有返回值的,这是个错误的程序,执行的结果无法预料。

第一题可以看下我对这个问题的回答:
http://zhidao.baidu.com/question/89892573.html

请教C语言二级习题!
答:2、共用体的成员都是从同一个内存地址开始存放。也就是说e.a,e.b,e.in.x都是占用的第一个int型的内存空间,e.in.y则占用第二个int型的内存空间;内存空间值的修改总是覆盖的!这道题主要涉及这两点,下面逐条显示e的两个int型的内存空间值的变化:e.a=1 //1,y e.b=2 //2,y...

请教一道二级C语言题
答:a?b:c运算法则是如果a为真,则取值b;如果a为假,则取值c

请教C语言二级习题
答:第一题:就是只要碰到3的倍数就将i加1,然后将i的值加到s上 而i<11,则i=0,3,6,9此时s=(0+1)+(3+1)+(6+1)+(9+1)=1+4+7+10=22 第二题:char 只占一个字节(8位) ,而0xddff需要二个字节(16位).所以将0xddff赋值到x上就会丢失高位一个字节。所以x的值只有ff,而ff=(...

请教4道计算机2级C语言题。
答:e和2之间有空格 3.若变量已经正确定义并赋值,符合C语言语法的表达式是 A:a=a+7 B:a=7+b+c,a++ 第3题的题目课本上A选项是a=a+7;有;号在C语言中叫做语句,所以选B

请教C语言二级习题
答:1.就是简单的位操作,你把3和4都写成2进制形式然后按位与或就是了。2.int x=0.5会发生强制类型转换,x实际=0;3.同1,把数字写成2进制自己按位异或,异或是相同为0,不同为1.4.这个题目的本意就是利用strcmp找出3个字符串里最小的,你输入的3个字符串前两个字母相同,那就比较第三个呗...

(C语言) 请教一道简单的2级题
答:因此在s数组里面有多少个重复的值,就会在c数组对应的索引位置元素++多少次。s数组有4个1.因此c[1]++执行了4次;最初c[1]=0;执行后c[1]=4;s数组有3个2,因此c[2]执行3次,c[2]=3;s数组有3个3,因此c[2]执行3次,c[3]=3;s数组有2个4,因此c[2]执行3次,c[4]=2;...

各位盆友,请教一个二级C语言的程序题,求下列程序运行的结果,急。_百度...
答:输出:6 原因:a[2] = 3,那么进入sum函数后,a[0]就相当于main里面的a[2],a[-1]就相当于main里面的a[1]=2,a[1]就相当于main里面的a[3]=4,所以sum里面的a[-1]+a[1]=6,因此退出sum函数后,a[2]=6

二级c语言题目请教
答:This_送给数组a,is_送给数组b,这里的“_”代表你输入的空格键,表示输入字符结束,gets(c)是输入一串字符,输入的字符是_a_cat!当你按enter键时结束,所以答案是对的,你也可以上机试试啊

请教二级C语言的问题。。。
答:printf(“Enter scores:”);scanf(“%d”,&mark);while(mark>=0){ if(mark>=90) a++;else if(mark>=60) p++;if(mark>0) f++;scanf("%d”,&mark); } // 这个输入是在循环里面的输入。也就是说第二次,第三次。一直到第 N 次知道你输入的是负数结束的输入都是这个输入...

请教一道二级C语言题
答:在fun中, s先申请了内存, 赋值,释放。 所以改变的*s值, 是分配释放的空间。而改变s, 是改变形参, 并不影响实参。所以, 经过fun调用, 对于主函数中q和*q都没有任何影响。于是输出的还是a[0] 也就是1.选C。