计算机c语言考辅导.docx
《计算机c语言考辅导.docx》由会员分享,可在线阅读,更多相关《计算机c语言考辅导.docx(27页珍藏版)》请在冰豆网上搜索。
计算机c语言考辅导
计算机c语言考辅导
————————————————————————————————作者:
————————————————————————————————日期:
1基本概念
⏹1.开发C程序的一般过程:
编辑(后缀为“.C”的源程序)→编译(生成后缀为“.OBJ”的目标程序)→连接(生成后缀为“.EXE”的可执行文件)→执行
⏹2.C是结构化的程序设计语言,它的三种基本结构是?
顺序结构、选择结构、循环结构
⏹3.C程序语句的结束符?
;
⏹4.C程序中的注释格式?
/*只是说明的作用,不能嵌套*/
例1.1以下叙述中正确的是
A)C语言不是一种高级语言B)C语言不用编译就能被计算机执行
C)C语言能够直接访问物理地址和进行位运算D)C语言具有其他语言的一切优点
例1.2C是一种结构化、模块化的语言,是因为
A)C语言具有结构化的控制语句,如if、while、for。
B)C语言用函数作为程序的模块单位,以函数为模块组织程序。
C)C语用函数作为程序的模块单位,以函数为模块组织程序,还具有结构化的控制语句,如if、while、for。
D)用C语言编写的程序层次清晰明了,易于调试和维护。
Chap2变量与表达式
C语言中的任何变量,使用前都必须定义,也就是先定义后使用。
⏹1.合法的标识符与合法的用户标识符
标识符只能有数字、字符、下划线组成且数字不能打头。
标识符中字母的大小敏感,如abc与ABC是两个完全不同的标识符。
还不能占用关键字(库函数名不是关键字)。
程序中使用的标识符应尽量做到“见名知义”。
(变量名、常量名、自定义函数名都遵循此原则)
⏹2.预定义标识符是合法的用户标识符
例2.1以下不能定义为用户的标识符的是
A)scanfB)VoidC)_3com_D)intE)Int
分析:
本题答案为D。
因为int为关键字。
A)是预定义标识符,它可以用做用户标识符,只是一旦定义则会失去原义。
B)void是关键字但是Void不是。
C)符合合法用户标识符的命名规则。
E)与B)的道相同。
例2.2以下不合法的用户识符是
A)j2_KEYB)DoubleC)4dD)_8_
例2.3以下是C标志符但不是C语言关键字的是
A)intB)doubleC)unsignedD)#includeE)real
注意:
关键字首先应该是合法的标志符,首先应将非法的去掉。
答案D、E
⏹3.C程序有且仅有一个main(),程序的执行从main开始在main中结束
例2.4在一个C程序中,()
A)main()函数必须出现在所有函数之前B)main()函数必须出现在所有函数之后
C)main()函数可以出现在任何位置D)main()函数必须出现在固定位置
⏹4.合法的整型、实型、字符型、字符串常量★★
注意:
在C语言中没有直接表示二进制的整型常量,且只有十进制能表示负常量。
(1)十进制整型常量由一串连续的0~9数字组成,如:
0、120、-635等
(2)八进制整型常量以数字0开头,由一串连续的0~7数字组成,如:
0101、077等
(3)十六进制整型常量以数字0x或者0X开头,由一串连续的0~9、A~F或a~f组成,如:
0x11、0Xff等
例2.5C中简单的数据类型包括
A)整型、实型、字符型B)整型、实型、字符型、逻辑型
C)整型、逻辑型、字符型D)整型、实型、逻辑型
例2.6在c中,int型在内存中占两个字节,则int型数据的取值范围()
例2.7下面不是C中整型常量的是
A)01B)0x11C)081D)-3276
例2.8以下合法的字符型常量是()
A‘\x13’B‘\081’C‘65’D”\n”E”A”
用单引号括起来的单个普通字符或转义字符.常用转义字符:
‘\ddd’-3位8进制数代表的字符‘\xhh’-
2位16进制数代表的字符‘\n’‘\b’‘\\’‘\‘’
⏹5.算数运算符/与%很重要★★★
注意:
整型(常量或变量)/整型(常量或变量)=整型%两边必须是整型(常量或变量)
例2.9若已定义x和y是double型,则表达式x=1,y=x+3/2执行后y的值()
A1B2C2.0D2.5
例2.10C中运算对象必须是整型运算符的是()
A/B%C=D&&
例2.11若已定义:
inta=7;floatx=2.5,y=4.9;则表达式x+a%3*(int)(x+y)/4的值()
A2.75B3.5C2.5D0
⏹6.++--★★★
前置++i,--i(先执行i+1或i-1,再使用i值)j=3;printf(“%d”,++j);
后置i++,i--(先使用i值,再执行i+1或i-1)j=3;printf(“%d”,j++);
例2.12设intk=0;以下四个选项中不同于其它三个的是()
Ak++Bk+=1C++kDk+1
例2.13以下程序的运行结果是()
main()
{intx=1,y=2,z;
z=x>y?
++x:
y++;
printf(“%d,%d,%d”,x,y,z);
}A1,3,3B1,2,3C2,3,3D2,2,3
⏹7.复合赋值运算★★
例2.14设单精度变量啊a、b的值均为5.0,则表达式中能使a为10.0的是()
Aa-=b+5Ba+=b*1Ca*=b-4Da/=b*5
例2.15设有语句inta=3;则执行a+=a-=a*a;后变量a的值是()
⏹8.逗号表达式★
例2.16以下语句运行后的结果是()
intx;
printf(“%d”,((x=4*5,x*5),x+25));
A125B100C45D20
⏹9.其他
例2.17写出与下列数学表达式相对应的c语言表达式()
1、x×(y+1)2、
3、
4、
例2.18表示关系x≤y≤z的c
语言表达式()
Ax<=y&&z<=yBx<=yANDz>=yCx<=y&&z>=yDx<=y||z>=y
例2.19关于数据类型转换的说法正确的是()
A当表达式中的数据类型不一致时会发生自动类型转换
B当表达式中的数据类型不一致时会不会发生自动类型转换,提示错误
C数据的类型转换是编译系统自动完成的,不可以强制转换
D数据的类型转换是强制转换不是编译系统自动完成的
分析:
数据的类型转换分为自动和强制。
Chap3顺序结构
⏹1.scanf(“格式”,地址)与printf(“格式”,数据)
⏹2.以上特别是scanf();一定要注意它的输入格式
例3.1知:
inti,j,k;scanf(“%d%d%d”,&i,&j,&k);若从键盘上给他们分别赋值4、5、6,则错误的输入为()
A4,5,6B4回车5回车6回车C4空格5空格6回车D4空格5回车6回车
注意:
当输入多个数值数据时,输人数值数据之间用间隔符(包括空格符、制表符和回车符,但是不包括逗号)隔开。
⏹3.主格式要求掌握%d,%ld,%hd,%c,%s,%f,%lf
例3.2知:
intx=10,y=3,z;则printf(“%d\n”,z=(x%y,x/y));的输出结果为()
A1B3C4D0
例3.3若定义变量inta;floatb;charc;要正确输出a、b、c的数据,正确的为()
Aprintf(“%d%3.2f%c”,a,b,c);Bprintf(“%d%3.2f%c”,&a,&b,&c);
Cprintf(“%d%d%c”,a,b,c);Dprintf(“%d=a,%3.2f=b,%c=c”,a,b,c);
Chap4顺序与选择结构
⏹1.关系与逻辑(逻辑世界0,1)
当表达式或者常量或者变量作为逻辑运算量的时候,非零即真1,零就是假0。
例4.1表达式5!
=6的值是();表达式‘A’==65的值是()
逻辑运算时还要格外注意逻辑运算的短路特性
例4.2设有inti=1,j=2,k=3;,则表达式i>j&&k++的值是()。
注意:
先算关系后算逻辑,逻辑运算的短路特性,该表达式执行后,k的值为3而不是4
例4.3下列语句组的输出结果为()
inta=-1,b=2,k;
k=!
((++a<0)&&!
(b--<=0));
printf(“%3d%3d%3d\n”,k,a,b);
A102B104C013D004
⏹2.选择结构★★★
if(条件){怎样1;怎样2;}
else{又怎样1;又怎样2;}
注意:
该结构中的“语句”只能是一条语句或者是一个复合语句。
If条件表达式之后,不要根“;”。
※这里可能会出一道大题※
例4.4编写分段函数程序,求y的值?
(详见p12编程题3)
⏹3.选择结构★★★
switch(表达式)
{case值1:
怎样1;
case值2:
怎样2;break;
}
注意:
switch语句的圆括号(必须要有圆括号)中表达式的值必须是整型或字符型,不能为实型。
case后的表达式可以是求得整型量和字符型量的常量表达式,但常量表达式中不能含有变量。
每一个case都是一个程序入口,表示该switch结构从何处进入,一旦进入该结构体就会顺序往下执行,直到遇到break;才会跳出程序,否则一直执行到该结构的末尾。
这一点一定要理解。
default最多只能有一个,通常出现在switch的最后部分,但也可以出现在case之间或所有case之前。
例4.5若有定义:
floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是
A)switch(x)B)switch((int)x);
{case1.0:
printf(“*\n”);{case1:
printf(“*\n”);
case2.0:
printf(“**\n”);case2:
printf(“**\n”);
}}
C)switch(a+b)D)switch(a+b)
{case1:
printf(“*\n”);{case1:
printf(“*\n”);
case2+1:
printf(“**\n”);casec:
printf(“**\n”);
}}
例4.6以下程序运行后的输出结果
main()
{inta=0,b=2,c;
swich(a)
{
case0:
c=b++;
case1:
switch(b)
{case1:
c++;break;
case2:
c*=b;break;
default:
c+=b;
}
break;
default:
c--;
}
printf(“%d”,c);
}
Chap5循环结构(★★★★★)
⏹1.必须掌握三种循环结构
while(表达式){循环体;}
(1)while是C语言中的关键字
(2)while之后是一对配对的圆括号,里面的表达式是C语言中任意合法的表达式,作用是控制循环。
其值为“真”(非0)则执行循环体语句,否则不执行循环体。
(3)循环体语句如果只有一个,可以不加花括号;如果循环体语句超过一个,则必须用花括号括起来组成复合语句。
(4)圆括号内的表达式不能缺省。
循环体部分可以由一个空语句构成,表示循环体部分不做任何操作。
do{循环体;}while(表达式)注意:
do—while循环至少要执行循环体一次。
for(初始,条件,修正){循环体;}
(1)for是C语言中的关键字。
(2)for之后的圆括号内一共有三个表达式,以分号“;”隔开。
一般情况下,表达式1的作用是赋初值;表达式2的作用是控制循环;表达式3的作用是赋值修正。
(3)循环体语句如果只有一个,可以不加花括号;如果循环体语句超过一个,则必须用花括号括起来组成复合语句。
(4)圆括号内的三个表达式在语法上都可以缺省,但是两个分号“;”千万不能缺省。
循环体语句可以由一个空语句组成,表示不做任何操作。
⏹2.循环次数是考察重点(只要流程进入循环体就算一次)
⏹3.循环初始条件、循环终止条件、循环体、循环变量
例5.1以下程序从键盘上输入一个正数12345,将各位数字反序显示出来,即显示654321。
填空
main()
{intnum=0,c;
printf(“请输入一个整数:
”);
scanf(“%d”,&num);
do
{;/*取得num的个位数*/
printf(“%d”,c);
}while();/*直到取完为止*/
printf(“\n”);
}
例5.2有一个分数序列,求前20项之和
#include
Main()
{floatn,s;
inti,flag;
flag=1[1];
s=0.0[2];
for(i=1;i<=20;i++)
{[3];
s=s+n;
[4]flag=-1*flag;
}
printf(“thesum=%f”,s);
}
⏹4.break与continue
Break:
(1)在循环嵌套结构中,break语句只能终止并跳出包含它的那一层循环结构。
(2)break语句只能用于循环体内或switch结构中。
continue语句的作用是跳过它后面的循环体语句,提前结束本轮循环并开始下一次循环。
continue语句只能出现在循环体中。
Break与continue比较:
(1)break语句结束整个循环,而continue语句只是提前结束本轮循环,接着判断是否继续执行下一轮循环。
(2)如果有循环结构的嵌套,两者起作用的仅仅只是所在循环体从属的最内层循环,而不是外层的某个循环。
例5.3关于break语句,以下说法不正确的是()。
A可以出现在if语句中B可以出现在循环语句中
C可以出现在switch语句中D可以出现在函数的任何语句中
例5.4以下程序运行后的输出结果
main()
{inti,x;
for(i=1,x=1;i<=50;i++)
{if(x>=10)break;
if(x%2==1){x+=5;continue;}
x-=3;
}
printf(“i=%d,x+%d\n”,i,x);
}
注意:
该题除要注意break和contine的作用外,还要分清楚循环体到底是哪部分。
⏹5.循环嵌套
v三种循环可互相嵌套,层数不限
v外层循环可包含两个以上内循环,但不能相互交叉
v嵌套循环的执行流程
v嵌套循环的跳转禁止:
●从外层跳入内层
●跳入同层的另一循环
●向上跳转
Chap6字符型数据
⏹1.转义字符★★★
例6.1字符中,错误的转义字符是()。
A‘\091’B‘\\’C‘\0’D‘\n’
⏹2.字符常量与ASCII相对应:
‘A’与65通用★
⏹3.printf()与scanf()中的%c的间隔问题★
例6.2已知:
chara,b,c;scanf(“%c%c%c”,&a,&b,&c);若从键盘上给他们分别赋值A、B、C,则正确的输入为()
AA,B,CBABC回车CA空格B空格C回车DABC回车
⏹4.getchar()与putchar()函数的功能
⏹5.有关字符串函数:
strcpy、strcmp、strlen
例6.3判断字符串ca和字符串cb是否相等,应当使用()。
Aif(ca==cb)Bif(strcpy(ca,cb))Cif(ca=cb)Dif(strcmp(ca,cb)==0)Eif(strcmp(ca,cb)=0)
例6.4有如下定义:
chars[20]=”\ta\017bc”;则函数strlen(s)的返回值为()。
Chap7一维数组,字符数组
1.定义、初始化、数组元素的引用
定义例如:
inta[5]说明:
(1)数组名是用户定义标识符。
(2)数组名后面的一对方括号必不可少,方括号内的表达式必须为常量表达式,表示数组元素的个数,也称为数组的长度。
该常量表达式的值必须为正的整型常量,绝对不能为变量。
(3)方括号中的5规定了a数组有5个元素,分别是a[0]、a[1]、a[2]、a[3]和a[4]。
(4)每个数组只能有一个下标,数组的下标总是从0开始,到数组长度-1结束。
(5)定义之后,a数组在内存中占用5个连续的存储单元,每个单元可以存放一个整型数据,由于一个整型数据占用4个字节,故该数组共开辟20个字节的内存空间,如图8—1所示。
例7.1以下数组定义正确的是()
Ainta(5)Binti=5,a[i];Cinta[NUM];(NUM为符号常量)Dintnum;scanf(“%d”,&num);inta[num];
例7.2已有定义:
inta[6];下面那个是对数组元素的错误引用()
Aa[0]Ba[3]Ca[1+3]Da[6]
例7.3C语言中对于字符数组的描述错误的是()。
A字符数组可以存放字符串B字符数组中字符串可以整个输入、输出
C在赋值语句中只能通过“=”对字符数组整体赋值D字符数组中字符串的结束标志为’\0’
例7.4已经定义charch[10];inti;为了给ch数组赋值,正确的是()。
Ach[10]=”verygood”Bch[]=”verygood”Cch=”verygood”Dfor(i=0;i<11;i++)ch[i]=getchar();
例7.5有如下定义:
chars[]=”\ta\017bc”;则函数strlen(s)的返回值为(),字符串所占空间为()个字节。
2.※综合应用(这会是一道大题,跟循环在一起应用)※
例7.5要求从键盘上给10个元素的数组元素赋值作为10个学生的成绩,并依次打印出,要求每行5个,每个数字占7位宽度保证2位小数;输出最高分、最低分和平均分,要求2位小数。
main()
{floata[10],av=0,sum=0,max,min;
inti;
for(i=0;i<10;i++)
{scanf(“%f”,&a[i]);
}
for(i=0;i<10;i++)
{if(i%5==0)
printf(“\n”);
printf(“%7.2f”,a[i]);
}
max=min=sum=a[0];
for(i=1;i<10;i++)
{sum+=a[i];
if(maxif(min>a[i])min=a[i];
}
av=sum/10;
printf(“themaxis%7.2f”,max);
printf(“theminis%7.2f”,min);
printf(“theaverageis%7.2f”,av);
}
Chap8函数
掌握函数定义、参数传递、调用的执行过程及函数返回值
1.函数定义
函数返回值的类型名函数名(类型名1形式参数1,类型名2形式参数2,……)
{
说明部分
执行部分
}
(1)函数返回值的类型名缺省时,返回值类型默认为int类型,而不是无返回值。
若函数没有返回值,类型名应为void。
(2)函数名是用户定义标识符,唯一且独有,不得与同一程序中其他函数相同。
主函数的函数名必须为main。
(3)函数名后的一对圆括号必不可少,括号中为形参列表。
形参用于数据传递,同样是用户定义标识符。
在同一个函数内形参名必须唯一。
函数可以不带形参,但一对圆括号不能省。
(4)函数体部分的一对花括号必不可少。
(5)函数不能嵌套定义。
即在一个函数的函数体中不允许再定义另外的函数。
⏹形式参数:
定义函数时函数名后面括号中的变量名
⏹实际参数:
调用函数时函数名后面括号中的参数
2.函数声明的一般形式
返回值类型名函数名(类型名1参数名1,类型名2参数名2,……);
在使用函数时,可以有两种方式:
(1)先定义后调用。
此时不需要进行函数声明。
(2)先声明,后调用,最后定义,就是上面例子中采用的方式。
函数声明的位置
函数声明的位置有下面两种:
(1)在所有函数的外部(全局函数),在声明之后的任何位置都可以调用该函数。
(2)在调用函数的内部(局部函数),此时的函数声明和普通变量定义一样,出现在调用函数的函数体的说明部分。
此时只能在该调用函数中识别该函数,不能被其他函数调用。
3.参数传递方式:
值传递、地址传递(见Chap10指针4)
值传递:
函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值。
特点:
形参与实参占用不同的内存单元;单向传递。
重点掌握:
简单递归、求素数函数
例8.1以下程序是调用自定义函数求圆的周长,请填空
#definePI3.1415
floatfun(floatr)
{floats;
s=2*PI*r;
;
}
main()
{floatfs,r;
printf(“请输入一个半径:
”);
scanf(“%f”,&r);
;/*调用函数*/
printf(“%f”,fs);
}
例8.2以下程的输出结果
main()
{inti=3;
printf(“%d”,fun(i));
}
intfun(intn)
{inta;
if(n==1)retrun1;
a=n+fun(n-1)
returna;
}
Chap9变量作用域
1.根据