C语言复习资料.docx
《C语言复习资料.docx》由会员分享,可在线阅读,更多相关《C语言复习资料.docx(29页珍藏版)》请在冰豆网上搜索。
C语言复习资料
C语言复习资料
1简单的算术运算和表达式
例3.7强制类型转换:
#include
main()
{
intm=5;
printf("m/2=%d\n",m/2);
printf("(float)(m/2)=%f\n",(float)(m/2;
printf("(float)m/2=%f\n",(float)m/2);
printf("m=%d\n",m);
}
2选择控制结构
例5.4多分支控制的条件语句:
从键盘任意输入a,b,c的值,编程并计算一元二次方程ax2+bx+c=的根(分a=0,Δ>,=,<0讨论)
#include
#include
#include
#defineEPS1e-6
main()
{
floata,b,c,disc,p,q;
printf("Pleaseenterthecoefficientsa,b,c:
");
scanf("%f,%f,%f",&a,&b,&c);
if(fabs(a)<=EPS)/*a=0时,输出"不是二次方程"*/
{
printf("Itisnotaquadraticequation!
\n");
exit(0);
}
disc=b*b-4*a*c;/*计算判别式*/
p=-b/(2*a);
q=sqrt(fabs(disc))/(2*a);
if(fabs(disc)<=EPS)/*判别式等于0时,输出两相等实根*/
{
printf("x1=x2=%.2f\n",p);
}
else
{
if(disc>EPS)/*判别式大于0时,输出两不等实根*/
{
printf("x1=%.2f,x2=%.2f\n",p+q,p-q);
}
else/*判别式小于0时,输出两共轭复根*/
{
printf("x1=%.2f+%.2fi,",p,q);
printf("x2=%.2f-%.2fi\n",p,q);
}
}
return0;
}
3循环控制结构
例6.1三种循环语句:
前n项和的计算
①#include
main()
{
inti,n,sum;
printf("Inputn:
");
scanf("%d",&n);
sum=0;/*累加和变量初始化为0*/
for(i=1;i<=n;i++)
{
sum=sum+i;/*做累加运算*/
}
printf("sum=%d\n",sum);
}
②#include
main()
{
inti,n,sum;
printf("Inputn:
");
scanf("%d",&n);
sum=0;/*累加和变量初始化为0*/
i=1;
while(i<=n)
{
sum=sum+i;/*做累加运算*/
i++;/*累加计数器加1*/
}
printf("sum=%d\n",sum);
}
③#include
main()
{
inti,n,sum;
printf("Inputn:
");
scanf("%d",&n);
sum=0;/*累加求和变量初始化为0*/
i=1;
do{
sum=sum+i;/*做累加运算*/
i++;/*累加计数器加1*/
}while(i<=n);
printf("sum=%d\n",sum);
}
例6.4嵌套循环:
前n项阶乘之和
#include
main()
{
inti,j,n;
longp,sum=0;/*累加求和变量sum初始化为0*/
printf("Inputn:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=1;/*每次循环之前都要将累乘求积变量p赋值为1*/
for(j=1;j<=i;j++)
{
p=p*j;/*累乘求积*/
}
sum=sum+p;/*累加求和*/
}
printf("1!
+2!
+…+%d!
=%ld\n",n,sum);
}
例6.10猜数游戏最终版:
#include
#include
#include
main()
{
intmagic,guess,counter=0,ret;
charreply;/*保存用户输入的回答*/
srand(time(NULL));
do{
magic=rand()%100+1;
do{
printf("Pleaseguessamagicnumber:
");
ret=scanf("%d",&guess);
while(ret!
=1)/*若存在输入错误,则重新输入*/
{
while(getchar()!
='\n');/*清除输入缓冲区中的非法字符*/
printf("Pleaseguessamagicnumber:
");
ret=scanf("%d",&guess);
}
counter++;
if(guess>magic)
printf("Wrong!
Toobig!
\n");
elseif(guessprintf("Wrong!
Toosmall!
\n");
else
printf("Right!
\n");
}while(guess!
=magic&&counter<10);/*猜不对且未超10次继续猜*/
printf("counter=%d\n",counter);
printf("Doyouwanttocontinue(Y/Nory/n)?
");/*提示是否继续*/
scanf("%c",&reply);/*%c前有一个空格*/
}while(reply=='Y'||reply=='y');/*输入Y或y则程序继续*/
}
4函数
例7.4函数调用复用:
组合数的计算
#include
unsignedlongFact(unsignedintn);
intmain()
{
intm,k;
unsignedlongp;
do{
printf("Inputm,k(m>=k>0):
");
scanf("%d,%d",&m,&k);
}while(mp=Fact(m)/(Fact(k)*Fact(m-k));
printf("p=%lu\n",p);
return0;
}
/*函数功能:
用迭代法计算无符号整型变量n的阶乘*/
unsignedlongFact(unsignedintn)
{
unsignedinti;
unsignedlongresult=1;
for(i=2;i<=n;i++)
result*=i;
returnresult;
}
例7.6函数的递归调用和递归函数:
Fibonacci(斐波那契)数列
#include
longFib(inta);
intmain()
{
intn,i,x;
printf("Inputn:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
x=Fib(i);/*调用递归函数Fib()计算Fibonacci数列的第n项*/
printf("Fib(%d)=%d\n",i,x);
}
return0;
}
/*函数功能:
用递归法计算Fibonacci数列中的第n项的值*/
longFib(intn)
{
if(n==0)return0;/*基线情况*/
elseif(n==1)return1;/*基线情况*/
elsereturn(Fib(n-1)+Fib(n-2));/*一般情况*/
}
5数组
例8.5向函数传递一维数组:
从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人,具体人数由键盘输入),试编程计算其平均分
#include
#defineN40
intAverage(intscore[],intn);/*Average()函数原型*/
voidReadScore(intscore[],intn);/*ReadScore()函数原型*/
intmain()
{
intscore[N],aver,n;
printf("Inputn:
");
scanf("%d",&n);
ReadScore(score,n);/*数组名作为函数实参调用函数ReadScore()*/
aver=Average(score,n);/*数组名作为函数实参调用函数Average()*/
printf("Averagescoreis%d\n",aver);
return0;
}
/*函数功能:
计算n个学生成绩的平均分*/
intAverage(intscore[],intn)/*Average()函数定义*/
{
inti,sum=0;
for(i=0;i{
sum+=score[i];
}
returnsum/n;
}
/*函数功能:
输入n个学生的某门课成绩*/
voidReadScore(intscore[],intn)/*ReadScore()函数定义*/
{
inti;
printf("Inputscore:
");
for(i=0;i{
scanf("%d",&score[i]);
}
}
例8.8交换法排序:
从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人),当输入为负值时,表示输入结束,试编程将分数按从高到低的顺序进行排序输出。
用函数编程实现排序功能
#include
#defineN40
intReadScore(intscore[]);/*ReadScore()函数原型*/
voidDataSort(intscore[],intn);/*DataSort()原函数型*/
voidPrintScore(intscore[],intn);/*PrintScore()函数原型*/
intmain()
{
intscore[N],n;
n=ReadScore(score);/*调用函数ReadScore()输入成绩,返回学生人数*/
printf("Totalstudentsare%d\n",n);
DataSort(score,n);/*调用函数DataSort()进行成绩排序*/
printf("Sortedscores:
");
PrintScore(score,n);/*调用函数Printscore()输出成绩排序结果*/
return0;
}
/*函数功能:
输入学生某门课的成绩,当输入负值时,结束输入,返回学生人数*/
intReadScore(intscore[])/*ReadScore()函数定义*/
{
inti=-1;/*i初始化为-1,可保证循环体内i增1后数组下标从0开始*/
do{
i++;
printf("Inputscore:
");
scanf("%d",&score[i]);
}while(score[i]>=0);/*输入负值时结束成绩输入*/
returni;/*返回学生人数*/
}
/*函数功能:
按交换法将数组score的元素值元素按从高到低排序*/
voidDataSort(intscore[],intn)/*DataSort()函数定义*/
{
inti,j,temp;
for(i=0;i{
for(j=i+1;j{
if(score[j]>score[i])/*按数组score的元素值从高到低排序*/
{
temp=score[j];
score[j]=score[i];
score[i]=temp;
}
}
}
}
/*函数功能:
打印学生成绩*/
voidPrintScore(intscore[],intn)/*PrintScore()函数定义*/
{
inti;
for(i=0;i{
printf("%4d",score[i]);
}
printf("\n");
}
例8.8选择法排序(题目同上)
#include
#defineN40
intReadScore(intscore[]);/*ReadScore()函数原型*/
voidDataSort(intscore[],intn);/*DataSort()原函数型*/
voidPrintScore(intscore[],intn);/*PrintScore()函数原型*/
intmain()
{
intscore[N],n;
n=ReadScore(score);/*调用函数ReadScore()输入成绩,返回学生人数*/
printf("Totalstudentsare%d\n",n);
DataSort(score,n);/*调用函数DataSort()进行成绩排序*/
printf("Sortedscores:
");
PrintScore(score,n);/*调用函数Printscore()输出成绩排序结果*/
return0;
}
/*函数功能:
输入学生某门课的成绩,当输入负值时,结束输入,返回学生人数*/
intReadScore(intscore[])/*ReadScore()函数定义*/
{
inti=-1;/*i初始化为-1,可保证循环体内i增1后数组下标从0开始*/
do{
i++;
printf("Inputscore:
");
scanf("%d",&score[i]);
}while(score[i]>=0);/*输入负值时结束成绩输入*/
returni;/*返回学生人数*/
}
/*函数功能:
按选择法将数组score的元素值元素按从高到低排序*/
voidDataSort(intscore[],intn)
{
inti,j,k,temp;
for(i=0;i{
k=i;
for(j=i+1;j{
if(score[j]>score[k])/*按数组score的元素值从高到低排序*/
{
k=j;/*记录最大数下标位置*/
}
}
if(k!
=i)/*若最大数所在的下标位置不在下标位置i*/
{
temp=score[k];
score[k]=score[i];
score[i]=temp;
}
}
}
/*函数功能:
打印学生成绩*/
voidPrintScore(intscore[],intn)/*PrintScore()函数定义*/
{
inti;
for(i=0;i{
printf("%4d",score[i]);
}
printf("\n");
}
例8.9在上题基础上同时输入学号并一同输出排序
#include
#defineN40
intReadScore(intscore[],longnum[]);/*ReadScore()函数原型*/
voidDataSort(intscore[],longnum[],intn);/*DataSort()原函数型*/
voidPrintScore(intscore[],longnum[],intn);/*PrintScore()函数原型*/
intmain()
{
intscore[N],n;
longnum[N];
n=ReadScore(score,num);/*输入成绩和学号,返回学生总数*/
printf("Totalstudentsare%d\n",n);
DataSort(score,num,n);/*成绩排序*/
printf("Sortedscores:
\n");
PrintScore(score,num,n);/*输出成绩排序结果*/
return0;
}
/*函数功能:
输入学生的学号及其某门课成绩,当输入负值时,结束输入,返回学生人数*/
intReadScore(intscore[],longnum[])/*ReadScore()函数定义*/
{
inti=-1;/*i初始化为-1,可保证循环体内i增1后数组下标从0开始*/
do{
i++;
printf("Inputstudent'sIDandscore:
");
scanf("%ld%d",&num[i],&score[i]);/*以长整型格式输入学号*/
}while(num[i]>0&&score[i]>=0);/*输入负值时结束成绩输入*/
returni;/*返回学生总数*/
}
/*函数功能:
按选择法将数组score的元素值按从高到低排序*/
voidDataSort(intscore[],longnum[],intn)/*DataSort()函数定义*/
{
inti,j,k,temp1;
longtemp2;
for(i=0;i{
k=i;
for(j=i+1;j{
if(score[j]>score[k])/*按数组score的元素值从高到低排序*/
{
k=j;/*记录最大数下标位置*/
}
}
if(k!
=i)/*若最大数不在下标位置i*/
{
/*交换成绩*/
temp1=score[k];score[k]=score[i];score[i]=temp1;
/*交换学号*/
temp2=num[k];num[k]=num[i];num[i]=temp2;
}
}
}
/*函数功能:
打印学生学号和成绩*/
voidPrintScore(intscore[],longnum[],intn)/*PrintScore()函数定义*/
{
inti;
for(i=0;i{
printf("%10ld%4d\n",num[i],score[i]);/*以长整型格式打印学号*/
}
}
例8.10线性查找(或称顺序查找):
:
从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人),同时输入学生的学号,当输入为负值时,表示输入结束,试编程从键盘输入任意一个学号,查找该学生的成绩
#include
#defineN40
intReadScore(intscore[],longnum[]);/*ReadScore()函数原型*/
voidDataSort(intscore[],longnum[],intn);/*DataSort()原函数型*/
voidPrintScore(intscore[],longnum[],intn);/*PrintScore()函数原型*/
intmain()
{
intscore[N],n;
longnum[N];
n=ReadScore(score,num);/*输入成绩和学号,返回学生总数*/
printf("Totalstudentsare%d\n",n);
DataSort(score,num,n);/*成绩排序*/
printf("Sortedscores:
\n");
PrintScore(score,num,n);/*输出成绩排序结果*/
return0;
}
/*函数功能:
输入学生的学号及其某门课成绩,当输入负值时,结束输入,返回学生人数*/
intReadScore(intscore[],longnum[])/*ReadScore()函数定义*/
{
inti=-1;/*i初始化为-1,可保证循环体内i增1后数组下标从0开始*/
do{
i++;
printf("Inputstudent'sIDandscore:
");
scanf("%ld%d",&num[i],&score[i]);/*以长整型格式输入学号*/
}while(num[i]>0&&score[i]>=0);/*输入负值时结束