C语言 高级语言程序设计期末复习题

C程序设计期末复习

第一章程第二章

算法的五个特性?

1、有穷性:算法的有穷性是指算法必须能在执行有限个步骤之后终止

2、确切性:算法的每一步骤必须有确切的定义;

3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;

4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;

5、可行性:算法中执行的任何计算步都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成。

1、程序流程图中的带有箭头的线段表示的是( ) 。

A. 图元关系

B. 数据流

C. 控制流

D. 调用关系

答案:C

2、结构化程序设计的基本原则不包括( )。

A. 多态性

B. 自顶向下

C. 模块化

D. 逐步求精

答案: A

基本原则:自顶向下,逐步细化,模块化设计,结构化编码

第三章简单程序设计

•书写格式:分号结束、注释

•标识符1)对变量、函数、数组等命名的有效字符

2)命名规则:只能由字母数字下划线组成,且第一个字符必须为字母或下划线

•整型常量:包括十进制整数、八进制整数【以0开头eg0123=十进制83】、十六进制整数【以0x开头的数字0x123=十进制291】  103L, 256U

•实型常量:默认double包括十进制小数形式、指数形式   1.25f   1.25e-2f   1.25L (louble double)

•字符常量 1、普通字符:eg‘a’,‘1’,‘#’(字符常量:只能是一个字符)

                 2、转义字符:eg’\t’

•字符串常量

•符号常量  #define

•变量:强制类型转换、自动类型转换

•注意数据的溢出问题

•各种运算符:优先级与结合性

•自增自减运算符

•算术运算、关系运算、逻辑运算优先级

•数据类型的自动转化:

1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。

2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。

     a.若两种类型的字节数不同,转换成字节数高的类型

     b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型

3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。

4)char型和short型参与运算时,必须先转换成int型。

5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。

•&&   || 短路现象

1、以下合法的字符常量是( )。

A. '\109'

B. '\x64a'

C. '\t'

D. 'ab'

答案: C

2、以下选项中不合法的整型常量是( )。

A. -012

B. 8E2.5

C. 123L

D. 0x35

答案:B

解析:以e或E表示以十为底的指数,特别的e或E前必须有数字,其后必须为整数

3、若已定义x和y为double型,变量,则表达式x=1,y=x+3/2的值是( )

答案: 2.0

4、下面程序的输出结果是( )。

int a;printf("%d\n",(a=3*5,a*4,a+5));

答案:20

解:逗号表达式结果取最后一个表达式

5、已知int x=5,y=5,z=5;则执行语句x%=y+z;后,x的值是

答案:5

解:x=x%(y+z)

6、C语言中,数字029是一个( )。

A. 十进制数

B. 八进制数

C. 十六进制数

D. 不合法

答案:D

解:八进制数,每位上的数只能为0~7

7、代数式2lnxcosx/3x,则正确的C语言表达式是( )。

A. 2*ln(x)*cos(x)/3*x

B. 2*ln(x)*cos(x)/(3*x)

C. 2*log(x)*cos(x)/3*x

D. 2*log(x)*cos(x)/(3*x)

答案:D

8、对于数据类型的自动转换,正确的说法是( )。

A. 字符型与单精度实型进行运算时都转换为双精度实型

B. 字符型与字符型进行转换时不进行转换

C. 整型与字符型进行运算时根据字符的ASCII码值来决定是否进行类型转换

D. 单精度实型之间进行运算时不进行转换。

答案:A

9、下列程序的输出结果是____。

#include <stdio.h>

void main()

{int a,b=322;

float x,y=8.88;

char c1='k',c2;

a=y;

x=b;

a=c1;

c2=b;

printf("%d,%f,%d,%c",a,x,a,c2);}

答案:107,322.000000,107,B

10、下列程序的输出结果是____。

#include <stdio.h>

void main()

{

int i=8;

printf("%d\n",++i);

printf("%d\n",--i);

printf("%d\n",i++);

printf("%d\n",i--);

printf("%d\n",-i++);

printf("%d\n",-i--);

}

答案:9 8 8 9 -8 -9

11、设 int x=1,y=1; 表达式(!x||y--)的值

答案:1

解析:短路

12、以下哪个直接量是十进制的124?

A.0124   B.0x124   C.124d   D.0174

答案:D

解:C语言无d这种后缀

13、以下代码的输出是

int x=0,y=0,z=0;

z =(x==1)&&(y=2);printf("%d ", y);

答案:0

14、对于以下代码

int i

scanf("%d",&i);

i %= 4;执行后,i会有几种可能性?

答案:7

解:①能被整除:即余数为 0 时,即 i = 0;

②不能被整除:即余数为位于区间 ( - 4 , 0 ) U ( 0 , 4 ) 的整型数,则 i={ - 3,- 2,- 1,1,2,3 } 。

