`
cppblogs
  • 浏览: 3006 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

二级C试题

    博客分类:
  • C
阅读更多

有以下程序段:
main(){int a=5,*b,**c;c=&b;b=&a;…}
程序在执行了c=&b;b=&a;语句后,表达式**c的值是__C_。
A)变量a的地址        B)变量b中的值       
C)变量a中的值        D)变量b的地址
二级指针c的内存单元里放的是一级指针b的地址,而b里面又放的是变量a的地址。
*c就等价于指针变量b,**c就等价于*b,而*b就是变量a,所以**c的值就是变量a的值!

main() {int a[5]={2,4,6,8,10},*p,**k; p=a;k=&p;printf("%d“,*(p++));
printf("%d\n“,**k);
}
p=a就是指针p指向a的首地址。a的首地址就是&a[0],a[0]='2'
所以printf("%d",*(p++));输出是2。执行完后p自加1。
之后p就指向了a[1]了,也就是4了。
k是指向指针的指针。可以这样理解
k->p;p->a[1];那么*k就是p的值了,p的值就是&a[1](因为p执行a[1]),
那么**k就是*(p),也就是打印出4了

 

若有定义语句:int k[2][3], *pk[3]; 则以下语句中正确的是( )
A. pk=k   B. pk[0]=&k[1][2]   C. pk-=k[0]   D. pk[1]=k
正确答案:B
答案 B
解析 : *pk[3] 表示的是一个共有 3 个元素的一维指针数组 。 pk[0]=&k=[1][2] 表示把二维数组中下标为k[1][2]的值赋予 pk[0], 也就是 pk[0] 指向 k[1][2] 这个元素。

其他选项错误分析:

pk[1]是指向int的指针,而k不是int的指针或地址. 所以pk[1]=k;不正确

作为数组名的k,它可以视为它的第一个元素的地址,即 &k[0]。遗憾的是,k[0]并不是int型,所以&k[0](即k)不能被赋给pk[1]. 而k[1][2]是int型,所以pk[0]=&k[1][2]是正确的。

k[0]不是int型,而是3个int构成的一维数组!!!

注意:k的第一个元素是k[0],不是k[0][0]


C语言规定,在一个C程序中,MAIN()函数的位置
A必须在系统调用的库函数之后 B必须在程序的开始 C必须在程序的最后 D可以在任意位置
放在前后都可以
函数的使用分为声明和定义
1.如果函数在主函数后面定义,则要在调用前声明。
2.如果函数在主函数之前定义,则调用前不用再此声明,直接用就可以。
注:函数的定义指的是有函数体,即指定了函数的功能,函数的声明是不用写出函数体的
例如:int max(int int);它是声明
int max(int a,int b);它是定义
{
   a>b?a:b;
}

C语言,什么是函数首部?
函数首部由:返回类型,函数名,函数参数组成


若有定义:int w[3][5];这一下不能正确表示该数组元素的表达式是()
A *(*w+3)        B  *(w+1)[4]  C   *(*w+1)   D  *(&w[0][0]+1)
答案是:B  *(w+1)[4]

A *(*w+3)        
    这个表示w[0][3];

B  *(w+1)[4]  
    正确的写法(*w+1)[4],表示w[1][4];

C   *(*w+1) 
    这个表示w[0][1];

 D  *(&w[0][0]+1)

    这个表示w[0][1];



C语言规定,在一个源程序中,main函数的位置( )。

  a. 必须在最开始  
  b. 必须在系统调用的库函数的后面  
  c. 可以任意  
  d. 必须在最后

#include <stdio.h>

void main ()
{
    int i;
    i=(int)sqrt(4);
    printf("%d\n",i);
}
#include<math.h>


使用三种基本结构构成的程序只能解决简单问题?
 基本上所有程序都是由这三种基本结构 顺序 分支 循环组成的,不管问题的简单或难,都是可以解决的


以下叙述中错误的是
(A)C语句必须以分号结束
(B)复合语句在语法上被看做一条语句
(C)空语句出现在任何位置上都不会影响程序运行
(D)赋值表达式末尾加分号就构成赋值语句
C。
因为语句一定是分号结尾的,空语句的位置也会影响程序。

如:for(;;)和for(;;;)






C语言算法必须要有输入和输出吗?

以下说法正确的是( )
A)用c语言实现的算法必须要有输入和输出操作
B)用c语言实现的算法可以没有输出但是必须要用输入
C)用c语言实现的算法可以没有输入但是必须要用输出
D)用c语言实现的算法可以既没有输入也没有输出
C语言算法可以有零个或多个输入,至少1个或多个输出,这是官方说法,答案选C。
也就是说没有输入没有问题,但是必须要有输出来结束程序。



下列叙述正确的是___(5)____。
(A)程序设计就是编制程序             (B)程序的测试必须由程序员自己去完成
(C)程序经调试改错后还应进行再测试   (D) 程序经调试改错后不必进行再测试
C

下列选项中不属于结构化程序设计原则的是()A可封装B自顶向下 C模块化 D逐步求精
答案为A,可封装
分析:
结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句。

    1.自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。

    2.逐步求精:对复杂问题,应设计一些子目标作为过渡,逐步细化。

    3.模块化:一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。

    4.限制使用goto语句

      结构化程序设计方法的起源来自对GOTO语句的认识和争论。肯定的结论是,在块和进程的非正常出口处往往需要用GOTO语句,使用GOTO语句会使程序执行效率较高;在合成程序目标时,GOTO语句往往是有用的,如返回语句用GOTO。否定的结论是,GOTO语句是有害的,是造成程序混乱的祸根,程序的质量与GOTO语句的数量呈反比,应该在所有高级程序设计语言中取消GOTO语句。取消GOTO语句后,程序易于理解、易于排错、容易维护,容易进行正确性证明。作为争论的结论,1974年Knuth发表了令人信服的总结,并证实了:

    (1)GOTO语句确实有害,应当尽量避免;

    (2)完全避免使用GOTO语句也并非是个明智的方法,有些地方使用GOTO语句,会使程序流程更清楚、效率更高。

    (3)争论的焦点不应该放在是否取消GOTO语句上,而应该放在用什么样的程序结构上。其中最关键的是,应在以提高程序清晰性为目标的结构化方法中限制使用GOTO语句。

下述标识符中,()是合法的用户标识符。 A: A#C B: getch C: void D: ab* ()是非法的C语言主义字符 A: ’\b’ B: ’\0xf’ C: ’\037’ D: ’\”
第一个空填(B),A和D的答案中含有不恰当的字符#和*。C选项的void是关键字。
getch虽然是库函数,但不是关键字,做用户标识符没有问题。

第二个空选择(B),‘\b'表示退格,'\037’表示单元分隔符,‘\''表示单引号
'\0xf'不对,如果是'\f'则是正确的转义字符。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics