C语言总复习资料.docx

上传人:b****8 文档编号:23850414 上传时间:2023-05-21 格式:DOCX 页数:106 大小:68.31KB
下载 相关 举报
C语言总复习资料.docx_第1页
第1页 / 共106页
C语言总复习资料.docx_第2页
第2页 / 共106页
C语言总复习资料.docx_第3页
第3页 / 共106页
C语言总复习资料.docx_第4页
第4页 / 共106页
C语言总复习资料.docx_第5页
第5页 / 共106页
点击查看更多>>
下载资源
资源描述

C语言总复习资料.docx

《C语言总复习资料.docx》由会员分享,可在线阅读,更多相关《C语言总复习资料.docx(106页珍藏版)》请在冰豆网上搜索。

C语言总复习资料.docx

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/*使用绝对值函数fabs*/

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

#includeintprime(intx);/*函数声明*/

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就是完数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1