大一期末C语言程序设计基础题库与总结复习资料.docx
《大一期末C语言程序设计基础题库与总结复习资料.docx》由会员分享,可在线阅读,更多相关《大一期末C语言程序设计基础题库与总结复习资料.docx(16页珍藏版)》请在冰豆网上搜索。
大一期末C语言程序设计基础题库与总结复习资料
C语言题库
第一章
计算机语言经历发展阶段:
机器语言、符号语言、高级语言
程序结构有3种:
顺序结构,选择结构,循环结构
C语言的特点:
允许直接访问物理地址。
【C语言中含有的位和指针运算,能够直接对内存地址进行访问。
】
不是C语言的特点的是:
能够编制出功能复杂的程序【所有程序都可以,不算特点】
Main:
主函数,是所有程序运行的入口、起点。
一个C语言程序必须只有一个main函数。
程序总是从main函数开始执行,main函数可以放任何位置,到main函数结束。
函数体由花括号括起来
结束标志:
return
return0的作用是:
当main函数执行结束前将整数0作为函数值返回到调用函数处
return(z)的作用是:
将z的值作为max的函数值返回给调用max函数的函数。
只有通过return(z)才能把求出的z值作为函数值并返回调用它的main函数中
C语言程序的结构:
由一个或多个源程序(C语言编写的程序,也可以叫编译单位)文件组成(源程序文件中包含:
预处理指令、全局声明、函数定义)
函数是C程序的主要组成部分(也是基本单位),C语言由函数组成。
函数包括两部分:
函数首部、函数体
C语言本身不提供输入输出语句,输入输出的操作是有库函数scanf和printf等函数来完成的。
程序应包含注释
#define和printf都不是C语句
C语言程序的运行经过:
编辑(edit)、编译(compile)、连接(link)【C语言中是build】、执行(execute)。
C语言源程序文件的后缀是.cpp,经过编译之后,生成后缀为.obj的目标文件,经连接生成后缀.exe的可执行文件
C语言的储存类型包括register、extern、statis和auto
基础知识
6、用C语言编写的源文件经过编译,若没有产生编译错误,则系统将(C)。
A.生成可执行目标文件B.生成目标文件
C.输出运行结果D.自动保存源文件
运算优先级:
!
(非)>算数(如%)>关系>逻辑>赋值运算符(低)
空语句:
只有分号组成的语句,即一个分号。
作用:
作为流程的转向点,作为循环语句的循环体;
消耗CPU时间,延时;
程序可读性好,以后扩充新的功能方便。
函数的定义不可以嵌套,但函数的调用可以嵌套
计算机的数据在电脑中保存是以二进制的形式,数据存放的位置就是他的地址。
Char型数据在内存中的储存形式是ASCII码。
C语言只有八、十、十六进制,八进制规定要以0开头,十六进制要以0x开头
定义不同类型的变量时应用分号
填空题
&是地址运算符,&a是指变量a的内存地址。
Scanf函数中的“格式字符”后面应该是变量地址,而不是变量名。
若想输出字符%,则应该在“格式字符”的字符串中用连续2个%号表示。
1、C语言只有32个关键字和9种控制语句。
2、每个源程序有且只有一个main函数,系统总是从该函数开始执行C语言程序。
3、C语言程序的注释可以出现在程序中的任何地方,它总是以\*符号作为开始标记,以*/符号作为结束标记。
4、输入操作是由库函数scanf完成的,输出操作是由库函数printf完成的。
5、系统默认的C语言源程序文件的扩展名是.c,经过编译后生成的目标文件的扩展名是.obj,经过连接后生成的可执行文件的扩展名是.exe。
(1)C语言中,数组的各元素必须具有相同的,元素的下标下限为,下标必须是正整数、0、或者。
但在程序执行过程中,不检查元素下标是否。
数据类型,0,符号常量,越界
(2)C语言中,数组在内存中占一片的存储区,由代表它的首地址。
数组名是一个常量,不能对它进行赋值运算。
连续,数组名,地址
(1)变量的作用域主要取决于变量,变量的生存期既取决于变量,又取决于变量。
所处的位置,所处的位置,存储类型
(2)说明变量时,若省略存储类型符,系统默认其为存储类别,该存储类别的类型符为:
。
动态,auto
(3)静态型局部变量的作用域是,生存期是。
它所在的局部,整个程序
(5)函数的形式参数的作用域为,全局的外部变量和函数体内定义的局部变量重名时,_________变量优先。
该函数中,局部
(6)若自定义函数要求返回一个值,则应在该函数体中有一条语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符。
return,void
(7)若函数的形式参数是指针类型,则实参可以是或。
指针,数组名
第二章算法
2.4算法的特性
有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性
第三章顺序程序设计
3.2.1常量和变量
常量:
整型;
实型:
e、E前后必须有数字,后必须为整数,正负;
字符(普通字符、转义字符):
单撇号(好像是字符常量的话必须用);
字符串:
双撇号;
(字符常量占1个字节,字符串常量占n+1个字节,因为有系统的字符串终止符\0。
)
符号:
用#define指令,用一个符号名称代表一个常量。
变量:
先定义后使用
1.下列定义变量的语句中错误的是______。
A、int_intB、doubleint_
C、charForD、floatUS$
答案:
D【变量命名只能含字母、下划线、数字(不能开头),D中含特殊字符】
用户标识符
标识符:
标识符分为关键字、预定义标识符、用户标识符。
关键字不可作用户标识符符号:
如if,for,while,int,default,但If、IF、Main、Double可以用
预定义标识符可做用户标识符:
define,scanf,printf,include。
用户标识符只能含字母(区分大小写)、下划线、数字(不能开头)。
一般变量名小写,符号常量命名大写。
Void可以
3.以下4组用户定义标识符中,全部合法的一组是______。
A、_mainincludesin
B、If-maxturbo【负号开头】
D、intk_2_001?
?
?
【int】
答案:
A
6.以下有4组用户标识符,其中合法的一组是______。
C、f2_G3IFabc
D、WORDVoiddefine
答案:
C
转义字符
\o输出形式是八进制码
\xh输出形式是十六进制码
\’输出单撇号字符
3.2.2数据类型
C语言三种基本类型数据类型包括______。
整型(整数)、实型(浮点型数据)、字符型
【没有逻辑类型也没有集合类型】
3.2.3整型数据
低类型会转化为高类型
int的取值范围-32768到32767
整型一般是4字节
40.inti=65536;
printf("%d\n",i);
上面程序片段的输出结果是______。
A、65536B、0C、有语法错误,无输出结果D、-1
答案:
B
45.在C语言中,合法的长整型常数是______。
A、0LB、4962710
C、324562&D、216D
答案:
A【以l或L结尾的是长整型常数】
3.2.4字符型数据
ASCII:
数字字符0对应48,数字字符1→49,A→65,a→97,英文字符对应的ASCII码从65~90,97~122
在输出字符变量的值时,可以控制d、c来选择以整数形式或字符形式输出。
1字节
21、若有说明语句:
charc='\72';则变量c在内存占用的字节数是
(1)。
309.已定义c为字符型变量,则下列语句中正确的是______。
A、c='97';【数字字符只有0~9】B、c="97";C、c=97;D、c="a";
答案:
C
(9)设有定义:
chars[12]="string";则printf("%d\n",sizeof(s));的输出是(D)。
A.6B.7C.11D.12
3.2.5实型数据(浮点型数据)
实型变量:
(1)单精度型float4字节用%f
(2)双精度型double8字节用%lf
实型变量的输入格式是%f也可以是%nf,n代表小数点后保留的位数。
28.以下符合C语言语法的实型常量是______。
B、3.14159EC、.5E-3D、E15
答案:
C【0.1可以写成.1】
3.3运算符和表达式
强制类型转换是(int)a
逗号运算符的级别最低,赋值的级别倒数第二
50.
main()
{
chara1='M',a2='m';
printf("%c\n",(a1,a2));
}
则程序输出小写字母m。
(输出最后一个值)
3.4.2赋值表达式
赋值符号“=”是赋值运算符,它将数据赋给变量。
赋值运算符将变量和表达式连接,称为“赋值表达式”。
等号左边是“左值”,必须是变量不是表达式,如a+b不可以,左、右值都可以是右值。
表达式可以是赋值表达式:
a=(b=5),因为赋值运算符遵循从右至左,因此等价于a=b=5。
定义时不可以连续赋值,赋值语句可以连续赋值
12.以下选项中非法的表达式是___D___。
A、0<=x<100B、i=j==0C、(char)(65+3)D、x+1=x+1
15.若各变量已正确赋值,则下列选项中正确的表达式是___C___。
A、a=a+b=b++
B、w%((int)a+b)
C、(c+w)%(int)a
D、w=a=b;【加了分号是赋值语句,不是表达式】
17.若变量a、i已正确定义,且i已正确赋值,合法的语句是___B___。
A、a==1B、++i;C、a=a++=5;D、a=int(i)(i的字符型不确定);
3.5数据的输入输出
Scanf:
scanf函数中的格式控制后面是变量地址。
有逗号就有逗号(在格式控制字符串中除了格式声明外还有其他字符,则在输入数据时也应在对应位置上输入相同字符)。
用%c格式声明输入字符时,空格字符和转义字符中的字符都作为有效字符输入,因此输入时不要有空格。
Scanf和gets:
如果键入goodgood,则
Scanf接收good,gets接收goodgood
在输入数值数据时,遇到空格、回车、tab或非法字符都认为该数据结束。
如:
Scanf:
(“%d,%c,%f”,&a,&b,&c);
若输入1234a123o.26,得a是1234,b是a,c是123
3.5.3输出
d格式符:
输出一个有符号的十进制整数(长整型用%ld,双长整型用%lld)
c格式符:
输出一个字符(一个整数在0~127范围也可以用%c使之按字符形式输出)
s格式符:
输出一个字符串
f格式符:
输出实数(%f不指定输出数据的长度,系统一般是小数输出六位,即使之前定义是双精度型)
e格式符:
%e指定以指数形式输出实数
第四章选择结构
4.3关系运算符和关系表达式
14、设a=1,b=2,c=3,d=4,则表达式:
a
a:
ca:
d的结果为
(1)。
三目运算符从右到左运算,先把第一个冒号右边看成整体
4.4逻辑运算符和逻辑表达式
值为非0时被认为是真,包括字符的ASCII值。
if语句中表达式可以是任何数值表达式,因为可以判断真假。
=是赋值,==是等号
逻辑运算符两侧运算对象的数据类型是任何类型数据。
第五章循环结构
在while循环和dowhile循环中,只要在while后面的括号内指定循环条件,因此循环体中包含使循环趋于结束的语句。
同理for的表达式3也是
261.
下列程序的输出结果是___1___。
main()
{inti,j,m=0,n=0;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
if(j>=i)
m=1;【if就到这了】
n++;
printf("%d\n",n);
}
【好像前面那一大段与后面的无关,要看到从哪到哪】
254.
t为int类型,进入下面的循环之前,t的值为0
while(t=1)
{……}
则以下叙述中正确的是___B___。
B、循环控制表达式的值为1
C、循环控制表达式不合法
258.
intk=0;
while(k=1)k++;
while循环执行的次数是无限次。
12.
下面程序的输出是___-1___。
main()
{intx=2;
while(x--);
printf("%d\n",x);}
【到0才停,自减放在后面,所以是-1】
4.7switch多分支选择结构
只可以和break使用,没有continue
必须要有break,不然后面的也会输出(注意判断题)
5.3do-while
特点:
无条件的执行循环体,再判断循环条件是否成立。
在do-while循环体中,while表达式后面要有分号。
使用whiledo-while循环时,循环变量初始化的操作应在循环语句之前完成
5.4for
三个表达式都可以省略。
5.7break和continue
break:
其作用是使流程跳到循环体之外(跳出包含该break语句的所有循环),执行循环体下面的语句。
Break只能用于循环语句和switch语句。
continue:
其作用为结束循环体下面的语句,执行下一次语句。
(若满足if的条件,则跳过)
第六章利用数组处理批量数据
6.1一维数组
常量表达式中可以包括常量和符号常量,如inta【3+5】是合法的,但是不能用动态定义,如输入。
在对数组全部赋初值时,数组的个数已经确定,可以不指定数组长度。
(10)合法的数组定义是()。
A
A.chara[]="string";
D.chara[]={0,1,2,3,4,5}【类型】
6.3字符数组
字符数组的输入输出:
%c:
逐个字符输入输出
%s:
整个字符串一次输入或输出
puts:
将字符串输出到终端。
如str是一个字符数组名,且初始化为China,则puts(str)输出China。
【字符串可包含转义字符】
gets:
同puts,用来输入。
可以有空格
-----以上都只能输入输出一个字符串,括号里面不能有两个-----
Strcat:
连接【字符数组1必须足够大,以便容纳连接后的字符串】
Strcpy、strncpy:
复制2到1
【字符数组1必须足够大,以便容纳被复制的字符串2】
【字符数组1必须写成数组名形式,字符串2可以是字符数组名或字符串常量】
【strncpy是将2中前n个字符复制,如写成strncpy(str1,str2,2)】
Strcmp:
比较大小。
小写的大。
写成strcmp(str1,str2)
Strlen:
字符串长度
Strlwr:
转化成小写
Strupr:
转化成大写
数组长度:
Chara[]={‘a’,’b’,’c’};数组长度为3,字符串长度不定,sizeof(a)为3
Chara[5]={‘a’,’b’,’c’};数组长度为5,字符串长度为3,sizeof(a)为5
(8)设有定义:
chars[12]="string";则printf("%d\n",strlen(s));的输出是6。
(12)下列语句中,正确的是()。
D
B.chara[][3]={'abc','1'};
D.chara[][3]={"a","1"};
(9)staticcharc[]={'a','','b','o','o','k','\0'};与staticcharc[]={'a','','b','o','o','k'};等价。
(×)
305.main()
{
chars[]="\n123\\";【\是转义字符,所以共有5个字符,\n,1,2,3,\\】
printf("%d,%d\n",strlen(s),sizeof(s));[sizeof还要加一个\0]
}
执行后输出结果是___5,6___。
第七章用函数实现模块化程序设计
5、下列说法中错误的是(D)。
A.主函数可以分为两个部分:
主函数说明部分和主函数体
B.主函数可以调用任何非主函数的其他函数
C.任何非主函数可以调用其他任何非主函数
D.程序可以从任何非主函数开始执行
(×)(3)在C的函数中,最好使用全局变量。
【尽可能定义内部变量,少使用全局变量】
(√)(5)所有函数定义都是并行的,相互独立的。
主函数main中定义的变量在整个文件或程序中有效(×)
7.2怎样定义函数
定义函数:
指定函数的名字,以便以后按名调用。
指定函数的类型,即函数返回值的类型。
指定函数的参数的名字和类型,以便在调用函数时向他们传递数据。
对无参函数不需要这项。
指定函数功能(最重要的)。
定义空函数作用:
程序结构清楚,可读性好,以后扩充新功能方便
(2)函数在定义时,省略函数类型说明符,则该函数值的类型为int。
92.以下函数值的类型是___int___。
fun(floatx)
{
floaty;
y=3*x-4;
returny;
}
7.3调用函数
(对于不带回值的函数,应用void类型)
实参:
在主调函数中调用一个函数时,括号中的参数
形参:
定义函数时括号中的变量
实、形参类型一致,字符型和int型通用
数据传递:
调用函数时,实参的值传递给被调用函数的形参。
调用结束,形参单元释放,实参单元保留并维持原值。
实→形:
值传递,单向传递。
函数的返回值:
函数的返回值是通过函数中的return语句获得的。
被调函数返回给主调函数的值称为C。
形参B.实参C.返回值D.参数
(8)函数调用可以作为一个函数的形参。
(×)【返回值存在寄存器中,没有地址,不能作为形参,可以作为实参】
被调函数调用结束后,返回到D
D.主调函数中该被调函数调用语句的后一语句?
(2)以下函数,真正地没有返回值。
B
A.inta(){inta=2;return(a);}B.voidb(){printf("c");}
C.inta(){inta=2;returna;}
※(7),可以不进行函数类型说明。
D
A.被调函数的返回值是整型或字符型时B.被调函数的定义在主调函数定义之前时
C.在所有函数定义前,已在函数外预先说明了被调函数类型D.以上都是
(12)能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是。
A
A.return这两个数B.形参用两个元素的数组
C.形参用两个这种数据类型的指针D.用两个全局变量
83.设函数fun的定义形式为
voidfun(charch,floatx){……}
则以下对函数fun的调用语句中,正确的是___D___。
A、fun("abc",3.0);B、t=fun('D',16.5);
C、fun('65',2.8);D、fun(32,32);
函数调用可以作为独立的语句存在(√)
7.5函数的嵌套调用
函数不能嵌套定义,可以嵌套调用
函数调用可以在D
A.函数表达式中B.函数语句中C.函数参数中D.以上都是
99.下列叙述中正确的是___D___。
B、C语言的子程序有过程和函数两种【没有过程只有函数】
C、C语言的函数可以嵌套定义
D、C语言所有函数都是外部函数
7.6函数的递归调用
定义:
在调用一个函数的过程中直接或间接调用该函数本身
7.7数组作为函数参数
(10)定义函数时,形参的类型说明可以放在函数体内。
(×)
【类型说明放在形参表列内说明,或放在函数定义的第二行】
实参:
可以是常量,变量,表达式,函数
形参:
局部变量。
离开函数不可使用,只有在被调用时才分配内存单元
数组元素:
作函数实参,不能作形参。
因为形参是在函数被调用时临时分配储存单元的。
传递方式:
值传递;
传递方向:
从实参传到形参,单向传递。
数组元素作实参:
传递值;
用数组名作实参,传递数组首元素的地址(首地址)。
形参数组可以不指定大小,如floataverage(floatarray[])
以下对C语言函数的有关描述中,正确的是。
A
A.调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B.C函数既可以嵌套定义又可递归调用
C.函数必须有返回值,否则不能使用函数
D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
第八章指针
8.1指针是什么
指针是一个地址,指针变量是存放地址的变量。
指针变量的值是地址
定义指针变量时必须指定基类型
8.char*p="girl";的含义是定义字符型指针变量p,p的值是字符串"girl"(的地址)。
(×)
8.2指针变量
定义指针变量:
int*pointer_1;
把地址赋给指针变量:
pointer_1=&a;(也说明了a是int类型的信息)
【可以在定义指针变量时同时初始化:
int*p=&a】
输出变量a的值:
printf(“……”,*pointer_1);
好像输入变量a的值是不用&。
1、若有定义:
charch;
(1)使指针p指向变量ch的定义语句是char*p=&ch;。
(2)若已定义char*p;,使指针p指向变量ch的赋值语句是p=&ch;。
(3)在
(1)的基础上,通过指针p给变量ch读入字符的scanf调用语句是scanf(“%c”,p);。
(4)在
(1)的基础上,通过指针p给变量ch赋字符’a’的语句是*p=’a’;。
3、以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。
请填空。
voidexchange(int*x,int*y)
{intt;
t=*y;*y=*x;*x=t;
}
1.已知函数fread的调用形式为fread(buffer,size,count,fp),其中buffer代表的是(B)。
A存放读入数据项的存储区B存放读入数据的地址或指向此地址的指针
C一个指向所读文件的文件指针D一个整形变量,代表要读入的数据项总数
6.函数调用语句:
fseek(fp,-10L,2);的含义是(A)。
A将文件位置指针从文件末尾处向文件头的方向移动10个字节
B将文件位置指针从当前位置向文件头的方向移动10个字节
C将文件位置指针从当前位置向文件末尾方向移动10个字节
D将文件位置指针移到距离文件头10个字节处
9、以下程序的输出结果是(B)。
A、运行出错B、100C、a的地址D、b的地址
#include
voidmain()
{
int**k,*a,b=100;
a=&b;k=&a;
printf(“%d\n”,**k);
}
8.3指针引用数组
下标法:
Inta[10]={……};
Int*p;
p=&a[0](把元素赋给指针变量)
指针法:
*(p+i)
a[i],*(a+i)和*p是一样的,在输出的时候。
在C语言中,数组名代表数组中首元素的地址,因此下面两个语句等价:
P=&a[0];p=a;
在指针已指向一个数组元素时,可以对指针进行以下运算:
P+1;p-1;p++;p--;p1-p2(当两个指针都指向同一数组