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