c语言试题.docx
- 文档编号:11044661
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:44
- 大小:34.74KB
c语言试题.docx
《c语言试题.docx》由会员分享,可在线阅读,更多相关《c语言试题.docx(44页珍藏版)》请在冰豆网上搜索。
c语言试题
第一章C语言概述
1.1C语言的发展与特点
机器语言
用“0”、“1”编程,难编改,但可直接执行
汇编语言
直接描述计算机硬件操作的语言;代码效率高,但移植性差
高级语言
难以对计算机硬件进行直接操作;结构化设计,易于编写、理解和维护
·C语言兼有汇编语言和高级语言的特点:
可对计算机硬件进行直接操作
结构化设计,易于编写、理解和维护,可移植性强
语言简洁,32个关键字,9条控制语句,45种运算符,书写自由
1.2C语言程序的结构和语法规则
·C语言程序的基本结构
C语言程序的组成:
一个主函数main()和0~若干个其他函数
一个C语言程序总是从主函数开始执行,并在主函数结束,不论主函数位置如何
C语言编译系统区分大小写
被主函数调用的其他函数包括:
库函数、自定义函数
形式参数表
·C语言的函数的一般结构
函数首部
[函数类型]函数名([函数形参表])“[]”内容可有可无
例:
intmax(intx,inty)
函数体
{
数据定义和声明语句
可执行语句
}
·C语言函数的语法规则
数据定义和声明语句位于可执行语句之前
数据定义和声明语句不需要时可默认
一行内可写若干语句,每个语句以“;”结束
注释格式/*注释内容*/
//注释内容
1.3C程序开发过程
·编译过程
源程序编译目标程序连接可执行程序
(*.obj)(*.exe)
库函数
逻辑错误
须自己发现
·开发过程
启动C++编辑源程序编译连接运行结束
错错错
语法错误
(逻辑错误,须自己发现)
第二章数据类型及其运算
2.1标识符
用来标识变量、常量、函数、类型、语句等程序对象名称
标识符标识符由字母和下划线开头,可以包含字母、数字和下划线,并区分大小写
(名字)标识符应能反映一定的程序对象意义
关键字不能作为标识符32关键字(P14)+8单词(P13)
合法标识符:
sum,_total,Main等
非法标识符:
Mr.John,#33,$500,3D64,main等
2.2C语言的数据类型(书P15)
整型[signed]int
有符号数短整型[signed]short[int]
整型数据(int)长整型[signed]long[int]
数制转换整型unsigned[int]
无符号数短整型unsignedshort[int]
长整形unsignedlong[int]
·基本数据类型单精度型float
实型数据(float)双精度型double
长双精度型longdouble
字符型char
字符型数据(char)无符号字符型unsighedchar
ASCⅡ码有符号字符型signedchar
枚举型
long(用于int、double)
·数据类型修饰符short(用于int)
(用于扩充数据类型)signed(用于int、char)
unsigned(用于int、char)
位宽
字节数
有效数字
单精度float
32
4
7
双精度double
64
8
15~16
2.3常量
·常量:
程序运行过程中其值不能被改变的量
十进制例:
123、456、0、-1
整型常量八进制:
以“o”开头例:
o123=(83)10、-o11=(-9)10
十六进制:
以“ox”或“oX”开头例:
ox123=(291)10、-oX12=(-18)10
注:
后缀L——长整型U——无符号整型
小数形式例:
0.123、.123、-123.0、0.0
实型常量(又称浮点数)指数形式±Ne±A(N不可省,±可省,A必须为整数)
常量例:
正确2e3(2×103)错误e3,-2e3.5
注:
后缀F——单精度实型L双精度实型
字符型常量:
单引号括起来的单个字符例:
’a’、’D’、’$’
转义字符(书P18表2-2):
以一个“\”开头的字符序列
字符串常量:
用双引号括起来的字符序列例:
”Hello,world!
\n”
在内存中存储时,字节数=字符数+1
字符串变量:
没有专门的形式,要用数组或指针来表示
·符号常量:
用标识符代表一个常量
例:
#definePI3.14159#definePRICE30#defineHELLO“Hello,world!
\n”
2.4变量
变量:
程序运行过程中其值可以改变的量
变量需先定义,后使用
变量的定义例:
intx,y,z;(数例2.2)
变量的初始化例:
intx=3,y=5,z=7;
2.5运算符与表达式
单目(只有一个操作数)例:
!
、++、--等
·运算符分类双目(两个操作数)例:
+、-、/、%、<、==等
三目(三个操作数)例:
?
:
其他例:
()、[]等
·表达式:
用运算符将运算对象连接起来的式子
·表达式语句:
表达式后加“;”构成表达式语句
一个表达式中有不同运算时运算的优先次序,如:
先乘除后加减
·优先级各种运算符的优先级别不同
表达式中各种运算符按照优先级从高到低的次序计算例:
a+b*ca+(b*c)
·结合性当表达式中各种运算符优先级相同时,由结合性决定运算的顺序
结合性分两类左结合性例:
a/b*c(a/b)*c
右结合性(单目、三目、赋值运算符)例:
a=b=ca=(b=c)
+、-、*、/、%、++、--、+(取正)、-(取负)
当两个整数相除时结果为整数,如:
5/3=1;%为求模运算,即取余(要求两个操作数均为整数,结果符号与被除数相同),如:
-5%3=-2
优先级++、--、-(取负)
·算术运算
*、/、%
+、-
结合性:
从左到右
·++、--单目运算,运算对象只能是简单变量
两个功能:
取变量的值及使变量增1(减1)
·表达式中数据间的混合运算与类型转换:
一个运算符两边的数据不是同一种类型时,需转换,转
隐含转换(自动转换):
运算中类型低的自动向类型高的转换(书P26图2.2)
换形式有两种显式:
在被转换量之前加强制转换运算符“()”例:
(int)A
强制转换运用赋值运算符:
右转为左例:
inta=’A’
隐式当函数有返回值时,将return后的表达式值强制转换为函数的类型(见后面章节)
强制类型转换运算符:
(类型标识符)表达式
·强制类型转换原有的类型不变,如:
floatx;(int)x为int型,但x仍为float型
例:
(int)4.6=4(float)5=5.0(int)3.5*(int)4.6=12(int)3.5*4.6=13.8
(int)(3.5*4.6)=(int)16.1=16
=
·赋值运算综合性“自左向右”,如:
x=y=6y=6;x=y
复合赋值:
在任何双目运算符号后加上“=”构成,如:
+=、-=、*=、/=、%=等
例:
x+=yx+=yx=x+y
·条件运算:
e1?
e2:
e3
e1、e2、e3均为表达式
唯一的三目运算符
优先级:
仅高于赋值运算符
结合性:
自右向左
例:
求绝对值y=(x>0?
x:
-x)
·逗号运算符
e1,e2,e3,......,en
结果取最后一个表达式的值
例:
设inta=2;floatb=5.2;则2*a,2*b的结果是10.4
用于按顺序计算各表达式的值
例:
执行x=(i=3,i*2)后,x的值为6
第三章顺序结构程序设计
3.1程序的三种基本控制结构
顺序结构
·三种结构选择结构
循环结构
只有一个入口
·四个特点只有一个出口
结构内的每个部分都有机会被执行到
结构内不存在“死循环”
·流程图:
输入输出框
B
·顺序结构:
A
·选择结构:
no
yesno
yes
A
·循环结构:
no
yes
no
yes
3.2顺序执行语句
表达式语句例:
i++;a-1;x=10;
函数调用语句例:
printf(“%d”,a);
空语句例:
;
复合语句例:
printf(“Hello,world!
\n”);
if(x>y)z=x;elsez=y;
{
z=x+y;
t=z/100;
printf(“%f”,t);
}
注:
C语言的第5种语句为“控制语句”,是非顺序执行语句
3.3格式化输出函数printf()
注:
C语言没有输入输出语句,这类操作通过调用库函数来实现
形式:
printf(“格式字符串”,输出表项);
功能:
按照一定的格式向终端输出任意个任意类型的数据
表项:
常量、变量或表达式,逗号隔开例:
printf(“a=%d,b=%d\n”,a,b);
”m.n”m为宽度n为精度
宽度:
指定输出数据所占的宽度
宽度精度修饰f:
指定输出小数的位数
修饰符精度e:
指定输出的小数点后的有效数字位
格式指示符数
%[修饰符]格式字符d:
指定至少输出的数字的个数
·格式左对齐修饰:
“-”,数据右边补空格补够宽度
字符串右对齐修饰:
“+”,数据左边补空格补够宽度
包括:
格式字符:
书P41表3.1
格式指示符:
从“%”开始,到“格式字符”结束
转义字符
普通字符:
原样输出
“宽度”与“精度”矛盾时,以精度为准
需输出的数据宽度大于m时,以数据为准
·说明若“宽度”m前加前导符“0(零)”,则数据左边用“0”补够宽度
默认对齐方式为“右对齐”
不写宽度并不意味着宽度为“1”(输出格式)
3.4格式化输入函数scanf()
预留地址
格式:
scanf(“格式字符串”,输入项地址表);
功能:
输入多种类型的数据
地址表:
若干输入项地址构成,逗号隔开例:
scanf(“%d%d%d”,&a,&b,&c);
宽度修饰:
指定输入数据所占列数
抑制修饰:
“*”,对应的输入数据不赋给相应变量
修饰符例:
scanf(“%2d%*2d&3d”,&n1,&n2);
格式指示符:
输入“123456789”,“12”赋给n1,
%[修饰符]格式字符“34”舍弃,“567”赋给n2
·格式字符串包括长度修饰
格式字符:
书P44表3.3
空白字符:
空格键、跳格键、回车键
非空白字符:
普通字符
若相邻两个格式指示符间无分隔符时,相应两个输入数据间要用空格、回车、跳格
分开(例2.2)
scanf()函数无精度修饰
·scanf()要点在“格式字符串”中出现的普通字符(包括转义字符),必须原样输出
遇空格、回车或Tab
以下情况认为输入结束遇宽度结束
遇非法输入
用“%c”输入单个字符时,空格和转义字符都是有效字符
3.5单个字符输入/输出函数
·字符输出函数putchar()
形式:
putchar(ch);或putchar(‘A’);
参数:
ch表示字符变量,’A’表示字符常量
功能:
向终端输出单个字符
头文件:
#include
例:
putchar(‘\n’);
·字符输入函数getchar()
形式:
getchar();
功能:
从终端输入单位字符
参数:
无
返回值:
输入的字符
头文件:
#include
例:
c=getchar();
putchar(c);
putchar(getchar());
第四章选择结构程序设计
4.1关系运算及其表达式
关系运算即比较运算
结果类型:
逻辑值(布尔值,Boolean)真(TRUE)1假(FALSE)0
关系运算符6种:
<、<=、>、>=、==、!
=
优先级算术运算符
<、<=、>、>=
==、!
=
赋值运算符
关系运算:
假设X是一种关系运算符,则aXb成立=1;aXb不成立=0
例:
已知a=1,b=0,c=1,则a>b成立
所以d=a>bd=1
所以f=a>b>cf=0
结合性:
自左向右
例:
5>4>3=?
答:
0
4.2逻辑运算及其表达式
&&逻辑与
逻辑值之间的运算||逻辑或
!
逻辑非
目数:
&&、||为双目,!
为单目
操作数:
逻辑值(广义)
结果类型:
逻辑值
优先级!
算术运算符
逻辑运算
关系运算符
&&
||
赋值运算符
结合性:
自左向右
·以“1”代表“真”,“0”代表“假”
a
b
!
a
!
b
a&&b
a||b
非0
非0
0
0
1
1
非0
0
0
1
0
1
0
非0
1
0
0
1
0
0
1
1
0
0
逻辑运算的操作数可以是任意类型数据,只要符合“0”和“非0”的分类即可
例:
0
操作数为“0”5<3
a=0
5>3&&0
-1
操作数为“非0”5>3
a=1
5>3&&1
例:
a=4∴a=0
b=0∴b=1
a=4,b=5∴a&&b=1,a||b=1
4&&0||2=1
5>3&&2||8<4-!
0=1
‘c’&&’d’=1
4.3if语句
if
if语句的三种形式if-else
·选择结构的两种语句if-elseif-elseif-……-else
switch语句
if(e)s;
·ife表达式可以是任意表达式,以“0”和“非0”来区分e
e为非0,则执行s,e为0,直接结束
s是语句或复合语句s
例:
if(x!
=0)
printf(“%d”,x);
if(x)
printf(“%d”,x);
例:
输入2个实数,按由小到大的顺序输出
scanf(“%f,%f”,&a,&b);
if(a>b)
{
t=a;
a=b;
b=t;
}
printf(“%5.2f,%5.2f”,a,b);
·if-else:
if(e)s1;YeN
elses2;
例:
if(x>0)y=x;s1s2
elsey=-x;(求绝对值)
·if语句的嵌套嵌套:
if语句当中可以包含其他if语句
规律:
else总是和它上面最近的if配对,除非用“{}”隔开
例:
if(e1)if(e1)
if(e2)s1;{
elses2;if(e2)s1;
}
elses2;
·if-elseif-else……多分支
if(e1)s1;e1
elseif(e2)s2;Ye2
……Ye3
elseif(en)sn;Y……
elsesn+1en
例:
有一个函数,输入x,求出yY
-1(x<0)
y=0(x=0)s1s2s3snsn+1
1(x>0)
解:
if(x>0)y=1;
elseif(x<0)y=-1;
elsey=0;
4.4switch语句(多分支选择语句)
·switch(e)
{e=e1s1
casee1:
s1;e=e2s2
casee2:
s2;
......
default:
e=ensn
sn+1;
}sn+1
·switch(e)
{e=e1s1
casee1:
s1;e=e2s2
break;
casee2:
s2;
break;e=ensn
......
default:
sn+1
sn+1;
}
switch后面的e为表达式,case后面的ex为常量表达式,二者一般都是整型或字符型,不可以是实型
若e和某一个case后的ex相等,则执行其后的语句,若均不相等,则执行default后面的语句(前提:
没加break)
每一个case的ex不能相同
各个case的出现次序不影响结果
执行完一个case语句以后,转移到下一个case继续执行,除非用break中断(跳出switch结构)
·switch多个case可以共用一组语句
例:
switch(n)
{当n=1或n=2时,都执行x=5;break;
case1:
case2:
x=5;
break;
}
default语句可以省略
·本章难点:
if(x+y!
=0)printf("x+y!
=0\n");if(x+y)printf("x+y!
=0\n");
if(x==0)printf("x=0\n");if(!
x)printf("x=0\n");
第五章循环结构程序设计
循环语句whiledo-whilefor
·循环结构要点控制语句continuebreak
常见问题死循环多层循环边界问题
常见算法穷举法迭代法递推法
5.15.2whileanddo-while
es
se
N
·while先做判断e,再执行循环体s,s可能一次也不执行
·do-while先执行一次循环体s,再判断e,因此s至少执行一次
例:
求
while:
do-while:
n=0;n=0;
sum=0;sum=0;
while(n<=100)do
{{
sum+=n;sum+=n;
n++;n++;
}}
while(n<=100);
当循环体由多个语句组成时,必须用花括号括起来以形成复合语句
·注为避免“死循环”,每执行一次循环体,表达式e的值部应该有所变化
例:
n=0;
sum=0;
while
(1)
{
sum+=n;
n++;
}
5.3for语句
·for(e1;e2;e3)s;e1
e1:
循环变量赋初值
e2:
循环条件e2
e3:
循环变量增值
s:
循环体s
e3
1.求解e1,循环变量赋初值
·步骤2.求解e2,若为真,则执行s,然后转向e3,否则结束整个循环
3.求解e3,循环变量增值
4.转向e2
e1可省,即for(;e2;e3),循环变量赋初值应在之前完成
e2可省,即for(e1;;e3),循环体内部应有循环结束点,否则陷入死循环(一般采用break语句)
e3可省,即for(e1;e2;),循环变量增值放在循环体内部,否则会陷入死循环
e1、e2、e3均可省,即for(;;),相当于while
(1),无条件循环,可综合上述情况处理
e1可以是任意变量赋初值
e1、e3均可用逗号表达式
e2一般是关系或逻辑表达式,可以是任意表达式
·标准形式:
for(n=0,sum=0;n<=100;n++)
sum+=n;
·省略e1:
n=0,sum=0;
for(;n<=100;n++)
sum+=n;
·省略e2:
for(n=0,sum=0;;n++)
{
if(n>100)break;
sum+=n;
}
·省略e3:
for(n=0,sum=0;n<=100;)
sum+=n++;
·全部省略:
n=0;sum=0;
for(;;)
{
if(n>100)break;
sum+=n++;
}
·forandwhile的比较
e1
e2e
s
s
e3
5.4break和continue语句
用于循环语句中,提前结束本次循环体,即跳过本次循环中continue以后的语句,直接
·continue执行循环变量增值e3和循环条件判断e2
一般和if配合使用
Quiz:
以下两个程序的循环次数是多少?
答:
都是101
for(n=100;n<=200;n++)for(n=100;n<=200;n++)
{{
if(n%3==0)printf("%d",n);if(n%3!
=0)continue;
}printf("%d",n);
}
·break用于循环语句中,提前结束整个循环(本层)
或者用于switch语句中,结束整个switch
Quiz:
以下程序的输出是什么?
答:
100101
for(n=100;n<=200;n++)
{
if(n%3==0)break;
printf("%d",n);
}
5.5循环的嵌套(即多重循环)
for(sum=0,i=1;i<=20;i++)
{
for(pro=1,j=1;j<=i;j++)
{
pro*=j;
sum+=pro;
}
}
while、do-while、for之间可以相互转换
·循环之比较当某个条件成立时,循环执行某个计算(while)
根据不同的思维方式选用循环执行某个计算,直至条件不成立时结束循(do-while)
某个变量从初值开始循环变化,当某个条件成立时,循环执行某个计算(for)
5.7循环结构程序设计应用
算法之一:
穷举法
将问题的所有可能的解进行逐一枚举和筛选,从中找出符合要求的解
例如:
求完全数
补全四位数
算法之二:
迭代法
不断由变量旧值递推出变量新值的过程,一般用于解方程
例如:
兔子繁殖(Fibonacci数列)
猴吃桃子
·例1:
书P91例5.18
·例2:
书P93例5.20
求完全数
问题:
找出2到1000以内的所有完全数
完全数的定义:
一个数恰好等于它的因子之和
因子:
不包括自己的约数
一个数m的所有因子都小于m/2
举例:
6的因子为1、2、3,有6=1+2+3,因此6是完全数
核心:
因子的求解
算法流程:
先判断是否完全数,再打印所有因子
循环:
双重,外层从2到1000,内层从1到m/2
·例3:
书P96例5.23
Fibonacci数列
问题:
求Fibonacci数列的前40项1,1,2,3,5,8......
F1=1(n=1)
算法F2=1(n=2)
Fn=Fn-1+Fn-2(n>=3)
·例4:
书P104(11)
第六章数组
数组是由若干同类元素组成的对象
数组元素的数据类型相同
·数组的概念数组元素的个数固定
数组元素按顺序存储
数组的每一个元素都可以看作一个独立的变量,用数组名和下标来表示
6.1一维数组
数组类型数组名数组长度
inta[s];
数组名是标识符
·定义数组长度可以是常量、常量表达式或符号常量,不可以是变量或变量表达式(即不能定
义可变数组)
#defineN5intn,a[n];
inta[N];scanf("%d",&n);inta[5];
数组在内存中连续存放aa[0]
·存储每个元素所占内存大小和数组类型相同a[1]5
数组名指向第一个元素(类似于指针),
数组名在程序中单独出现代表数组首地址a[4]
数组名[下标],称之为元素
下标运算符:
[]
·引用下标范围:
0~N-1,N为数组长度
下标可以是常量/变量/表达式
超出下标范围的数组元素称之为越界,会引起不可预料之后果!
注意:
下标在定义时必须为常量,而引用时可以为变量
在定义
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 试题