C语言总复习资料.docx
- 文档编号:23850414
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:106
- 大小:68.31KB
C语言总复习资料.docx
《C语言总复习资料.docx》由会员分享,可在线阅读,更多相关《C语言总复习资料.docx(106页珍藏版)》请在冰豆网上搜索。
C语言总复习资料
C语言总复习资料
算法口诀
累加累乘整除性,最大最小双重循,
一查两排两遍历,函数调用文件行。
3.1.1选择结构
一.控制结构:
1.简单判断:
if(表达式)语句
2.选择分支:
if(表达式)语句1else语句2
3.多条件选择:
if(表达式1)语句1
elseif(表达式2)语句2
elseif(表达式3)语句3
……
else语句n
4.情况语句:
switch(表达式)
{case常量表达式1:
语句段1
case常量表达式2:
语句段2
……
case常量表达式n:
语句段n
default:
语句段n+1
}
5.嵌套的if-else语句
if(表达式1)
if(表达式2)语句1
else语句2
else
if(表达式3)语句3
else语句4
二.说明:
1.在这5种控制结构中,第1种简单判断使用起来最简单,但也最实用,可以作为首选,虽然在编制程序时语句多用几句,但用起来却很方便。
2.第2种选择分支往往用在两种情况的判断,使用时要注意语句1和语句2后面都有分号。
3.第3种多条件选择是if-else语句的一种嵌套形式,由于它可以直接用于多条件的选择判断,所以单独作为一种形式列出。
在使用时,有时比switch语句更简单,要注意最后一个else的后面没有if。
4.第4种情况语句要注意switch后面的表达式是与case后面的常量表达式匹配,而不能与一般的含变量的表达式匹配。
语句段后面没有break语句时是入口开关,有break语句时才是真正的多路开关。
5.第5种嵌套的if--else语句使用起来最灵活,其实,以上各种形式的分支结构间相互都可以嵌套,当有多种形式的分支结构嵌套时,特别要注意else总是与它最近的没有匹配的if相匹配。
(1)、编程,输入x后,根据下式计算并输出y值。
(01.1)
#include
#include
voidmain()
{doublex,y;
scanf("%lf",&x);
if(x<-2)
y=x*x-sin(x);
elseif(x>2)
y=sqrt(x*x+x+1);
else
y=pow(2,x)+x;
printf("y=%f\n",y);
}
文件包含:
#include
#include
#include
#include
#include
常用数学函数:
exexp(x)
xypow(x,y)
|x|fabs(x)abs(x)
lnxlog(x)
lgxlog10(x)
x1/2sqrt(x)
编程:
05秋五.105春五.101五.1
阅读:
05秋四.105春四.1
3.1.2循环结构
一.控制结构
1.当型循环:
while(表达式)语句
2.直到型循环:
do语句while(表达式);
3.步长型循环:
for(表达式1;表达式2;表达式3)语句
二.说明:
1.第1种当型循环当“表达式”为非0值时,执行语句,“语句”部分就是循环体,while循环是先判断后执行。
如果语句部分包含一个以上的语句,那么应该用复合语句“{}”的形式。
在循环体中应有使循环趋于结束的语句。
否则会造成死循环。
当表达式一开始就不成立时,会造成一次也不做的循环。
2.第2种直到型循环先执行“语句”,后判断“表达式”,即至少执行一次循环体。
当“表达式”的值为非0时,返回重新执行“语句”。
对于同一个问题,既可以用while语句,也可以用do-while语句处理。
while语句可能一次也不执行循环体,但do-while语句至少执行一次循环体。
特别要注意while语句后加分号;。
3.第3种步长型循环是应用最广泛,也是最重要的一种控制格式。
其执行过程是:
1)求解表达式1;
2)求解表达式2:
如果值为真(非0),则执行“语句”部分;
如果值为假(0),则结束循环;
3)当表达式2为真时,在执行了“语句”部分后,求解表达式3;
4)转到第2步继续执行.
在步长型循环的一般格式中,表达式1、表达式2、表达式3可以是任意表达式,理解和在程序设计实践中掌握for语句的格式和功能,是学习程序设计的重要一环。
必须认真掌握。
for语句最常用的形式:
for(循环变量赋初值;循环结束条件;循环变量加步长)语句所以把它称为步长型循环。
4.break语句:
break语句除了可以用来跳出switch结构之外,还可以用来从循环体内跳出循环。
语句的一般形式:
break;
5.cntinue语句:
其作用是结束本次循环。
即跳过循环体中的continue后面的其它语句,接着进行下一次是否执行循环的判断。
语句的一般形式:
continue;
break语句和continue语句的区别是:
(1).break语句结束整个最内层循环,不再进行条件判断。
(2)continue语句只结束本次循环,直接进行是否执行下一次循环的判断。
6.循环结构的最基本应用,可以实现程序中的计数和累加、累乘。
一、累加累乘
基本知识:
不变式
功能
公式
初值
X=X+1
计数
0
S=S+X
累加
∑
0
S=S*I
累乘
N!
1
S=S*X
累乘
Xn
1
实现上述功能的程序如下:
(1)求1+2+3+……+n
#include
voidmain()
{
inti,,n,sum;
scanf("%d",&n);
sum=0;
for(i=1;i<=n;i++)
sum=sum+i;
printf(“%d\n”,sum);
}
(2)求n!
#include
voidmain()
{
inti,n;
doubleproduct;
printf("inputn:
\n");
scanf("%d",&n);
product=1;/*置阶乘product的初值为1*/
for(i=1;i<=n;i++)/*循环重复n次,计算n!
*/
product=product*i;
printf("product=%.0f\n",product);
}
intfactorial(intn)//定义计算n!
的函数
{inti,fact=1;
for(i=1;i<=n;i++)//循环
fact=fact*i;//累乘
returnfact;//返回n!
的值
}
(3)求xn
#include
voidmain()
{
inti,n;
doublex,power;
printf("inputx,n:
\n");
scanf("%lf%d",&x,&n);
power=1;/*置power的初值为1*/
for(i=1;i<=n;i++)/*循环重复n次,计算x的n次幂*/
power=power*x;
printf("%0.f\n",power);
}
doubleexpon(doublex,intn)
{inti;
doublepower=1.0;
for(i=1;i<=n;i++)
power=power*x;
returnpower;
}
应用:
级数求和
1.输入x、n后输出下列算式的值。
(次数控制)
解1:
#include
voidmain()
{floats,t1,t2,t3,x;inti,n;
scanf("%f%d",&x,&n);
s=0;t1=t2=t3=1;
for(i=1;i<=n;i++){
t1=t1*x;t2=t2*i;s=s+t3*t1/t2;t3=-t3;
}
printf("%f\n",s);
}
解2:
#include
voidmain()
{floats,t,x;;inti,n;
scanf("%f%d",&x,&n);
s=0;t=-1;
for(i=1;i<=n;i++){t=-t*x/i;s+=t;}
printf("%f\n",s);
}
解3(函数调用)
#include
intfactorial(intn);
doubleexpon(doublex,intn);
voidmain()
{floats,x;inti,n,t;
scanf("%f%d",&x,&n);
s=0;t=1;
for(i=1;i<=n;i++){
s=s+t*expon(x,i)/factorial(i);
t=-t;
}
printf("%f\n",s);
}
intfactorial(intn)
{inti,fact=1;
for(i=1;i<=n;i++)
fact=fact*i;
returnfact;
}
doubleexpon(doublex,intn)
{inti;
doublepower=1.0;
for(i=1;i<=n;i++)
power=power*x;
returnpower;
}
2.求菲波那契(Fibonacci)序列:
1,1,2,3,5,8,……。
请输出前10项。
#include
voidmain()
{
inti,x1,x2,x;
x1=1;/*头两项都是1*/
x2=1;
printf("%6d%6d",x1,x2);/*先输出头两项*/
for(i=1;i<=8;i++){/*循环输出后8项*/
x=x1+x2;/*计算新项*/
printf("%6d",x);
x1=x2;/*更新x1和x2*/
x2=x;
}
}
3.求1-1/3+1/5-…的前n项和
#include
voidmain()
{inti,n;
doubleitem,sum;
printf("inputn:
");
scanf("%d",&n);
flag=1;
t=1;
sum=0;
for(i=1;i<=n;i++){
item=flag*1.0/t;/*计算第i项的值*/
sum=sum+item;/*累加第i项的值*/
flag=-flag;/*准备下一次循环*/
t=t+2;
}
printf("sum=%f\n",sum);
}
4.下列格里高利公式求π的近似值,要求精确到最后一项的绝对值小于10–5。
(精度控制)
#include
#include
voidmain()
{
intflag,t;
doubleitem,pi;/*pi用于存放累加和*/
lag=1;
t=1;/*变量t表示第i项的分母*/
item=1.0;/*item中存放第i项的值*/
pi=0;
while(fabs(item)>=0.00001){
item=flag*1.0/t;/*计算第i项的值*/
pi=pi+item;/*累加第i项的值*/
flag=-flag;/*改变符号,为下一次循环做准备*/
t=t+2;/*分母递增2,为下一次循环做准备*/
}
pi=pi*4;/*循环计算结果是pi/4*/
printf(“pi=%f\n”,pi);
}
编程:
06804五.202五.2
阅读:
06105秋105春1
二、整除性(循环与分支的嵌套)
基本知识:
x%y==0
简单应用
1.从键盘输入100个整数,求其中正数的平均数。
main()
{inti,count=0,x;
floatsum=0;
for(i=0;i<100;i++)
{scanf(“%d”,&x);
if(x>0){sum=sum+x;count++;}
}
sum=sum/count;
printf("%f",sum);
}
2.输入一行字符,统计其中英文字母、空格或回车、数字和其他字符的个数。
#include
voidmain()
{intblank,digit,i,letter,other;
charch;
blank=digit=letter=other=0;
while((c=getchar())!
='\n')
{
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
letter++;
elseif(ch>='0'&&ch<='9')/*如果ch是数字字符*/
digit++;
elseif(ch==''||ch=='\n')
blank++;
elseother++;
}
printf("letter=%d,blank=%d,digit=%d,other=%d\n",letter,blank,digit,other);
}
3.素数
(1)输入一个正整数m,判断它是否为素数。
#include
voidmain()
{
inti,m;
printf("Inputanumber:
");/*输入提示*/
scanf("%d",&m);
for(i=2;i if(m%i==0)break; /*若m能被某个i整除,则m不是素数,提前结束循环*/ if(i>=m/2)/*如果循环正常结束,说明m不能被任何一个i整除,则m是素数*/ printf("%disaprimenumber! \n",m); else printf("No! \n"); } (2)求500以内的全部素数,每行输出10个。 解1 #include #include voidmain() { intcount,i,m,n; count=0;*count用于控制输出格式,每行输出10个数*/ for(m=2;m<=500;m++){ n=sqrt(m); for(i=2;i if(m%i==0)break; if(i>=n){/*如果m是素数*/ printf("%6d",m);/*输出m*/ count++;/*累加已经输出的素数个数*/ if(count%10==0)printf(“\n”);/*输出数10的倍数,换行*/ } } printf("\n"); } 解2/*使用函数求500以内的全部素数,程序版本2*/ #include #include voidmain() { intcount,m; count=0;/*count用于控制输出格式,每行输出10个数*/ for(m=2;m<=500;m++){ if(prime(m)){/*调用prime(m)判断m是否为素数*/ printf("%6d",m);/*输出m*/ count++;/*累加已经输出的素数个数*/ if(count%10==0)printf(“\n”);/*输出换行*/ } } printf("\n"); } /*定义判断素数的函数,如果x是素数则返回1(“真”);否则返回0(“假”)*/ intprime(intx) { inti,n,res;/*变量res作为判断结果*/ res=1;/*设res的初值为1*/ n=sqrt(x); for(i=2;i if(x%i==0){/*如果x不是素数*/ res=0;/*判断结果为0*/ break;/*中止循环*/ } returnres;/*把判断结果回送主函数*/ } (3)f(intn) { inti,j; if(n%2||n==2){ printf("Error: %disanoddnumberorequalsto2! \n",n); return; } for(i=n-2;i>=n/2;i--){ for(j=2;i%j;j++); if(j! =i)continue; for(j=2;(n-i)%j;j++); if(j! =n-i)continue; printf("%3d=%3d+%3d",n,i,n-i); } } inttest_data[]={6,8,10}; main() { inti; for(i=0;i<3;i++) f(test_data[i]); } 问题1.程序输出的结果为: _____________. 问题2.函数f(intn)的功能是: ___________. 4.数位截取 基本知识: while(x) {d=x%10; 处理 x=x/10; } (1)输入一个正整数,将其逆序输出。 例如,输入12345,输出54321 scanf(“%d”,&x); while(x>0) {printf(“%d”,x%10); x=x/10; } (2)从键盘读入一个整数,统计该数的位数。 例如,输入1234,输出4;输入0,输出1。 #include voidmain() { intcount,number;/*count记录number的位数*/ count=0; printf("Inputanumber: ");/*输入提示*/ scanf("%d",&number); if(number<0)number=-number; do{/*判断循环条件*/ number=number/10; /*整除后减少一位个位数,组成一个新数*/ count++;/*位数加1*/ }while(number! =0);/*判断循环条件*/ printf("Itcontains%ddigits.\n",count); } (3)输入一个长整型数,求各位数字的平方和 #include voidmain() {intdigit; longin,s; scanf(“%ld”,in); _________________&&if(in<0)in=-in; __________________&&s=0; while(in>0) {___________&&digit=in%10; s=s+digit*digit; _____________&&in=in/10; } printf(“sum=%ld\n”,s); } (4)若一个3位整数的各位数字的立方之和等于这个整数,称之为“水仙花数”。 例如: 153是水仙花数,因为153=13+53+33求所有的水仙花数。 解1: #include voidmain() {intdigit,x,s; printf(″水仙花数是: \n″); for(i=100;i<=999;i++) {x=i;s=0; while(x) {digit=x%10; s+=digit*digit*digit; x=x/10; } if(s==i)printf(“%d\n”,i); } } 解2: #include voidmain() {inti,j,k; printf(″水仙花数是: \n″); for(i=1;i<=9;i++)/*百位数*/ for(j=0;j<=9;j++)/*十位数*/ for(k=0;k<=9;k++)/*个位数*/ if(i*i*i+j*j*j+k*k*k==100*i+10*j+k) printf(“%d\n”,i*100+j*10+k); } 解3: #include voidmain() {inta,b,c,i; printf(″水仙花数是: \n″); for(i=100;i<=999;i++) {a=i%10; b=i/10%10; c=i/100; if(i==a*a*a+b*b*b+c*c*c)printf(“%d\n”,i); } } 5.分解因子 (1)(完数) 程序设计题: 考生目录下有Design.c程序,请完成以下功能: 在6至1000内找出所有的“完数”,说明: 某数等于其诸因子之和则该数为完数,如6=1+2+3,28=1+2+4+7+14则6、28就是完数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 复习资料