C程序复习典型题目.docx
《C程序复习典型题目.docx》由会员分享,可在线阅读,更多相关《C程序复习典型题目.docx(26页珍藏版)》请在冰点文库上搜索。
![C程序复习典型题目.docx](https://file1.bingdoc.com/fileroot1/2023-5/26/7051417e-05c6-47e3-b319-2b2681e3b4ad/7051417e-05c6-47e3-b319-2b2681e3b4ad1.gif)
C程序复习典型题目
C程序复习典型题目:
一、第5章:
循环
1、P131:
例5.7求π/4
2、P133:
例5.8:
裴波那契数列
3、P135:
例5.9:
判素数
4、P140:
习题3:
求最大公约数
5、P140:
习题6:
求1至20的阶乘之和
6、P140:
习题8:
求所有水仙花数
7、P140:
习题10:
求分数序列前20项
二、第6章:
数组
8、P146:
例6.2:
用数组求裴波那契数列
9、P148:
例6.3:
一维数组排序
10、P152:
例6.4:
二维数组转置
11、P168:
习题5:
一维数组逆序处理
12、P168:
习题6:
杨辉三角形
三、第7章:
函数
13、P180:
例7.4:
用函数求两数之和
14:
P187:
例7.7:
用递归函数求n!
15:
P194:
例7.10:
用函数求一维数组的平均值
16:
P198:
例7.13:
用函数求二维数组的最大值
17:
P207:
例7.17:
用函数中静态变量的方法求1至5的各阶乘值
18:
P218:
习题3:
用函数判断一个数是否为素数
19:
P218:
习题4:
用函数法对一个二维数组进行转置
20:
P219:
习题13:
用递归函数求勒让德多项式的值
21:
P219:
习题14:
用函数对二维数组的数据进行各种处理:
如求行/列平均值
四、第8章:
指针
22、P252:
例8.14:
用指针法处理二维数组数据(元素指针与行指针)
五、第9章:
结构体与链表
23:
P310:
例9.8:
静态链表
24:
P311:
例9.9:
动态链表
六、第10章:
文件
25:
P338:
例10.1:
键盘输入内容存入文件
26:
P339:
例10.2:
文件复制和文件内容显示
C程序复习典型题目:
一、第5章:
循环
1、P131:
例5.7求π/4
#include
#include
intmain()
{
intsign=1;//sign用来表示数值的符号
doublepi=0.0,n=1.0,term=1.0;//pi代表π,n代表分母,term代表当前项的值
while(fabs(term)>=1e-8)//检查当前项term的绝对值是否大于或等于10的(-6)次方
{
pi=pi+term;//把当前项term累加到pi中
n=n+2;//n+2是下一项的分母
sign=-sign;//sign代表符号,下一项的符号与上一项符号相反
term=sign/n;//求出下一项的值term
}
pi=pi*4;//多项式的和pi乘以4,才是π的近似值
printf("pi=%10.8f\n",pi);//输出π的近似值
}
2、P133:
例5.8:
裴波那契数列
#include
intmain()
{
intf1=1,f2=1,f3;
inti;
printf("%12d\n%12d\n",f1,f2);
for(i=1;i<=38;i++)
{
f3=f1+f2;
printf("%12d\n",f3);
f1=f2;
f2=f3;
}
}
3、P135:
例5.9:
判素数
#include
#include
intmain()
{intn,i,k;
printf("pleaseenteraintegernumber:
n=?
");
scanf("%d",&n);
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i<=k)printf("%disnotaprimenumber.\n",n);
elseprintf("%disaprimenumber.\n",n);
}
4、P140:
习题3:
求最大公约数
#include
intmain()
{
intp,r,n,m,temp;
printf("请输入两个正整数n,m:
");
scanf("%d,%d,",&n,&m);
if(n{
temp=n;
n=m;
m=temp;
}
p=n*m;
while(m!
=0)
{
r=n%m;
n=m;
m=r;
}
printf("它们的最大公约数为:
%d\n",n);
printf("它们的最小公约数为:
%d\n",p/n);
return0;
}
5、P140:
习题6:
求1至20的阶乘之和
#include
intmain()
{doubles=0,t=1;
intn;
for(n=1;n<=20;n++)
{
t=t*n;
s=s+t;
}
printf("1!
+2!
+...+20!
=%22.15e\n",s);
return0;
}
6、P140:
习题8:
求所有水仙花数
#include
intmain()
{
inti,j,k,n;
printf("parcissusnumbersare");
for(n=100;n<1000;n++)
{
i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf("%d",n);
}
printf("\n");
return0;
}
7、P140:
习题10:
求分数序列前20项
#include
intmain()
{
inti,n=20;
doublea=2,b=1,s=0,t;
for(i=1;i<=n;i++)
{
s=s+a/b;
t=a,
a=a+b,
b=t;
}
printf("sum=%16.10f\n",s);
return0;
}
二、第6章:
数组
8、P146:
例6.2:
用数组求裴波那契数列
#include
intmain()
{
inti;
intf[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<20;i++)
{
if(i%5==0)printf("\n");
printf("%12d",f[i]);
}
printf("\n");
return0;
}
9、P148:
例6.3:
一维数组排序
#include
intmain()
{
inta[10];
inti,j,t;
printf("input10numbers:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++)//进行9次循环,实现9趟比较
for(i=0;i<9-j;i++)//在每一趟中进行9-j次比较
if(a[i]>a[i+1])//相邻两个数比较
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("thesortednumbers:
\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
return0;
}
10、P152:
例6.4:
二维数组转置
#include
intmain()
{
inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
printf("arraya:
\n");
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("arrayb:
\n");
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
return0;
}
11、P168:
习题5:
一维数组逆序处理
#include
#defineN5
intmain()
{inta[N],i,temp;
printf("enterarraya:
\n");
for(i=0;iscanf("%d",&a[i]);
printf("arraya:
\n");
for(i=0;iprintf("%4d",a[i]);
for(i=0;i{temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
printf("\nNow,arraya:
\n");
for(i=0;iprintf("%4d",a[i]);
printf("\n");
return0;
}
12、P168:
习题6:
杨辉三角形
#include
#defineN10
intmain()
{inti,j,a[N][N];
for(i=0;i{a[i][i]=1;
a[i][0]=1;
}
for(i=2;ifor(j=1;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i{for(j=0;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");
}
printf("\n");
return0;
}
三、第7章:
函数
13、P180:
例7.4:
用函数求两数之和
#include
floatadd(floatx,floaty)
{floatz;
z=x+y;
return(z);
}
voidmain()
{
floata,b,c;
printf("Pleaseenteraandb:
");
scanf("%f,%f",&a,&b);
c=add(a,b);
printf("sumis%f\n",c);
}
14:
P187:
例7.7:
用递归函数求n!
#include
intmain()
{intfac(intn);
intn;
inty;
printf("inputanintegernumber:
");
scanf("%d",&n);
y=fac(n);
printf("%lld!
=%d\n",n,y);
return0;
}
intfac(intn)
{
intf;
if(n<0)
printf("n<0,dataerror!
");
elseif(n==0||n==1)
f=1;
elsef=fac(n-1)*n;
return(f);
}
15:
P194:
例7.10:
用函数求一维数组的平均值
#include
intmain()
{floataverage(floatarray[10]);//函数声明
floatscore[10],aver;
inti;
printf("input10scores:
\n");
for(i=0;i<10;i++)
scanf("%f",&score[i]);
printf("\n");
aver=average(score);//调用average函数
printf("averagescoreis%5.2f\n",aver);
return0;
}
floataverage(floatarray[10])//定义average函数
{inti;
floataver,sum=array[0];
for(i=1;i<10;i++)
sum=sum+array[i];//累加学生成绩
aver=sum/10;
return(aver);
}
16:
P198:
例7.13:
用函数求二维数组的最大值
#include
intmain()
{intmax_value(intarray[][4]);
inta[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};
printf("Maxvalueis%d\n",max_value(a));
return0;
}
intmax_value(intarray[][4])
{inti,j,max;
max=array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)max=array[i][j];
return(max);
}
17:
P207:
例7.17:
用函数中静态变量的方法求1至5的各阶乘值
#include
intmain()
{intfac(intn);
inti;
for(i=1;i<=5;i++)
printf("%d!
=%d\n",i,fac(i));
return0;
}
intfac(intn)
{staticintf=1;
f=f*n;
return(f);
}
18:
P218:
习题3:
用函数判断一个数是否为素数
#include
intmain()
{intprime(int);
intn;
printf("inputaninteger:
");
scanf("%d",&n);
if(prime(n))
printf("%disaprime.\n",n);
else
printf("%disnotaprime.\n",n);
return0;
}
intprime(intn)
{intflag=1,i;
for(i=2;iif(n%i==0)
flag=0;
return(flag);
}
19:
P218:
习题4:
用函数法对一个二维数组进行转置
#include
#defineN3
intarray[N][N];
intmain()
{voidconvert(intarray[][3]);
inti,j;
printf("inputarray:
\n");
for(i=0;ifor(j=0;jscanf("%d",&array[i][j]);
printf("\noriginalarray:
\n");
for(i=0;i{for(j=0;jprintf("%5d",array[i][j]);
printf("\n");
}
convert(array);
printf("convertarray:
\n");
for(i=0;i{for(j=0;jprintf("%5d",array[i][j]);
printf("\n");
}
return0;
}
voidconvert(intarray[][3])
{inti,j,t;
for(i=0;ifor(j=i+1;j{t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
20:
P219:
习题13:
用递归函数求勒让德多项式的值
#include
floatP(intn,floatx);
intmain()
{
intn;
floatx;
printf("请输入参数n(整数):
");
scanf("%d",&n);
printf("\n请输入参数x(实数):
");
scanf("%f",&x);
printf("\nP(%d,%f)的值为:
%f\n",n,x,P(n,x));
getchar();
return0;
}
floatP(intn,floatx)
{
if(n==0)
return1.0;
elseif(n==1)
returnx;
else
return((2*n-1)*x*P(n-1,x)-(n-1)*P(n-2,x))/n;
}
21:
P219:
习题14:
用函数对二维数组的数据进行各种处理:
如求行/列平均值
#include
#defineN10
#defineM5
floatscore[N][M];
floata_stu[N],a_cour[M];
intr,c;
intmain()
{inti,j;
floath;
floats_var(void);
floathighest();
voidinput_stu(void);
voidaver_stu(void);
voidaver_cour(void);
input_stu();
aver_stu();
aver_cour();
printf("\nNO.cour1cour2cour3cour4cour5aver\n");
for(i=0;i{printf("\nNO%2d",i+1);
for(j=0;jprintf("%8.2f",score[i][j]);
printf("%8.2f\n",a_stu[i]);
}
printf("\naverage:
");
for(j=0;jprintf("%8.2f",a_cour[j]);
printf("\n");
h=highest();
printf("highest:
%7.2fNO.%2dcourse%2d\n",h,r,c);
printf("variance%8.2f\n",s_var());
return0;
}
voidinput_stu(void)
{inti,j;
for(i=0;i{printf("\ninputscoreofstudent%2d:
\n",i+1);
for(j=0;jscanf("%f",&score[i][j]);
}
}
voidaver_stu(void)
{inti,j;
floats;
for(i=0;i{for(j=0,s=0;js+=score[i][j];
a_stu[i]=s/5.0;
}
}
voidaver_cour(void)
{inti,j;
floats;
for(j=0;j{s=0;
for(i=0;is+=score[i][j];
a_cour[j]=s/(float)N;
}
}
floathighest()
{floathigh;
inti,j;
high=score[0][0];
for(i=0;ifor(j=0;jif(score[i][j]>high)
{high=score[i][j];
r=i+1;
c=j+1;
}
return(high);
}
floats_var(void)
{inti;
floatsumx,sumxn;
sumx=0.0;
sumxn=0.0;
for(i=0;i{sumx+=a_stu[i]*a_stu[i];
sumxn+=a_stu[i];
}
return(sumx/N-(sumxn/N)*(sumxn/N));
}
四、第8章:
指针
22、P252:
例8.14:
用指针法处理二维数组数据(元素指针与行指针)
#include
intmain()
{voidaverage(float*p,intn);
voidsearch(float(*p)[4],intn);
floatscore[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
average(*score,12);
search(score,2);
return0;
}
voidaverage(float*p,intn)
{float*p_end;
floatsum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf("average=%5.2f\n",aver);
}
voidsearch(float(*p)[4],intn)
{inti;
printf("ThescoreofNo.%dare:
\n",n);
for(i=0;i<4;i++)
printf("%5.2f",*(*(p+n)+i));
printf("\n");
}
五、第9章:
结构体与链表
23:
P310:
例9.8:
静态链表
#include
structstudent//声明结构体类型structstudent
{intnum;
floatscore;
structstudent*next;
};
intmain()
{structstudenta,b,c,*head,*p;//定义3个结构体变量作为链表的结点
a.num=10101;a.score=89.5;//对结点a的num和score成员赋值
b.num=10103;b.score=90;/