C语言程序设计参考答案湘大出版社.docx
《C语言程序设计参考答案湘大出版社.docx》由会员分享,可在线阅读,更多相关《C语言程序设计参考答案湘大出版社.docx(22页珍藏版)》请在冰豆网上搜索。
C语言程序设计参考答案湘大出版社
C语言程序设计
——参考答案(湘大版)
主编:
长寿湖畔有人家
创建日期:
2015.9
修改日期:
2016.10
第5章分支结构
5.2
任给一个三位十进制整数,若该数中有且只有两个数码相同,则输出该数。
#include
#include
intmain()
{
intshu,a,b,c;
printf("请输入一个三位的整数\n");
scanf("%d",&shu);
a=shu%10;
b=shu/10%10;
c=shu/100;
if(a==b&&b!
=c)printf("%d\n",shu);
elseif(b==c&&c!
=a)printf("%d\n",shu);
elseif(c==a&&a!
=b)printf("%d\n",shu);
return0;
}
5.3用case实现:
y=cos(x+3.0)0<=x<10
Y=cos^2(x+7.5)10<=x<20
Y=cos^4(x+4.0)20<=x<30
#include
#include
#include
intmain()
{
intx;
doublea;
printf("请输入一个整数\n");
scanf("%d",&x);
switch(x/10)
{
case0:
printf("%f\n",cos(x+3.0));break;
case1:
a=cos(x+7.5);printf("%f\n",a*a);break;
case2:
a=cos(x+4.0);printf("%f\n",a*a*a*a);
}
return0;
}
5.4
给定一个整数,判断是奇数还是偶数,如果是奇数,则判断它是不是素数(质数)。
#include
#include
#include
intmain()
{
intx;
inti,gen;
printf("请输入一个整数\n");
scanf("%d",&x);
if(x%2==0)printf("偶数\n");
else
{
printf("奇数\n");
if(x>1)
{
gen=sqrt(x);
for(i=3;i<=gen;i+=2)
if(x%i==0)break;
if(i>gen)printf("素数\n");
elseprintf("非素数\n");
}
}
return0;
}
5.5
3个数成等差数列,首尾两个数之积为中项的5倍,后2个数的和是第一个数的8倍,求这3个数。
这3个数分别是:
3915
第6章循环结构
6.1
利用公式:
…,求
的近似值,直到最后一项的绝对值小于10^-6为止。
#include
#include
intmain()
{
inti=1;
doublesum=0;
while(1.0/i>0.000001)
{
if((i+1)/2%2==0)sum-=1.0/i;
elsesum+=1.0/i;
i+=2;
}
printf("%f\n",sum*4);
return0;
}
6.2
2/1,3/2,5/3,8/5,13/8,21/13.。
。
。
。
,求前20项的和。
#include
#include
#include
intmain()
{
intzi=2,mu=1,i=1,te;
doublesum=0;
while(i<=20)
{
sum+=(zi/(mu+0.0));
te=zi;
zi=zi+mu;
mu=te;
i++;
}
printf("%f\n",sum);
return0;
}
6.3
分别编程输出菱形图案
*A
***BBB
*****CCCCC
*******DDDDDDD
*********EEEEEEEEEE
*******FFFFFFF
*****GGGGG
***HHH
*I
第一个图
#include
#include
#include
intmain()
{
intkong=4,i,k,shu=1;
for(i=1;i<10;i++)
{
if(i<6)
{
for(k=kong;k>0;k--)printf("");
kong--;
for(k=0;kshu+=2;
printf("\n");
if(kong==-1)kong=1;
if(shu==11)shu=7;
}
else
{
for(k=0;kkong++;
for(k=shu;k>0;k--)printf("*");
shu-=2;
printf("\n");
}
}
return0;
}
第二个图
#include
#include
#include
intmain()
{
intkong=4,i,k,shu=1;
for(i=1;i<10;i++)
{
if(i<6)
{
for(k=kong;k>0;k--)printf("");
kong--;
for(k=0;kshu+=2;
printf("\n");
if(kong==-1)kong=1;
if(shu==11)shu=7;
}
else
{
for(k=0;kkong++;
for(k=shu;k>0;k--)printf("%c",i-1+'A');
shu-=2;
printf("\n");
}
}
return0;
}
6.4
求出3000以内的亲密数,即整数A的全部因子(除本身)之和等于B,整数B的全部因子(除本身)之和等于A。
#include
#include
#include
intmain()
{
inti,k,gen,sum,s2;
for(i=2;i<=3000;i++)
{
gen=sqrt(i);
sum=0;
for(k=1;k<=gen;k++)
{
if(i%k==0)
{
sum+=k;
if((i/k)!
=i)sum+=(i/k);
if(k*k==i)sum-=k;
}
}
if(sum>i&&sum<3000)
{
//printf("%d%d\n",i,sum);
gen=sqrt(sum);
s2=0;
for(k=1;k<=gen;k++)
{
if(sum%k==0)
{
s2+=k;
if((sum/k)!
=sum)s2+=(sum/k);
if(k*k==sum)s2-=k;
}
}
if(s2==i)printf("%d%d\n",i,sum);
}
}
return0;
}
6.5
求出所有水仙花数。
即三位数的各位数字的立方和等于自己,例如153=1^3+5^3+3^3.
#include
#include
#include
intmain()
{
inta,b,c,i;
for(i=100;i<1000;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);
}
return0;
}
6.6
1000以内的所有完数,即一个数等于它的因子之和,例如
6=1+2+3.并输出它的因子。
#include
#include
#include
intmain()
{
intsum,i,k,gen,g;
for(i=6;i<1000;i++)
{
sum=1;
gen=sqrt(i);
for(k=2;k<=gen;k++)
{
if(i%k==0)
{
sum+=k;
sum+=i/k;
if(k*k==i)sum-=k;
if(sum==i)
{
printf("%d\n因子:
1",sum);
for(g=2;g<=gen;g++)
if(i%g==0)
{
printf("%d",g);
if(i/g!
=g)printf("%d",i/g);
}
printf("\n");
}
}
}
}
return0;
}
6.7
3025分成两段30和25,且(30+25)^2=3025,求出全部四位数。
#include
#include
#include
intmain()
{
inti,a,b,c;
for(i=1000;i<10000;i++)
{
a=i/100;
b=i%100;
c=a+b;
if(c*c==i)printf("%d\n",i);
}
return0;
}
6.8
求出满足下面条件的三位数:
该数只有两个数字相同,例如121,112
#include
#include
#include
intmain()
{
inti,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=i%10;
c=i/10%10;
if(c==a&&a!
=b||a==b&&b!
=c||b==c&&c!
=a)printf("%d\n",i);
}
return0;
}
6.9
猴子吃桃问题。
第一天吃了一半还多一个,以后每天都这样,第十天发现,只有一个了,问一共有多少桃子?
#include
#include
#include
intmain()
{
inti,sum=1;
for(i=9;i>0;i--)
{
sum=(sum+1)*2;
}
printf("%d\n",sum);
return0;
}
第7章数组
7.1
输入一个整型十进制数,转成十六进制,并输出。
#include
#include
intmain()
{
intn,i=0,k;
intshu[10];
scanf("%d",&n);
i=0;
while(n>0)
{
shu[i]=n%16;
i++;
n/=16;
}
for(k=i-1;k>=0;k--)
{
if(shu[k]<10)printf("%d",shu[k]);
elseprintf("%c",'A'+shu[k]%10);
}
printf("\n");
return0;
}
7.2
输入一个整数,判断其是不是回文数.
#include
#include
intmain()
{
intn,i,k;
intshu[10];
scanf("%d",&n);
i=0;
while(n>0)
{
shu[i]=n%10;
n/=10;
i++;
}
k=0;
i--;
while(k<=i)
{
if(shu[i]!
=shu[k])break;
k++;
i--;
}
if(k>i)
{
printf("Yes\n");
}
elseprintf("No\n");
return0;
}
7.3
有一个3×4的矩阵,找出其中的最大值,及对应的坐标号。
#include
#include
intmain()
{
intshu[3][4];
inti,k,max=0,xx,yy;
for(i=0;i<3;i++)
{
for(k=0;k<4;k++)
{
scanf("%d",&shu[i][k]);
if(shu[i][k]>max)
{
max=shu[i][k];
xx=i;yy=k;
}
}
}
printf("%d\n%d%d\n",max,xx,yy);
return0;
}
7.4
求数列第10项及前10项的和。
F1=1,f2=1,
F(n)=3*f(n-1)+2*f(n-2)
#include
#include
intmain()
{
inti;
intf[12],sum=2;
f[1]=f[2]=1;
for(i=3;i<=10;i++)
{
f[i]=f[i-1]*3+f[i-2]*2;
sum+=f[i];
}
printf("第10项:
%d\n和:
%d\n",f[10],sum);
return0;
}
7.5
打印杨辉三角,8行
#include
#include
intmain()
{
inthui[10][20];
inti,k,kon=7;
for(i=0;i<10;i++)
for(k=0;k<20;k++)
hui[i][k]=0;
for(i=0;i<10;i++)
{
for(k=0;k<=i;k++)
{
hui[i][k]=(k==0)?
1:
hui[i-1][k-1]+hui[i-1][k];
}
}
for(i=0;i<8;i++)
{
for(k=kon;k>0;k--)printf("");
kon--;
for(k=0;k<=i;k++)
{
if(hui[i][k]>0)
{
printf("%2d",hui[i][k]);
}
}
printf("\n");
}
return0;
}
7.6
从键盘输入2个字符串,若不相等,则把短的字符串连接到长的字符串后面,输出新的字符串。
#include
#include
intmain()
{
charf1[100],f2[100];
inti,k;
scanf("%s",f1);
scanf("%s",f2);
i=k=0;
while(f1[i]&&f2[k])
{
i++;k++;
}
if(f1[i]||f2[k])
{
if(f1[i])
{
while(f1[i])
{
i++;
}
k=0;
while(f2[k])
{
f1[i]=f2[k];
i++;k++;
}
f1[i]=0;
printf("%s\n",f1);
}
else
{
while(f2[k])
{
k++;
}
i=0;
while(f1[i])
{
f2[k]=f1[i];
i++;k++;
}
f2[k]=0;
printf("%s\n",f2);
}
}
return0;
}
7.7
输出如下图案:
**
****
******
*******
#include
#include
intmain()
{
chartu[4][7];
inti,k,kon=5;
for(i=0;i<4;i++)
for(k=0;k<7;k++)
tu[i][k]='*';
for(i=0;i<4;i++)
{
for(k=i+1;ktu[i][k]='';
kon-=2;
}
for(i=0;i<4;i++)
{
for(k=0;k<7;k++)
printf("%c",tu[i][k]);
printf("\n");
}
return0;
}
第8章函数
8.1
将十进制整数变成十六进制字符串输出。
#include
#include
voidbian(intn,charf[])
{
intff[10],i=0,k,g=0;
while(n)
{
ff[i++]=n%16;
n/=16;
}
for(k=i-1;k>=0;k--)
{
if(ff[k]<10)f[g++]=ff[k]+'0';
elsef[g++]=ff[k]%10+'A';
}
f[g]=0;
}
intmain()
{
intn;
charf[10];
scanf("%d",&n);
bian(n,f);
printf("%s\n",f);
return0;
}
8.2
筛法求1000以内的素数。
#include
intmain()
{
intshu[1001];
inti,k;
for(i=2;i<=1000;i++)shu[i]=0;
for(i=2;i<=1000;i++){
if(shu[i]==0){
printf("%d",i);
for(k=i*2;k<=1000;k+=i)shu[k]=1;
}
}
return0;
}
未完待续。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
8.3
输出N×N的反时针方向的螺旋方阵。
8.4
打印n阶魔方阵。
8.5
用移位的方法,实现十进制数以二进制形式输出。
8.6
分别编写5个函数,实现字符串的复制,连接,大写转小写,小写转大写,字符串比较。
8.7
利用海伦公式求三角形面积。
S=(a+b+c)/2;分别定义2个函数,一个求s,一个求面积,主函数输入3边的长,并判断是否合法,然后求面积。
8.8
编写程序,求2的n次方,n可以大于100.用数组存结果。
8.9
编写程序,求n!
,例如100!
8.10
求1!
+2!
+......+10!
8.11
在数字插入千分位符,例如1234567,表示成1,234,567
8.12
给定年,月,日,判断那是该年的第几天,并判断是星期几?
8.13
给若干字符串冒泡排序。
8.14
将数字字符串转成数字。
如“123”是123.
第9章指针
9.2
从键盘输入3个整数,从大到小输出。
9.3
自定义strcmp函数,实现字符串比较。
9.4
自定义strlen函数,求出字符串的长度。
9.5
编函数,实现从长度为n的字符串第m个字符开始,截取k个,到另一个字符串中。
9.6
一个班4个学生,5门课程。
计算每门课的平均分。
找出2门课不及格的学生,输出他的学号,成绩,姓名,平均分。
找出平均分90以上,或每科85以上的学生。
(用结构体数组)
9.7
利用辛甫生公式求积分
9.8
用指针数组实现,输入月份,输出对应的英文名。
9.9
编写函数实现2个n阶矩阵相乘。
9.10
输入一行文字,统计大写字母,小写字母,空格,数字,其他字符各几个?