第四章选择结构程序设计

1)If else配对问题

2)switch break

3)循环体内的break、continue

1、

#include <stdio.h>

void main(){

int a=1,b=2,c=3;

if(c=a) printf("%d\n",c);

else printf("%d\n",b);}

答案:1

解:注意是赋值还是判断

2、#include <stdio.h>

void main()

{char  c1,c2,c3,c4,c5,c6;

scanf("%c%c%c%c",&c1,&c2,&c3,&c4);

c5=getchar(); c6=getchar();

putchar(c1); putchar(c2);

printf("%c%c\n",c5,c6);

}

程序运行后,若从键盘输入

(从第一列开始)

123↙

45678↙

则运行结果是       

答案:1245

3、下面程序的运行结果是____。

#include <stdio.h>

void main( )

{

int a=1,b=2,c=2;

switch(a)

{ case 1:switch(b)

              {

               case 1: printf ("@" ); break;

               case 2: printf("!" ); break;

             }

case 0: switch(c)

         {

           case 0: printf("*"); break;

          case 1: printf("#"); break;

          case 2: printf("$"); break;

             }

default : printf(" &");

}

printf(" \n ");

}

答案:!$&

4、对于以下代码int i=6if(i<= 6 )

printf("hello\n");;

else

printf("bye-bye\n");哪句话是对的?

A.打印出"hello bye-bye

B.打印出"bye-bye'

C.不能通过编译

D.打印出"hello"

else未能找到配对的if

第五章循环

求素数、穷举法、取各位数字、数学公式

1、设有int i=0;对以下语句描述正确的是______。

while( i =1 )

{ …… }

A. 循环条件表达式的值为0

B. 循环条件表达式的值为1

C. 循环条件表达式不合法

D. 以上说法都不对

答案: B

2、以下程序的运行结果是______。

#include <stdio.h>

void main( )

{int x=20;

do

{printf("%d\n", x--);

} while(!x) ;

}

A. 20

B. 19

C. 不打印任何内容

D. 陷入死循环

答案: A

解:!表示取反

3、当从键盘上输入question? 下面程序的运行结果是____。

#include <stdio.h>

void main( )

{while( putchar(getchar( )) != '? ') ;

}

答案:question?

解:先输出后判断

4、在代码while (!e )中,!e等价于

答案:e == 0

第六章数组

•越界问题

•初始化

•字符串的操作:比较、赋值、求长度、连接、结束标记

•求最大值、最小值及其位置。

•折半查找

•冒泡排序

•插入有序数组

•二维数组、转置

第七章函数

1、)以下叙述中不正确的是()。

A.一个函数中可以有多个return语句

B.函数通过return语句传回函数值

C.主函数可以有形参

D.调用函数须独立语句完成

答案: D

解析: 选项A是正确的,函数中可以有多条return 语句,例如在分支结构中,可以从不同的分支返回到主调函数.

选项D是错误的,C语言中,调用函数方式3种:一是函数调用作为一条独立的语句,二是函数作为表达式的一项,出现在表达式中,以函数返回值参与表达式的运算。三是函数作为另一个函数调用的实际参数出现。故答案选D。

2、以下叙述中不正确的是( ).

A.在不同的函数中可以使用相同名字的变量

B.函数中的形式参数是局部变量

C.在一个函数内定义的变量只在本函数范围内有效

D.在一个函数内的复合语句中定义的变量在本函数范围内有效

我的答案: C正确答案: D

答案解析:在一个函数或复合语句定义的变量,称为局部变量。局部变量仅在定义它的函数或复合语句内有效。函数的形参也是局部变量。

不同函数或者并列复合语句各自定义的同名变量互不干扰。故答案选D。

第八章指针

•简单指针

•数组与指针

•字符串与指针  结束标记

•二维数组与指针

1、假如有语句char * s1 = “abc”; char s2[] = “xyz”; 下列_____

语句是错误的。

  A *s1++;    B *s2++;    C *(s1 + 1);   D *(s2 + 1);

答案:B

2、分析下面程序的运行结果

int  a[3] [3]={10,9,8,7,6,5,4,3,2};

int  *pa[3]={a[0],a[1],a[2]};

int  *p=a[0];

main ( ) {

  int  i;

  for (i = 0 ; i<3 ; i++)

    printf("%d\t%d\t%d\n", *a[i], *(*(pa+i)) , p [i]) ;

}

10      10      10

7       7       9

4       4       8

第九章结构体

定义方法

结构体与指针

例:

设有如下定义:struct jan{int a;float b;}c2,*p;若有p=&c2;则对c2中的成员a的正确引用是

A、(*p) c2 a    B、(*p).a     C、p->c2.a     D、p.c2.a

答案:B

解:三种方式

c2.a

(*p).a

p->a

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值