C复习资料改进剖析Word格式文档下载.docx
《C复习资料改进剖析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C复习资料改进剖析Word格式文档下载.docx(81页珍藏版)》请在冰点文库上搜索。
![C复习资料改进剖析Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/b4b8b185-44c4-4e64-860b-2659f6b275dd/b4b8b185-44c4-4e64-860b-2659f6b275dd1.gif)
(2)以“\”开头的转义字符
1.设有说明语句:
chara=’\123’;
则变量a()
A)包含1个字符B)包含2个字符C)3个字符D)说明不合法
2.C语言中,“\x5d”在内存中占用的字节数是( )
A)2B)5C)4D)1
3.字符串“\t\x42\\bcd\n”的长度是( )。
A)7B)10C)12D)13
五)各种基本类型变量所占的字节数
int2long4unsigned2
float4double8char1
1.下列式中,值不为4的表达式是()
A)sizeof(unsignedlong)B)sizeof(long)C)sizeof(unsignedint)D)sizeof(float)
六)合法的表达式
(1)%两边操作数必须是整型
(2)赋值的左边一定是变量
1.设变量a、b、c已定义并赋值,则下列表达式中符合C语言语法规则的是()
A)a=5++B)a=b=c++C)a%=2D)b=a+1=2
七)表达式的值
每个表达式都有值
(1)算术表达式的值就是计算结果
(2)赋值表达式的值被赋值变量的值
(3)逗号表达式的值是最后一个表达式的值
(4)注意两个表达式的意义:
令a是数字字符,则a-‘0’就是对应的数字
令a是字母字符,则a-32就是小写变为大写,a+32就是大写变为小写
1.设整型变量a的值为2,下列表达式值为1的是()
A)a%3B)a/3C)--aD)a++
2.下列表达式的值为0的是( )
A)7/8B)7%8C)7/8.0D)7<
8
3.设floatm=4.0,n=4.0;
使m为10.0的表达式是( )
A)m-=n*2.5B)m/=n+9C)m*=n-6D)m+=n+2
4.逗号表达式(a=4*5,a*2),a+15的值是( )
A)35B)40C)55D)20
八)++、--运算
1)先将表达式中++、--去掉
2)再将前置型的写在表达式上方
3)最后将后置型的写在表达式下方
当i=4,j=5时,表达式3-(i++)*4+(--j)的值如何,i,j的值多少?
九)表达式的类型
自动转换:
表达式中有整型和字符型,结果一定为整型
表达式中有实型,结果一定为double类型
强制转换:
可以强制转换为指定的类型
1.下列式中,最终运算结果的数据类型不是双精度的表达式的是()
A)(int)(3+3.0)B)1e-3C)(double)(3)D)(int)3.0+3.0
二、顺序结构
一)putchar和getchar:
一次只能输入输出一个字符
1.putchar函数可以向终端输出一个( )
A)整数 B)实数 C)字符串 D)字符
二)printf和scanf语句的使用方法:
scanf注意数据输入时的分隔符(“”中有的要原样输入,没有的数值数据以空格、回车、Tab键为默认分隔符,字符数据没有分隔符)
1.设有语句scanf(%d,%d”,&
m,&
n);
要使m、n的值依次是2、3,正确是输入是()
A)23B)2,3C)2;
3D)2
2.设变量定义为inta,b;
执行下列语句时,输入(),则a和b的值都是10
scanf(“%d,%d”,&
a,&
b);
A)1010B)10,10C)a=10b=10D)a=10,b=10
3.有以下程序
main()
{intm,n,p;
scanf("
m=%dn=%dp=%d"
&
n,&
p);
printf("
%d%d%d\n"
m,n,p);
}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是( )
A)m=123n=456p=789 B)m=123n=456p=789
C)m=123,n=456,p=789 D)123456789
printf注意输出形式%m.n形式,m代表输出的数据占的列宽,不够的在前面补上空格,n代表小数的显示位数
1.有如下程序段:
inta=3,b=15;
floatf=7.5;
printf(“%.1f”,(float)a+b/2+(int)f%3);
执行该程序段后,运算结果为:
()
A)11.5B)11.0C)11D)12.0
三、选择结构
一)关系表达式、逻辑表达式和条件表达式
(1)C中结果为真时值用1表示,结果为假时值用0表示;
(2)C中的操作数是以非0认为是真,以0认为是假;
(3)数学中表示10<
a<
100的C语言表示形式:
10<
a&
&
100
(4)逻辑运算中的短路原则
1.在C程序中,用()表示逻辑”真”。
A)1B)非0的数C)非1的数D)大于0的数
2.若有定义:
intx=2,y=3,z=4;
则表达式!
(x+y)+z-1&
y+z%2的值为( )
A)4B)0C)1D)2
3.设inta=0,b=0,c=0;
c=++a||b++;
则a、b、c值分别为()
A)010B)111C)110D)101
4.执行语句:
inta=1,b=0,c;
c=a>
0||++b;
后,b的值为()
A)0B)1C)2D)不确定
5.设intx,y,z=4;
x=y=++z;
x=(y>
z)?
x+2:
x++;
则x的值是()
A)4B)5C)6D)7
6.为表示关系x>
y>
=z,则正确的c语言表达方式为( )。
A)(x>
=z)B)(x>
y)and(y>
=z)
C)(y<
x)&
(y>
=z)D)(x>
y)&
7.若变量ch为char类型,能正确判断出ch为大写字母的表达式是()
A)’A’<
=CH<
=‘Z’B)(ch>
=’A’)||(ch<
=’Z’)
C)(‘A’<
=ch)and(‘Z’>
=ch)D)(ch>
=’A’)&
(ch<
运算符的优先级和结合性记忆方法
优先级
单目>
双目>
三目>
特殊双目(赋值>
逗号)
结合性
单目、三目自右向左
双目自左向右
特殊双目(赋值)自右向左
二)if语句
(1)条件
if(a)等价if(a!
=0)if(!
a)等价if(a==0)
(2)else的匹配原则:
与上方最近的且没被匹配的if匹配
1.有以下程序
main()
{inta=0,b=0,c=0,d=0;
if(a=1)b=1;
c=2;
elsed=3;
printf(%d,%d,%d,%d\n,a,b,c,d);
程序输出( )
A)0,1,2,0 B)0,0,0,3 C)1,1,2,0 D)编译有错
2.以下程序运行后的输出结果是
{
inta=3,b=4,c=5,t=99;
if(b<
c)t=a;
a=c;
c=t;
if(a<
c&
b<
c)t=b;
b=a;
a=t;
a,b,c);
三)switch语句
(1)switch的执行过程
(2)break的用法
1.#include<
stdio.h>
main()
{intx=1,y=1,a=0,b=0;
switch(x)
{case0:
b++;
case1:
a++;
case2:
break;
case3:
printf(“a=%d,b=%d\n”,a,b);
输出结果:
四)算法
1.交换:
t=a;
a=b;
b=t
2.分段函数
输入出租车里程S,输出应付车费F。
S和F的关系如下:
四、循环结构
一)循环条件均以条件为真(非0)进行循环,以条件为假(0)结束循环)
1.以下叙述正确的是()
A)do-while语句构成的循环不能用其它语句构成的循环来代替
B)do-while语句构成的循环只能用break语句退出
C)do-while语句构成的循环,在while后的表达式为非零时结束循环
D)do-while语句构成的循环,在while后的表达式为零时结束循环
2.设有程序段:
intk=10;
while(k=0)k=k-1;
则循环体执行的次数为( )
A)10次 B)9次 C)0次 D)1次
3.下列()循环不是无限循环
A)for(y=0;
x=1;
++y);
B)for(;
;
x=0);
C)while(x=1){x=1;
}D)for(y=0,x=1;
x>
++y;
x++)
二)三种循环的执行流程
1.设变量y值为3,执行下列循环语句后,变量y的值的是()
doy++;
while(y<
4);
A)3B)4C)5D)6
2.执行语句for(I=1;
I<
4;
);
后变量I的值是()
A)3B)4C)5D)0
三)循环嵌套的执行次数
1.#include“stdio.h”
voidmain()
{intI,j;
for(I=0;
=3;
I++)
{for(j=0;
j<
I;
j++)
printf(”%d”,I);
printf(“*\n”);
四)break和continue的用法
#include<
voidmain()
{inta=1,b;
for(b=1;
=10;
b++)
{if(a>
=8)break;
if(a%2==1){a+=5;
continue;
a-=3;
}
printf("
%d\n"
b);
2.#include<
voidmain()
{inti,m=0,n=0,k=0;
for(i=5;
i<
=7;
i++)
switch(i/6)
{case0:
m++;
n++;
case6:
break;
default:
k++;
}
printf(“%d,%d,%d\n”,m,n,k);
五)算法
求和
1.求1+2+3+……+100之和;
2.编程输出100以内所有6的倍数及它们的和;
3.求输入的10个学生的成绩之和;
4.求1-1/2+1/3-1/4+……+(-1)n+1(1/n)
5.求1+1/2+2/3+3/5+5/8+8/13+……(加100项)
1.利用下面公式求s的值(求20项之和)
s=1/(1*2*3)-1/(2*3*4)+1/(3*4*5)-1/(4*5*6)+...+1/(19*20*21)-1/(20*21*22)
求最大、小值
1.输入10个数据,求出其中的最大值;
2.输入10个数据,求出其中的最小值;
统计
1.输入10个学生的成绩,统计出及格的人数。
2.输入一行字符(以回车结束输入),统计其中数字、字母和其它字符的个数。
画图
1.编写程序打印以下图案(必须使用循环结构,直接输出不给分)
1
23
456
7890
2.打印出以下图案(必须使用循环结构,直接输出不给分)
*
***
*****
*******
求素数
1.判断m是否是素数
2.编程求100~300之间的全部素数的和
求最大公约数
1.求两个整数m和n最大公约数。
穷举法
1."
百马百担"
问题。
有100匹马驮100担货,每匹大马每次驮3担,每匹中马每次驮2担,2匹小马每次分驮1担。
编写程序求大、中、小马的匹数(大、中、小马的匹数均不得为0)。
2.一个素数加上1000以后是43的倍数,求满足这个条件的最小素数。
3.有2个小于40的正整数a和b,a的平方与b的和是1053,b的平方与a的和是873,请编程求满足条件的a和b的值。
(提示:
满足条件的a,b的值唯一)
4.一个自然数除以2余1,除以3余2,除以4余3,除以5余4,除以7余5,求满足这个条件的最小的自然数?
5.求所有的"
水仙花数"
之和。
所谓"
是指一个三位数,其各位数字的立方和等于该数本身。
例如153是一个"
,因为:
153=1*1*1+5*5*5+3*3*3。
五、数组
一)数组语法
(1)数组的定义[]中必须是常量
(2)C语言规定只能逐个引用数组元素而不能一次引用整个数组
(3)引用一维数组每个元素的的方法:
for(i=0;
长度;
i++)
a[i];
(4)引用二维数组每个元素的的方法:
第一维长度;
for(j=0;
a[i][j];
(5)引用时,下标的值从0开始,不要超过数组的范围
(6)数组初始化时所给的数据不能超过[]中给定的长度,若所给的数据不足长度,其它的为0
1.数组定义为inta[10][10];
,则数组a有()个数组元素。
A)100B)81C)20D)121
2.以下一维数组a的正确定义是()
A)inta(10);
B)intn=10,a[n];
C)intn;
D)#defineN10
Scanf(“%d”,&
inta[N];
Inta[n];
3.设有语句”inta[]={3,4,5,9,8,7};
”则表达式a[1]-a[4]的值是()
A)-6B)6C)-4D)2
4.以下不能正确定义二维数组的是( )
A)inta[2][2]={{4},{5}};
B)inta[][2]={4,5,6,7};
C)inta[2][2]={{4},5,6};
D)inta[2][]={{4,5},.{6,7}};
二)字符串
1)字符串和字符数组的区别
2)字符串函数的应用
1.以下程序的输出结果是()
#include<
string.h>
{charst[20]=”2000\0\t\\”;
printf(“%d,%d\n”,strlen(st),sizeof(st));
A)7,7B)4,20C)10,20D)20,20
2.要将字符串a连接到字符串b后面,使用下面()语句
A)strcpy(a,b);
B)strcat(a,b);
C)strcpy(b,a);
D)strcat(b,a)
三)算法
一维数组常见题型:
1.数组插入
2.数组删除
3.数组逆置
4.数组查找(顺序查找、折半查找)
5.冒泡排序、选择排序
二维数组常见题型:
在矩阵上的进行操作:
矩阵转置、矩阵求和、求最大值等。
字符数组常见题型:
各字符串函数的实现
1.已知字符串chars[50]=”Iamstudent.”,请编写程序将字符a插入到student之前,结果为“Iamastudent”。
2.有一个3×
4的矩阵,要求编程以求出其中值最大的那个元素,以及它所在的行号和列号。
程序如下:
inti,j,row,col,max;
staticinta[3][4]={{3,5,1,8},{6,4,11,7},{9,3,10,2}};
max=a[0][0];
___;
i++)/*$BLANK1$*/
if(___)/*$BLANK2$*/
{
max=___;
/*$BLANK3$*/
row=i;
col=j;
max=%d,row=%d,col=%d\n"
max,row,col);
六、函数
一)函数语法
(1)程序是由多个函数组成的,一个程序有且只有一个main函数,程序的运行是从main函数开始到时main函数结束
(2)函数不能嵌套定义,可以嵌套调用
(3)使用函数的三点:
定义、调用、申明(见下图)
(4)函数的参数:
形参和实参
要求形参和参类型一致,个数相同
传递过程是将实参的值对应传给形参
(5)值传递和地址传递
值传递:
简单类型,实参传给形参,形参发生变化不能传给实参。
地址传递:
数组、指针,实参传给形参,形参发生变化也能传给实参
1.在C程序中,若对函数类型未加说明,则函数的隐含类型为()
A)intB)doubleC)voidD)char
2.C语言中的函数()
A)可以嵌套定义B)不可以嵌套调用
C)可以嵌套定义,但不能递归调用D)嵌套调用和递归调用都可以。
3.有以下函数定义:
voidfun(intn,doublex){…………}
下面函数调用正确的是( )
A)fun(x,n)B)k=fun(10,12.5)
C)fun(intx,doubley)D)voidfun(n,x)
4.有以下程序
#defineN20
fun(inta[],intn,intm)
{inti,j;
for(i=m;
i>
=n;
i--)
a[i+1]=a[i];
{inti,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
5;
%d"
a[i]);
程序运行后的输出结果是()
A)10234B)12344C)12334D)12234
5.有以下程序
voidsum(inta[])
{a[0]=a[-1]+a[1];
main()
{inta[10]={1,2,3,4,5,6,7,8,9,10};
sum(&
a[2]);
printf("
a[2]);
}
程序运行后的输出结果是()
A)6B)7C)5D)8
6.以下程序运行后的输出结果是:
voidswap(intx,inty)
{intt;
t=x;
x=y;
y=t;
%d%d"
x,y);
voidswap1(int*x,int*y)
t=*x;
*x=*y;
*y=*t;
*x,*y);
{inta=3,b=4;
swap(a,b);
%d%d\n"
a,b);
swap1(&
二)递归函数
了解递归过程(见课件)
【程序1】#include”stdio.h”
intfun(intn)
{if(n<
10)returnn;
else
return(n%10)*fun(n/10);
{printf(“%d”,fun(218));
运行结果:
【程序2】
#include<
longfun(intn)
{longs;
if(n==1||n==2)s=2;
elses=n+fun(n-1);
returns;
voidmain()
{printf(“\n%ld”,fun(5));
三)变量的作用域和存储类型(见课件)
1.C语言auto型变量是()
A)存储在动态存储区中B)存储在静态存储区中
C)存储在外存储器中D)存储在计算机CPU的寄存器中
【程序1】intw=2;
intf(intx)
{inty=1;
staticintz=3;
y++;
z++;
return(x+y+z);
{intk;
for(k=0;
k<
3;
k++)
printf(“%4d”,f(w++));
【程序2】以下程序运行后的输出结果是:
fun(inta)
{intb=0;
staticintc=3;
b++;
c++;
return(a+b+c);
{inti,a=5;
i,fun(a));
\n"
七、指针
一)指针的语法
(1)指针定义基类型*指针变量名;
(2)指向操作(取址操作)指针变量=&
普通变量;
(3)间接访问*指针变量
二)指针作为参数(是地址传递,双向性)
三)指针与数组的关系
(1)与一维