C语言程序设计-苏惠香(71170282-01) - 中国大学mooc
您已经看过
[清空]
    fa-home|fa-star-o

    image.png

    当前位置:超星尔雅通识课题库答案>其他课程>C语言程序设计-苏惠香(71170282-01) - 中国大学mooc

    C语言程序设计-苏惠香(71170282-01) - 中国大学mooc

    其他课程erya2021-04-07 21:511340A+A-

    网课查题公众号

    第1 周 程序设计与C语言简介

    1.1 程序设计基础随堂测验

    1、计算机只能处理由人们编写的、解决某些问题的、事先存储在计算机存储器中的二进制指令序列。



    第1周单元测验

    1、通常把高级语言源程序翻译成目标程序的程序称为( )。
        A、编辑程序
        B、解释程序
        C、汇编程序
        D、编译程序



    2、一个算法应该具有"确定性"等5个特性,下面对另外4个特性的描述中错误的是()。
        A、有零个或多个输出
        B、有穷性
        C、有零个或多个输入
        D、可行性



    3、结构化程序由三种基本结构组成,三种基本结构组成的算法,( )。
        A、只能完成一些简单的任务
        B、只能完成符合结构化的任务
        C、可以完成任何复杂的任务
        D、只能完成部分复杂的任务



    4、C语言规定,在一个源程序中,main函数的位置()。
        A、必须在系统调用的库函数的后面
        B、必须在最后
        C、可以任意
        D、必须在最开始



    5、以下叙述正确的是()。
        A、在对一个C程序进行编译的过程中,可发现注释中的拼写错误
        B、在C程序中,main函数必须位于程序的最前面
        C、C语言本身没有输入输出语句
        D、C程序的每行中只能写一条语句



    6、一个C程序的执行是从()。
        A、本程序的main函数开始,到main函数结束
        B、本程序文件的第一个函数开始,到本程序main函数结束
        C、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
        D、本程序的main函数开始,到本程序文件的最后一个函数结束



    7、以下叙述中正确的是 ()。
        A、花括号"{"和"}"只能作为函数体的定界符
        B、构成C程序的基本单位是函数,所有函数名都可以由用户命名
        C、分号是C语句之间的分隔符,不是语句的一部分
        D、C程序中注释部分可以出现在程序中任意合适的地方



    8、以下叙述正确的是( )。
        A、C语言允许直接访问物理地址,可以直接对硬件进行操作
        B、C语言程序不用编译,即可被计算机识别运行
        C、C语言不允许直接访问物理地址,不可以直接对硬件进行操作
        D、C语言程序只需编译,不需连接即可被计算机运行



    9、下面不是算法特征的是( )。
        A、继承性
        B、有穷性
        C、确定性
        D、可行性



    10、关于C语言,下面叙述不正确的是()。
        A、既具有高级语言的特点,又具有汇编语言的特点
        B、既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序
        C、语法限制不太严格,例如,对数组下标越界不作检查
        D、不用编译可以直接运行



    11、下面选项()不属于结构化程序设计原则。
        A、自顶向下
        B、逐步求精
        C、程序模块化
        D、不限制GOTO语句使用



    12、下面选项中,( )不属于程序的特性。
        A、目的性
        B、有序性
        C、有限性
        D、可操作性
        E、实用性



    13、计算机只能完成其能力范围内的计算工作,超出计算机能力范围的计算计算机将无法完成。



    14、可计算问题的规模造成复杂度加大,理论上计算机可以完成的计算工作,实际计算机都可以完成。



    15、程序是计算机为完成某一任务所必须执行的一系列指令的有序集合。



    16、高级语言是用接近自然语言的符号,按照一定的语法规则编写程序,需要编译程序翻译成机器指令才能被计算机执行。



    17、编译方式下的程序当修改源程序后,需要重新编译才能够正确运行。



    18、面向对象程序设计方法具有与人们的习惯与思维方法一致,便于解决复杂问题的特性。



    19、C语言属于面向过程的优秀程序设计语言,既可作为系统设计语言,也可作为应用程序设计语言。



    20、算法可以分为数值算法和非数值算法两大类。



    21、对于同一个问题,只能有唯一的算法去解决。



    22、C语言中不区分大小写字母。



    23、程序中适当地添加注释,可以增加程序的可读性和清晰性。



    24、在VC++6.0环境下,任何一个C程序都必须包含在一个工程项目中,而且只能有一个main函数。



    25、经过编译、连接后的可执行程序可以多次运行。



    26、C语言开发工具直接输入的程序代码是____文件,经过编译后生成的是目标程序文件, 经过连接后生成的是可执行程序文件。



    27、C语言源程序的基本组成单位是_____。



    28、结构化程序设计所规定的三种基本控制结构是顺序结构、_____结构和循环结构。



    29、算法的效率通常由_____ 复杂度和空间复杂度衡量。



    30、描述算法的方法主要有_____、专用工具(传统流程图、N-S流程图)和伪代码等。



    31、计算机系统由硬件系统和______系统两部分组成。



    32、计算机语言分为:机器语言、汇编语言和_________语言。



    33、程序的执行方式分为_________和解释两种方式。



    34、衡量算法的时间复杂度是指对于相同规模的问题,算法的执行_______的长短。



    第1周在线编程作业

    1、Hello World!



    2、我爱编程。



    3、计算两个整数的乘积。



    第2周 变量及表达式

    2.1 变量和常量随堂测验

    1、以下不合法的变量命名是( )。
        A、_123
        B、xfloat
        C、stu_1
        D、float



    2.1 变量和常量随堂测验

    1、字符串"\\\’\054"占用的存储空间的长度是____。



    2.1 变量和常量随堂测验

    1、下列哪些是C语言的合法的字符常量?
        A、'10'
        B、"a"
        C、'\054'
        D、'\085'



    2.2 运算符和表达式随堂测验

    1、“/”运算符,当两个整数相除时结果取整。



    2.2 运算符和表达式随堂测验

    1、表达式 a=3*5,a*4,a+5的值为_______。



    第2周单元测验

    1、关于变量定义,下面说法错误的是()。
        A、变量的类型确定了变量占据的存储单元的大小
        B、确定了变量的名字
        C、确定了变量中的内容
        D、确定了变量的表数范围



    2、sizeof(float)的执行结果是()。
        A、一种函数调用
        B、一个浮点表达式
        C、一个不合法的表达式
        D、一个整型表达式



    3、若有 float x=2,y=5.6; 则表达式 (int)x%(int)y将完成( )。
        A、将x和y的类型转换为整型
        B、将x和y的的表达式的类型转换为整型,完成求余运算
        C、不能进行求余运算
        D、将x的值的类型转换为整型



    4、下列叙述正确的是( )。
        A、C语言中的数据的类型不同,在内存中占据相同长度的存储单元
        B、C语言中的数据的类型不同,在内存中占据不同长度的存储单元
        C、C语言中的常量是没有类型的
        D、C语言中的数据的类型不同,但取值范围都是相同的



    5、下列关于C语言用户标识符的叙述中正确的是( )。
        A、用户标识符中可以出现下划线和中划线(减号)
        B、用户标识符中不可以出现中划线,但可以出现下划线
        C、用户标识符中可以出现下划线,但不可放在标识符开头
        D、用户标识符中可以出现下划线和数字,它们都可放在用户标识符的开头



    6、下列转义字符中,错误的是( )。
        A、' \0xa5'
        B、' \031'
        C、' \b'
        D、' \"'



    7、字符串 "\\\\abcd\\\\\n"在内存中占用的字节数是( )。
        A、14
        B、9
        C、10
        D、11



    8、已知梯形的上底为a,下底为b,高为h,用C语言书写的正确的面积公式是( )。
        A、1/2*(a+b)*h
        B、1.0/2*(a+b)*h
        C、1.0/2.0(a+b)h
        D、1.0\2*a+b*h



    9、与k=n++完全等价的表达式是( )。
        A、n=n+1, k=n
        B、k+=n+1
        C、k=++n
        D、k=n, n=n+1



    10、下面关于C语言标识符的命名规则叙述中不准确的是()。
        A、只能由字母、数字和下划线组成
        B、首字符必须为字母或下划线
        C、不区分大小写字母
        D、不能使用系统的保留字



    11、关于定点数和浮点数的说法,下列说法错误的是()。
        A、在计算机中通常用定点数表示整数和纯小数
        B、用浮点数表示既有整数部分、又有小数部分的实数
        C、浮点数表示的数即是数值的精确值
        D、定点数表示数据的范围有限



    12、以下哪种运算能从变量x中取得十进制最低位的数字( )。
        A、x/10
        B、x%10
        C、x*10
        D、10/x



    13、以下哪个数字占据的空间最大( )。
        A、32768
        B、‘3’
        C、32768.0
        D、32768.0F



    14、以下哪个字母不能在常量数字后面表示类型( )。
        A、F
        B、U
        C、L
        D、X



    15、以下哪个数字的值最大( )。
        A、10
        B、010
        C、0x10
        D、10.0



    16、下列哪个不是有效的字符常量( )。
        A、‘ ’
        B、‘\’‘
        C、'1'
        D、"1"



    17、C语言的关键字是由C语言规定的、具有特定功能的固定字母组合,也称为保留字,共计32个。



    18、变量是在程序执行期间其值可以改变的量,必须先定义后使用。



    19、变量被定义后没有赋值,其单元内容不可以使用,是内存中的随机数。



    20、变量的初始化是指在定义时对其赋值。



    21、变量的名字代表内存中的存储单元;变量名和内存中的存储单元相对应,通过变量名来存、取存储单元的内容。



    22、定义变量时的变量的类型决定变量占据存储单元的大小和数据的表数范围。



    23、变量中只能存放指定类型的数据,程序运行过程中可以改变变量的类型。



    24、当存储单元溢出时,数据的值不会受到影响,只会丢掉超过的部分。



    25、当有若干运算符同时出现在表达式中时,运算符的优先级规定了运算的先后次序。



    26、当若干具有相同优先级的运算符相邻出现在表达式中时,结合性规定了运算的先后次序。



    27、在C语言中,对于整型变量采用有符号数和_________数两种存储形式。



    28、当赋值语句右边表达式类型与左边变量类型不一致时,以_______类型为准。



    29、若有定义:char c='\010'; 则变量C中包含的字符个数为_____个。



    30、若有变量定义: char w; int x; float y; double z; 则表达式w*x+z-y的结果为_____类型。



    31、设int w=5;w+=-2; 则w的值为_____。



    32、已知 i=5;写出语句 i+=012; 执行后整型变量 i 的十进制值是_____。



    33、在C语言中的实型变量分为float型和double型,按浮点数进行存储,分为数符、_______和尾数几部分。



    34、设k=a=5,b=3,a*b,则表达式的值为_____。



    35、设有变量定义: int i=3,j=5; float x=2.5; double y=5.0; 则表达式 y+=i-=j*=++x;的计算结果为________。



    36、设有变量定义: char a='a'; int i=3, j=5; 则表达式 a=a+i, a+j 的值为________。



    37、C语言中用一个符号代表一个常量的量称为________常量。



    38、设有变量定义: float x=2.5; double y=5.0; 则表达式 (int)x / (int)y+y的值为______。



    第2周编程作业

    1、计算圆的面积



    2、计算平方根



    3、输出逆序数



    第3周 数据的输入与输出

    3.1 数据的格式化输出随堂测验

    1、在调用printf函数输出数据时,当数据的实际位宽大于printf函数中格式指定宽度时,将按照数据的实际宽度输出数据。



    3.2 数据的交互式输入随堂测验

    1、输入时可以指定数据的宽度,但不允许指定精度。



    3.3 单个字符的输入输出随堂测验

    1、单个字符既可以以c格式符也可以以d格式符输出,前者是输出这个字符,后者是输出这个字符的ASCII码值。



    第3周单元测验

    1、若变量已正确定义,执行语句scanf("%d,%d,%d ",&k1,&k2,&k3);时,正确的数据输入方法是( )。
        A、20,30,40
        B、2030,40
        C、20, 30 40
        D、20 30 40



    2、printf("a\rHappi\by");在屏幕上正确的输出形式是( )。
        A、aHappy
        B、Happy
        C、Happi
        D、aHappi



    3、若定义字符变量c1的值是'A',c2的值是'D',执行语句printf("%d,%d",c1,c2-2);后,输出结果是( )。
        A、65,66
        B、65,68
        C、A,68
        D、A,B



    4、以下程序的输出结果是()。 int main() { float x=3.6; int i; i=(int)x; printf("x=%f,i=%d\n",x,i); return 0; }
        A、x=3.600000,i=4
        B、x=3 i=3.600000
        C、x=3,i=3
        D、x=3.600000,i=3



    5、已定义double a; int i;选择正确的输入格式为( ) 。
        A、scanf("%6.2f%3d", &a,&i);
        B、scanf("%lf%s", &a,&i);
        C、scanf("%6lf%3d",&a,&i);
        D、scanf("%f%d", a,i);



    6、已有定义char s1,s2;,下面正确的语句是( )。
        A、scanf ("%s%c", s1,s2);
        B、scanf ("%s%c", s1,&s2);
        C、scanf ("%c%c", &s1,&s2);
        D、scanf ("%c%c",s1,s2);



    7、为下面的程序输入数据,使得i=10,k='a' ,j=15,正确的键盘输入方法是( )。 #include <stdio.h> int main( ) { int i,j,k; scanf("%d%c%d",&i,&k,&j); printf("i=%d,j=%c,k=%d\n",i,k,j); return 0; }
        A、10,a,15<回车>
        B、10<回车>a<回车>15<回车>
        C、10'a'15<回车>
        D、10a15<回车>



    8、运行下面的程序,正确的输出结果是( )。 #include <stdio.h> int main( ) { double x=68.7563, y= -789.127; printf ("%f, %10.2f\n", x,y); return 0; }
        A、68.756300, □□□-789.12
        B、68.756300, □□□-789.13
        C、68.75, □□□-789.13
        D、68.75, -789.12



    9、已知float x=2.23,y=4.35;,根据下面的输出结果,正确的程序段是( )。 x=2.230000,y=4.350000 y+x=6.58,y-x=2.12
        A、printf("x=%8.2f,y=%8.2f",x,y); printf("y+x=%4.2f,y-x=%4.2f\n",y+x,y-x);
        B、printf("x=%8.6f,y=%8.6f\n",x,y); printf("y+x=%4.2f,y-x=%4.2f\n",y+x,y-x);
        C、printf("x=%7.2f,y=%7.2f\n",x,y); printf("y+x=%3.2f,y=%3.2f\n",y+x,y-x);
        D、printf("x=%f,y=%f\n",&x,&y); printf("y+x=%f,y=%f\n",y+x,y-x);



    10、C语言中本身没有提供专门的输入输出语句,输入输出通过调用函数完成。



    11、输入数据时不能指定数据的精度。



    12、输入数据时不可以指定数据的宽度。



    13、混合输入数值型数据和字符型数据时,数据之间不能加空格。



    14、使用getchar()函数可以一次接受多个字符。



    15、在使用标准的输入/输出库函数时,应该在程序的开头使用编译预处理命令“#include <stdio.h>”。



    16、字符型数据存储其ASCII码值,占一个字节,在ASCII范围内与整数通用。



    17、输入数据时可以有多种方法分隔多个输入数据。



    18、程序的顺序结构是指按照解决问题的顺序写出相应的语句,程序执行顺序按照自上而下,依次按顺序执行。



    19、若在输入格式控制字符串中包含普通字符,则输入时必须照原样输入普通字符,否则将导致输入错误。



    20、getchar()函数只能接收一个_____。



    21、下列语句输出的结果是_____。 char ch='b'; printf("%c,%d",ch,ch);



    22、用scanf函数输入数据,使得x=1.23, y=67.1234。 #include <math.h> #include <stdio.h> int main( ) { double x,y,z; scanf(" ", &x,&y ); z=2*x+y/sin(3.1415/4); printf("z=%6.2f",z); return 0; }



    23、完善下列程序: #include < > int main( ) { char str; str=getchar(); putchar(str); return 0; }



    24、根据下面的输出结果, 完善程序。 s1=C,ASCII is 67 x=655.35,y=765.43 #include <stdio.h> int main( ) { double x=655.3524,y=765.4271; char s1='C'; printf( , s1,s1,x,y); return 0; }



    25、用scanf函数输入数据,使得下面程序运行结果为a=2,b='x',c='z' #include <stdio.h> int main( ) { int a, b; scanf("%d%c", &a,&b ); printf(" ",a,b,b+2); return 0; }



    26、下面程序的运行结果是: 。 #include <stdio.h> int main( ) { char str=65; printf("str=%c,ASCII=%d",str,str ); return 0; }



    27、在格式说明符中,当%后边出现______,表示要跳过相应的数据,是附加说明符。



    28、若要将数据以指数形式输出,应该选择______格式符。



    第3周编程作业

    1、交换两个变量



    2、输出字符ASCII码



    3、求一元二次方程的两个实根



    4、计算银行存款本息



    第4周 选择结构程序设计

    4.1 关系运算与逻辑运算随堂测验

    1、算术运算符的优先级高于关系运算符。



    4.2 程序分支结构—if-else语句随堂测验

    1、写出下列程序段的输出结果: int a = 56; if ( a>50 ) printf("A"); if ( a>40 ) printf("B"); if ( a>30 ) printf("C");



    4.3 多重分支结构-switch语句随堂测验

    1、写出下列程序段的输出结果:_______。 int i=1; switch ( i%3 ) { case 0: printf("zero"); case 1: printf("one"); case 2: printf("two"); }



    第4周 单元测验

    1、下列运算符优先级最高的是( )。
        A、&&
        B、||
        C、,
        D、+



    2、若给定条件表达式(m)?(a++):(a--),则其中表达式m()。
        A、和(m==0)等价
        B、和(m!=0)等价
        C、和(m==1)等价
        D、和(m!=1)等价



    3、C语言中以下几种运算符的优先次序()的排列是正确的。
        A、由高到低为:算术运算符,关系运算符,赋值运算符,!,&&,||
        B、由高到低为:!,&&,||,算术运算符,赋值运算符
        C、由高到低为:算术运算符,关系运算符,!,&&,||,赋值运算符
        D、由高到低为:!,算术运算符,关系运算符,&&,||,赋值运算符



    4、C语言中,switch后的括号内表达式( )。
        A、只能是整型和字符型
        B、只能为整型
        C、可以是任何类型
        D、只能为整型,字符型或枚举型



    5、C语言的switch语句中case后边( )。
        A、可为任何量或表达式
        B、可为常量或表达式或有确定值的变量及表达式
        C、只能为常量或常量表达式
        D、只能为常量



    6、执行下面程序段后,k的值是:( )。 int k=2; switch(k+1) { case 3:k+=1; case 4:k--;break; case 5:k*=3; case 6:++k; }
        A、10
        B、2
        C、28
        D、27



    7、执行下面程序段后,ch的值是( )。 char ch='a'; ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
        A、z
        B、Z
        C、a
        D、A



    8、若在程序运行时,输入:4 3,则执行下面程序输出的结果是( )。 #include <stdio.h> int main() { int a,b,s; scanf("%d%d",&a,&b); s=a; if(a>b) s=b; s=s*s; printf("%d\n", s); return 0; }
        A、13
        B、9
        C、16
        D、15



    9、下列表达式中,值为0的表达式是( )。
        A、3!=0
        B、3!=3>4
        C、3>4==0
        D、6>5>4



    10、下列表达式中,结果为1的表达式是( )。
        A、!0==1
        B、!6
        C、!2>=3
        D、!3!=0



    11、设int a=3;,则表达式a<1&&--a>1的运算结果和a的值分别是( )。
        A、0和2
        B、0和3
        C、1和2
        D、1和3



    12、设整型变量x、y、z的值分别为3、2、1,则下列程序段的输出是( )。 if(x>y) x=y; if(x>z) x=z; printf("%d,%d,%d\n",x,y,z);
        A、3,2,1
        B、1,2,3
        C、1,2,1
        D、1,1,1



    13、判断char型变量ch是否为小写字母的正确表达式是()。
        A、('a'>=ch)||('z'<=ch)
        B、'a'<=ch<='z'
        C、(ch>=a)&&(ch<=z)
        D、(ch>='a')&&(ch<='z')



    14、能正确表达逻辑关系“0<a<1并且0<b<1”的表达式是(0<a<1)&&(0<b<1)。



    15、所有逻辑运算符的优先级都高于关系运算符。



    16、在switch语句中,switch与case后的表达式可以为任意类型。



    17、在if语句中,if后面的表达式可以是关系表达式与逻辑表达式,而不能是算术表达式。



    18、在逻辑表达式的求解过程中,并非所有的逻辑运算符都被执行。



    19、switch语句嵌套使用时,一条break语句可用于跳出所有嵌套switch语句。



    20、在a>b?a+b:a-b 表达式中,若a>b,则条件表达式的值为a+b的值,否则为a-b的值。



    21、条件运算符的优先级低于算术运算符、关系运算符及逻辑运算符,高于赋值运算符和逗号运算符。



    22、同一个switch语句中各个常量表达式的值必须互不相等,且只能是常量。



    23、C语言没有逻辑型数据,关系表达式的真、假是以数值“1”代表“真”,以“0”代表“假”,即非0为真(true),0为假(false)。



    24、并非所有的if语句都有等价的switch语句,switch语句只能用来实现以相等关系作为选择条件的多分支结构。



    25、已知 a=10,b=15,c=1,d=2,e=0,则表达式c==b>e的值为_____。



    26、int x=2,y=3,z=4; 则表达式x+y&&(x=y)的值为_____。



    27、int x=4,y=4,z=2;x=y==z; 则x的值为_____。



    28、假设变量a,b均为整型,表达式 (a=5,b=2,a>b?a++:b++,a+b) 的值是_____。



    29、当a=1,b=2,c=3时,执行以下程序段后b的值为 _____。 if (a>c) b=a; a=c; c=b;



    30、已知a=13,b=2,表达式b||++a,运算结果a的值是_____。



    31、当a=3,b=2,c=1;时,执行以下程序段后,a=_____。 if(a>b) a=b; if(b>c) b=c; else c=b; c=a;



    32、c语言表达式5>2>7>8的值是_____。



    33、为了避免嵌套条件语句的二义性,C语言规定else与其前面最近的_____语句配对。



    第4周编程作业

    1、大小写字母转换



    2、计算分段函数



    3、百分制成绩转换为五级分制成绩



    4、输出水仙花数



    第5周 循环结构程序设计

    第5周 单元测验

    1、下面程序的运行结果是 ( )。 #include <stdio.h> int main( ) { int i=5; while(i>0); printf("%d",i--); return 0; }
        A、5
        B、-1
        C、0
        D、死循环



    2、执行语句 for(i=1;i++<4;) ; 后变量 i 的值是( )。
        A、3
        B、4
        C、5
        D、不定



    3、关于下面程序段,正确的是( )。 int k=10; while(!k) k--;
        A、循环体执行10次
        B、循环体执行1次
        C、循环体一次也不执行
        D、死循环



    4、下面程序的运行结果是( )。 #include <stdio.h> int main( ) { int x=3; do{ printf("%3d",x-=2); }while(!(--x)); return 0; }
        A、死循环
        B、1 -2
        C、10
        D、1



    5、下面程序的运行结果是( )。 #include <stdio.h> int main( ) { int i=0,sum=0; while(i++<6) sum+=i; printf("%d",sum); return 0; }
        A、15
        B、16
        C、21
        D、22



    6、下面程序的运行结果是( )。 #include <stdio.h> int main( ) { int i=10; while(i-->0); printf("%d ",i); return 0; }
        A、10
        B、0
        C、10987654321
        D、-1



    7、已定义int j; 下面程序段的输出结果是( )。 for(j=7;j<10;j++) printf("%d",j);
        A、8910
        B、789
        C、91011
        D、无结果



    8、下面程序的输出结果是( )。 #include <stdio.h> int main( ) { int i,j,s=0; for(j=1,i=7;j<=i;j++,i--) s=s+i+j; printf("%d",s); return 0; }
        A、32
        B、28
        C、死循环
        D、0



    9、下面程序的输出结果是( )。 #include <stdio.h> int main( ) { int j,s; for(j=1;j<=7;j++) s=s+j; printf("%d",s); }
        A、0
        B、28
        C、不确定
        D、死循环



    10、已定义int j,s; 则下面程序段的输出结果是( )。 int j,s; for(j=1,s=0;j<=5;j++) s*=j; printf("%d",s);
        A、0
        B、120
        C、死循环
        D、无结果



    11、while循环语句至少无条件执行一次循环体。



    12、for循环语句只能用于循环次数已经确定的情况。



    13、do while循环语句中,根据情况可以省略关键字while。



    14、do while循环语句至少无条件执行一次循环体。



    15、for循环语句先判断循环条件是否成立,然后再决定是否执行循环体。



    16、do-while循环由do开始,while结束,在while(表达式)后面加分号。



    17、for循环的三个表达式中间用逗号相分隔,并且不能省略。



    18、do while循环语句的特点是先执行循环体,然后判断循环条件是否成立。



    19、while循环语句和do while循环语句在任何情况下都可以互换。



    20、for循环的三个表达式中间用分号相分隔,第一个表达式执行一次。



    21、下面程序用来计算自然数1-10之和,请完善程序。 #include <stdio.h> int main( ) { int j,s; ; for(j=1;j<=10;j++) s=s+j; printf("%d",s); return 0; }



    22、下面程序用来计算10!,请完善程序。 #include <stdio.h> int main( ) { int j,s; ; for(j=1;j<=10;j++) s*=j; printf("%d",s); return 0; }



    23、下面程序用来计算1+1/2!+1/3!+…1/10!,请完善程序。 #include <stdio.h> int main( ) { int i,j; sum=0,fac; for(i=1;i<=10;i++) { fac=1; for(j=1;j<=i;j++) fac=fac*j; sum=sum+1/fac; } printf("%f",sum); return 0; }



    24、下面程序计算并输出1 100之间(包括100)能被3整除同时能被7整除余3的所有数之和,请完善程序 。 #include <stdio.h> int main( ) { int sum=0,i; i=1; while ( ) { if (i%3==0&&i%7==3) sum=sum+i; i++; } printf("sum=%d",sum); return 0; }



    25、下面程序计算并输出500以内最大的10个能被13或17整除的自然数之和。请完善程序。 #include <stdio.h> int main ( ) { int m=0, mc=0, k=500; while (k >= 1 && ) { if (k%13== 0 || k%17 == 0) { m=m+k; mc++; } k--; } printf("sum=%d",m); return 0; }



    第5周 编程作业

    1、用for语句实现判断并求和。



    2、用do while 语句实现从键盘输入一组整数,求平均值。



    3、用while语句实现计算圆周率 pi (3.14) 的近似值。



    第6周 循环程序设计实例

    第6周 单元测验

    1、从循环体内某一层跳出,继续执行循环外的语句是( )。
        A、continue语句
        B、空语句
        C、break语句
        D、if语句



    2、针对for循环语句,for(表达式1;表达式2;表达式3),下列说法正确的是( )。
        A、break语句可以一次性跳出多层嵌套循环
        B、break语句只能跳出所在层循环
        C、continue语句可以一次性跳出多层嵌套循环
        D、continue语句只能跳出所在层循环



    3、以下正确的描述是( )。
        A、只能在循环体内和switch语句内使用break语句。
        B、continue语句的作用是终止整个循环的执行。
        C、从多层嵌套的外层循环中退出时,只能使用goto语句。
        D、在循环体内使用break和continue语句的作用相同。



    4、下面程序的运行结果是( )。 #include <stdio.h> int main( ) { int i,j,sum; for(i=2;i<7;i++) { sum=1; for( j=i;j<7;j++) sum=sum+j; } printf("%d",sum); return 0; }
        A、48
        B、49
        C、1
        D、7



    5、下面程序的运行结果是( )。 #include <stdio.h> int main( ) { int i=10,s=0; while(i>0) { if(i%3==0) continue; s=s+i; i--;} printf("s=%d",s); return 0; }
        A、死循环
        B、55
        C、37
        D、10



    6、下面程序的运行结果是( )。 #include <stdio.h> int main( ) { int i=10,s=0; for(i=1;i<=10;i++) { if(i%3!=0) continue; s=s+i; } printf("%d",s); return 0; }
        A、死循环
        B、55
        C、37
        D、18



    7、下面程序的运行结果是( )。 #include <stdio.h> int main( ) { int x=15; do{ x--; } while(x--); printf("%d ",x--); return 0; }
        A、0
        B、1
        C、-1
        D、-2



    8、continue语句用于终止循环体的本次执行。



    9、break语句能够终止当前进行的多层循环。



    10、continue语句对于while和do-while循环来说,意味着转去计算While表达式。



    11、对于for(表达式1;表达式2;表达式3)语句来说,continue语句意味着转去执行表达式3。



    12、continue语句在循环体中出现,其作用是结束本次循环,接着进行是否执行下一循环的判定。



    13、goto语句和break语句都能够实现使程序执行的流程从循环体内跳至循环体外。



    14、break终止包含该语句的最内层循环。



    15、在循环体内又包含一个循环语句,称为循环嵌套。



    16、for(表达式1;表达式2;表达式3),当执行循环体内的continue语句时,意味着转去执行表达式2。



    17、程序中遇到goto语句无条件跳到标号指定的位置继续执行。



    18、/*程序的功能是:求1到10的阶乘的和*/ #include "stdio.h" int main () { int n,j,s=0,t; for(n=1;n<=10;n++) { ; for(j=1;j<=n;j++) t=t*j; s=s+t; } printf("s=%d\n",s); return 0; }



    19、/*程序的功能是:从键盘输入10个字符,输出其中数字字符*/ #include <stdio.h> int main( ) { int i; char c; for(i=1;i<=10;i++) { c=getchar( ); if(c< '0' ||c> '9') ; putchar(c); } return 0; }



    20、/*用10元人民币兑换角币有多少种换法(角币有1角、2角、5角三种)。*/ #include <stdio.h> int main( ) { int i,j,k,m=0; for(i=0;i<=20;i++) for(j=0; ;j++) for(k=0;k<=100;k++) if(i*5+j*2+k==100) { m++;printf("i=%d,j=%d,k=%d\n",i,j,k);} printf("m=%d",m); return 0; }



    21、/*程序的功能是:输出斐波那契数列前n项(n为偶数)。*/ #include <stdio.h> int main() { int i,n ; int a1=1,a2=1; scanf(“%d”,&n); printf( "%d %d ", a1,a2); for ( i = 1; i<n/2; i++ ) { a1= ; a2=a1+a2; printf( "%d %d ", a1,a2); } return 0; }



    22、/*编写打印以下图形的程序(行与行之间没有空行,第三行与左边界没有空格)。*/ * *** ***** #include <stdio.h> int main() { char c= '*',s=' '; int i,j; for(i=0;i<3;i++) { for(j= ;j>0; j--) printf("%c",s); for(j=0;j<2*i+1;j++) printf("%c",c); printf("\n"); } return 0; }



    第6周 编程作业

    1、求两个整数的最大公约数。



    2、找素数



    3、斐波那契数列求和



    第7周 一维数组及其引用

    第7周 单元测试

    1、若有说明int a[10],则对a数组元素的正确引用是( )。
        A、a[10]
        B、a[3.5]
        C、a(5)
        D、a[10-10]



    2、在C语言中,引用数组元素时,其数组下标的数据类型不允许的是( )。
        A、整型常量
        B、正整型常量表达式
        C、整型变量表达式
        D、任何类型的表达式



    3、对以下说明语句的正确理解是( )。 int a[10]={6,7,8,9,10};
        A、将5个初值依次赋给a[1]至a[5]
        B、将5个初值依次赋给a[0]至a[4]
        C、将5个初值依次赋给a[6]至a[10]
        D、因为数组长度与初值的个数不相同,所以此语句不正确



    4、现有如下程序,则程序的输出结果为( )。 #include <stdio.h> int main( ) { int k[30]={12,324,45,6,768,98,21,34,453,456}; int count=0,i=0; while(k[i]) { if(k[i]%2==0‖k[i]%5==0) count++; i++; } printf("%d,%d\n",count,i); return 0; }
        A、7,8
        B、8,8
        C、7,10
        D、8,10



    5、以下能对一维数组a进行初始化的正确语句是( )。
        A、int a[10]=(0,0,0);
        B、int a[10]={ };
        C、int a[]={0};
        D、int a[10]={0,1,2,3,4,5,6,7,8,9,10};



    6、以下对一维整型数组a的正确说明是( )。
        A、int a(6);
        B、int n=10,a[n];
        C、int n; scanf(“%d”, &n); int a[n];
        D、#define N 8 int a[N];



    7、下面程序的运行结果是( )。 #include <stdio.h> int main( ) { int a[6],i; for(i=1;i<6;i++) { a[i]=9*(i-2+4*(i>3))%5; printf("%2d", a[i]); } return 0; }
        A、-4 0 4 0 4
        B、-4 0 4 0 3
        C、-4 0 4 4 3
        D、-4 0 4 4 0



    8、下面程序的运行结果是( )。 #include <stdio.h> int main( ) { int x[3],i,j,k; for(i=0;i<3;i++) x[i]=0; k=3; for (i=0;i<k;i++) for (j=0;j<k;j++) x[j]=x[j]+1; printf("%d\n",x[2]); return0; }
        A、2
        B、0
        C、1
        D、3



    9、下面程序的运行结果是( )。 #include <stdio.h> int main( ) { int a[10],i,k=1; for(i=0;i<10;i++) a[i]=i; for (i=1;i<6;i++) k+=a[i]+i; printf("%d\n",k); return 0; }
        A、32
        B、20
        C、31
        D、33



    10、若有以下程序段,则数值为3的表达式( )。 int x[12]={1,2,3,4,5,6,7,8,9,10}; char c=‘a’,d,f;
        A、x[g-c]
        B、x[3]
        C、x['d'-'c']
        D、x['d’-‘b']



    11、数组定义int a[10];也可以写成 int a(10)。



    12、在对全部数组元素赋初值时,可以不指定数组长度。



    13、数组定义int a[10]; 表示数组名为a,此数组有10个元素,首元素为a[0]。



    14、如果对数组不赋初值,则数组元素取随机值。



    15、引用数组元素时,其数组下标的数据类型允许的是:整型常量或整型表达式。



    16、若有int a[10]={6,7,8,9,10};,则是将5个初值依次赋给a[0]至a[4]。



    17、数组名的规定与变量名不相同。



    18、一个数组可以存放许多不同类型的数值。



    19、数组的下标通常是float型。



    20、数组可以声明为任何数据类型。



    21、下列程序的功能是输入N个实数,然后依次输出前l个实数和、前2个实数和、……前N个实数和。 #define N 10 #include <stdio.h> int main() { float f[N],x=0.0; int i; for(i=0;i<N;i++) scanf("%f", &f[i]); for(i=1;i<=N;i++) { ; printf("sum of NO %2d %f\n", i, x); } return 0; }



    22、下列程序的功能是输出数组s中最大元素的下标。 #include <stdio.h> int main() { int k,i; int s[]={3,-8,7,2,-1,4}; for(i=0,k=0;i<6;i++) if(s[i]>s[k]) ; printf("k=%d\n", k); return 0; }



    23、以下程序以每一行输出4个数据的形式输出a数组。 #include <stdio.h> int main() { int a[20],i; for(i=0;i<20;i++) scanf("%d",&a[i]); for(i=0;i<20;i++) { if ( ) printf("\n"); printf("%3d", a[i]); } printf("\n"); return 0; }



    24、以下程序的功能是求数组num中小于零的数据之和。请填空。 #include <stdio.h> int main() { int num[20]={10,20,1,-20,203,-21,2,-2,-2,11,-21,22,12,-2,-234,-90,22,90,-45,20}; int sum=0,i; for(i=0;i<20;i++) { if(num[i]<0) sum= ; } printf("sum=%6d",sum); return 0; }



    25、设数组a中的元素均为正整数,以下程序是求a中偶数的个数和偶数的平均值。请填空。 #include <stdio.h> int main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; int k,s,i; float ave; for(k=s=i=0;i<10;i++) { if(a[i]%2!=0) ; s+= a[i]; k++; } if(k!=0) { ave=s/k; printf("%d,%f\n",k,ave); } return 0; }



    26、输入10个整数,用选择法排序后按从小到大的次序输出。 #include <stdio.h> #define N 10 int main( ) { int i,j,min,temp,a[N]; for(i=0;i<N;i++) scanf("%d", &a[i]); printf("\n"); for(i=0;i<N-1;i++) { min=i; for(j=i;j<N;j++) if(a[min]>a[j]) ; temp=a[i]; a[i]=a[min]; a[min]=temp; } for (i=0;i<N;i++) printf("%5d",a[i]); printf("\n"); return 0; }



    第7周 编程作业

    1、逆序存放数据



    2、找出一维整型数组中的次最大值。



    3、调整最大值的位置。



    第8周 二维数组与字符数组

    第8周 单元测试

    1、定义如下变量和数组: int i; int x[3][3]={1,2,3,4,5,6,7,8,9}; 则下面语句的输出结果是() for(i=0;i<3;i++) printf(" %d" ,x[i][2-i]);
        A、1 5 9
        B、1 4 7
        C、3 5 7
        D、3 6 9



    2、有以下程序 #include <stdio.h> int main( ) { int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,k,t; for(i=0;i<3;i++) for(k=i+1;k<4;k++) if(a[i][i]<a[k][k]) {t=a[i][i]; a[i][i]=a[k][k]; a[k][k]=t;} for(i=0;i<4;i++) printf("%d,",a[0][i]); return 0; } 程序运行后的输出结果是()
        A、6,2,1,1
        B、6,4,3,2
        C、1,1,2,6
        D、2,3,4,6



    3、设有数组定义: char array[ ]="China"; 则数组array所占的空间为()
        A、4个字节
        B、5个字节
        C、6个字节
        D、7个字节



    4、下述对C语言字符数组的描述中错误的是()
        A、字符数组的下标从0开始
        B、字符数组中的字符串可以进行整体输入/输出
        C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
        D、字符数组可以存放字符串



    5、对两个数组a和b进行如下初始化 char a[]=”ABCDEF”; char b[]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’} 则下述叙述正确是()
        A、a和b数组完全相同
        B、a和b长度相同
        C、a和b都存放字符串
        D、a数组比b数组长度长



    6、下面程序的功能是将字符串s中的字符c删除,请选择填空() #include <stdio.h> int main( ) {char s[80]; int i,j; gets(s); for(i=j=0;s[i]!='\0';i++) if(s[i]!='c') ; s[j]='\0'; puts(s); return 0; }
        A、s[j++]=s[i]
        B、s[++j]=s[i]
        C、s[i]=s[j]
        D、s[j]=s[i]



    7、下面程序的运行结果是 #include "stdio.h" #include"string.h" int main( ) {char a[80]="AB",b[80]="LMNP"; int i=0; strcat(a,b); while(a[i++]!='\0') b[i]=a[i]; puts(b); return 0; }
        A、LB
        B、ABLMNP
        C、AB
        D、LBLMNP



    8、若二维数组a有m列,则在a[i][j]前的元素个数为
        A、j*m+i
        B、i*m+j
        C、i*m+j-1
        D、i*m+j+1



    9、字符数组不要求它的最后一个字符为”\0”,甚至可以不包含”\0”。



    10、在程序中可以对数值数组中的数据进行整体使用。



    11、如果strcmp(s1,s2)的返回值为一个负数,则表明字符串s1小于字符串s2。



    12、用scanf函数输入的字符串不可以带空格。



    13、用gets函数输入的字符串可以带空格。



    14、实现两个字符串的复制可以使用str1=str2;语句。



    15、使用strcpy函数可以实现两个字符串的复制。



    16、使用strcat函数可以实现两个字符串的连接。



    17、使用strlen函数可以求出一个字符串的存储长度(包含‘\0’字符)。



    18、如有定义char a[20];则可以通过a=“I am a boy”;给a赋值。



    19、下面程序的功能是将二维数组a中每个元素向右移一列,最右一列换到最左一列,移后的数组存到另一二维数组b中,并按矩阵形式输出a和b,请填空。 例如:array a: array b: 4 5 6 6 4 5 1 2 3 3 1 2 #include <stdio.h> int main() { int a[2][3]={4,5,6,1,2,3},b[2][3]; int i,j; printf("array a:\n"); for(i=0;i<=1;i++) {for(j=0;j<3;j++) printf("%5d",a[i][j]); printf("\n");} for(i=0;i<=1;i++) for(j=0;j<2;j++) ; for(i=0; i<2;i++) b[i][0]=a[i][2]; printf("array b:\n"); for(i=0;i<2;i++) {for(j=0;j<3;j++) printf("%5d",b[i][j]); printf("\n");} return 0; }



    20、下面程序的功能是检查一个二维数组是否对称(即:对所有ij都有a[i][j]=a[j][i]).请填空。 #include <stdio.h> int main() {int a[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4}; int i,j,found=0; for(j=0;j<4; j++) for(i=j+1; i<4; i++) if( ) { found=1; break;} if(found) printf("No"); else printf("Yes"); return 0; }



    21、以下程序是求矩阵a,b的和,结果存入矩阵c中并按矩阵形式输出。请填空。 #include <stdio.h> int main() {int a[3][4]={{3,-2,7,5},{1,0,4,-3},{6,8,0,2}}; int b[3][4]={{-2,0,1,4},{5,-1,7,6},{6,8,0,2}}; int i,j,c[3][4]; for(i=0;i<3;i++) for(j=0;j<4;j++) c[i][j]= a[i][j]+b[i][j]; for(i=0;i<3;i++) {for(j=0; ;j++) printf("%3d",c[i][j]); printf("\n");} return 0; }



    22、下面程序的功能是在任意的字符串a中将与字符c相等的所有元素的下标值分别存放在整型数组b中。请填空。 #include <stdio.h> int main() {char a[80]; int i,b[80],k=0; gets(a); for(i=0;a[i]!='\0';i++) if( ) {b[k]=i; k++;} for(i=0;i<k;i++) printf("%3d",b[i]); return 0; }



    23、下面程序将输出computer,请填空。 #include <stdio.h> int main() {int i,j; char c[]="It's a computer"; for(i=0; i<=7;i++) { ; printf("%c",c[j]);} return 0; }



    24、下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出-1。请填空。 #include <stdio.h> #include <string.h> int main() {char c='a',t[50]; int n,k,j; gets(t); n=strlen(t); for(k=0; k<n;k++) if( ) {j=k; break;} else j=-1; printf("%d",j); return 0; }



    25、输出连接后的字符串 #include "stdio.h" int main() { char ss[10]="12345"; strcat(ss,"6789"); printf("%s",ss); return 0; }



    26、计算矩阵a的下三角(包含主对角线)元素之和,矩阵的行、列数和元素值均由键盘输入 #define M 20 #include "stdio.h" int main() {int i,j,n,a[M][M]; int s=0; scanf("%d",&n); for(i=0;i<n;i++) for(j=0; j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++) for(j=0; ;j++) s=s+a[i][j]; printf("%d\n",s); return 0; }



    27、下面程序的功能是将字符串a下标值为偶数的元素由小到大排序,其他元素不变。请填空。 #include <stdio.h> int main() {char a[]="labchmfye",t; int i,j; for(i=0;i<7;i+=2) for(j=i+2;j<9; j+=2) if( ) { t=a[i]; a[i]=a[j]; a[j]=t; } puts(a); printf("\n"); return 0; }



    第8周 编程作业

    1、连接两个字符串



    2、求矩阵外围元素之和



    3、求矩阵主对角线和副对角线元素之和



    4、将字符串的小写字母转换为大写字母。(提示:不允许使用字符串转换函数)



    第9周 函数的定义及调用

    9.2 函数的参数传递随堂测验

    1、关于函数调用的值传递,下列正确的是( )。
        A、值传递的传输方向是单向的,从主调函数到被调函数
        B、值传递的传输方向是单向的,从被调函数到主调函数
        C、值传递的数据传输方向是双向的
        D、值传递时,实参和形参使用相同的存储空间



    9.2 函数的参数传递随堂测验

    1、关于函数调用的地址传递,下列正确的是( )。
        A、地址传递的传输方向是单向的,从主调函数到被调函数
        B、地址传递的传输方向是单向的,从被调函数到主调函数
        C、地址传递的实参和形参使用相同的变量名
        D、地址传递时,实参和形参使用相同的存储空间



    第9周单元测验

    1、以下函数返回值的类型是( )。 int fff(float x) { x=x+5; return x; }
        A、void 类型
        B、与参数x的类型相同
        C、int类型
        D、无法确定



    2、下面对函数的叙述,正确的是( )。
        A、函数中没有return语句,说明不带回值
        B、函数的返回值是通过return语句获得的
        C、函数中无论是否有return语句,都能返回正确值
        D、函数不能嵌套定义



    3、简单变量做实参时,它和对应形参之间的数据传递方式是()。
        A、由实参传给形参,再由形参传回给实参
        B、地址传递
        C、单向值传递
        D、由用户指定的传递方式



    4、若用数组名作为函数的实参,传递给形参的是()。
        A、数组的首地址
        B、数组第一个元素的值
        C、数组元素的个数
        D、数组中全部元素的值



    5、以下叙述错误的是( )。
        A、函数调用可以作为一个函数的实参
        B、函数调用可以出现在一个表达式中
        C、函数调用可以作为一个函数的形参
        D、函数允许递归调用



    6、下面叙述中错误的是( )。
        A、函数的形式参数,在函数未被调用时不被分配存储空间
        B、若函数的定义出现在主调函数之前,则可以不必再加说明
        C、一般来说,函数的形参和实参的类型要一致
        D、函数的形参和实参必须要使用相同名字的变量



    7、若函数的调用形式如下: f((x1,x2,x3),(y1,y2)) 则函数形参个数是( )。
        A、2
        B、3
        C、4
        D、5



    8、下列程序段中,有错误的是( )。
        A、int f() { int x; scanf("%d", &x); return x++, x+5; }
        B、int f2(int x) { return (x>1?printf("Y"): putchar('N')); }
        C、int main() { float a=2.6 , b; b=max(2.1, 3.6)=a++; printf("%f", a+b); }
        D、void change(int x, int y) { int t; t=x; x=y; y=t; }



    9、关于函数正确的说法是( )。
        A、主函数必须写在其他函数之前,函数内可以嵌套定义函数
        B、主函数可以写在其他函数之后,函数内不可以嵌套定义函数
        C、主函数必须写在其他函数之前,函数内不可以嵌套定义函数
        D、主函数必须在写其他函数之后,函数内可以嵌套定义函数



    10、以下说法正确的是( )。
        A、C程序总是从主函数main()开始执行
        B、C程序中,被调用的函数必须在main()函数中定义
        C、C程序总是从第一个定义的函数开始执行
        D、C程序中的main()函数必须放在程序的开始处



    11、关于函数的定义,叙述错误的是( )。
        A、必须指出函数的名字和类型
        B、必须给出函数完成的功能语句
        C、函数参数可有可无
        D、函数必须要有返回语句



    12、关于函数原型,叙述错误的是( )。
        A、当自定义函数被放在了主调函数的后面,就需要在函数调用之前,加上函数的原型声明
        B、被调用函数在主调函数之前定义,可以省略函数原型声明
        C、所有函数定义放在main函数之前,可以省略原型声明
        D、函数可以不必进行声明,可以放在程序的任意位置



    13、主函数中有声明语句: int a[100], n=5; 下列哪组实参和形参的对应是正确的( )。
        A、f(a,n); int f(int a, int n);
        B、f(a[100], n); int f(int a[], int n);
        C、f(a, n); int f(int a[], int n);
        D、f(a[100], n); int f(int a[100], int n);



    14、下列函数定义中,正确的是( )。
        A、int max1(int a,int b) { return a>b?a:b; }
        B、int max1(int a,b) { return a>b?a:b; }
        C、int max1(a,b) { int a,b; return a>b?a:b; }
        D、int max1(int a,int b); { return a>b?a:b; }



    15、函数可以根据需要通过参数与调用函数之间进行数据传递。



    16、模块化程序设计方法是采用逐步分解、分而治之的方法处理问题。



    17、没有返回值的函数可以进行函数的语句调用。



    18、函数的表达式调用必须是有返回值的函数调用。



    19、函数通过return语句可以向主调用函数返回多个值。



    20、一个函数中有且只能有一个return 语句。( )



    21、C语言规定,程序中各函数之间既允许嵌套定义,也允许嵌套调用。( )



    22、数组作为函数参数进行函数调用时,实参应当采用( )。



    23、以下函数的功能是连接两个字符串,请完善程序。 void str_cat(char str1[ ], char str2[ ], char str[ ]) { int i,j; for(i=0;str1[i]!= '\0';i++) str[i]=str1[i]; for(j=0;str2[j]!='\0';j++) str[i++]=str2[j]; ; }



    24、以下函数的功能是计算x的y次方,请完善程序。 double fun(float x, int y) { int i=1; double z=1; if(y==0) return 1; while( i<=y ) { z= ; i++; } return z; }



    25、以下函数的功能是计算n!,请完善程序。 long mul(int n) { int i=1; long sum; if(n==0) return 1; else sum=1; while(i<=n) { sum= ; i++; } return sum; }



    26、如果函数不要求返回值,可用_____来定义函数为空类型。



    27、在调用一个函数的过程中,直接或间接地调用该函数本身,称为函数的_____调用。



    28、下面程序的运行结果: 。 #include <stdio.h> int fan(int n) { int k; if(n==0||n==1) return 3; else k=n-fan(n-2); return k; } int main() { printf("%d\n", fan(9)); return 0; }



    29、/*完善下列程序*/ #include <stdio.h> _______________ int main() { int a[3][3],i,j; data(a); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%3d",a[i][j]); printf("\n"); } return 0; } void data(int b[3][3]) { int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==0||i==2||j==0||j==2) b[i][j]=6; else b[i][j]=1; }



    30、/*下列程序是求n元数组的平均值,请完善程序。*/ #include <stdio.h> #define N 10 float aver (float array[ ], int n) { int i; float sum=0; for (i=0; i<n; i++) sum=sum+array[i]; return sum/n; } int main() { int i; float a[N]; for (i=0; i<N; i++) scanf("%f",&a[i]); printf("平均值 %f\n",_________); return 0; }



    第9周编程作业

    1、编写函数,计算银行存款本息并输出。



    2、数值转换



    3、求一组数中大于平均值的数的个数



    第10周 变量的作用域及编译预处理

    第10周单元测验

    1、设有以下宏定义: #define N 3 #define Y(n) ((N+1)*n) 则执行语句z=2*(N+Y(5+1));后,z的值为( )。
        A、60
        B、42
        C、48
        D、54



    2、C编译系统对程序中的宏展开是在()。
        A、编辑时进行的
        B、编译时进行的
        C、程序执行时进行的
        D、编译前预处理时进行的



    3、以下叙述不正确的是( )。
        A、全局变量可以由系统自动初始化
        B、在程序运行期间,全局变量所占存储单元的值永久保留
        C、当局部变量与全局变量重名时,全局变量起作用
        D、全局变量存放在静态存储区



    4、下面叙述中错误的是( )。
        A、在其它函数中定义的变量在主函数中也不能使用
        B、主函数中定义的变量在整个程序中都是有效的
        C、形式参数也是局部变量
        D、复合语句中定义的变量只在该复合语句中有效



    5、执行下列程序后的输出结果是( )。 #include <stdio.h> int a=3, b=4; void fun(int x1, int x2) { printf("%d, %d", x1+x2, b); } int main() { int a=5, b=6; fun(a, b); return 0; }
        A、3, 4
        B、11,1
        C、11,4
        D、11,6



    6、下列说法错误的是()。
        A、变量的作用域是指变量的作用范围,即在程序中可以被读写访问的区域,它取决于变量被定义的位置
        B、局部变量与全局变量同名时,全局变量隐藏局部变量,即全局变量起作用,局部变量不起作用
        C、形参也是局部变量,形参变量和实参变量的作用域是不同的,因此形参变量和实参变量同名时,二者互不干扰
        D、只要同名的变量出现在不同的作用域内,二者互不干扰,编译器有能力区分不同作用域中的同名变量



    7、C编译系统对文件包含命令#include "file.h"的处理通常是在( )。
        A、编译处理之前
        B、编译处理过程之中
        C、程序连接时
        D、程序执行的开始



    8、在文件包含预处理的定义中,#include后的文件名用< >括起来时,寻找被包含文件的方式是( )。
        A、仅搜索当前目录
        B、先在源程序所在目录搜索,再按系统设定的标准方式搜索
        C、仅搜索源程序所在目录
        D、按系统指定的路径下搜索指定文件



    9、如果在一个函数中的复合语句中定义了一个变量,以下正确的说法是( )。
        A、该变量在本程序范围内均有效
        B、该变量在主函数中有效
        C、该变量只在该复合语句中有效
        D、该变量在该函数中有效



    10、函数的形式参数系统默认存储类型说明是()。
        A、static
        B、extern
        C、register
        D、auto



    11、下面叙述中错误的是( )。
        A、在其它函数中定义的变量在主函数中也不能使用
        B、主函数中定义的变量在整个程序中都是有效的
        C、复合语句中定义的变量只在该复合语句中有效
        D、形式参数也是局部变量



    12、下述程序的结果为( )。 int f(int x) { static int a=3; a+=x; return a; } int main() { int k=2,m=1,n; n=f(k); n=f(m); printf("%d", n); return 0; }
        A、9
        B、6
        C、4
        D、3



    13、以下对静态局部变量的叙述,不正确的是()。
        A、在一个函数中定义的静态局部变量可以被另一函数调用
        B、数值型静态局部变量的初值默认为0
        C、静态局部变量是在编译时赋初值的,故它只被赋值一次
        D、静态局部变量在整个程序运行期间都不释放



    14、在一个函数中定义的静态局部变量可以被另一个函数调用。



    15、用户可以自己定义包含类型声明、函数原型、全局变量、符号常量等内容的头文件,使用#include 命令将其包含到程序中。



    16、条件编译可以根据设定的表达式的值,决定编译不同的程序段。



    17、内部函数是指函数的作用域仅限于本文件的函数。



    18、编译预处理命令也属于C语句,可以在末尾加分号。



    19、在一个文件内定义的静态全局变量也可以被其他文件引用。



    20、如果在一个文件内需要使用在其他文件中定义的全局变量,则需要在引用该变量的文件内,用extern对此变量做说明。



    21、宏名没有作用域,在整个文件范围内都有效。



    22、进行宏定义时,可以引用已经定义的宏名进行层层置换。



    23、带参数的宏定义,进行宏展开时与函数调用主要区别是,只替换,不求值。



    24、凡是函数中未指定存储类别的局部变量,其隐含的存储类别关键字为____。



    25、预处理命令行都必须以_____号开始 。



    26、局部静态变量是在静态存储区分配存储单元的,在整个程序运行期间始终占_____空间。



    27、在定义函数时,如果在函数名字前面加上关键字_______或省略该关键字,则函数属于外部函数。



    28、如果希望变量在函数调用结束后仍然保留其值,则可以将变量定义为局部静态变量,定义方式为在类型说明符前加上_______关键字。



    29、下面程序的运行结果: 。 #include <stdio.h> #include <ctype.h> void fun(char s[]) { int i, j; for(i=j=0; s[i];i++) if(isalpha(s[i])) s[j++]=s[i]; s[j]= '\0'; } int main() { char str[20]= "How are you!"; fun(str); puts(str); return 0; } 其中,函数isalpha(ch)的功能是判断ch是否为字母,若是,函数值为1,否则为0。



    30、下列程序的运行结果:_______。 #define MOD(x,y) x%y int main() { int z,a=15,b=100; z=MOD(b,a); printf("%d\n",++z); return 0; }



    31、下面程序的运行结果: 。 #include <stdio.h> int a=200; void f() { static a=20; a++; printf("%d,", a); } int main() { int i; for(i=1;i<=3; i++) { a++; printf("%d ", a); f(); } return 0; }



    第10周编程作业

    1、求x的n次方



    2、输出最大、最小数



    3、任意整数转换为千分位分隔的字符形式。



    第11周 指针一

    第11周单元测验

    1、如有下面的语句说明, 则表达式 *(p+3) 的值是 ( )。 int a[]={2,3,4,5,6,7}; int *p=a;
        A、3
        B、4
        C、5
        D、6



    2、如有下面的语句说明, 则执行语句for(i=0;*s++;i++); 后变量i的值是 ( )。 int i; char *s="a\n46\b";
        A、5
        B、6
        C、7
        D、8



    3、如有下面的语句说明, 则正确的赋值语句是 ( )。 char a[10], *p=a;
        A、a[10]=”VC++”;
        B、a=”VC++”;
        C、p=”VC++”;
        D、*p=”VC++”;



    4、如有下面的语句说明, 则下面赋值表达式非法的是 ( )。 int i=0, j=0, *p=NULL,*q=NULL;
        A、p=&i
        B、*q=&j
        C、i=*p++ + *q
        D、i=(int) p



    5、若有以下语句,则&a[2]-p的值是( )。 int a[3],*p=a;
        A、2
        B、3
        C、1
        D、不确定



    6、若有程序段 int b[4],*p,*q; p=&b[1]; q=&b[3]; 则q-p表示的意义是( )。
        A、表达式错误
        B、p与q之间数据个数
        C、p占据的字节数
        D、p与q之间的字节数



    7、若有定义: float *p,m; , 则以下正确的表达式是( )。
        A、p=&m
        B、p=m
        C、*p=&m
        D、*p=*m



    8、地址运算符”&”可作用于变量和数组元素,分别获得变量和数组元素的地址。



    9、只可以通过求地址运算”&”获得地址值。



    10、空指针p是指向地址为0的存贮单元的指针。



    11、如有变量的定义char *p=”abc”; 语句 *p=’X’;是合法的。



    12、如有变量的定义char s[]=”abc”; 语句char *p=s; 是合法的。



    13、如有变量的定义int *r; double x; 则语句 r=&x; 是合法的。



    14、若有定义:char ch; 使指针p指向变量ch的定义语句是_______。



    15、若已定义char *p;,使指针p指向变量ch的赋值语句是______ 。



    16、若有定义:char ch,*p=&ch; 通过指针p给变量ch读入字符的scanf调用语句是______。



    17、若有定义:char ch,*p=&ch; 通过指针p给变量ch赋字符'a'的语句是______。



    18、若有定义:char ch,*p=&ch; 通过指针p用格式输出函数输出ch中字符的语句是______。



    19、如有变量的定义int i, *p=&i; 则表达式 p==&i的值是 。



    20、将字符数组s1中的字符串拷贝到字符数组s2中,并输出s2,请完善程序。 #include <stdio.h> int main( ) { char s1[80],s2[80],*p1,*p2; gets(s1); p1=s1; p2=s2; while(*p2++=*p1++); printf("s2=%s",________); return 0; }



    21、将输入的字符串按逆序输出,例如输入abcd,则按dcba顺序输出出来,请完善程序。 #include <stdio.h> #include <string.h> int main( ) { char *str, s[20]; int n; str=s; scanf("%s",str); n=strlen(str); while(--n>=0) { str=&s[____]; printf("%c",*str); } return 0; }



    22、删除字符串的所有前导空格,请完善程序。 #include <stdio.h> void f1(char *s) { char *t; t=________; while(*s==' ') s++; while(*t++=*s++); } int main( ) { char str[80]; gets(str); f1(str); puts(str); return 0; }



    第11周编程作业

    1、利用指针编写程序,统计字符串的长度。



    2、利用指针编程,将数组中所有元素的值对称交换。



    3、利用指针编写程序,求一维数组中的最大和最小的元素值。



    第12周 指针二

    第12周单元测验

    1、如定义 int (*p)[10];, 则标识符p是( )。
        A、指向含有10个整型元素的一维数组的指针
        B、指向整型变量的地址
        C、含有10个整型元素的数组名
        D、含有10个整型指针元素的数组名



    2、以下与库函数strcpy(char *p, char *q)功能不相等的程序段是()。
        A、void strcpy1(char *p, char *q) { while ((*p++=*q++)!='\0'); }
        B、void strcpy2( char *p, char *q) { while((*p=*q)!='\0') {p++; q++;} }
        C、void strcpy3(char *p, char *q) { while (*p++=*q++); }
        D、void strcpy4( char *p, char *q) { while(*p) *p++=*q++; }



    3、以下正确的程序段是()。
        A、char s[]="12345", t[]="6543d21"; strcpy( s,t);
        B、char s[20], *t="12345"; strcat(s,t);
        C、char s[20]=" ", *t="12345"; strcat(s, t);
        D、char *s="12345", *t="54321"; strcat (s,t);



    4、下面程序段的运行结果是()。 #include <stdio.h> int main() { char s[]="example!", *t; t=s; while( *t!='p') { printf("%c", *t-32); t++; } return 0; }
        A、EXAMPLE!
        B、example!
        C、EXAM
        D、example!



    5、若有定义: char d[15],*p=d; , 则以下正确的赋值语句是( )。
        A、d[0]="I love China!";
        B、d="I love China!";
        C、*p="I love China!";
        D、p="I love China!";



    6、如定义 int *p[10];, 则标识符p是( )。
        A、指向10个整型元素的一维数组的指针
        B、整型指针变量
        C、含有10个整型指针元素的数组名
        D、指向二维数组的指针变量



    7、指向函数的指针变量的值是一个函数的入口地址。 ( )



    8、作为函数形式参数时,int x[ ][5]与int (*x)[5]两种写法等价。



    9、二维M*N数组的名字是一个指向N元数组的指针常量。



    10、如果一个变量的值是一级指针变量的地址,则称这个变量为二级指针变量。



    11、可以利用指针实现函数返回多个值。



    12、如有变量的定义int j, *q=&j; 则 表达式 q==&j的值是 。



    13、如有变量的定义double a[2], *p=a,*q=p+1; 则表达式 q-p 的值是 。



    14、以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。请填空。 void exchange(int *x, int *y) { int t; ; }



    15、下面程序的运行结果为:________。 #include<stdio.h> int main( ) { static char a[ ]=”Program”, *ptr; for(ptr=a;ptr<a+7; ptr+=2) putchar(*ptr); return 0; }



    16、下面程序的运行结果是_________。 #include<stdio.h> int main() { static int x[ ]={1,2,3,}; int s,i,*p; s=1; p=x; for(i=0;i<3;i++) s*=*(p+i); printf(“%d”,s); return 0; }



    17、如有定义char y[4]= "321",则表达式 *y+2的值是 。



    18、如有定义char z[2][4]={"MAT", "LAB"};,则表达式*(*z+2)的值是 。



    19、如有定义char y[4]="321",*py=&y[0],则表达式*(py+2) 的值是 。



    20、如有定义char z[2][4]={"MAT", "LAB"},*pz=&z[1][0];则表达式*pz+1 的值是 。



    第12周编程作业

    1、利用指针编写一函数,输入3个整数,按由大到小的顺序将它们输出。



    2、用指向数组的指针变量实现输出指定学生的全部成绩。



    第13周 结构与共用体

    第13周单元测验

    1、下面结构体的定义语句中,错误的是()。
        A、struct ord {int x; int y; int z;}struct ord a;
        B、struct ord {int x; int y; int z;}; struct ord a;
        C、struct ord {int x; int y; int z;}a;
        D、struct {int x; int y; int z;}a;



    2、有以下的结构体变量定义语句: struct student { int num; charname[9]; } stu; 则下列叙述中错误的是( )。
        A、结构体类型名为stu
        B、num是结构体成员名
        C、struct是C的关键字
        D、结构体名为student



    3、设有定义: struct complex { int real, unreal; } data1={1,8},data2; 则以下赋值语句中错误的是()。
        A、data2=(2,6);
        B、data2.real=data1.unreal;
        C、data2=data1;
        D、data2.real=data1.real;



    4、设有定义: struct {char mark[12]; int num1; double num2;} t1,t2; 若变量均已正确赋初值,则以下语句中错误的是()。
        A、t2.mark=t1.mark;
        B、t2.num2=t1.num2;
        C、t2.num1=t1.num1;
        D、t1=t2;



    5、有以下定义语句: struct student {int num; char name[9]; }; 则不能正确定义结构体数组并赋初始值的是( )。
        A、struct student stu[2]={1, "zhangsan",2,"li si"};
        B、struct student stu[2]={{1,"zhangsan"},{2,"li si"}};
        C、struct student stu[]={{1,"zhangsan"},{2,"li si"}};
        D、struct stu[]={{1,"zhangsan"},{2,"li si"}};



    6、有以下程序: #include<stdio.h> struct S { int a,b;}data[2]={10,100,20,200}; int main() {struct S p=data[1]; printf("%d\n",++(p.a)); return 0;} 程序运行后的输出结果是()。
        A、11
        B、20
        C、10
        D、21



    7、以下程序的输出结果是( )。 #include <stdio.h> int main() { struct cmplx { int x; int y; }cnum[2]={1,3,2,7}; printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x); return 0;}
        A、3
        B、1
        C、6
        D、0



    8、有以下程序: #include <stdio.h> struct ord { int x,y; } dt[2]={1,2,3,4}; int main() { struct ord *p=dt; printf("%d,",++p->x); printf("%d\n",++p->y); return 0; } 程序的运行结果是()。
        A、2,3
        B、1,2
        C、4,1
        D、3,4



    9、若有以下定义: struct date{int y,m,d;}; struct student { int num;char name[9]; structdate bir;} stu,*p=&stu; 则以下对结构体变量stu成员的引用中错误的是( )。
        A、p->bir->y
        B、stu.bir.y
        C、stu.name
        D、p->bir.y



    10、若有以下说明和定义 union dt { int a; char b; double c; }data; 以下叙述中错误的是()。
        A、data的每个成员起始地址都相同
        B、程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000
        C、变量data所占内存字节数与成员c所占字节数相等
        D、data可以作为函数的实参



    11、设有定义: struct student { int ID; char name[12]; }s,*p=&s; 语句:p.ID=20161001;是否正确?



    12、使几个不同类型的变量共占同一段内存的结构称为共用体。



    13、在定义一个共用体变量时,系统分配给它的存储空间是该共用体变量中占用存储单元最长的成员的长度。



    14、结构体变量可以在函数间传递,传递方式有值传递和地址传递两种。



    15、结构体是不同数据类型的数据集合,作为数据类型, 必须先定义结构体______,再定义结构体变量。



    16、设有定义: struct person { int ID; char name[12]; }pa; 请将scanf("%s",______);语句补充完整,使其能够为结构体变量pa的成员name正确读入数据。



    17、以下程序运行后的输出结果是 ______。 #include<stdio.h> struct NODE { int k; char s[20]; }; int main() { struct NODE m[3]; int i; for(i=0;i<3;i++) m[i].k=i+1; for(i=0;i<3;i++) printf("%d ",m[i].k); return 0; }



    18、设有以下语句: struct st {int n; struct st *next; }; static struct st a[3]={5, &a[1], 6,&a[2], 9, '\0'}, *p; p=&a[0]; 则表达式++p->n的值是______。



    19、程序运行的结果是______。 #include <stdio.h> int main() { union example { int a; int b; }e; e.a=1;e.b=2; printf("%d\n",e.a); return 0; }



    第13周编程作业

    1、某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。



    第14周 文件

    第14周单元测验

    1、在C语言中,文件存取的基本单位是:
        A、字
        B、字节
        C、位
        D、回车符



    2、在C语言中,从文件中将数据读到内存中称为:
        A、输入操作
        B、输出操作
        C、修改
        D、删除



    3、定义fp为文件型指针变量,以读写方式打开一个已存在的文本文件test.dat,下面fopen函数正确的调用方式是:
        A、FILE *fp; fp=fopen("test.dat", "rb");
        B、FILE*fp; fp=fopen("test.dat", "r+");
        C、FILE *fp; fp=fopen("test.dat", "r");
        D、FILE *fp; fp=fopen("test.dat", "rb+");



    4、若FILE *fp; 关闭文件的语句是:
        A、close(fp);
        B、fclose( );
        C、fclose(fp);
        D、close( );



    5、FILE *fp; 有两个整型变量a和b, 若要从文件把数据读到其中, 正确的形式是:
        A、fscanf(fp,"%d%d",a ,b);
        B、fscanf(fp,"%d%d",&a ,&b);
        C、fscanf("%d%d",&a ,&b, fp);
        D、fprintf(fp,"%d",a ,b);



    6、定义fp为文件型指针变量,使用fopen只读方式打开一个已存在的二进制文件,以下正确的调用形式为:
        A、fp=fopen("my.dat", "r");
        B、fp=fopen("my.dat", "rb+");
        C、fp=fopen("my.dat", "rb");
        D、fp=fopen("my.dat", "r+");



    7、若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为:
        A、-1
        B、1
        C、0
        D、非零



    8、下列关于C语言数据文件的叙述中正确的是:
        A、文件由数据流形式组成,可分为二进制文件和ASCII码字符序列组成的文本文件。C语言可以读/写文本文件和二进制文件。
        B、文件是由ASCII码字符序列组成的, C语言只能读/写文本文件。
        C、文件是由二进制数据序列组成, C语言只能读/写二进制文件。
        D、C语言只能按格式化的方式读/写文件 。



    9、若执行fopen函数时发生错误,则函数的返回值是:
        A、EOF
        B、1
        C、地址值
        D、NULL



    10、若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是:
        A、rb
        B、wb
        C、wb+
        D、ab



    11、“文件”一般指存储在外部介质上的数据集合。



    12、C语言中,文件的存取方式可以是随机存取,也可以是顺序存取。



    13、feof(fp)函数用来判断fp所指向的文件是否结束,若遇到文件结束符,函数feof()的返回值是假(0),否则是真(非0),



    14、对文件进行读/写操作之前必须打开文件。



    15、C语言中在打开文件时,必须说明文件的使用方式, "r+"用于打开一个不存在的文件。



    16、对文件读写操作之后,程序结束之前必须关闭文件。



    17、C语言中文件的使用方式"w" 用于文本文件,若文件存在则文件内容被清除,若文件不存在则新建一个文本文件,然后进行写操作。



    18、C语言中文件的使用方式 "wb" 用于二进制文件,若文件存在则文件内容被清除,若文件不存在则新建一个二进制文件,然后进行写操作。



    19、C语言中,fprintf是一个向文件格式化写数据(输出)的函数。



    20、在C语言中,当顺利地执行了关闭文件操作后,文件关闭函数返回值为0。



    21、//下面程序用来统计文件中字符的个数。 #include <stdlib.h> #include <stdio.h> int main() { FILE *fp; int num=0; if((fp=fopen("test.dat", "r"))==NULL) { printf("Can't Open File!\n"); exit(0); } while ( ) { fgetc(fp); num++; } printf("num=%d\n", num-1); fclose(fp) ; return 0; }



    22、在C语言中,根据要处理的文件存储的编码形式,可以把文件分为ASCII文件和 文件.



    23、调用 fopen 函数打开一文本文件,在"使用方式"这一项中, 向已存在的文本文件尾增加数据需填入 。



    24、函数fgetc(FILE *fp)读到文件尾结束符时,返回一个文件结束标志EOF,其值为:



    25、//下面程序是把从键盘输入的字符依次存放到文件中,用“#”作为结束输入的标志。 #include <stdlib.h> #include <stdio.h> int main() { FILE *fp; char ch, if((fp=fopen("test.txt","w"))==NULL) { printf("Can't Open File\n"); exit(0); } printf("Enter data\n"); while((ch=getchar())!='#') fputc( , fp); fclose(fp); return 0; }



    C语言程序设计期末考试

    C语言程序设计课程期末考试

    1、以下说法不正确的是()。
        A、一个C程序有且只能有一个main 函数。
        B、C程序总是从main 函数开始执行,无论main函数在程序中的什么位置。
        C、函数可以嵌套调用,但是不可以嵌套定义。
        D、函数如果使用在定义之前,可以不必进行原型声明,



    2、与k=n++完全等价的表达式是( )。
        A、k=n, n=n+1
        B、n=n+1, k=n
        C、k+=n+1
        D、k=++n



    3、下列哪个不是有效的字符常量( )。
        A、"a"
        B、‘\x6c ’
        C、‘\''
        D、'1'



    4、已有定义char s1,s2[20]; ,下面可以为所定义的变量正确输入数据的语句是( )。
        A、scanf ("%c%s", &s1,s2);
        B、scanf ("%s%c", &s1,s2);
        C、scanf ("%c%s", &s1,&s2);
        D、scanf ("%c%s",s1,s2);



    5、有定义语句: char s[30]; 若将字符串"I am student."存放在字符数组中,使用正确的语句是()。
        A、gets(s);
        B、s=gets();
        C、scanf("%s",s);
        D、scanf("%s",&s);



    6、判断char型变量ch是否为大写字母的正确表达式是()。
        A、(ch>='A')&&(ch<='Z')
        B、('A'>=ch)||('Z'<=ch)
        C、65<=ch<=90
        D、(ch>=A)&&(ch<=Z)



    7、执行下面程序段后,k的值是:( )。 int k=2; switch(k+1) { case 3:k+=1; case 4:k--;break; case 5:k*=3; case 6:++k; }
        A、2
        B、9
        C、10
        D、6



    8、下面的定义语句中,使数组str不能正确保存字符串的是()。
        A、char str[6]="China";
        B、char str[ ]="China";
        C、char str[5]={'C','h','i','n','a'};
        D、char str[6]={"China"};



    9、下面程序段的功能是()。 int x,k=0; printf("请输入x: "); scanf("%d",&x); do { x=x/10; k++; }while(x>0); printf("k=%d ",k);
        A、输出x/10的商
        B、求x的各位数之和
        C、当x>0时,输出x的位数
        D、输出x的位数



    10、执行语句 for(i=1;i++<5;) ; 后变量 i 的值是( )。
        A、5
        B、6
        C、4
        D、不确定



    11、针对for循环语句,for(表达式1;表达式2;表达式3),下列说法正确的是( )。
        A、break语句只能跳出所在层循环
        B、break语句可以一次性跳出多层嵌套循环
        C、continue语句可以一次性跳出多层嵌套循环
        D、continue语句只能跳出所在层循环



    12、下面程序的功能是判断用10元人民币兑换角币有多少种换法(角币有1角、2角、5角三种)。请选择正确的表达式。 #include <stdio.h> int main( ) { int i,j,k,m=0; for(i=0;i<=20;i++) for(j=0; ;j++) for(k=0;k<=100;k++) if(i*5+j*2+k==100) { m++;printf("i=%d,j=%d,k=%d\n",i,j,k);} printf("m=%d",m); return 0; }
        A、j<=50
        B、j<50
        C、j>50
        D、j>=50



    13、若有变量声明语句: int a=10; int *p=&a; 则*p的值是( )。
        A、变量p的地址值
        B、变量p的值
        C、变量a的地址值
        D、变量a的值



    14、假定有定义语句 int a[10], x, *p=a; 若要把数组a中下标为3的元素值赋给x,下面不正确的语句为( )。
        A、x=*p+3;
        B、x=*(p+3);
        C、x=p[3];
        D、x=a[3];



    15、若有定义: char d[15],*p=d; , 则以下正确的赋值语句是( )。
        A、p="I love China!";
        B、d[0]="I love China!";
        C、d="I love China!";
        D、*p="I love China!";



    16、主函数中有声明语句: int a[100], n=5; 下列函数调用和函数定义语句中,实参和形参的对应正确的是( )。
        A、f(a, n); int f(int a[], int n);
        B、f(a,n); int f(int a, int n);
        C、f(a[100], n); int f(int a[], int n);
        D、f(a[100], n); int f(int a[100], int n);



    17、下述程序的结果为( )。 int f(int x) { static int a=3; a+=x; return a; } int main() { int k=2,m=1,n; n=f(k); n=f(m); printf("%d", n); return 0; }
        A、6
        B、9
        C、4
        D、3



    18、设已定义下面的fun函数,则( )是对fun函数正确调用。 void fun(int x) { ....... }
        A、m=fun(5);
        B、fun();
        C、fun(5);
        D、printf("%d",fun(5));



    19、下列叙述错误的是( )。
        A、在函数之外定义的变量是全局变量
        B、全局变量不一定在所有的函数中有效
        C、在函数内定义的变量和形参都属于局部变量
        D、在其他函数中定义的变量在主函数中也不能使用



    20、设整型变量x、y、z的值分别为3、2、1,则下列程序段的输出是( )。 if(x>y) x=y; if(x>z) x=z; printf("%d,%d,%d\n",x,y,z);
        A、1,2,1
        B、3,2,1
        C、1,2,3
        D、1,1,1



    21、能正确表达逻辑关系“0<a<1并且0<b<1”的表达式是( )。
        A、(0<a<1)&&(0<b<1)
        B、(a>0&&a<1)&&(b>0&&b<1)
        C、(a>0&&a<1)||(b>0&&b<1)
        D、(a>0||a<1)&&(b>0||b<1)



    22、下面程序计算e的值,要求最后一项的绝对值小于 ,并统计出累加了多少项。请在空白处选择合适的语句,使程序正确。 #include <math.h> #include <stdio.h> int main() { int n = 1, count = 1; double e = 1.0, term = 1.0; long fac = 1; for (n=1; ________________; n++) { fac = fac * n; term = 1.0 / fac; e = e + term; count++; } printf("e = %f, count = %d\n", e, count); return 0; }
        A、fabs(term)>=1e-5
        B、fabs(term)<=1e-5
        C、fabs(term)<1e-5
        D、fabs(term)!=1e-5



    23、下面程序的功能是输出30以内素数及素数之和,请选择正确的语句( )。 #include "stdio.h" int main() { int j,i,sum=0; for(i=2;i<=30;i++) { for(j=2;j<i;j++) if(i%j==0) ___________; if(j>=i) { printf("%-3d",i); sum+=i; } } printf("\n%d\n",sum); return 0; }
        A、break
        B、continue
        C、goto
        D、return



    24、下面程序的功能是:从键盘输入10个字符,输出其中数字字符。请完善程序。 #include <stdio.h> int main( ) { int i; char c; for(i=1;i<=10;i++) { c=getchar( ); if(c< '0' ||c> '9') _________ ; putchar(c); } return 0; }



    25、设有定义: struct person { int ID; char name[12]; }pa; 请将scanf("%s",______);语句补充完整,使其能够为结构体变量pa的成员name正确读入数据。



    26、int x=2,y=3,z=4; 则表达式x+y&&(x=y)的值为_____。



    27、若有定义 int a=3,b=2,c=6,d=5,n=8; 则 表达式 (m=a<b)&&(n=c-d)的值为_______。



    28、下列程序实现从已有字符串的指定位置复制为新字符串,请将程序补充完整,使程序正确。 #include <stdio.h> int main() { int n; char s1[30],s2[30]; void strcopy(char *p1,char*p2); printf("please input s1:"); gets(s1); printf("please input n:"); scanf("%d",&n); strcopy(s1+n-1,s2); puts(s2); return 0; } void strcopy(char *p1,char*p2) { for( ;________________ ; ) *p2++=*p1++; *p2='\0'; }



    29、执行下面程序段后,ch的值是( )。 char ch='a'; ch=(ch>='A'&&ch<='Z')?(ch+32):ch;



    30、下面程序的运行结果为:________。 #include<stdio.h> int main( ) { char a[ ]="Program", *ptr; for(ptr=a;ptr<a+7; ptr+=2) putchar(*ptr); return 0; }



    C语言程序设计-苏惠香(71170282-01) - 中国大学mooc》由《超星尔雅通识课题库答案》整理呈现,请在转载分享时带上本文链接,谢谢!

    支持Ctrl+Enter提交
    超星尔雅通识课题库答案 © All Rights Reserved.  Copyright Your WebSite.Some Rights Reserved.
    联系我们QQ 59982118|