C语言程序设计实训教程答案
仅供参考,理论上都能运行出结果。
2.5 循环结构程序设计实验一循环结构程序设计
1、求1!+2!+……+10!。
#include
void main()
{
long i,n=1,s=0;
for(i=1;i<=10;i++)
{
n*=i;
s+=n;
}
printf("1!+2!+……+10!=%d\n",s);
}
2、打印一下图案(用循环实现)
*
***
*****
*******
*****
***
*
#include
void main()
{
int i,j,k;
for(i=1;i<5;i++)
{
for(j=1;j<5-i;j++)
printf(" ");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
for(i=3;i>0;i--)
{
for(j=1;j<5-i;j++)
printf(" ");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
}
3、猴子吃桃。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
#include
void main()
{
int i,n=1;
for(i=9;i>0;i--)
n=(n+1)*2;
printf("%d\n",n);
}
4、打印九九乘法表。
#include
void main()
{
int i,j;
for(i=1;i<10;i++)
{
for(j=1;j<=i;j++)
printf("%d*%d=%d, ",i,j,i*j);
printf("\n");
}
}
5、输出10~100之间的全部素数。
#include
void main()
{
int i,n;
for(n=10;n<101;n++)
{
for(i=2;i if(n%i==0) break; if(i>=n) printf("\t%d",n); } printf("\n"); } 实验二综合运用3种基本结构进行程序设计 1、百马百担。100匹马,驮100担,大马3担,中马2担,2个小马1担,问大、中、小马各多少? #include void main() { int x,y,z; for(x=0;x<34;x++) for(y=0;y<51;y++) { z=100-(x+y); if(z%2==0&&x*3+y*2+z/2==100) printf("x=%d,y=%d,z=%d\n",x,y,z); } } 2、输入一行字符,分别统计其中英文字母、空格、数字和其他字符个数。 #include void main() { int i,zm=0,kg=0,sz=0,qt=0; char c[100]=" "; gets(c); for(i=0;c[i]!='\0';i++) { if(c[i]>='a'&&c[i]<='z'||c[i]>='A'&&c[i]<='Z') zm++; else if(c[i]==' ') kg++; else if(c[i]>='0'&&c[i]<='9') sz++; else qt++; } printf("zm=%d kg=%d sz=%d qt=%d\n",zm,kg,sz,qt); } 3、打印输出“水仙花数”。“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身,如153就是一个水仙花数。 #include void main() { int i,a,b,c; for(i=100;i<1000;i++) { a=i/100; b=(i-a*100)/10; c=i%10; if(a*a*a+b*b*b+c*c*c==i) printf("\t%d",i); } } 4、将一个正整数分解成每个质因数的乘积。例如:输入90,打印90=2*3*3*5. #include void main() { int i,n; printf("please input a number:"); scanf("%d",&n); for(i=2;i<=n;i++) while(n!=i) { if(n%i==0) { printf("%d*",i); n=n/i; } else break; } printf("%d",n); } 5、利用循环语句编写程序以实现以下功能:对一个正整数,讲各位数字反序后的数组成一个整数输出。例如:输入12345,输出54321。 (方法一) #include void main() { int m,n; scanf("%d",&n); while(n!=0) { m=n%10; n=n/10; printf("%d",m); } } (方法二) #include #include void main() { int i,l; char a[100]; scanf("%s",a); l=strlen(a); for(i=l-1;i>=0;i--) printf("\n"); } 6、一个素数加上1000以后是37的倍数,求满足这个条件的最小素数。 #include void main() { int i,n; for(n=2;n<=1000;n++) { for(i=2;i if(n%i==0) break; if(i==n) { if((n+1000)%37==0) { printf("%d\n",n); break; } } } } 7、找1000以内的所有“完数”。一个数如果恰好等于它的因子之和,这个数就称为“完数”,如6就是一个完数,因为6=1+2+3。 #include void main() { int i,j,s; for(i=3;i<=1000;i++) { s=0; for(j=1;j if(i%j==0) s=s+j; if(i==s) printf("\t%d",s); } printf("\n"); } 2.6 数组 实验一数组的定义及使用Ⅰ 1、从键盘输入一个整数n(n<=10)和n个整数,存入数组a中,先依次输出各个数组元素的值,然后对数组a的所有元素值从小到大的顺序重新排列后,再依次输出。 #include void main() { int a[10],n,i,j,min,t; scanf("%d",&n); for(i=0;i scanf("%d",&a[i]); for(i=0;i printf("%d ",a[i]); printf("\n"); for(i=0;i { min=i; for(j=i+1;j if(a[j] min=j; t=a[i]; a[i]=a[min]; a[min]=t; } for(i=0;i printf("%d ",a[i]); printf("\n"); } 2、编程并上机调试运行。 (1)将一个数组中的值逆序存储,然后按顺序输出数组。如原来数组储存为1、2、3、4、5的,按要求重新存为5、4、3、2、1. #include #include void main() { int i,l; char a[100]; scanf("%s",a); l=strlen(a); for(i=l-1;i>=0;i--) printf("%c",a[i]); printf("\n"); } (2)打印出一下杨辉三角(要求打印8行)。 #include void main() { int i,j,k,a[8][8]={{1},{1,1}}; for(i=2;i<8;i++) { a[i][0]=1; for(j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; } for(i=0;i<8;i++) { for(k=0;k<3*(8-i);k++) printf(" "); for(j=0;j<=i;j++) printf("%-6d",a[i][j]); printf("\n"); } } (3)求4*4方正阵两对角线元素之和及其转置矩阵。 #include void main() { int a[4][4],b[4][4],i,j,s=0; for(i=0;i<4;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); for(i=0;i<4;i++) s+=a[i][i]+a[3-i][i]; for(i=0;i<4;i++) for(j=0;j<4;j++) b[j][i]=a[i][j]; printf("Array a:\n"); for(i=0;i<4;i++) { for(j=0;j<4;j++) printf("%4d",a[i][j]); printf("\n"); } printf("s=%d\n",s); printf("Array b:\n"); for(i=0;i<4;i++) { for(j=0;j<4;j++) printf("%4d",b[i][j]); printf("\n"); } } (4)输出Fibonacci数列的前20项。 #include void main() { int i; long a[20]={1,1}; for(i=2;i<20;i++) a[i]=a[i-1]+a[i-2]; for(i=0;i<20;i++) { if(i%5==0) printf("\n"); printf("%-10ld",a[i]); } printf("\n"); } (5)按公式计算,求A20的值。 A1=1,A2=1; A3=3*A1+A2; A4=3*A2+A3; …… #include void main() { int i; long a[20]={1,1}; for(i=2;i<20;i++) a[i]=3*a[i-2]+a[i-1]; printf("A20=%d\n",a[19]); } 实验二数组的定义及使用Ⅱ 1、输入并改正源程序中的错误。 #include #include void main() { int n=0,i; char s[81]; gets(s); i=0; while(s[i]!='\0') { if(!(s[i]>='A'&&s[i]<='Z')) s[n++]=s[i]; i++; } s[n]='\0'; puts(s); } 2、编写程序并上机调试运行。 (1)输入10个整数,采用冒泡法排序后输出。 #include void main() { int i,j,t; int a[10]; printf("Input 10 numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<9;i++) { for(j=0;j<10-i;j++) if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } printf("the sorted numbers:\n"); for(i=0;i<10;i++) printf("%4d",a[i]); printf("\n"); } (2)将两个字符串连接起来,不要用strcat函数。 #include #include void main() { int i,j=0,l1,l2; char a[100],b[100]; gets(a); gets(b); l1=strlen(a); l2=strlen(b); for(i=l1;i { a[i]=b[j]; j++; } a[l1+l2]='\0'; puts(a); } (3)输入一行字符串,统计其中单词个数,单词之间用空格隔开。例如:输入“I am a boy!”其中单词的个数为4个() #include #include void main() { int i,l,n=1; char a[100]; gets(a); l=strlen(a); for(i=0;i if(a[i]==' ') n++; printf("%d\n",n); } (4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,也有可能没有鞍点。 #include #define N 3 #define M 4 main() { int a[N][M],i,j,k,max,row,col; printf("Input %d*%d matrix: \n",N,M); for (i=0;i for (j=0;j scanf("%d",&a[i][j]); for (i=0;i { max=a[i][0]; row=i; col=0; for(j=1;j { max=a[i][j]; col=j; } for (k=0;k break; if (k==N) /*得到鞍点*/ { printf("the point is %d,row=%d,col=%d\n",max,row,col); break; } if (i==N) /*没有鞍点*/ printf("no point\n"); } (5)已有一个排序好的数组(从小到大排序),现输入一个数,要求按原来排序的规律将它插入数组中。 #include #define N 10 void main() { int a[N+1],i,t; printf("From small to big N numbers:\n");