大一期末C语言程序设计基础题库与总结复习资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言题库
第一章
计算机语言经历发展阶段:机器语言、符号语言、高级语言
程序结构有3种:顺序结构,选择结构,循环结构
C语言的特点:允许直接访问物理地址。
【C语言中含有的位和指针运算,能够直接对内存地址进行访问。
】
不是C语言的特点的是:能够编制出功能复杂的程序【所有程序都可以,不算特点】
Main:
主函数,是所有程序运行的入口、起点。
一个C语言程序必须只有一个main函数。
程序总是从main函数开始执行,main函数可以放任何位置,到main函数结束。
函数体由花括号括起来
结束标志:return
return 0的作用是:当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 _int
B、double int_
C、char For
D、float US$
答案:D【变量命名只能含字母、下划线、数字(不能开头),D中含特殊字符】
用户标识符
标识符:
标识符分为关键字、预定义标识符、用户标识符。
关键字不可作用户标识符符号:如if,for,while,int,default,但If、IF、Main、Double可以用
预定义标识符可做用户标识符:define,scanf,printf,include。
用户标识符只能含字母(区分大小写)、下划线、数字(不能开头)。
一般变量名小写,符号常量命名大写。
Void可以
3.以下4组用户定义标识符中,全部合法的一组是______。
A、_main include sin
B、If -max turbo【负号开头】
D、int k_2 _001 【int】
答案:A
6.以下有4组用户标识符,其中合法的一组是______。
C、f2_G3 IF abc
D、WORD Void define
答案:C
转义字符
\o输出形式是八进制码
\xh输出形式是十六进制码
\’输出单撇号字符
3.2.2数据类型
C语言三种基本类型数据类型包括______。
整型(整数)、实型(浮点型数据)、字符型
【没有逻辑类型也没有集合类型】
3.2.3整型数据
低类型会转化为高类型
int的取值范围-32768到32767
整型一般是4字节
40. int i=65536;
printf("%d\n",i);
上面程序片段的输出结果是______。
A、65536
B、0
C、有语法错误,无输出结果
D、-1 答案:B
45.在C语言中,合法的长整型常数是______。
A、0L
B、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、若有说明语句:char c='\72';则变量c在内存占用的字节数是( 1 )。
309.已定义c为字符型变量,则下列语句中正确的是______。
A、c='97';【数字字符只有0~9】
B、c="97";
C、c=97;
D、
c="a";
答案:C
(9) 设有定义:char s[12] = "string"; 则printf("%d\n ", sizeof(s)); 的输出是(D)。
A. 6
B. 7
C. 11
D. 12
3.2.5实型数据(浮点型数据)
实型变量:(1)单精度型float 4字节用%f
(2)双精度型double 8字节用%lf
实型变量的输入格式是%f也可以是%nf,n代表小数点后保留的位数。
28.以下符合C语言语法的实型常量是______。
B、3.14159E
C、.5E-3
D、E15
答案:C【0.1可以写成.1】
3.3 运算符和表达式
强制类型转换是(int)a
逗号运算符的级别最低,赋值的级别倒数第二
50.
main ()
{
char a1='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<100
B、i=j==0
C、(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==1
B、++i;
C、a=a++=5;
D、a=int(i)(i的字符型不确定);
3.5数据的输入输出
Scanf:
scanf函数中的格式控制后面是变量地址。
有逗号就有逗号(在格式控制字符串中除了格式声明外还有其他字符,则在输入数据时也应在对应位置上输入相同字符)。
用%c格式声明输入字符时,空格字符和转义字符中的字符都作为有效字符输入,因此输入时不要有空格。
Scanf和gets:
如果键入good good,则
Scanf接收good,gets接收good good
在输入数值数据时,遇到空格、回车、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<b? a : c<d? a : d的结果为( 1 )。
三目运算符从右到左运算,先把第一个冒号右边看成整体
4.4逻辑运算符和逻辑表达式
值为非0时被认为是真,包括字符的ASCII值。
if语句中表达式可以是任何数值表达式,因为可以判断真假。
=是赋值,==是等号
逻辑运算符两侧运算对象的数据类型是任何类型数据。
第五章循环结构
在while循环和do while循环中,只要在while后面的括号内指定循环条件,因此循环体中包含使循环趋于结束的语句。
同理for的表达式3也是
261.
下列程序的输出结果是___1___。
main()
{ int i,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.
int k=0;
while(k=1) k++;
while循环执行的次数是无限次。
12.
下面程序的输出是___-1___。
main()
{ int x=2;
while(x--);
printf("%d\n", x);}
【到0才停,自减放在后面,所以是-1】
4.7switch多分支选择结构
只可以和break使用,没有continue
必须要有break,不然后面的也会输出(注意判断题)
5.3do-while
特点:无条件的执行循环体,再判断循环条件是否成立。
在do-while循环体中,while表达式后面要有分号。
使用while do-while循环时,循环变量初始化的操作应在循环语句之前完成
5.4for
三个表达式都可以省略。
5.7break和continue
break:其作用是使流程跳到循环体之外(跳出包含该break语句的所有循环),执行循环体下面的语句。
Break只能用于循环语句和switch语句。
continue:其作用为结束循环体下面的语句,执行下一次语句。
(若满足if的条件,则跳过)
第六章利用数组处理批量数据
6.1一维数组
常量表达式中可以包括常量和符号常量,如int a【3+5】是合法的,但是不能用动态定义,如输入。
在对数组全部赋初值时,数组的个数已经确定,可以不指定数组长度。
(10) 合法的数组定义是( )。
A
A. char a[ ]= "string " ;
D. char a[ ]={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:转化成大写
数组长度:
Char a[]={‘a’,’b’,’c’};数组长度为3,字符串长度不定,sizeof(a)为3
Char a[5]={‘a’,’b’,’c’};数组长度为5,字符串长度为3,sizeof(a)为5
(8) 设有定义:char s[12] = "string" ; 则
printf( "%d\n",strlen(s));的输出是6。
(12) 下列语句中,正确的是 ( )。
D
B. char a[ ][3] ={'abc', '1'};
D. char a[ ][3] ={ "a", "1"};
(9) static char c[]={'a' ,' ','b','o','o','k','\0'};与static char c[]={'a' ,' ' ,'b','o','o','k'}; 等价。
(× )
305.main()
{
char s[]="\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(float x)
{
float y;
y=3*x-4;
return y;
}
7.3调用函数
(对于不带回值的函数,应用void类型)
实参:在主调函数中调用一个函数时,括号中的参数
形参:定义函数时括号中的变量
实、形参类型一致,字符型和int型通用
数据传递:调用函数时,实参的值传递给被调用函数的形参。
调用结束,形参单元释放,实参单元保留并维持原值。
实→形:值传递,单向传递。
函数的返回值:函数的返回值是通过函数中的return语句获得的。
被调函数返回给主调函数的值称为C。
形参 B. 实参 C. 返回值 D. 参数
(8) 函数调用可以作为一个函数的形参。
(× )【返回值存在寄存器中,没有地址,不能作为形参,可以作为实参】
被调函数调用结束后,返回到D
D.主调函数中该被调函数调用语句的后一语句?
(2)以下函数,真正地没有返回值。
B
A. int a(){int a=2;return (a);}
B. void b(){printf("c");}
C. int a(){int a=2;return a;}
※(7) ,可以不进行函数类型说明。
D
A. 被调函数的返回值是整型或字符型时
B. 被调函数的定义在主调函数定义之前时
C. 在所有函数定义前,已在函数外预先说明了被调函数类型
D. 以上都是
(12)能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是。
A
A. return 这两个数
B. 形参用两个元素的数组
C. 形参用两个这种数据类型的指针
D. 用两个全局变量
83.设函数fun的定义形式为
void fun(char ch,float x) {……}
则以下对函数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) 定义函数时,形参的类型说明可以放在函数体内。
(× )【类型说明放在形参表列内说明,或放在函数定义的第二行】
实参:可以是常量,变量,表达式,函数
形参:局部变量。
离开函数不可使用,只有在被调用时才分配内存单
数组元素:作函数实参,不能作形参。
因为形参是在函数被调用时临时分配储存单元的。
传递方式:值传递;
传递方向:从实参传到形参,单向传递。
数组元素作实参:传递值;
用数组名作实参,传递数组首元素的地址(首地址)。
形参数组可以不指定大小,如float average(float array[])
以下对 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、若有定义:char ch;
(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、以下函数的功能是,把两个整数指针所指的存储单元中的内容进
行交换。
请填空。
void exchange(int *x, int *y)
{ int t;
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、100
C、a的地址
D、b的地址
#include<stdio.h>
void main()
{
int **k,*a,b=100;
a=&b;k=&a;
printf(“%d\n”,**k);
}
8.3指针引用数组
下标法:Int a[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(当两个指针都指向同一数组的元素时,这个没有相加)
12.具有相同类型的指针类型变量p与数组a(类型相同),不能进行
的操作是(D)。
A p=a;
B *p=a[0];
C p=&a[0];
D p=&a;(这个就变成指向数组了)
8.4指针引用字符串
C语言没有字符串变量,用数组和指针来存放,如:
Char ch[10]={“abcd”};
Char ch[10]=”abcd”;
Char ch[10]={‘a’,’b’,’c’,’d’};
Char *p=”abcd”;
【如果是用数组,不能单带数组名赋值,后面要有[x],然后有没有括号都得。
如果用指针,有双引号就够了,不要括号】
【都要引号,都不要&了】
8.4.2字符指针作函数参数
之前的字符数组名也可以作参数
第九章结构体
9.1结构体变量
结构体类型:struct student,包括struct 关键字和结构体名。
成员可以属于另一个结构体类型。
Struct student student1,student2,其中student1和student2都是结构变量名。
声明变量有上面这种直接写在后面,也可以顺便声明类型,即在中间写完成员表列,在再后面写变量名。
只能对结构体变量的各个成员进行输入和输出。
成员可以进行各种运算。
成员名可以和变量名相同,不仅可以名字一样,成员也可以是结构体变量。
9.2结构体数组
Struct 结构体名
{
成员表列
}数组名【数组长度】
也可以先声明结构体类型再定义结构体数组。