b,输出a、c、b,否则输出a、b、c;对于a9、以得出结果。
程序流程图:
N-S盒图:
PAD图:
(4)求1*2*3*……*10。
算法思想:定义一个变量用来存放最后的值,赋初值为1,做十次循环,每次循环在原来变量的基础上乘循环变量值(即1-10),最后输出这个变量即可。
程序流程图:
N-S盒图:
PAD图:
(5)输入两个整数,求其最大公约数。
算法思想:选取两个数中较小的数作为起始值,让这两个数分别除以这个值,如果可以整除,则这个数就是最后结果,如果不能整除则将起始值减一之后再用原来的两个数对其做除法运算,知道整除为止,得到的起始值的最后值就是结果。
程序流程图:
N-S
10、盒图:
PAD图:
1.5算法思考题
(1)钞票换硬币:把一元钞票换成一分、二分、五分硬币(每种至少一枚),有哪些种换法?
分析:1元相当于100分,设5分、2分、1分的硬币数分别为X、Y、Z,求换法就是在寻找这样一种组合,使得5*X+2*Y+Z =100,所以每当找到1种组合时,将个数记录下来,就可知换法有多少种,算法描述如下:
Count = 0; //用于记录个数,初始为0
for(X=1;X<=20;X++)
for(Y=1;Y<=50;Y++)
for(Z=1;Z<=100;Z++)
{
if(5*X +
11、2*Y + Z == 100) //可实现交换
Count ++;
}
输出Count
(2)百钱买百鸡:一只公鸡值5元,一只母鸡值3元,3只小鸡值1元,现用一百元要买一百只鸡,问有什么方案?
分析:由题意可知,假设公鸡、母鸡、小鸡分别有X、Y、Z只,那么X、Y、Z满足:X+Y+Z=100,而且要满足钱数限定:5*X+3*Y+1/3*Z = 100,由于3只小鸡1元钱,所以小鸡的个数必须是3的整数倍,即:Z是3的整数倍。可通过限制条件,筛选出满足条件的X,Y,Z。当然X、Y、Z还满足以下条件:5*X <= 100;3*Y <= 100;Z <= 1
12、00。以下是算法描述:
for(X=0;X<=100;X++)
for(Y=0;Y<=100;Y++)
for(Z=0;Z<=100;Z++)
{
if(5*X<=100 and 3*Y<=100 and z%3==0)
{
if(X+Y+Z==100 and 5*X+3*Y+Z/3 == 100)
{
输出X、Y、Z;
}
}
}
(3)斐波那契兔子的问题:某人有一对兔子饲养在围墙中,如果它们每个月生一对兔子,且新生的兔子在第二个月后也是每个月生一对兔子,问一年后围墙中共有多少对兔子。
分析:第一个月是最初的一对兔子
13、生下一对兔子,围墙内共有两对兔子。第二个月仍是最初的一对兔子生下一对兔子,共有3对兔子。到第三个月除最初的兔子新生一对兔子外,第一个月生的兔子也开始生兔子,因此共有5对兔子。继续推下去,第12个月时最终共有对377对兔子。由分析知,每个月的兔子都是上个月的兔子与新增兔子之和,而上个月新生的兔子到下个月才会生兔子,所以新增的兔子都是上两月的兔子生的。设每个月的兔子数为F(n),则可列出下列式子:
F(0) = F(1) = 1
F(n) = F(n-1) + F(n-2)
显然可用递归的方法解出此题,算法流程图如下:
习题2参考答案
(1)请简要描述C语言的发展历史。
14、
答:C语言是一种目前世界上普遍流行、使用广泛的高级程序设计语言,它是在B语言的基础上发展起来的,1972—1973年间,贝尔实验室设计出了C语言。1983年,美国国家标准化协会制定了C语言的标准,称为ANSI C。
(2)略。
(3)C语言的主要特点是什么?
答:C语言的主要特点如下。
① C程序是由函数组成的。
② 函数由函数头和函数体组成。
③ C程序总是从main函数开始执行。
④ 每个语句和数据声明的最后必须有一个“;”。
⑤ C语言没有自己的输入/输出语句,它的输入/输出由库函数printf和scanf完成。
⑥ 可以添加注释。
⑦ C语言程序中的变量必须先声明
15、后使用。
(4)如何使用Visual C++ 6.0开发控制台程序?
使用VC6开发控制台程序的方法如下:
答:① 在Miscrosoft Visual C++ 6.0环境下,首先建立一个空的工程。
② 而后建立一个C源程序文件,并在该文件中输入源代码。
③ 使用Bulid命令或者快捷键F7,进行编译连接。
④ 如果没有错误,选择Execute命令或者快捷键Ctrl+F5,进行执行。
习题3参考答案:
3.1 选择题
1.B 2.D 3.D 4.A 5.A 6.A 7.C 8.C 9.C 10.B
3.2 写出下列程序的输出结果
16、1.200 310 c8
2.a=100,b=200
3.97,141,61,a
4.
5.aabb c abc
4,3
6.6,6,6,7
3.3 编程题
1.
#include
void main()
{
int a=500;
printf("%d,%o,%x\n",a,a,a);
}
输出结果:500,764,1f4
2.
#include
void main()
{
float x;
scanf("%f",&x);
printf("a=%.3f,a=%.3e\n",x,x);
}
17、
输入:66
输出结果:a=66.000,a=6.60000e+001
3.
#include
void main()
{
char ch1='a',ch2=ch1;
printf("%c,%d,%o,%x\n",ch1,ch1,ch1,ch1);
printf("%c,%d,%o,%x\n",ch2,ch2,ch2,ch2);
}
输出结果:A,65,101,41
a,97,141,61
4.
#include
void main()
{
float x,y,z,s,v;
scanf("%f%f%f",&x,&y,&
18、z);
s=2*(x*y+x*z+y*z);
v=x*y*z;
printf("Area=%.lf,Volume=%.lf\n",s,v);
}
输入:3 4 5
输出结果:Area=94 ,Volume=60
5.
#define PI 3.14
#include
#include
void main()
{
float r,s,l;
scanf("%f",&r);
s=(float)PI*r*r;
l=2*(float)PI*r;
printf("r=%4.1f,s=%4.1f,l=%4.1f\n",r,s,l)
19、
}
输入:3
输出结果:r= 3.0,s=28.3 ,l=18.8
6.
#include
#include
void main()
{
float x1,y1,x2,y2,x3,y3,a,b,c,p,s;
scanf("%f%f%f%f%f%f",&x1,&y1,&x2,&y2,&x3,&y3);
a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(
20、y2-y3));
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("Area=%f\n",s);
}
输入:5 6 3 8 0 23
输出结果:Area=12.000013
习题4参考答案
4.1选择题。
(1)D (2)A (3)A (4)C (5)C (6)B (7)B (8)B (9)C (10)A
4.2填空题。
(1)261 (2)16 (3)0 (4)2,1
4.3编程题。
(1)
#include
void main()
{
float c
21、f;
printf("输入华氏温度:\n");
scanf("%f",&f);
c=(f-32)*5/9;
printf("摄氏温度为:%5.2f\n",c);
}
(2)
#include
#include
void main()
{
char s1[10],s2[10],s[20];
printf("please enter two string\n");
gets(s1);
gets(s2);
strcat(s1,s2);
pri
22、ntf("%s\n",s1);
printf("%d\n",strlen(s1));
}
(3)
#include
#include
void main()
{
double x,y;
printf("please enter two data:\n");
scanf("%lf%lf",&x,&y);
printf("%lf raised to %lf is %lf\n",x,y,pow(x,y));
}
习题5参考答案
1.填空题
(1) n=4 (2) 2*i-1
23、 (3) 7 (4) ######
2.#include
void main()
{
long m,n,a,b,s;
printf("\nPlease input value of M :");
scanf("%ld",&m);
printf("\nPlease input value of N :");
scanf("%ld",&n);
a=(m>n)?m:n;
b=(m>n)?n:m;
while (a%b!=0)
{
s=a%b;
a=b;
b=s;
}
printf("\nGong
24、yue shu:%ld\n",s);
printf("\nGong Bei shu:%ld\n",(m*n)/s);
}
3.#include
void main()
{
int a,b,c,d,e;
printf("Please input an integer:\n");
scanf("%d",&a);
if (a/1000==0)
{
printf("input error!\n");
return;
}
b=a/1000;
e=a%10;
c=a%1000/100;
d=a%100/10;
if
25、b==e && c==d)
printf("YES.\n");
else
printf("NO.\n");
}
4.#include
void main()
{
int c;
int Num1,Num2,Num3,Num4;
Num1=Num2=Num3=Num4=0;
do
{
c=getchar();
if ((c>='a' && c<='z') || (c>='A' && c<='Z'))
Num1++;
else if (c>='0' && c<='9')
Num2++;
els
26、e if (c==' ')
Num3++;
else
Num4++;
}while(c!='\n');
printf("英文字母有%d个,数字有%d个,空格有%d个,其它字符有%d个。\n",Num1,Num2,Num3,Num4);
}
5.#include
#include
void main()
{
float a,b,c,disc,x1,x2,realpart,imagepart;
printf("Input a,b and c:");
scanf("%f,%f,%f",&a,&b,&c);
27、printf("The equation");
disc=b*b-4*a*c;
if (fabs(disc)<=1e-7)
printf("has two equal roots:%4.2f.\n",-b/(2*a));
else
if (disc>1e-7)
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("has distince real roots:%4.2f and %4.2f.\n",x1,x2);
}
else
{
realpart=
28、b/(2*a);
imagepart=sqrt(-disc)/(2*a);
printf("has complext roots:");
printf("%4.2f+%4.2fi",realpart,imagepart);
printf(" and %4.2f-%4.2fi\n",realpart,imagepart);
}
}
6. #include
void main()
{
int i,j;
for (i=1;i<=5;i++)
{
for (j=1;j<=i;j++)
printf("*");
29、
printf("\n");
}
for (i=5;i>=1;i--)
{
for (j=i;j>=1;j--)
printf("*");
printf("\n");
}
}
7.#include
#define EPS 1e-7
void main()
{
int n;
double x,an,sum;
printf("input x:");
scanf("%lf",&x);
x=x*3.1415926/180;
sum=0;
an=x;
n=1;
do
{
sum+=an;
30、
n=n*(n+1)*(n+2);
an*=(-x*x)/n;
printf("an=%f\n",an);
}while(fabs(an)>=EPS);
printf("sin(%.4lf)=%.4lf\n",x,sum);
}
8.#include
void main()
{
unsigned int n;
char c;
n=0;
printf("input a binary integer:");
while((c=getchar())!='\n')
{
switch (c)
{
case '
31、0':
n=n*2+0;
break;
case '1':
n=n*2+1;
break;
}
}
printf("the decimal is %d.\n",n);
}
9.#include
void main()
{
int i,j;
for (i=1;i<10;i++)
printf("\t%d",i);
printf("\n");
for (i=1;i<10;i++)
{
printf("%d",i);
for (j=1;j<=i;j++)
printf("\t
32、d",i*j);
printf("\n");
}
}
10.#include
void main()
{
int n,m,z,x,y;
printf("input n:");
scanf("%d",&n);
m=n;
z=x=y=1;
while (n>1)
{
z=x+y;
x=y;
y=z;
n--;
}
printf("Fibonacci(%d)=%d.\n",m,z);
}
11.#include
#include
void main()
33、{
int i,j;
int flag;
for (i=1;i<=100;i++)
{
flag=1;
for (j=2;j<=sqrt(i);j++)
if (i%j==0)
{
flag=0;
break;
}
if (flag==1)
printf("%d\t",i);
}
}
12.#include
void main()
{
int i,sum;
sum=0;
for (i=1;i<=1000;i++)
if (i%3==0 && i%5==0 &&
34、 i%7==0)
sum+=i;
printf("sum is %d.\n",sum);
}
13.#include
void main()
{
int x;
long f;
printf("input x:");
scanf("%d",&x);
if (x>=1 && x<=3)
f=2*x+3;
else if (x>=4 && x<=10)
f=3*(x+4);
else
f=x*x+3*x-6;
printf("f(%d)=%d\n",x,f);
}
习题6参考答案
6.1 &b[i][j
35、]=3001+i*16+j*4;
6.2求一维数组各元素的最大值、最小值及所有元素的乘积
#include
#define N 10
void main( )
{
int a[N];
int max,min,i,product;
printf("输入%d个数组元素:\n",N);
for(i=0;i36、ax=a[i];
if(min>a[i])min=a[i];
}
printf("各元素最大值为:%d\n",max);
printf("各元素最小值为:%d\n",min);
printf("各元素的乘积为:%d\n",product);
}
6.3已知数列a0=0, a1=1,an= an-2+ an-2an-1,求数列的前10个元素
#include
#define N 10
void main( )
{
int a[N]={0,1};
int i;
for(i=2;i37、2]*a[i-1];
for(i=0;i
#define N 10
void main( )
{
int a[N];
int i,j,temp,flag;
printf("输入待排序数据:\n");
for(i=0;i38、 {
flag=0;
for(j=0;ja[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=1;
}
if(flag==0)break;
}
printf("排序后数据为:\n");
for(i=0;i
#define N 10
void
39、main( )
{
int a[N];
int i,j,temp;
printf("输入待排序数据:\n");
for(i=0;itemp&&j>=0)
{
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
}
for(i=0;i40、筛选法求1--100内的素数
#include
#include
void main( )
{
int a[101];
int i,j,count=0;
for(i=1;i<=100;i++)
a[i]=i;
a[1]=0;
for(i=2;i41、)
{
if(a[i]!=0)
{
printf("%5d",a[i]);
count++;
if(count%5==0)printf("\n");
}
}
}
6.7将一维数组中各个元素的顺序变反
#include
#define N 10
void main( )
{
int a[N],i,temp;
printf("请输入%d个整数:\n",N);
for(i=0;i42、i];
a[i]=a[N-1-i];
a[N-1-i]=temp;
}
for(i=0;i
#define N 3
void main()
{
int a[N][N]={{1,1,6},{0,5,7},{0,0,2}};
int i,j;
for(i=0;i43、or(j=i;j
#define M 3
#define N 4
void main( )
{
int a[M][N],b[M][N],i,j;
printf("请输入%d*%d矩阵A:\n",M,N);
for(i=0;i44、",M,N);
for(i=0;i
#de
45、fine M 3
#define N 4
void main( )
{
int a[M][N],i,j,max,maxi=0,maxj=0,min,mini=0,minj=0;
printf("请输入%d*%d矩阵A:\n",M,N);
for(i=0;imax)
{
max
46、a[i][j];
maxi=i;
maxj=j;
}
if(a[i][j]47、 10 10 5 1
. . . . . . .
说明:杨辉三角形是(a+b)n展开后各项的系数。首行(a+b)0的系数为1,次行为1,1;其余各行中首末元素为1,其余元素为其左上方元素与正上方元素的和。
#include
#define N 10
void main( )
{
int a[N][N],i,j;
for(i=0;i48、 }
printf("杨辉三角的前%d行为:\n",N);
for(i=0;i49、在4的上一行后一列);
(3)如果上一个数在第一行,则下一个数在最后一行,列数加1;
(4)如果上一个数在最后一列,则下一个数在第一列,行数减1;
(5)如果按上述规则确定的位置已经有数,或上一个数在第1行第N列,则下一个数放在上一个数的正下方。如三阶魔方阵中,按前四条规则,4应该放在第一行、第二列的位置,但由于1已经在该位置,故4放在3的下面。再如6,因其位于第一行第3列,故7在其下方。
#include
#define N 5
void main( )
{
int a[N][N]={0},i,j,k;
i=0;
j=N/2;
a[i][j]
50、1;
for(k=2;k<=N*N;k++)
{
i=i-1;
j=j+1;
if(i<0&&j==N)
{
i=i+2;
j=j-1;
a[i][j]=k;
}
else if(i<0)
i=N-1;
else if(j==N)
j=0;
else if(a[i][j]!=0)
{
i=i+2;
j=j-1;
}
a[i][j]=k;
}
for(i=0;i