文档库 最新最全的文档下载
当前位置:文档库 › C语言答案(1)

C语言答案(1)

? ? ? ? ? ? ? ? ?编程题
1(2)键盘输入10个实型数,求其倒数的和并输出.
参考答案
#include "stdio.h"
#include "math.h"
main()
{
int i;
float a,sum=0;
printf("Please input 10 number:");
for(i=0;i<10;i++)
{
scanf("%f",&a);
sum += 1.0/a;
}
printf("The result is:%f\n",sum);
}
2(3) 键盘输入10个正实型数,求其方根的和并输出。
参考答案
#include "stdio.h"
#include "math.h"
main()
{
int i;
float a,sum=0;
printf("Please input 10 number which are all great than 0:");
for(i=0;i<10;i++)
{
scanf("%f",&a);
if(a < 0)
continue;
sum += sqrt(a);
}
printf("The result is:%f\n",sum);
}
3(4) 计算 s=1-2!+3!-4!+…-10!的值并输出。
参考答案
#include "stdio.h"
#include "math.h"
main()
{
int i;
long sum=0,b=-1;
for(i=1; i<=10; i++)
{
b = -1*i*b;
sum += b;
}
printf("The result is:%f\n",sum);
}
4(5) 编写一个程序,从键盘输入一个三位整数,将它们逆序输出。例如输入127,输出721。
参考答案
#include "stdio.h"
main()
{
int num,a,b,c;
printf("Please input the number:");
scanf("%d",&num);
a=num/100;
b=(num-100*a)/10;
c=num-100*a-10*b;
a += b*10+c*100;
printf("The result is%d\n",a);
}
5(7) 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如:153是一水仙花数,因为153=1^3+5^3+3^3.
参考答案
main()
{
int i,j,k,s;
for(s=100;s<=999;s++)
{
i=s/100;
j=s/10%10;
k=s-i*100-j*10;
if(i*i*i+j*j*j+k*k*k==s)
printf("s=%d\n",s);
else
continue;
}
}
6(8)编写一程序,对于给定的一个百分制成绩,输出相应的五分制成绩。设:90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。
参考答案
#include"stdio.h"
main(){
int a,b;
printf("Please input the score:");
scanf("%d",&a);
b=a/10;
switch(b){
case 10:
case 9:
printf("A!\n");
break;
case 8:
printf("B!\n");
break;
case 7:
printf("C!\n");
break;
case 6:
printf("D!\n");
break;
default:
printf("E!\n");
break;
}
}
7(9) 计算 s=1-1/3 + 1/5- 1/7+…1/101 的值并输出。
参考答案
main()
{
int i,f=1;
float sum=0.0;
for(i=1;i<=101;i=i+2)
{ sum=sum+1.0/i*f;
f=(-1)*f;
}
printf("sum=%f\n",sum);
}
8(11) 输入一个正整数,要求以相反的顺序输出该数。例如输入12345,输出位54321。
参考答案
main()
{ int n;
printf("Please enter n:");
scanf("%d",&n);
while(n>0)
{ printf("%d",n%10);
n=n/10;
}}
9(21)在主函数中输入8个整数,调用函数对其进行排序(从小到大),排序方法不限,
最后在主函数中输出结果。
参考答案
#include "stdio.h"
void main()
{ int num[8],i;
void taxis(int p[], int);
printf("Input 8 integers:\n");
for(i=0;i<8;i++)
scanf("%d",num+i);
taxis(num,8);
printf("The result:\n");
for(i=0;i<8;i++)
printf("%d,",num[i]);
}
void taxis(int p[],int n)
{
int i,j;
int code,temp;

for(i=0;i

++)
{
code=i;
for(j=i+1;jif(p[j]code=j;
if(code!=i)
{
temp=p[i];
p[i]=p[code];
p[code]=temp;
}
10(41) 从键盘输入十个整数,用合并排序法对输入的数据按照从小到大的顺序进行排序,
将排序后的结果输出。
??????????????????? 参考答案
?????????????????? #define N 16
?????????????????? #include"stdio.h"
???????????????? merge(a,b,c,m) /* 数组合并函数:将长度为m的*/
?????????????????? int a[],b[],c[],m; /* 数组a、b合并到c */
??????? ???????????{ int i=0,j=0,k=0;
??????????????????? while(i??????????????????? if(a[i]>b[j])
????????????? c[k++]=b[j++]; /* 将a[i]、*b[j]中的小 */
else c[k++]=a[i++]; /* 者存入c[k] */
while(iwhile(j}
mergesort(w,n) /* 数组排序函数: 对长度为n */
int w[],n; /* 的数组w排序 */
{ int i,t,ra[N];
for(i=1;iif(i==n)
{ if(n>2) /* 递归调用结束条件 */
{ mergesort (w,n/2); /* 将数组w一分为二,递归调 */
mergesort (w+n/2,n/2); /* 用mergesort */
merge( w,w+n/2,ra,n/2 ); /* 将排序后的两数组重新合并 */
for(i=0;iw[i]=ra[i];
} else if(*w>*(w+1))
{ t=*w; *w=*(w+1); *(w+1)=t;
} }
else printf("Error:size of array is not a power of 2/n");
}
main( )
{ int i;
static int key[N]={4,3,1,81,45,8,0,4,-9,26,7,4,2,9,1,-1};
mergesort(key,N);
for(i=0;iprintf("%d ",key[i]);
printf("\n");
}
11(44) 编写函数,采用递归方法将任一整数转换为二进制形式。
参考答案
turn(n,a,k)
int n,a[ ],k;
{ if(n>0)
{ a[k]=n%2;
turn(n/2,a,k-1);
}
else return;
}
main()
{ int i,n,a[16]={0};
printf("\nPlease enter n:");
scanf("%d",&n);
turn(n,a,15);
for(i=0;i<16;i++)
printf("%d",a[i]);}
12(45) 编写函数,采用递归方法在屏幕上显示如下杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 51
…… …… …… …… ……

参考答案
#include
main( )
{ int i,j,n=13;
printf("N=");
while( n>12 )
scanf("%d", &n); /* 最大输入值不能大于12 */
for(i=0;i<=n;i++) /* 控制输出N行 */
{ for(j=0;j<12-i;j++)
printf(" "); /* 控制输出第i行前面的空格 */
for(j=1;jprintf("%6d", c(i,j)); /* 输出第i行的第j个值 */
printf("\n");
}
??????????????? }
int c(x,y) /* 求杨辉三角形中第x行第y列的值 */
int x, y;
{ int z;
if((y==1)||(y==x+1))
return(1); /* 若为x行的第1或第x+1列,则输出1 */
else /* 否则;其值为前一行中第y-1列与第y列值之和 */
z = c(x-1,y-1) + c(x-1,y);
return(z);
}
13(54) 编制一个计算函数y=f(x)的值程序,其中:
14(70) 任意输入一个偶数,请将它分解为两个素数之和。

参考答案
main( )
{ int j,k,n,m;
printf("Please enter n:");
scanf("%d",&n);
for(j=2;j{ for(k=2;kif(j%k==0) break; /* j能够被小于它的一个数整除就不是素数 */
if(k>=j) /* j是素数 */
{ m=n-j;
for(k=2;kif(m%k==0) break;
if(k>=m) /* m也是素数,输出结果 */
{ printf("%4d = %4d + %4d\n",n,j,m);
break;
}
}
}
}
15(90) 编写程序,输入三角型的三条边长,求其面积。
注意:对于不合理的边长输入要输出数据错误的提示信息。
参考答案
#include "math.h"
main()
{ int flag=0;
float a,b,c,s;
do
{ printf("Please enter a b c:");
scanf("%f%f%f",&a,&b,&c);
if(a>b+c || b>a+c || c>a+b)
flag=1;
}while(flag);
s=(a+b+c)/2;
printf("S=%f",s=sqrt((s-a)*(s-b)*(s-c)));
}
16(95) 输入n值,输出如图所示矩形。
******
******
******
******
******
******
n=6时的矩形
参考答案
分析:打印此图形用两重循环实现。
图形要重复n行,故采用循环结构实现循环n次,循环体内部打印一行''*''号,把上述思路表示为:
for(i=1;i<=n;i++)
打印一行''*''号;
每行有n个''*''号,再采用循环结构实现n次循环,循环内部用格式输出语句打印一个''*''号,即:
for(j=1;j<=n;j++)
printf("*");
按照上述思路,实现打印矩形。
参考答案:
main()
{ int i,j,n;
printf("\nPlease Enter n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
printf("*");
printf("\n");
??????? }}
17(96) 输入n值,输出如图所示平行四边形。
******
?******
? ******
?? ******
??? ******
???? ******
n=6时的平行四边形
参考答案
分析:此题和上题的区别在于每行''*''的数量逐行减少,可以使用上题控制空格个数的思路来控制''*''号的个数,请注意每行''*''的个数都是奇数。
参考答案:
main( )
{ int i,j,n;
printf("\nPlease Enter n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{ for(j=1;j<=n-i;j++)
printf(" ");
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}}
18(97) 输入n值,输出如图所示高为n的等腰三角形。
*
***
*****
*******
*********
***********
n=6时的等腰三角形
参考答案
分析:此题图形是第3题图形的垂直反转,在编程上我们可以变换一个思路。对于图形中的第i行(1≤i≤n),共需要输出2n-i个字符,其中前面的i-1个字符为空格,后面的字符为''*''号。按照这一思路可以编写出如下程序。
参考答案:
main( )
{ int i,j,n;
printf("\nPlease Enter n:");
scanf("%d", &n);
for( i=1;i<=n;i++ ) /* 重复输出图形的n行 */
{ for( j=1;j<=2*n-i;j++ ) /* 重复输出图形一行中的每个字符 */
if(j<=i-1) printf(" "); /* 输出前面的空格

*/
else printf("*"); /* 输出后面的*号 */
printf("\n");
}
}
19(108) 编程求 sum=1!+2!+3!+……+20!
20(110) 编写程序,求S=1/(1*2)+1/(2*3)+1/(3*4)+……前50项之和。
参考答案
#include "stdio.h"
main()
{
int i;
float sum = 0;
for(i=1;i<=50;i++)
{
sum += 1.0/(i*(i+1));
}
printf("sum = %f \n", sum);
}
21(117) 统计在[1030-25830]之间有多少个数能同时被13和27整除。
参考答案
#include "stdio.h"
main()
{
int i, num = 0;
for(i=1030;i<=25830;i++)
{
if((i%13==0) &&(i%27== 0))
num ++;
}
printf("num = %d \n", num);
}
22(121) 统计在[30-15810]之间有多少个数能被23整除,而不能被37整除。
参考答案
#include "stdio.h"
main()
{
int i, num = 0;
for(i=30;i<=15810;i++)
{
if((i%23==0) &&(i%37!= 0))
num ++;
}
printf("num = %d \n", num);
}
23(122) 统计在[210-15870]之间有多少个数能被19整除,而不能被21整除。
参考答案
#include "stdio.h"
main()
{
int i, num = 0;
for(i=210;i<=15870;i++)
{
if((i%19==0) &&(i%21!= 0))
num ++;
}
printf("num = %d \n", num);
}
24(133) 求一维整型数组中零的个数。
要求:主函数定义数组a[10]={-15,-22,13,44,-25, 66, 0, 88, -39,10},
调用自定义函数求出零的个数,然后在主函数中输出结果。
参考答案
#include"stdio.h"
main()
{
int a[10]={-15,-22,13,44,-25,66,0,88,-39,10},n;
int num(int x[10]);
n=num(a);
printf("The number is %d\n",n);
}
int num(int x[10])
{
int i,n=0;
for(i=0;i<=9;i++)
if(x[i]==0)
n++;
return(n);
}
25(137) 统计数组中小于数组元素平均值的元素的个数。
要求:主函数定义一维整型数组a[10]={12,34,56,78,90,9,87,65,43,21},
调用自定义函数统计小于数组元素平均值的元素的个数,并在主函数中输出结果
?参考答案
#include"stdio.h"
main()
{
int a[10]={12,21,34,43,56,65,78,87,90,9},n;
int num(int a[10]);
n=num(a);
printf("The number is %d\n",n);
}
int num(int a[10])
{
int i,n=0;
float aver,sum=0;
for(i=0;i<=9;i++)
sum+=a[i];
aver=sum/10;
for(i=0;i<=9;i++)
if(a[i]n++;
return(n);
}


相关文档