C程序复习文档格式.docx
《C程序复习文档格式.docx》由会员分享,可在线阅读,更多相关《C程序复习文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
![C程序复习文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/7/26b2a75f-4d18-4b3a-9ee0-0ec534d17feb/26b2a75f-4d18-4b3a-9ee0-0ec534d17feb1.gif)
大学英文字母A~Z,小写英文字母a~z。
●数字:
1~9.
●专门符号:
29个:
!
”#&
‘()*+,—·
/:
<
=>
?
[\]ˆ_﹛﹜~
●空格符:
空格、水平制表符(tab)、垂直制表符、换行、换页(formfeed)。
●不能显示的字符:
空(null)字符(以'
0'
表示)、警告(以'
\a'
表示)、退格(以'
\b'
表示)、回车(以'
\r'
表示)等。
5、最常用的算术运算符
运算符
含义
举例
结果
+
正号运算符(单项运算符)
+a
a的值
-
负号运算符(单项运算符)
-a
a的算数负值
*
乘法运算符
a*b
a和b的乘积
/
除法运算符
a/b
a除b的商
%
求余运算符
a%b
a除b的余数
加法运算符
a+b
a和b的和
减法运算符
a-b
a和b的差
6、自增、自减运算符
作用是使变量的值加1或减1(++i、--i、i++、i--)
例如:
a的初始值为3,
(a++)+(a++)+(a++)=9
(++a)+(++a)+(++a)=18
7、运算符的优先级(详见第四章)与结合性
自左向右(又称“左结合性”,即运算对象先与左面的运算符结合):
算数运算符
结合性
自右向左(即右结合性):
赋值运算符
8、不同类型数据间的混合运算:
编译时,从左至右扫描。
(规律:
同一个字母,用小写表示的字符的ASCII代码比大写的大32,'
a'
的ASCII码为97,'
A'
的ASCII码为65)
9、C运算符
除了算数运算符外,C还提供其他运算符,共有以下几类:
(1)算术运算符(+-*/++--)
(2)关系运算符(> < == <= >= !
=)
(3)逻辑运算符(!
&
&
||)
(4)位运算符(针对二进制的运算)(<
<
>
>
~|^&
)
例如:
和&
2&
0=02&
3=1(非零即为1)
3=2(2:
0103:
011010&
011=010)
(5)赋值运算符(=及其扩展赋值运算符)
(6)条件运算符(?
:
)
(7)逗号运算符(优先级最低)(,)
(8)指针运算符(*和&
(9)求字节数运算符(sizeof)
(10)强制类型转换运算符((类型))
(11)成员运算符(.->
(12)下标运算符([])
(13)其他
10、用printf函数输出数据
Printf函数的一般格式为:
printf(格式控制、输出列表)
Printf函数的一般形式可以表示为:
printf(参数1,参数2,...,参数n)
11、用scanf函数输出数据
Scanf函数的一般形式:
scanf(格式控制,地址列表)
12、用putchar函数输出一个字符,puts输出一个字符串
Putchar函数的一般形式为:
putchar(c)
用getchar函数输入一个字符,gets输入一个字符串
Getchar函数的一般形式为:
getchar()
第4章选择结构程序设计
1、if语句的一般形式:
if(表达式)语句1
[else语句2]
方括号内的部分(即else子句)为可选的,即可有可无。
嵌套(就近原则,向上就近且为配套的)
2、关系运算符及其优先次序
C语言提供6种关系运算符:
(1)
(小于)算术运算符(高)
(2)<
=(小于或等于)优先级相同(高)
(3)>
(大于)关系运算符
(4)>
=(大于或等于)
(5)
==(等于)优先级相同(低)赋值运算符(低)
(6)!
=(不等于)
3、逻辑运算符及其优先次序
说明
逻辑与
a&
a
如果a和b都为真,则结果为真,否则为假
||
逻辑或
a||a
如果a和b有一个以上为真,则结果为真,二者都为假时,结果为假
!
逻辑非
如果a为假,则!
a为真,如果a为真,则!
a为假
(非)(高)
算术运算符
关系运算符
和||
赋值运算符(低)
4、条件表达式的一般形式:
表达式1?
表达式2:
表达式3
真(非0)假(0)
5、例题:
输入一个字符,判别它是否为大写字母,如果是,将它转化为小写字母;
如果不是,不转换。
然后输出最后得到的字符。
(p99例4.4)(重点掌握大小写的转换)
解题思路:
用条件表达式来处理,当字母是大写时,转换成小写字母,否则不转换。
编写程序:
#include<
stdio.h>
intmain()
{
charch;
scanf("
%c"
&
ch);
ch=(ch>
='
ch<
z'
)?
(ch+32):
ch;
//或ch=(ch<
=65&
=90)?
(ch+32):
printf("
%c\n"
ch);
return0;
}
运行结果:
A
a
输入大写字母A,输出小写字母a。
6、有三个整数a,b,c,由键盘输入,输出其中最大的数。
(P112T4)
程序如下:
intmain()
{
inta,b,c;
printf("
请输入三个数:
"
);
scanf("
%d,%d,%d"
a,&
b,&
c);
运行结果:
if(a<
b)请输入三个整数:
12,34,9
if(b<
c)max=34
max=%d\n"
c);
else
b);
elseif(a<
c)
else
a);
return0;
}
方法二:
使用条件表达式:
{inta,b,c,temp,max;
temp=(a>
b)?
a:
b;
//将a和b中的大者放入temp中
max=(temp>
c)?
temp:
c;
//将a和b中的大者和c比较,取最大者
三个整数中最大数是%d\n"
max);
7、给一个不多余5位的正整数,要求:
1 求出它是几位数;
2 分别输出每一位数字;
3 按逆序输出各位数字,如原数为234,应输出321。
(P113T9)
解:
math.h>
intmain()
intnum,indiv,ten,hundred,thousand,ten_thousand,place;
请输入一个整数(0-99999):
%d"
num);
if(num>
9999)
place=5;
elseif(num>
999)
place=4;
99)
place=3;
9)
place=2;
elseplace=1;
位数:
%d\n"
place);
每位数字为:
ten_thousand=num/10000;
thousand=(int)(num-ten_thousand*10000)/1000;
hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;
ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;
indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);
switch(place)
{case5:
%d,%d,%d,%d,%d"
ten_thousand,thousand,hundred,ten,indiv);
\n反序数字为:
printf("
%d%d%d%d%d\n"
indiv,ten,hundred,thousand,ten_thousand);
break;
case4:
%d,%d,%d,%d"
thousand,hundred,ten,indiv);
%d%d%d%d\n"
indiv,ten,hundred,thousand);
case3:
hundred,ten,indiv);
%d%d%d\n"
indiv,ten,hundred);
case2:
%d,%d"
ten,indiv);
%d%d\n"
indiv,ten);
case1:
indiv);
请输入一个整数(0~99999):
98423printf("
位数:
5
每位数组为:
9,8,4,2,3
反序数字为:
32489
}
8、输入四个整数,要求按由大到小的顺序输出。
(P113T11)
{intt,a,b,c,d;
请输入四个数:
c,&
d);
a=%d,b=%d,c=%d,d=%d\n"
a,b,c,d);
if(a>
b)
{t=a;
a=b;
b=t;
a=c;
c=t;
d)
a=d;
d=t;
if(b>
{t=b;
b=c;
b=d;
if(c>
d)运行结果:
请输入四个数字:
6,8,1,4
{t=c;
c=d;
}a=6,b=8,c=1,d=4
排序结果如下:
\n"
排序结果如下:
%d%d%d%d\n"
a,b,c,d);
1468
第5章循环结构程序设计
1、循环结构:
while;
dowhile;
for。
2、while语句:
只要当循环表达式为真(即给定的条件成立),就执行循环体语句
循环特点:
先判断条件表达式,后执行循环体语句。
一般形式:
while(表达式)语句
3、dowhile语句特点:
无条件地执行循环体,然后判断循环条件是否成立。
do
语句
while(表达式)
4、for语句一般形式:
for(表达式1;
表达式2;
表达式3)
3个表达式的主要作用:
表达式1:
设置初始条件,只执行一次。
表达式2:
是循环条件表达式,用来判断是否继续循环。
在每次执行循环体前先执行此表达式,决定是否继续执行循环体。
表达式3:
作为循环的调整。
即:
for(循环变量赋初值;
循环条件;
循环变量增值)
说明:
表达式3)语句
可以该写为while循环的形式:
while表达式2
{
表达式3
}
5、集中循环的比较:
1)3种循环都可以用来处理同一问题,一般情况下可以相互代替。
2)在while循环和do...while循环中,只在while后面的括号内制定循环条件,因此为了使循环能正常结束,应在循环体中包含是循环趋于结束的语句。
for循环可以在表达式3中包含使循环区域结束的操作,甚至可以将循环体中的操作全部放到表达式3中。
因此,for语句的功能能强,凡能用while循环能完成的,用for循环都能实现。
3)用while和dowhile循环时,循环变量初始化的操作应在while和do...while语句完成之前完成。
而for语句可以在表达式1中实现循环变量的初始化。
4)While循环、do...while循环和for循环,都可以用break语句跳出循环,用continue语句结束本次循环。
6.break语句和continue语句的区别:
Continue语句只结束本次循环而不是终止整个循环的执行。
而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
7、P128例题5.6程序语句:
if(n%5==0)printf("
\n"
)控制在输出5个数据后换行。
8、输入两个正数m和n,求其最大公约数和最小公倍数。
(P140T3)
intmain()
{
intp,r,n,m,temp;
请输入两个正整数n,m:
n,&
m);
if(n<
m)
temp=n;
n=m;
m=temp;
p=n*m;
while(m!
=0)
r=n%m;
m=r;
}运行结果:
它们的最大公约数为:
n);
请输入两个正整数n,m:
35,49
它们的最小公倍数为:
p/n);
他们的最大公约数是:
7
他们的最小公倍数是:
245
9、输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.(P140T4!
重点)
程序如下:
charc;
intletters=0,space=0,digit=0,other=0;
请输入一行字符:
while((c=getchar())!
\n'
c<
||c>
Z'
)运行结果:
letters++;
请输入一行字符:
elseif(c=='
'
)Iamastudent.
space++;
字母数:
11
elseif(c>
9'
)空格数:
3
digit++;
数字数:
Else其他字符:
1
other++;
字母数:
%d\n空格数:
%d\n数字数:
%d\n其他字符数数:
letter,apace,digit,other);
10、求
,即1+2!
+3!
+4!
+…+20!
.(P140T6,重点掌握求一个数的阶乘)
main()
doubles=0,t=1;
intn;
for(n=1;
n<
=20;
n++)
t=t*n;
s=s+t;
1!
+2!
=%22.15e\n"
s);
1!
=2.561327494111820e+018
11、一个数恰好等于它的因子之和,这个数就称为完数。
例如,6的因子为1,2,3,而6=1+2+3,因此6是完数。
编程找出1000以内的所有完数,并按下面的格式输出其因子:
(P141T9)
6itsfactorsare1,2,3
#defineM1000//定义寻找范围
intk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;
inti,a,n,s;
for(a=2;
a<
=M;
a++)//a是2~1000之间的整数,检查它是否完数
{n=0;
//n用来积累a的因子个数
s=a;
//s用来存放尚未求出的因子之和,并开始等于a
for(i=1;
i<
a;
i++)//检查i是否a的因子
if(a%i==0)//如果i是a的因子
{n++;
//n加一表示新找到一个因子
s=s-i;
//s减去已找到的因子,s的新值是尚未求出的因子之和
switch(n)//将找到的因子赋给k1~k9,或k10
{case1:
k1=i;
break;
//找出第1个因子赋值给k1
case2:
k2=i;
//找出第2个因子赋值给k2
case3:
//找出第3个因子赋值给k3
case4:
k4=i;
//找出第4个因子赋值给k4
case5:
k5=i;
//找出第5个因子赋值给k5
case6:
k6=i;
//找出第6个因子赋值给k6
case7:
k7=i;
//找出第7个因子赋值给k7
case8:
k8=i;
//找出第8个因子赋值给k8
case9:
k9=i;
//找出第9个因子赋值给k9
case10:
k10=i;
//找出第10个因子赋值给k10
}
if(s==0)
%d,itsfactorsare"
if(n>
1)printf("
k1,k2);
//n>
1表示a至少有2个因子
2)printf("
%d"
k3);
2表示至少有3个因子,故再输出一个因子
3)printf("
k4);
3表示至少有4个因子,故再输出一个因子
4)printf("
k5);
//以下类推
5)printf("
k6);
6)printf("
k7);
7)printf("
k8);
8)printf("
k9);
9)printf("
k10);
}6,itsfactorsare1,2,3
28,itsfactorsare1,2,4,7,14
}496,itsfactorsare1,2,4,8,16,31,62,124,248
#include<
{intm,s,i;
for(m=2;
m<
1000;
m++)
{s=0;
for(i=1;
m;
i++)
if((m%i)==0)s=s+i;
if(s==m)
{printf("
%d,itsfactorsare"
m);
i++)
if(m%i==0)printf("
%d"
i);
第6章利用数组处理批量数据
1、定义一维数组的一般形式为:
类型符数组名[常量表达式]
注意:
下标从0开始,常量表达式中可以包括常量和符号常量,不能包含变量。
2、应用数组元素的表示形式为:
数组名[下标]
只能引用数组元素而不能一次整体调用整个数组的全部元素的值。
3、对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。
(P144例题6.1)
inti,a[10];
for(i=0;
=9,i++)
a[i]=i;
for(i=9;
i>
=0,i--)运行结果:
pri