C语言编程复习.docx
《C语言编程复习.docx》由会员分享,可在线阅读,更多相关《C语言编程复习.docx(20页珍藏版)》请在冰豆网上搜索。
C语言编程复习
【5.4】求!
+2!
+3!
+···+10!
的值
#include
intmain(void)
{
intf,i,j,s=0;
for(i=1;i<=10;i++)
{
f=1;
for(j=1;j<=i;j++)
f*=j;
s+=f;
}
printf("1!
+2!
+3!
+...+10!
=%d\n",s);
return0;
}
【5.9】求-2/3+3/5-4/7+5/9-6/11+···的前项之和
#include
intmain(void)
{
inta,i;//a:
分子
doubles=0;
for(i=1;i<=20;i++)
{
if(i%2==0)
a=-i;
else
a=i;
s+=1.0*a/(2*i-1);
}
printf("=%.2lf\n",s);
return0;
}
【5.10】求数列1,2,3,5,8,13,21,34···中第25项的值
#include
intmain(void)
{
inta,b,i,f;
a=1,b=2;
for(i=3;i<=25;i++)
{
f=a+b;
a=b;
b=f;
}
printf("=%d\n",f);
return0;
}
【5.13】输出2000~2100年之间所有的闰年。
符合以下二者之一的年份是闰年:
(1)能被整除,但不能被100整除,如2016(
2)能被400整除,如2000
要求:
每行输出5项
#include
intmain(void)
{
intyear,n=0;
for(year=2000;year<=2100;year++)
{
if(year%4==0&&year%100!
=0||year%400==0)
{
printf("%6d",year);
n++;
if(n%5==0)
printf("\n");
}
}
return0;
}
【5.14】输出所有的水仙花数。
水仙花数是一个三位正整数,每位数字的三次方之和等于该数本身。
例如:
1^3+5^3+3^3=153,153是水仙花数。
#include
intmain(void)
{
intx,i,j,k;
for(x=100;x<=999;x++)
{
i=x/100;
j=x/10%10;
k=x%10;
if(x==i*i*i+j*j*j+k*k*k)
printf("%5d",x);
}
printf("\n");
return0;
}
【5.15】输入若干整数,以-1结束,去掉最大值和最小值,求平均值。
#include
intmain(void)
{
intx,max,min,n=0,sum=0;
printf("输入若干个数,以-1结束:
\n");
scanf("%d",&x);
max=min=x;
while(x!
=-1)
{
sum+=x;
n++;
if(maxmax=x;
if(min>x)
min=x;
scanf("%d",&x);
}
if(n>2)
printf("平均值为:
%.1lf\n",1.0*(sum-max-min)/(n-2));
else
printf("输入的分数个数小于\n");
return0;
}
【5.16】输入一行字符,统计英文字母、数字字符、空格和其他字符的个数。
#include
intmain(void)
{
intn1=0,n2=0,n3=0,n4=0;
charch;
printf("输入一行字符:
\n");
while((ch=getchar())!
='\n')
{
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
n1++;
elseif(ch>='0'&&ch<='9')
n2++;
elseif(ch=='')
n3++;
else
n4++;
}
printf("英文字母%d个,数字字符%d个,空格%d个,其他字符%d个。
\n",n1,n2,n3,n4);
return0;
}
【5.18】根据公式π/4≈1-1/3+1/5-1/7+···求π的近似值,绝对值小于10^-5的项不计算。
#include
#include
intmain(void)
{
inta=1;
doubleb=1,s=0;
while(abs(a)/b>=10e-5)
{
s+=a/b;
a=-a;
b=b+2;
}
printf("pi=%lf\n",s*4);
return0;
}
【5.21】输入一个正整数n,求n是几位数
include
intmain(void)
{
intn,count=0;
printf("输入一个正整数:
\n");
scanf("%d",&n);
while(n)
{
n=n/10;
count++;
}
printf("是%d位数\n",count);
return0;
}
【5.27】根据输入的行数输出图案。
例如,输入行数为7,则
#include
#include
intmain(void)
{
intn,i,j;
printf("输入行数:
");
scanf("%d",&n);
for(i=-n/2;i<=n/2;i++)
{
for(j=1;j<=abs(i);j++)
printf("");
for(j=1;j<=n-2*abs(i);j++)
printf("*");
printf("\n");
}
return0;
}
【5.28】输出100以内的所有质数,每行输出5个质数
#include
intmain(void)
{
intn,cou=0,i;
for(n=2;n<=100;n++)
{
for(i=2;i<=n-1;i++)
if(n%i==0)
break;
if(i==n)
{
printf("%6d",n);
cou++;
if(cou%5==0)
printf("\n");
}
}
return0;
【5.29】一百个铜钱买100只鸡,其中公鸡一只5钱,母鸡一只3钱,小鸡1钱三只。
问100只鸡中公鸡母鸡小鸡各多少只?
#include
intmain(void)
{
intx,y,z;
for(x=0;x<=100;x++)
for(y=0;y<=100;y++)
for(z=0;z<=100;z++)if(x+y+z==100&&15*x+9*y+z==300)
printf("公鸡%d个,母鸡%d个,小鸡%d个\n",x,y,z);
return0;
}
【6.1】输入10个数到数组t中,求最小值及最小值在数组t中的下标
#include
intmain(void)
{
intt[10],i,mini;
printf("输入10个数:
\n");
for(i=0;i<10;i++)
scanf("%d",&t[i]);
mini=0;
for(i=1;i<10;i++)
if(t[i]mini=i;
printf("最小值为:
%d,其下标为:
%d\n",t[mini],mini);
return0;
}
【6.2】输入10个数到数组t中,再输入x,如果有与x相等的数组元素,输出该元素的下标,否则输出-1
#include
intmain(void)
{
intt[10],x,i,flag=0;
printf("输入10个数:
\n");
for(i=0;i<10;i++)
scanf("%d",&t[i]);
printf("输入x:
");
scanf("%d",&x);
for(i=0;i<10;i++)
if(x==t[i])
{
printf("与x相等的数组元素的下标是:
%d\n",i);
flag=1;
}
if(flag==0)
printf("-1\n");
return0;
}
【6.3】输入10个数到数组t中,按降序排序,输出排序结果
#include
intmain(void)
{
intt[10],i,j,tmp;
printf("输入10个数:
\n");
for(i=0;i<10;i++)
scanf("%d",&t[i]);
for(i=1;i<10;i++)
for(j=0;j<10-i;j++)
if(t[j]{
tmp=t[j];
t[j]=t[j+1];
t[j+1]=tmp;
}
for(i=0;i<10;i++)
printf("%6d",t[i]);
printf("\n");
return0;
}
【6.7】求3行5列二维数组中的最小值,及最小值在数组中的行号和列号
#include
intmain(void)
{
inta[3][5],i,j,mini,minj;
printf("输入3行5列数组:
\n");
for(i=0;i<3;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
mini=minj=0;
for(i=0;i<3;i++)
for(j=0;j<5;j++)
if(a[mini][minj]>a[i][j])
{
mini=i;
minj=j;
}
printf("最小值:
%d,最小值行号:
%d,列号:
%d\n",a[mini][minj],mini,minj);
return0;
}
【6.8】求3行5列二维数组中每列数组元素的最小值,输出。
#include
intmain(void)
{
inta[3][5],i,j,min;
printf("输入3行5列数组:
\n");
for(i=0;i<3;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
for(i=0;i<5;i++)
{
min=a[0][i];
for(j=1;j<3;j++)
if(min>a[j][i])
min=a[j][i];
printf("%d列最小值为:
%d\n",i,min);
}
return0;
}
【6.9】求3行5列二维数组主对角线上元素之和
#include
intmain(void)
{
inta[3][3],i,j,sum=0;
printf("输入3行3列数组:
\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
sum+=a[i][i];
printf("主对角线上元素只和为:
%d\n",sum);
return0;
}
【6.11】不调用库函数strcpy,将以下数组s1的字符串复制到数组s2中,并输出s2的字符串
Chars1[80],s2[80];
Getss1;
#include
intmain(void)
{
inti=0;
chars1[80],s2[80];
printf("输入一个字符串:
");
gets(s1);
while(s1[i]!
='\0')
{
s2[i]=s1[i];
i++;
}
s2[i]='\0';
printf("复制的字符串为:
");
puts(s2);
return0;
}
【6.14】输出数组s中字符串的子串,子串从s[begin]开始长度为len
Chars[80];
Intbegin,len;
Gets(s);
Scanf(“%d%d,&begin,&len);
【6.14】
#include
intmain(void)
{
inti,begin,len;
chars[80];
printf("输入一个字符串:
");
gets(s);
printf("输入子串的开始位置及长度:
");
scanf("%d%d",&begin,&len);
for(i=begin;iprintf("%c",s[i]);
printf("\n");
return0;
}nf(“%d%d,&begin,&len);
【7.3】编4个程序,分别用4种方法引用数组元素,输入10个整数,按升序排序,输出排序结果
#include
intmain(void)
{
inta[10],*p,t,i,j;
printf("输入10个整数:
\n");
for(p=a;pscanf("%d",p);
for(i=0;i<10;i++)
{
p=a+i;
for(j=i+1;j<10;j++)
if(*p>*(a+j))
p=a+j;
t=*p;
*p=*(a+i);
*(a+i)=t;
}
for(p=a;pprintf("%5d",*p);
printf("\n");
return0;
}
【7.5】不调用库函数strcpy,将p指向的字符串复制到数组s中,并输出数组s中的字符串。
Chars[10],*p=”Chinese”;
#include
intmain(void)
{
chars[10],*p="Chinese";
inti=0;
while(*(p+i)!
='\0')
{
s[i]=*(p+i);
i++;
}
s[i]='\0';
puts(s);
return0;
}
【8.9】一只函数头为”intgetgcd(intm,intn)”,函数getgcd的功能:
返回形参m、n的最大公约数。
编写并调用函数getgcd.
#include
intgetgcd(intm,intn);
intmain(void)
{
inta,b,c;
printf("input2positiveintegers:
");
scanf("%d%d",&a,&b);
c=getgcd(a,b);
printf("%d\n",c);
return0;
}
intgetgcd(intm,intn)
{
intgcd;
if(m>n)
gcd=n;
else
gcd=m;
while(m%gcd||n%gcd)
gcd--;
returngcd;
}
【8.10】已知函数头为“intprime(intn)”,函数prime的功能:
如果n是质数,返回1;否则返回0.编写并调用函数prime输出100以内的所有质数,每行输出5个质数
#include
#include
intprime(intn);
intmain(void)
{
inta,b,c=0;
for(a=1;a<=100;a++)
{
b=prime(a);
if(1==b)
{
c++;
printf("%3d",a);
}
if(c%5==0)
printf("\n");
}
return0;
}
intprime(intn)
{
inti,m,flag=1;
m=(int)(sqrt(n)+1);
for(i=2;iif(n%i==0)
flag=0;
returnflag;
}
【8.12】已知函数头为“intavg(intn,int[])”,函数avg的功能:
去掉长度为n的一维数组t中的最大值和最小值,计算并返回平均值,编写并调用函数avg
#include
intavg(intn,intt[]);
intmain(void)
{
inta[80],i;
printf("input10numbers\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("avg=%d\n",avg(10,a));
return0;
}
intavg(intn,intt[])
{
intj,sum=0,max,min;
max=t[0];
min=max;
for(j=0;j{
if(maxmax=t[j];
if(min>t[j])
min=t[j];
sum+=t[j];
}
return(sum-max-min)/(n-2);
}
【8.15】已知函数头为“intgetmin(intn,inr[][3])”,函数getmin的功能:
计算并返回行数为n列数为3的二维数组t中的最小值。
编写并调用函数getmin.
#include
intgetmin(intn,intr[][3]);
intmain(void)
{
inta[2][3],i,j;
printf("输入两行三列个正整数\n");
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("min=%d\n",getmin(2,a));
return0;
}
intgetmin(intn,intr[][3])
{
inti,j,min;
min=r[0][0];
for(i=0;ifor(j=0;j<3;j++)
{
if(min>r[i][j])
min=r[i][j];
}
returnmin;
}