关于C语言的期末复习Word文档下载推荐.docx
- 文档编号:3066250
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:33
- 大小:32.81KB
关于C语言的期末复习Word文档下载推荐.docx
《关于C语言的期末复习Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《关于C语言的期末复习Word文档下载推荐.docx(33页珍藏版)》请在冰点文库上搜索。
);
常错:
scanf不加“&
”
if相等的时候“==”打成“=”
定义常量时候不赋初值
以上内容由曾诚同学提供
选择题
1.C的运算符按运算对象的数目可以分为
A)单目算符一种
B)单目和双目算符
C)单目、双目和三目算符
D)单目、双目、三目和四目算符
答案:
C
分析:
单目表达式:
一个运算符连接一个运算对象,例如a++;
双目表达式:
一个运算符连接两个运算对象,例如a+b三目表达式:
一个运算符连接三个运算对象,
例如max=(a>
b)?
a:
b;
2.设int类型的数据长度为2个字节,则unsignedint类型数据的取值范围是
A)0至255B)0至65535
C)-32768至32767D)-256至255
B
分析:
教材P43
3.例1:
C语言中字符型(char)数据在内存中存储的是:
A:
原码
B:
补码
C:
ASCII码
D:
反码
答案:
C
4.C语言中字符型(char)数据在内存中存储的是:
5.以下关于return语句的叙述中,正确的是
定义为void类型的函数中可以有带返回值的return语句
一个自定义函数中必须有一条return语句
没有return语句的自定义函数在执行结束时不能返回到调用处
一个自定义函数中可以根据不同情况设置多条return语句
D
6.有以下程序,运行结果是
#include<
stdio.h>
main()
{inta=1,b=2;
for(;
a<
8;
a++)
{b+=a;
a+=2;
}
printf("
%d,%d\n"
a,b);
7,11
8,11
9,18
10,14
7.以下C语言用户标识符中,非法的是
a-b
a_b
AaBb
_I
A
变量命名规则
标识符只能由英文字母、下划线“_”、阿拉伯数字组成。
标识符的第一个字符必须是英文字母或者下划线,而不能是数字。
变量名不能与C语言中的关键字相同。
8.#include<
{inti,j,m=1;
for(i=1;
i<
3;
i++)
{for(j=3;
j>
0;
j--)
{if(i*j>
3)
break;
m*=i*j;
m=%d\n"
m);
m=4
m=6
m=2
m=5
9.以下叙述中,错误的是:
用户定义的函数中可以没有return语句
用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值
用户定义的函数中若没有return语句,则应当定义函数为void型
函数的return语句中可以没有表达式
除了void类型以外的函数必须要有return
void类型可以有也可以没有,有的时候return后面不能跟表达式,可以用来终止函数。
函数调用只能返回一个函数值
编程题
16,29,49
C语言注意事项
1.忘记定义变量或者赋初值。
2.int范围:
-32768~32767
3.scanf忘记添加变量地址符&
.
4.注意“=”和“==”
以上内容由陈劭龙同学提供
选择题
1.若有定义:
doublea=22;
inti=0,k=18;
,则不符合C语言规定的赋值语句是
Selectone:
A.a=i++
B.i=(a+k)<
=(i+k);
C.i=a%11;
D.i!
=a;
错误答案是b,虽然a语句连分号都没有。
。
注意了,他强调的是语句,只要是语句,就必须有分号
B语句的错误在于,他的语义不清晰,没有加好括号(虽然得到的值会莫名其妙,但至少是可以运行的)
这个,通常出现像b这样的选项,就选b吧。
2.下列选项中,能正确定义数组的语句是
A)intnum[0..2008];
B)intnum[];
C)intN=2008;
intnum[N];
D)#defineN2008
A.正确
B.正确
C.正确
D.正确
声明数组的时候,必须是要给定数组的长度(就是说,只能用常量),不能用一个变量来声明数组长度,即使这个变量已经先赋值了。
3.以下关于C语言的叙述中,正确的是
A.C语言的变量可以在使用之前的任何位置进行定义
B.在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致
C.C语言的数值常量中夹带空格不影响常量值的正确表示
D.C语言中的注释不可以夹在变量名或关键字的中间
答案是D,亲自测试。
顺便说一下abc为什么是错的
A,举例来说,在子函数定义的一个变量无法在另一个函数使用
B,c语言自己有强制类型转换
C,c编译器的语义分析会自动跳过空格。
4.下列语句组中,正确的是
A.chars[7];
s={"
Olympic"
};
B.char*s;
C.char*s;
s="
D.chars[7];
答案是c
当s是一个指针是,s=“olympic”的意思是s指向olympic这个常量数组(字符串)的首字符(即o),这是允许的
对a来说,正确的做法是chars[7]={‘o’,’l’,’y’,’m’,’p’,’i’,’c’,’\0’};
允许在赋初值的时候直接这样赋值
对b来说,既然s是一个指针,这样的语句是不成立的
对d来说,因为s是一个数组名,他实质是该数组首元素的地址,是一个常量,不能随便更改它的值(指向另一个字符串常量)
5.以下选项中,与
if(a==1)a=b;
elsea++;
语句功能不同的switch语句是
A)switch(a){case1:
a=b;
default:
a++;
B)switch(a==1){case0:
case1:
C)switch(a){defaule:
D)switch(a==1){case1:
case0:
A.
B.
C.
D.
答案是b,这个比较水。
6.以下叙述中,正确的是
A.C语言程序是由过程和函数组成的
B.C语言函数不可以单独编译
C.C语言函数可以嵌套调用
D.C语言中除了main函数,其他函数不可作为单独文件形式存在
答案是C,c很显然是对的,说一下d,其实多文件连编是很普遍在大程序中存在的,我们每次编程必须include的一堆东西(头文件),其中就是库函数的定义和声明,另外这题在网教中是有注释(题目出的有问题)。
A._l
B.a_b
C.AaBb
D.a--b
C语言中的变量名,可以适用的字符有,大写小写字母,数字和下划线,注意第一个字母必须是下划线或是字母。
答案是d,因为d中出现了--,非法。
8.以下关于C语言数据类型使用的叙述中,错误的是
A.若要准确无误差的表示自然数,应使用整数类型
B.若只处理“真”和“假”两种逻辑值,应使用逻辑类型
C.若要出来如“人员信息”等含有不同类型的相关数据,应自定义结构类型
D.若要保存带有多位小数的数据,应使用双精度类型
b是正确的,虽然我们逻辑类型(又称布尔型)用的很少,但c中确实存在bool型,只有一位,1或0表示是或否。
293049
就目前和老师交流的情况来看,循环和数组那一部分通常会以图形题来考,函数那块是递归,指针结构会以链表的形式来考,还有则是穷举得题
链表感觉只要会用,思路很清晰,可以多练就能拿分(通常是约瑟夫问题的变种,会用链表之后,根据题意照着编即可)
递归也考得很简单的。
常见错误
1.debug的时候千万把输出的变量做好标记,不要输出的监控变量搞混了
2.记得scanf()函数的使用,他有时候会读取到空格,有时候不会,当我们用来确认一个输入而敲入的回车,它本身也会被当做输入而可能被scanf(“%c”)或getchar()读取,要注意这个,有的时候需要在读取数据的时候适当的插入getchar来把空格和回车吃掉。
以上内容由钱能同学提供
1、下列函数输出的结果是w=()
(主函数)
doublee,w;
e=3.3;
w=qq(e);
%lf"
w);
自定义函数
intqq(doublee)
{doublew;
w=1.1*e;
returnw;
A3.63000B3.000000
解析:
B,自定义的函数定义为int型后返回值只能为int型,不管你在函数里面定义的是什么。
2、下列程序输出结果是:
Doubleqq(double);
Doublee=1.3;
qq(e);
printf(“%d”,e);
doubleqq(doublee)
{
Printf(“%d”,e+0.5);
}
A:
1.8000000
1.3000000
B:
1
1
C:
11
D:
1.8
1.3
答案C:
考察输出类型和函数的调用不影响主函数的参数的值以及……回车符。
3、该程序输入三个空格、一个e、三个空格、一个e后的输出结果是:
charc[9];
scanf("
\n%s"
&
c);
%s"
c);
A:
e
ee
ee
e
答案A:
这个考察了scanf中\n的用途,读取并放弃连续的空白字符
4、请问以下程序要实现输入一个大于一的数,得到它的倒数,那么该加哪条语句?
intx;
doublea;
scanf(“%d”,&
x);
________
Printf(“%lf”,a);
a=1/x;
a=1.0/x;
a=1.0/(double)x
a=(double)1/x
B,当然CD也可以,只是忘了加;
而已。
CD考察了强制转型的知识,强制转型格式:
(类型)变量或数
64、54、50、39、34
注意问题
循环和判断语句最好用上大括号
循环问题一定要注意变量初始化的问题
自定义的函数,如果没用到指针,要注意返回值的问题
Scanf和printf的%*不要糊涂
判断语句的判断条件里要注意运算符优先级
以上内容由段荣成同学提供
小窍门:
1.使用scanf()函数输入一句话的时候,如:
intmain()
{
charstring[50];
scanf(“%s”,string);
printf(“%s\n”,string);
return0;
输入:
helloworld!
结果:
hello
显然这个结果没有达到我们的要求。
解决方法:
scanf(“%[^\n]”,string);
由此阔以看到,%[^\n]是一个很好用的东西,表示遇到括号中的字符时就自动停止输入,相似的有%[^,]%[^#]等等。
网教例题:
68.为学生排序
2.scanf的返回值
1.scanf()函数有返回值且为int型。
2.scanf()函数返回的值为:
正确按指定格式输入变量的个数;
也即能正确接收到值的变量个数。
scanf("
%d%d"
&
a,&
b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到endoffile,返回值为EOF。
由此可以控制输入组数的问题例如可以用scanf(#$%#$@%%$#@)!
=EOF来做为输入结束的判断条件
例题13’.[学长出题]hybest的A+B(II)
17.丧病的送外卖题
3.关于输出的格式问题(直接粘贴的,比较全,大家选择性观看哈)
1.转换说明符
%a(%A)浮点数、十六进制数字和p-(P-)记数法(C99)
%c字符
%d有符号十进制整数
%f浮点数(包括float和doulbe)
%e(%E)浮点数指数输出[e-(E-)记数法]
%g(%G)浮点数不显无意义的零"
0"
%i有符号十进制整数(与%d相同)
%u无符号十进制整数
%o八进制整数e.g.0123
%x(%X)十六进制整数0f(0F)e.g.0x1234
%p指针
%s字符串
%%"
%"
2.标志
左对齐:
"
-"
e.g."
%-20s"
右对齐:
+"
%+20s"
空格:
若符号为正,则显示空格,负则显示"
%6.2f"
#:
对c,s,d,u类无影响;
对o类,在输出时加前缀o;
对x类,在输出时加前缀0x;
对e,g,f类当结果有小数时才给出小数点。
3.格式字符串(格式)
〔标志〕〔输出最少宽度〕〔。
精度〕〔长度〕类型
"
%-md"
:
左对齐,若m比实际少时,按实际输出。
%m.ns"
:
输出m位,取字符串(左起)n位,左补空格,当n>
morm省略时m=n
%7.2s"
输入CHINA
输出"
CH"
%m.nf"
输出浮点数,m为宽度,n为小数点右边数位
%3.1f"
输入3852.99
输出3853.0
长度:
为h短整形量,l为长整形量
printf的格式控制的完整格式:
%-0m.nl或h格式字符
下面对组成格式说明的各项加以说明:
①%:
表示格式说明的起始符号,不可缺少。
②-:
有-表示左对齐输出,如省略表示右对齐输出。
③0:
有0表示指定空位填0,如省略表示指定空位不填。
④m.n:
m指域宽,即对应的输出项在输出设备上所占的字符数。
N指精度。
用于说明输出的实型数的小数位数。
为指定n时,隐含的精度为n=6位。
⑤l或h:
l对整型指long型,对实型指double型。
h用于将整型的格式字符修正为short型。
格式字符
格式字符用以指定输出项的数据类型和输出格式。
①d格式:
用来输出十进制整数。
有以下几种用法:
%d:
按整型数据的实际长度输出。
%md:
m为指定的输出字段的宽度。
如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%ld:
输出长整型数据。
②o格式:
以无符号八进制形式输出整数。
对长整型可以用"
%lo"
格式输出。
同样也可以指定字段宽度用“%mo”格式输出。
例:
{inta=-1;
%d,%o"
a,a);
运行结果:
-1,177777
程序解析:
-1在内存单元中(以补码形式存放)为(111111*********1)2,转换为八进制数为(177777)8。
③x格式:
以无符号十六进制形式输出整数。
%lx"
同样也可以指定字段宽度用"
%mx"
④u格式:
以无符号十进制形式输出整数。
%lu"
同样也可以指定字段宽度用“%mu”格式输出。
⑤c格式:
输出一个字符。
⑥s格式:
用来输出一个串。
有几中用法
%s:
例如:
printf("
"
CHINA"
)输出"
字符串(不包括双引号)。
%ms:
输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。
若串长小于m,则左补空格。
%-ms:
如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
%m.ns:
输出占m列,但只取字符串中左端n个字符。
这n个字符输出在m列的右侧,左补空格。
%-m.ns:
其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。
如果n>
m,则自动取n值,即保证n个字符正常输出。
⑦f格式:
用来输出实数(包括单、双精度),以小数形式输出。
%f:
不指定宽度,整数部分全部输出并输出6位小数。
%m.nf:
输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
%-m.nf:
输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。
⑧e格式:
以指数形式输出实数。
可用以下形式:
%e:
数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
%m.ne和%-m.ne:
m、n和”-”字符含义与前相同。
此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。
⑨g格式:
自动选f格式或e格式中较短的一种输出,且不输出无意义的零。
关于printf函数的进一步说明:
如果想输出字符"
则应该在“格式控制”字符串中用连续两个%表示,如:
%f%%"
1.0/3);
输出0.333333%。
对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位。
对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位。
由高手指点
对于m.n的格式还可以用如下方法表示(例)
charch[20];
%*.*s\n"
m,n,ch);
前边的*定义的是总的宽度,后边的定义的是输出的个数。
分别对应外面的参数m和n。
我想这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。
今天又看到一种输出格式%n可以将所输出字符串的长度值赋绐一个变量,见下例:
intslen;
helloworld%n"
slen);
执行后变量被赋值为11
4.对于测试用例,考虑一下极端情况临界情况等等,有的测试用例需要你写程序之前就有谱(1啊0啊最大值啊负数啊数组下标的越界问题啊程序运行过程中会不会爆栈会不会爆数据等等),而有的测试用例是根据你的程序进行运行测试的(即不同程序的逻辑不同需要有不同的测试用例来检验你思路的正确性,这个就是看你自己会不会坑到自己了==)
Ps:
由于本课程比较基础不需要考虑时间空间复杂度,因而基本所有的题目暴搞(遍历)就能过
5.要记得有的程序需要对变量赋初始值(一般是0),循环的时候还要重复赋值不要忘记哦亲
6.对题意的理解是至关重要的
7.输入的时候不要忘记&
(当然字符串不用加),判断的时候记住是==而不是=,否则找半天发现是这里错了就会深深地觉得自己是XX(自行脑补)……
8.比较基本的程序就背过吧,像什么判断素数之类的
9.同学数学要好,数学不好会被虐到起不来的……真话……
10.牢记程序猿八荣八耻,过马路不要闯红灯、打饭不要插队、多做好事、鼓励自黑还有多卖萌以积攒rp值……
比较好的题目:
59.整数分解
62.北理工的恶龙
H16.逆波兰算术表达式还有字符串排序,书上P267有例题,用指针数组很方便
以上三个题思路不够清晰的话,会写得很挫……
代码如下:
59:
intn,i,a,b;
%d"
n);
for(i=n/2;
i>
=2;
i-=1)
if(n%i==0)
a=n/i-i/2;
b=n/i+i/2;
if(b-a+1==i&
&
a>
0)
%d~%d\n"
a,b);
if(n%(i/2)==0&
n%i!
=0&
i%2==0)
a=n/i-i/2+1;
if(a>
return0;
61.
intn,m,i,j,k,r[200],h[200],cost=0;
n,&
m);
for(i=1;
i<
=n;
i++)
r[i]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 语言 期末 复习