C语言课后习题答案5篇

时间:2019-05-12 17:59:13下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言课后习题答案》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言课后习题答案》。

第一篇:C语言课后习题答案

C语言课后习题答案-第四版-第一章

5、请参照本章例题,编写一个C语言程序,输出以下信息: **************************** V e r y G o o d!**************************** #include int main(){

printf(“**************************nn”);printf(“

Very Good!nn”);printf(“**************************n”);return 0;}

6、编写一个C语言程序,输入a,b,c三个值,输出其中最大值。#include int main(){ int a,b,c,max;printf(“please input a,b,c:n”);scanf(“%d%d%d”,&a,&b,&c);max=a;if(max int main(){ int a,b,c,max;printf(“please input a,b,c:n”);scanf(“%d%d%d”,&a,&b,&c);max=a>b?a:b;max=max>c?max:c;printf(“The largest number is %dn”,max);return 0;}

第3章

1、假如我国国民生产总值的年增长率为9%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为

P=(1+r)^n r 为年增长率,n 为年数,p为与现在相比的倍数。#include #include int main(){ float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf(“p=%fn”,p);return 0;}

2、存款利息计算。有1000元,想存5年,可按以下5种办法存:(1)一次存5年期。

(2)先存2年期,到期后将本息在存3年期。(3)先存3年期,到期后将本息在存2年期。

(4)先存1年期,到期后将本息在存1年期,连续存5次。(5)存活期存款。活期利息每一季度结算一次。2007年12月的银行存款利息如下: 1年定期存款利息为4.14%; 2年定期存款利息为4.68%; 3年定期存款利息为5.4%; 5年定期存款利息为5.85%;

活期存款利息为0.27%(活期利息每一季度结算一次。)如果r 为年利率,n 为存款年数,则计算本息和的公式为 1年期本息和:P=1000*(1+r);n年期本息和:P=1000*(1+n*r);存n次1年期的本息和:P=1000*(1+ r)^n;存活期本息和:P=1000*(1+r/4)^4n。

说明:P=1000*(1+r/4)^4n。是一个季度的本息和。#include #include int main(){ float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p=1000;p1=p*((1+r5)*5);

// 一次存5年期

p2=p*(1+2*r2)*(1+3*r3);

// 先存2年期,到期后将本息再存3年期

p3=p*(1+3*r3)*(1+2*r2);

// 先存3年期,到期后将本息再存2年期

p4=p*pow(1+r1,5);

// 存1年期,到期后将本息存再存1年期,连续存5次

p5=p*pow(1+r0/4,4*5);

// 存活期存款。活期利息每一季度结算一次

printf(“p1=%fn”,p1);

// 输出按第1方案得到的本息和

printf(“p2=%fn”,p2);

// 输出按第2方案得到的本息和

printf(“p3=%fn”,p3);

// 输出按第3方案得到的本息和

printf(“p4=%fn”,p4);

// 输出按第4方案得到的本息和

printf(“p5=%fn”,p5);

// 输出按第5方案得到的本息和

return 0;}

3、购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少月能还清。设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。提示:计算还请月数m 的公式如下: m =[ log p –log(p-d*r)] / log(1+r)可以讲公式该写为

m ={ log [p /(p – d*r)] }/ log(1+r)C的库函数中有求对数的函数log10,是求以10为底的对数,log(p)表示log p。#include #include int main(){ float d=300000,p=6000,r=0.01,m;m=log10(p/(p-d*r))/log10(1+r);printf(“m=%6.2fn”,m);return 0;}

6、请编将“China”,编译成密码,密码规律是:用原有的字母后面第4个字母代替原来的字母。#include int main(){ char c1='C',c2='h',c3='i',c4='n',c5='a';c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(“passwor is %c%c%c%c%cn”,c1,c2,c3,c4,c5);return 0;}

7、设圆半径r =1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。#include int main(){ float h,r,l,s,sq,vq,vz;float pi=3.141526;printf(“请输入圆半径r,圆柱高h∶”);scanf(“%f,%f”,&r,&h);

//要求输入圆半径r和圆柱高h

l=2*pi*r;

//计算圆周长l s=r*r*pi;

//计算圆面积s sq=4*pi*r*r;

//计算圆球表面积sq vq=3.0/4.0*pi*r*r*r;

//计算圆球体积vq vz=pi*r*r*h;

//计算圆柱体积vz printf(“圆周长为:

l=%6.2fn”,l);printf(“圆面积为:

s=%6.2fn”,s);

printf(“圆球表面积为:

sq=%6.2fn”,sq);printf(“圆球体积为:

v=%6.2fn”,vq);printf(“圆柱体积为:

vz=%6.2fn”,vz);return 0;}

第四章

4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。#include int main(){ int a,b,c;printf(“请输入三个整数:”);scanf(“%d,%d,%d”,&a,&b,&c);if(a

if(b

printf(“max=%dn”,c);

else

printf(“max=%dn”,b);

else if(a

printf(“max=%dn”,c);else

} printf(“max=%dn”,a);return 0;

4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。#include int main(){

int a,b,c,temp,max;printf(“请输入三个整数:”);scanf(“%d,%d,%d”,&a,&b,&c);temp=(a>b)?a:b;

/*将a和b中的大者存入temp中*/ max=(temp>c)?temp:c;

/*将a和b中的大者与c比较,取最大者*/ printf(“三个整数的最大数是%dn”,max);return 0;}

5、从键盘输入一个小于1000的正整数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其检查是否为小于1000的正数。若不是,则要求从新输入。#include #include #define M 1000 int main(){ int i,k;

printf(“请输入一个小于%d的整数i:”,M);scanf(“%d”,&i);while(i>M)

{ printf(“输入的数不符合要求,请重新输入一个小于%d的整数i:”,M);

} k=sqrt(i);printf(“%d的平方根的整数部分是:%dn”,i,k);return 0;} 6、有一个函数: scanf(“%d”,&i);

x

(x<1)

y(1<=x<10)

3*x – 11

(x>=10)=

2*x1

(x<0)

Y =

0

(x=0)

(x>0)

写程序,输入x 的值,输出y 相应的值。#include int main(){

int x,y;

printf(“please enter x:”);

scanf(“%d”,&x);

y=0;

if(x>=0)

if(x>0)y=1;

else y=-1;

printf(“x=%d,y=%dn”,x,y);return 0;{ }

8、给出一百分制成绩,要求输出成绩等级‘A’,’B’,’C’,’D’,’E’。90分以上为‘A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。#include int main(){ float score;

char grade;

printf(“请输入学生成绩:”);

scanf(“%f”,&score);

while(score>100||score<0){

}

switch((int)(score/10)){ case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;printf(“n 输入有误,请重输”);scanf(“%f”,&score);case 6: grade='D';break;case 5: case 4: case 3: case 2: case 1: case 0: grade='E';}

printf(“成绩是 %5.1f,相应的等级是%cn ”,score,grade);return 0;}

9、给出一个不多于5位数的正整数;(1)求出它是几位数;(2)分别输出每一位数字;

(3)按逆顺序输出各位数,例如原有数为123,应输出321.#include #include int main(){ int num,indiv,ten,hundred,thousand,ten_thousand,place;//分别代表个位,十位,百位,千位,万位和位数

printf(“请输入一个整数(0-99999):”);scanf(“%d”,&num);if(num>9999)

place=5;else if(num>999)place=4;else if(num>99)place=3;else if(num>9)place=2;else place=1;printf(“位数:%dn”,place);printf(“每位数字为:”);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);printf(“n反序数字为:”);switch(place){ case 5: printf(“%d%d%d%d%dn”,indiv,ten,hundred,thousand,ten_thousand);break;case break;case 3:printf(“%d%d%dn”,indiv,ten,hundred);break;case 2: printf(“%d%dn”,indiv,ten);break;case 1: printf(“%dn”,indiv);break;} return 0;}

11、输入4个整数,要求按由小到大的顺序输出。#include int main(){ int t,a,b,c,d;printf(“请输入四个数:”);scanf(“%d%d%d%d”,&a,&b,&c,&d);printf(“a=%d,b=%d,c=%d,d=%dn”,a,b,c,d);if(a>b)

{ t=a;a=b;b=t;} if(a>c)4: printf(“%d%d%d%dn”,indiv,ten,hundred,thousand);

{ t=a;a=c;c=t;} if(a>d)

{ t=a;a=d;d=t;} if(b>c)

{ t=b;b=c;c=t;} if(b>d)

{ t=b;b=d;d=t;} if(c>d)

{ t=c;c=d;d=t;} printf(“排序结果如下: n”);printf(“%d %d %d %d n” ,a,b,c,d);return 0;}

12、有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为 1,这4个圆塔高位10cm, 塔以外无建筑物。求该点的建筑物高度(塔外的高度为零)。#include int main(){ int h=10;float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;printf(“请输入一个点(x,y):”);scanf(“%f,%f”,&x,&y);d1=(x-x4)*(x-x4)+(y-y4)*(y-y4);

/*求该点到各中心点距离*/ d2=(x-x1)*(x-x1)+(y-y1)*(y-y1);d3=(x-x2)*(x-x2)+(y-y2)*(y-y2);d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);if(d1>1 && d2>1 && d3>1 && d4>1)

h=0;/*判断该点是否在塔外*/ printf(“该点高度为 %dn”,h);return 0;} 第五章

例5.7

用pi/4=1-1/3+1/5-1/7+„„公式求pi近似值,直到发现某一项的绝对值小于10^6为止。

#include #include

// 程序中用到数学函数fabs,应包含头文件math.n int main(){ int sign=1,count=0;

// sign用来表示数值的符号,count用来统计循环次数 double pi=0.0,n=1.0,term=1.0;// pi开始代表多项式的值,最后代表π的值,n

母,term代表当前项的值

while(fabs(term)>=1e-8)

// 检查当前项term的绝对值是否大于或等于10的(-6)次方

{

pi=pi+term;

// 把当前项term累加到pi中 n=n+2;

// n+2是下一项的分母

sign=-sign;

// sign代表符号,下一项的符号与上一项符号相反

} pi=pi*4;

// 多项式的和pi乘以4,才是π的近似值

printf(“pi=%10.8fn”,pi);

// 输出π的近似值

printf(“count=%dn”,count);

// 输出循环次数

return 0;}

3、输入两个正整数m和n,求其最大公约数和最小公倍数。#include int main()term=sign/n;

// 求出下一项的值term count++;

// count累加1 { int p,r,n,m,temp;printf(“请输入两个正整数n,m:”);scanf(“%d,%d,”,&n,&m);if(n

temp=n;

n=m;

m=temp;} p=n*m;while(m!=0){

r=n%m;

n=m;

m=r;} printf(“它们的最大公约数为:%dn”,n);printf(“它们的最小公约数为:%dn”,p/n);return 0;}

4、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。#include int main(){

char c;

int letters=0,space=0,digit=0,other=0;

printf(“请输入一行字符:n”);

while((c=getchar())!='n')

{

if(c>='a' && c<='z' || c>='A' && c<='Z')

letters++;

else if(c==' ')

space++;

else if(c>='0' && c<='9')

digit++;

else

other++;

}

printf(“字母数:%dn空格数:%dn数字数:%dn其它字符数:%dn”,letters,space,digit,other);

return 0;

}

5、求Sn=a+aa+aaa+„„+aa„„a之值,其中a是一个数字,n 表示a 的位数。n 由键盘输入。#include int main(){ int a,n,i=1,sn=0,tn=0;printf(“a,n=:”);scanf(“%d,%d”,&a,&n);while(i<=n){

} printf(“a+aa+aaa+...=%dn”,sn);return 0;}

6、求和:1!+2!+3!+„„+20!。#include int main(){ tn=tn+a;/*赋值后的tn为i个 a组成数的值*/ sn=sn+tn;/*赋值后的sn为多项式前i项之和*/ a=a*10;++i;double s=0,t=1;int n;for(n=1;n<=20;n++){

t=t*n;

s=s+t;} printf(“1!+2!+...+20!=%22.15en”,s);return 0;}

7、求1+2+3+„„+100+1+2^2+3^2+4^2++50^2+1+1/2+1/3+1/4+„„+1/10。#include int main(){ int n1=100,n2=50,n3=10;double k,s1=0,s2=0,s3=0;for(k=1;k<=n1;k++)/*计算1到100的和*/

{s1=s1+k;} for(k=1;k<=n2;k++)/*计算1到50各数的平方和*/

{s2=s2+k*k;} for(k=1;k<=n3;k++)/*计算1到10的各倒数和*/

{s3=s3+1/k;} printf(“sum=%15.6fn”,s1+s2+s3);return 0;}

8、输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如153是一位水仙花数,因为153=13+53+33。#include int main(){ int i,j,k,n;printf(“parcissus numbers are ”);for(n=100;n<1000;n++){

} printf(“n”);return 0;i=n/100;j=n/10-i*10;k=n%10;if(n==i*i*i + j*j*j + k*k*k)printf(“%d ”,n);}

9、编程求1000之内的完数,并按下面格式输出其因子:its factors are 1,2,3 #include int main(){ int m,s,i;for(m=2;m<1000;m++){

s=0;for(i=1;i

if((m%i)==0)s=s+i;if(s==m){

} printf(“%d,its factors are ”,m);for(i=1;i

} return 0;}

10、有一个分数序列:

2/1,3/2,5/3,8/5,13/8,21/13,„„ 求出这个数列前20项之和。#include int main(){ int i,n=20;double a=2,b=1,s=0,t;for(i=1;i<=n;i++){

} printf(“sum=%16.10fn”,s);return 0;}

11、一个球从100米敢赌下落,每次反弹高度为原来的一半,在下落,在反弹。求第10次落地时共经过多少米?第10次反弹多高?

#include s=s+a/b;t=a, a=a+b, b=t;int main(){ double sn=100,hn=sn/2;int n;for(n=2;n<=10;n++){

} printf(“第10次落地时共经过%f米n”,sn);printf(“第10次反弹%f米n”,hn);return 0;}

12、猴子吃桃问题。猴子第1天摘了若干个桃子,当即吃了一半零一个;第2剩下的吃了一半零一个,一次循环。到第十天时想吃就剩下一个桃子。求第一天摘了几个桃子? #include int main(){ int day,x1,x2;day=9;x2=1;sn=sn+2*hn;

/*第n次落地时共经过的米数*/ hn=hn/2;

/*第n次反跳高度*/ while(day>0){ x1=(x2+1)*2;

/*第1天的桃子数是第2天桃子数加1后的2倍.*/

} printf(“total=%dn”,x1);return 0;}

16、输出以下图案:

*

*** ***** ******* ***** *** * #include int main(){ int i,j,k;for(i=0;i<=3;i++)x2=x1;day--;{

for(j=0;j<=2-i;j++)

printf(“ ”);

for(k=0;k<=2*i;k++)

printf(“*”);

printf(“n”);} for(i=0;i<=2;i++){

for(j=0;j<=i;j++)

printf(“ ”);

for(k=0;k<=4-2*i;k++)

printf(“*”);

printf(“n”);} return 0;}

17、甲队A,B,C 3 人,乙队 X,Y,Z 3人。A不和X比;X,Z比,请编程找出3 对赛手的名单。#include

int main(){

C不和 char i,j,k;

/*是a的对手;j是b的对手;k是c的对手*/ for(i='x';i<='z';i++)

} 第六章

1、用筛选法求100之内的素数。#include #include int main(){ int i,j,n,a[101];

for(i=1;i<=100;i++)

a[i]=i;

a[1]=0;

for(i=2;i

if(i!=j)

for(k='x';k<='z';k++)

if(i!=k && j!=k)

if(i!='x' && k!='x' && k!='z')

printf(“A--%cnB--%cnC--%cn”,i,j,k);

return 0;

for(j=i+1;j<=100;j++)

{ if(a[i]!=0 && a[j]!=0)

if(a[j]%a[i]==0)

a[j]=0;

}

printf(“n”);

for(i=2,n=0;i<=100;i++){ if(a[i]!=0)

{ printf(“%5d”,a[i]);

n++;

}

if(n==10)

{ printf(“n”);

n=0;

}

}

printf(“n”);

return 0;}

2、用选择法对10个整数排序。#include int main(){ int i,j,min,temp,a[11];

printf(“enter data:n”);

for(i=1;i<=10;i++)

{ printf(“a[%d]=”,i);

scanf(“%d”,&a[i]);

}

printf(“n”);

printf(“The orginal numbers:n”);

for(i=1;i<=10;i++)

printf(“%5d”,a[i]);

printf(“n”);

for(i=1;i<=9;i++){ min=i;

for(j=i+1;j<=10;j++)

if(a[min]>a[j])min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

printf(“nThe sorted numbers:n”);

for(i=1;i<=10;i++)

printf(“%5d”,a[i]);

printf(“n”);

return 0;}

3、求一个3 x 3 的整型矩阵对角线元素之和。#include int main(){ int a[3][3],sum=0;int i,j;

printf(“enter data:n”);

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf(“%3d”,&a[i][j]);

for(i=0;i<3;i++)

sum=sum+a[i][i];

printf(“sum=%6dn”,sum);

return 0;}

4、有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。#include int main(){ int a[11]={1,4,6,9,13,16,19,28,40,100};

int temp1,temp2,number,end,i,j;

printf(“array a:n”);

for(i=0;i<10;i++)

printf(“%5d”,a[i]);

printf(“n”);

printf(“insert data:”);

scanf(“%d”,&number);

end=a[9];

if(number>end)

a[10]=number;

else

{ for(i=0;i<10;i++){ if(a[i]>number)

{ temp1=a[i];

a[i]=number;

for(j=i+1;j<11;j++)

{ temp2=a[j];

a[j]=temp1;

temp1=temp2;

}

break;

}

}

}

printf(“Now array a:n”);

for(i=0;i<11;i++)

printf(“%5d”,a[i]);

printf(“n”);

return 0;}

5、将一个数组中的值按逆顺序重新存放。例如:8,6,5,4,1。要求改为:1,4,5,6,8.。#include #define N 5 int main(){ int a[N],i,temp;

printf(“enter array a:n”);

for(i=0;i

scanf(“%d”,&a[i]);

printf(“array a:n”);

for(i=0;i

printf(“%4d”,a[i]);

for(i=0;i

素的值互换 { temp=a[i];

a[i]=a[N-i-1];

a[N-i-1]=temp;

} printf(“nNow,array a:n”);for(i=0;i

printf(“%4d”,a[i]);

//循环的作用是将对称的元

printf(“n”);

return 0;}

6、输出以下杨辉三角形(要求输出10行)。1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 „„„„„„„„„„„„ #include #define N 10 int main(){ int i,j,a[N][N];

for(i=0;i

{ a[i][i]=1;

a[i][0]=1;

}

for(i=2;i

for(j=1;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i

printf(“%6d”,a[i][j]);

printf(“n”);

}

printf(“n”);

return 0;}

7、输出“魔方阵”。所谓魔方阵就是每行每列和对角线之和相等。例如: 1 6 3 5 7 4 9 2 要求输出1~n^2的自然数构成的魔方阵。#include int main(){ int a[15][15],i,j,k,p,n;

p=1;

while(p==1){ printf(“enter n(n=1--15):”);

scanf(“%d”,&n);

if((n!=0)&&(n<=15)&&(n%2!=0))

p=0;

}

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

a[i][j]=0;

j=n/2+1;

a[1][j]=1;

for(k=2;k<=n*n;k++){ i=i-1;

j=j+1;

if((i<1)&&(j>n))

{ i=i+2;

j=j-1;

}

else

{ if(i<1)i=n;

if(j>n)j=1;

}

if(a[i][j]==0)

a[i][j]=k;

else

{ i=i+2;

j=j-1;

a[i][j]=k;

}

}

for(i=1;i<=n;i++)

{for(j=1;j<=n;j++)

printf(“%5d”,a[i][j]);

printf(“n”);

}

return 0;}

9、有15个数按由大到小顺序存放在一个数组中,输入一个数,要求折半查找法找出该数是数组中第几个元素值。如果不在数组中则输出“无此数”。#include #define N 15 int main(){

int i,number,top,bott,mid,loca,a[N],flag=1,sign;

char c;

printf(“enter data:n”);

scanf(“%d”,&a[0]);

i=1;

while(i

{ scanf(“%d”,&a[i]);

if(a[i]>=a[i-1])

i++;

else

printf(“enter this data again:n”);

}

printf(“n”);

for(i=0;i

printf(“%5d”,a[i]);

printf(“n”);

while(flag){ printf(“input number to look for:”);

scanf(“%d”,&number);

sign=0;

top=0;

//top是查找区间的起始位置

bott=N-1;

//bott是查找区间的最末位置

if((numbera[N-1]))//要查的数不在查找区间内

loca=-1;

// 表示找不到

while((!sign)&&(top<=bott))

{mid=(bott+top)/2;

if(number==a[mid])

{ loca=mid;

printf(“Has is %dn”,number,loca+1);

sign=1;

}

else if(number

bott=mid-1;

else

found

%d,its

position

top=mid+1;

}

if(!sign||loca==-1)

printf(“cannot find %d.n”,number);;

printf(“continu or not(Y/N)?”);

scanf(“ %c”,&c);

if(c=='N'||c=='n')

flag=0;

}

return 0;

}

10、有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符个数。

#include int main(){ int i,j,upp,low,dig,spa,oth;

char text[3][80];

upp=low=dig=spa=oth=0;

for(i=0;i<3;i++)

{ printf(“please input line %d:n”,i+1);

gets(text[i]);

for(j=0;j<80 && text[i][j]!='';j++)

{ if(text[i][j]>='A'&& text[i][j]<='Z')

upp++;

else if(text[i][j]>='a' && text[i][j]<='z')

low++;

else if(text[i][j]>='0' && text[i][j]<='9')

dig++;

else if(text[i][j]==' ')

spa++;

else

oth++;

}

}

printf(“nupper case: %dn”,upp);

printf(“lower case: %dn”,low);

printf(“digit

: %dn”,dig);

printf(“space

: %dn”,spa);

printf(“other

: %dn”,oth);return 0;}

11、输出以下图案:* * * * *

* * * * * * * * * * * * * * * * * * * * #include int main(){ char a[5]={'*','*','*','*','*'};

int i,j,k;

char space=' ';

for(i=0;i<5;i++)

{ printf(“n”);

printf(“

”);

for(j=1;j<=i;j++)

printf(“%c”,space);

for(k=0;k<5;k++)

printf(“%c”,a[k]);

}

printf(“n”);

return 0;}

12、有一行电文,已按下面规律译成密码:A>Z,B>Y,C>X„„a>z,b>y,c>x„„

编程译回原文并输出密码和原文。#include int main(){ int j,n;

char ch[80],tran[80];

printf(“input cipher code:”);

gets(ch);

printf(“ncipher code :%s”,ch);

j=0;

while(ch[j]!='')

{ if((ch[j]>='A')&&(ch[j]<='Z'))

tran[j]=155-ch[j];

else if((ch[j]>='a')&&(ch[j]<='z'))

tran[j]=219-ch[j];

else

tran[j]=ch[j];

j++;

}

n=j;

printf(“noriginal text:”);

for(j=0;j

putchar(tran[j]);

printf(“n”);

return 0;}

12、有一行电文,已按下面规律译成密码:a>z,b>y,c>x„„

编程译回原文并输出密码和原文。#include int main(){ int j,n;

char ch[80];

printf(“input cipher code:n”);

gets(ch);

printf(“ncipher code:%sn”,ch);

j=0;

while(ch[j]!='')

A>Z,B>Y,C>X„„

{ if((ch[j]>='A')&&(ch[j]<='Z'))

ch[j]=155-ch[j];

else if((ch[j]>='a')&&(ch[j]<='z'))

ch[j]=219-ch[j];

else

ch[j]=ch[j];

j++;

}

n=j;

printf(“original text:”);

for(j=0;j

putchar(ch[j]);

printf(“n”);

return 0;}

15、编写一个程序,将S2中的全部字符复制到字符数组S1中。不用strcpy函数。复制时‘’ 也要复制过去。‘’后面的字符不复制。#include int main(){ char s1[80],s2[40];

int i=0,j=0;

printf(“input string1:”);

scanf(“%s”,s1);

printf(“input string2:”);

scanf(“%s”,s2);

while(s1[i]!='')

i++;

while(s2[j]!='')

s1[i++]=s2[j++];

s1[i]='';

printf(“nThe new string is:%sn”,s1);

return 0;}

15、编写一个程序,将S2中的全部字符复制到字符数组S1中。不用strcpy函数。复制时‘’ 也要复制过去。‘’后面的字符不复制。#include #include int main(){ char s1[80],s2[80];

int i;

printf(“input s2:”);

scanf(“%s”,s2);

for(i=0;i<=strlen(s2);i++)

s1[i]=s2[i];

printf(“s1:%sn”,s1);

return 0;} 第七章

1、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。程序有误

#include int main(){ int hcf(int,int);

int lcd(int,int,int);

int u,v,h,l;

scanf(“%d,%d”,&u,&v);

h=hcf(u,v);

printf(“H.C.F=%dn”,h);

l=lcd(u,v,h);

第二篇:c语言课后习题

C语言程序设计实验报告

学院

数学与信息技术

班级

学号

11130730

姓名

指导教师

实验1 简单程序设计

1.实验目的

(1)熟悉C语言开发环境并掌握在该环境下如何编辑、编译、连接和运行一个C程序。(2)通过运行一个简单的C程序过程,初步了解C程序的基本结构及特点。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)输入三个整数,请把这三个数由小到大输出。试编写多种方法。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)C程序是由一个个函数构成,当一个函数调用另一个函数时,需要对被调函数作声明。(2)用户自定以的函数最好写在一个头文件中,在需要的地方用文件包含命令即可。

(3)system(“cls”)函数的作用是清屏,它的声明在头文件stdlib.h中。如果是在Linux操作系统的gcc环境下,清屏用system(”clear”)。

4. 常见错误

(1)数据声明或语句后面缺少分号。(2)对被调函数没有声明。

(3)没有main函数或者有多个main函数。

5. 程序代码

#include int main(){ float a,b,c,t;printf(“请输入三个数:”);scanf(“%f,%f,%f”,&a,&b,&c);if(a>b){

t=a;a=b;b=t;} if(a>c){t=a;a=c;c=t;} if(b>c){t=b;b=c;c=t;} printf(“%5.2f,%5.2f,%5.2fn”,a,b,c);} 6. 实验结果

7. 心得体会

刚开始学习C语言,有一些小问题,数据声明时,分号会忘记,语句后面缺少分号。而且n斜杠会写反,有时会忘记声明函数。

实验2 顺序结构程序设计

1.实验目的

(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量。(2)掌握数据的输入输出的方法,能正确使用各种格式控制符。(3)掌握算术运算符和赋值运算符。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)输入圆半径和圆柱高,求圆周长、圆面积、圆球表面积、圆球体积和圆柱体积。输入输出要有文字说明,输出结果取小数点后2位。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)用scanf和printf对数据进行输入输出时,不同的数据类型用不同的格式控制符。(2)scanf函数中的格式控制后面应当是变量地址,而不是变量名。

4. 常见错误

(1)变量没有定义,直接使用。

(2)企图利用整数除以整数得到精确结果。例如1/4结果不是0.25而是0,1/4.0结果才是0.25。(3)printf和scanf函数中格式控制符的个数与变量或变量地址的个数不一致。(4)scanf函数的地址表列因该是变量地址,而不是变量名。

(5)scanf函数在格式控制字符串中除了格式说明以外还有其他字符时,在输入数据时(6)没有在对应的位置输入与这些字符相同的字符。

5. 程序代码

#include int main(){ float h,r,l,s,sq,vq,vz;float p=3.141526;printf(“请输入圆半径r,圆柱高h”);scanf(“%f,%f”,&r,&h);l=2*p*r;//圆周长

s=r*r*p;//圆面积

sq=4*p*r*r;//圆球表面积

vq=4.0/3.0*p*r*r*r;//圆球体积

vz=p*r*r*h;//圆柱体积

printf(“圆周长为: l=%6.2fn”,l);printf(“圆面积为: s=%6.2fn”,s);printf(“圆球表面积为: sq=%6.2fn”,sq);printf(“圆球体积为: vq=%6.2fn”,vq);printf(“圆柱体积为: vz=%6.2fn”,vz);return 0;} 6. 实验结果

7. 心得体会

这边是基础的用scanf和printf对数据进行输入输出,不同的数据类型用不同的格式控制符。有点小睇混淆。才刚开始,还是觉得挺简单的。

实验3 选择结构程序设计

1.实验目的

(1)了解C语言表示逻辑变量的方法(2)学会正确使用关系运算符和逻辑运算符。(3)熟练掌握if语句和switch语句。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)把百分制成绩转换成5级记分制,要求分别用if else 和switch语句。

90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下:E

(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)注意关系运算符==和复制运算符=的区别。(2)if和else的匹配原则。

(3)在switch语句中正确使用break。

4. 常见错误

(1)赋值运算符=和关系运算符等号=搞混。(2)在if语句为复合语句时,忘记写{}。(3)if语句出现嵌套时,没正确配对。(4)switch语句中,没正确使用break。

5. 程序代码

#include int main(){ float score;char grade;printf(“请输入学生成绩:”);scanf(“%f”,&score);while(score>100 || score<0){

printf(“n输入有误,请重新输入!”);

scanf(“%f”,&score);} switch((int)(score/10)){ case 10: case 9:grade='A';break;case 8:grade='B';break;case 7:grade='C';break;case 6:grade='D';break;case 5: case 4:

} case 3: case 2: case 1: case 0:grade='E';} printf(“成绩是%5.1f,相应的等级是%cn”,score,grade);return 0;6. 实验结果

7. 心得体会

赋值运算符=和关系运算符等号=搞混。在if语句为复合语句时,忘记写{}。if语句出现嵌套时,没正确配对。

实验4 循环结构程序设计

1.实验目的

(1)熟练掌握循环语句中的for语句、while语句和do while语句的使用方法,以及这三种循环语句之间的转换方法。

(2)掌握编写循环结构程序的方法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)通过键盘输入任意两个正整数,求其最大公约数和最小公倍数。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)循环结构程序的设计方法。

(2)while和do while循环之间的转换方法。

(3)getch函数从键盘接收一个字符,该函数被调用后程序会暂停,等待按任意键,再继续执行后续的语句,以便我们观察中间结果。在VC++下需要包含conio.h头文件,在Linux下需要包含头文件curses.h。由于在Linux下getch函数还需要与其它函数配合使用才能达到上面所说的功能并且在编译时还要指定链接所使用的库文件,所以在Linux环境建议使用两次调用getchar函数来替换getch函数。

4. 常见错误

(1)循环体为复合语句时,没用{}括起来。

(2)在while()和for()后面添加分号,使得循环体为空语句。(3)for括号里的分号和逗号用错。

(4)循环嵌套时,内循环的初始条件和循环体没正确设计好。

5. 程序代码

#include int main(){ int r,m,n,p;scanf(“%d,%d”,&m,&n);p=n*m;do{ r=m%n;m=n;n=r;p=p/m;}while(r!=0);printf(“最大公约数:%dn”,m);

printf(“最小公倍数:%dn”,p);return 0;} 6. 实验结果

7. 心得体会

循环体为复合语句时,没用{}括起来。在while()和for()后面添加分号,使得循环体为空语句。for括号里的分号和逗号用错。循环嵌套时,内循环的初始条件和循环体没正确设计好。

实验5 数组的应用

1.实验目的

(1)掌握一维数组和二维数组的定义和引用。(2)掌握字符数组和字符串函数的使用。(3)掌握与数组有关的算法(特别是排序算法)。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)用选择法对10个整数排序。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)在循环中,数组元素的引用。

(2)起泡排序法、选择排序法和插入排序法。

4. 常见错误

(1)数组定义时,没规定数组长度或者长度为一变量。(2)循环中数组元素的下标没正确表示。

(3)起泡排序、选择排序和插入排序算法没理解透。

(4)起泡排序、选择排序和插入排序中,循环的初始条件和终止条件出现错误。(5)字符串的复制和比较直接使用赋值运算符和关系运算符。

5. 程序代码

#include int main(){ int i,j,t,a[10];printf(“请输入10个整数:n”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(i=0;i<9;i++)

for(j=i+1;j<10;j++)

if(a[i]>a[j])

{

t=a[i];

a[i]=a[j];

a[j]=t;

} printf(“选择排列:n”);for(i=0;i<10;i++)

printf(“%5d”,a[i]);printf(“n”);return 0;} 6. 实验结果

7. 心得体会

数组定义时,没规定数组长度或者长度为一变量。循环中数组元素的下标没正确表示。起泡排序、选择排序和插入排序算法没理解透。起泡排序、选择排序和插入排序中,循环的初始条件和终止条件出现错误。字符串的复制和比较直接使用赋值运算符和关系运算符。

实验6 函数的应用

1.实验目的

(1)掌握函数的定义和调用方法。

(1)掌握函数实参与形参的对应关系,以及“值传递”的方式。(1)掌握函数的嵌套调用和递归调用的方法。

(1)掌握全局变量和局部变量,动态变量以及静态变量的概念和使用方法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)写一个函数,用“起泡法”对输入的10个字符按由小到大的顺序排列,主函数通过调用它实现题目要求。

(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)函数的定义和调用方法。

(2)函数的实参数为数组时,形参的形式以及实参和形参之间的数据传递方式。(3)函数的递归调用。

4. 常见错误

(1)函数没定义,就被调用。(2)函数定义了,又没被调用。(3)定义函数时,形参没规定类型。(4)函数调用时,实参前加类型。(5)被调函数没有声明

(6)嵌套调用和递归调用没理解透,使用错误。(7)全局变量和局部变量有效范围没能正确区分。

5. 程序代码

#include #include #define N 10 char str[N];int main(){ void sort(char[]);int i,flag;for(flag=1;flag==1;){ printf(“input string:n”);scanf(“%s”,&str);if(strlen(str)>N)printf(“string is too long,input again!”);else flag=0;} sort(str);printf(“string sorted:n”);for(i=0;istr[i+1]){ t=str[i];str[i]=str[i+1];str[i+1]=t;} } 6. 实验结果

7. 心得体会

有时候函数没定义就使用,有时候会定义函数,然后没有使用,定义函数时,形参没规定类型。函数调用时,实参前加类型。会把形参与实参搞混

实验7 指针的应用

1.实验目的

(1)熟练掌握指针的定义、赋值和使用。

(2)掌握用指针引用数组的元素、熟悉指向数组的指针的使用。(3)熟练掌握字符数组与字符串的使用,掌握指针数组。(4)掌握指针函数与函数指针的用法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)有一个班4个学生,5门课程。①求第1门课程的平均分;②找出两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;③找出平均成绩在90以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)列指针变量的定义、赋值以及利用它引用数组元素。(2)行指针变量的定义、赋值以及它在二维数组中的使用。(3)函数指针变量的定义、赋值和利用它进行函数调用。

4. 常见错误(1)混淆变量值和变量地址。

(2)指针变量没有初始化,就利用该指针变量引用变量。

(3)利用指针变量引用一维数组元素和二维数组元素或地址时,引用的方法不对。(4)函数指针概念清楚。(5)混淆行指针变量和指针数组。

5. 程序代码

#include int main(){ void avsco(float *,float *);void avcour1(char(*)[10],float *);void fali2(char course[5][10],int num[],float *pscore,float aver[4]);void good(char course[5][10],int num[4],float *pscore,float aver[4]);int i,j,*pnum,num[4];float score[4][5],aver[4],*pscore,*paver;char course[5][10],(*pcourse)[10];printf(“input course:n”);pcourse=course;for(i=0;i<5;i++)scanf(“%s”,course[i]);printf(“input NO.and scores:n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%3s”,course[i]);printf(“n”);pscore=&score[0][0];pnum=&num[0];for(i=0;i<4;i++){

scanf(“%d”,pnum+i);

for(j=0;j<5;j++)

scanf(“%f”,pscore+5*i+j);} paver=&aver[0];printf(“nn”);avsco(pscore,paver);avcour1(pcourse,pscore);printf(“nn”);fali2(pcourse,pnum,pscore,paver);printf(“nn”);good(pcourse,pnum,pscore,paver);return 0;} void avsco(float *pscore,float *paver){ int i,j;float sum,average;for(i=0;i<4;i++){

sum=0.0;

for(j=0;j<5;j++)

sum=sum+(*(pscore+5*i+j));

average=sum/5;

*(paver+i)=average;} } void avcour1(char(*pcourse)[10],float *pscore){ int i;float sum,average1;sum=0.0;for(i=0;i<4;i++)sum=sum+(*(pscore+5*i));average1=sum/4;printf(“course1:%s average score:%7.2fn”,*pcourse,average1);}

void fali2(char course[5][10],int num[],float *pscore,float aver[4]){ int i,j,k,labe1;printf(“ ==========Student who is fail in two courses======= n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%11s”,course[i]);printf(“averagen”);for(i=0;i<4;i++){

labe1=0;for(j=0;j<5;j++)if(*(pscore+5*i+j)<60.0)labe1++;if(labe1>=2)

{

printf(“%d”,num[i]);for(k=0;k<5;k++)printf(“%11.2f”,*(pscore+5*i+k));printf(“%11.2fn”,aver[i]);

} } } void good(char course[5][10],int num[4],float *pscore,float aver[4]){ int i,j,k,n;printf(“ ======Students whose score is good======n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%11s”,course[i]);printf(“ averagen”);for(i=0;i<4;i++){

n=0;

for(j=0;j<5;j++)

if(*(pscore+5*i+j)>85.0)n++;

if((n==5)||(aver[i]>=90))

{

printf(“%d”,num[i]);

for(k=0;k<5;k++)

printf(“%11.2f”,*(pscore+5*i+k));

printf(“%11.2fn”,aver[i]);

} } } 6. 实验结果

7. 心得体会

指针这章有点小混乱 混淆变量值和变量地址。会忘记给指针变量没有初始化,就利用该指针变量引用变量。数组元素或地址有些模糊

实验8 结构体的应用

1.实验目的(1)掌握结构体变量、结构体数组以及结构体指针的定义和使用。(2)掌握动态存储分配函数的用法和单向链表的创建、输出等操作。(3)掌握用typedef定义类型。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)编写建立链表的函数creat,输出链表的函数print,删除链表中节点的函数del,插入节点的函数insert,再编写一个主函数,先后调用这些函数,在主函数中指定需要删除和插入的节点的数据。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)结构成员引用的三种方法。(2)链表节点数据类型的定义。

(3)malloc函数用于动态分配存储空间,它的返回值类型是void *,在实际使用中一般需要强类型转换成多需要的类型。该函数的声明在stdlib.h头文件中。(4)链表操作中,节点指针域的使用。

4. 常见错误

(1)引用结构体成员时,成员运算符.和指向运算符->的使用混淆。(2)链表操作过程中不能正确利用指针域进行操作。(3)不能正确使用typedef声明新类型名。

5. 程序代码

#include #include #define LEN sizeof(struct Student)struct Student { long num;float score;struct Student *next;};int n;int main()//主函数 { struct Student *creat();struct Student *del(struct Student *,long);struct Student *insert(struct Student *,struct Student *);void print(struct Student *);struct Student *head,stu;long del_num;printf(“input records:n”);head=creat();print(head);printf(“input the deleted number:”);scanf(“%ld”,&del_num);head=del(head,del_num);print(head);printf(“input the inserted record:”);scanf(“%ld,%f”,&stu.num,&stu.score);head=insert(head,&stu);print(head);return 0;} struct Student *creat()//创建链表 { struct Student *head;struct Student *p1,*p2;n=0;p1=p2=(struct Student *)malloc(LEN);scanf(“%ld,%f”,&p1->num,&p1->score);head=NULL;while(p1->num!=0){

n=n+1;

if(n==1)head=p1;

else p2->next=p1;

p2=p1;

p1=(struct Student *)malloc(LEN);

scanf(“%ld,%f”,&p1->num,&p1->score);} p2->next=NULL;return(head);} struct Student *del(struct Student *head,long num)//{ struct Student *p1,*p2;if(head==NULL){

printf(“nlist null!n”);

return(head);} p1=head;while(num!=p1->num && p1->next!=NULL){

删除

p2=p1;

p1=p1->next;} if(num==p1->num){

if(p1==head)head=p1->next;

else p2->next=p1->next;

printf(“delete:%ldn”,num);

n=n-1;} else printf(“%ld not been found!n”,num);return(head);} struct Student * insert(struct Student *head,struct Student *stud)//{ struct Student *p0,*p1,*p2;p1=head;p0=stud;if(head==NULL){

head=p0;

p0->next=NULL;} else {

while((p0->num>p1->num)&&(p1->next!=NULL))

{

p2=p1;

p1=p1->next;

}

if(p0->num<=p1->num)

{

if(head==p1)head=p0;

else p2->next=p0;

p0->next=p1;}

else

{p1->next=p0;

p0->next=NULL;

}} n=n+1;return(head);} void print(struct Student *head)//输出链表 { struct Student *p;printf(“nNow,These %d records are:n”,n);p=head;

插入

if(head!=NULL)do {

printf(“%ld %5.1fn”,p->num,p->score);

p=p->next;}while(p!=NULL);} 6. 实验结果

7. 心得体会

结构体可以允许我们自己建立不同类型数据,组成组合型的数据结构。这样可以处理一些复杂的问题。但是,在引用结构体成员时,成员运算符.和指向运算符->的使用时会有点混淆。而且有时会不能正确利用指针域进行操作。

实验9 文件的应用

1.实验目的

(1)掌握文件、缓冲文件系统以及文件指针等概念。

(2)学会使用文件打开、关闭、读、写等函数对文件进行简单的操作。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)编写函数void fun(int n,int *t),其功能是计算n!,通过指针t返回。编写main函数,通过键盘输入一个不大于100的整数,调用fun函数,将指针t返回的值写入文件myf2.out中。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)access函数可以用来判断某一文件是否存在。调用该函数时,在VC++下需包含头文件io.h,在Linux下需包含unistd.h头文件。(2)fopen、fclose函数的使用。(3)fread和fwrite函数的使用。

4. 常见错误

(1)文件打开方式使用错误。(2)文件使用完毕没有关闭。

(3)不能正确使用文件读写函数对文件进行操作。

5. 程序代码

#include #include void fun(int n, int *t){

int result=1;int i;for(i=1;i<=n;i++){ result*=i;} *t=result;}

int main(){ int num;int write;FILE *pFile;scanf(“%d”,&num);while(num>=100){

printf(“输入的数据大于100了n”);

scanf(“%d”,&num);} fun(num,&write);

} if((pFile=fopen(“myf2.out”,“w”))==NULL){

printf(“打开文件失败!n”);

} fprintf(pFile,“%d”,write);fclose(pFile);printf(“%d”,write);return 0;6. 实验结果

7. 心得体会

文件打开方式使用错误。文件使用完毕没有关闭。不能正确使用文件读写函数对文件进行操作。而且对于的各种操作容易混淆。不太清楚什么时候怎样使用。

第三篇:C语言课后习题

习题

第三章

#include #include int main(){

int d,p;

double r,a,m;

scanf(“%d %d %lf”,&d,&p,&r);

a=(p/(p-d*r));

m=log(a)/log(1+r);

if(p>0&&d>0)

{

if(d<=m*p)

printf(“%.1f”,m);

else

printf(“God”);

}

else

printf(“0.0”);

return 0;}

勾股数

#include int main(){

int a,b,c,n;

scanf(“%d”,&n);

for(a=1;a<=n;a++)

{

for(b=1;b<=n;b++)

{

for(c=1;c<=n;c++)

{

if(c*c==a*a+b*b)

{

if(a<=b)

{

printf(“%d %d %dn”,a,b,c);

}

}

}

}

}

return 0;}

第四章

计算分段函数值 #include int main(){

float x,y;

scanf(“%f”,&x);

if(x<1)y=x;

else if(x>=1&&x<10)y=2*x-1;

else if(x>=10)y=3*x-11;

printf(“%.2f”,y);

return 0;}

找出三个数中最大的数 #include int main(){

int a,b,c,max;

scanf(“%d%d%d”,&a,&b,&c);

max=a>b?a:b;

if(c>max)

max=c;

printf(“%d”,max);

return 0;}

10844成绩等级评分 #include int main(){

int x;

scanf(“%d”,&x);

if(x>=0&&x<=100)

{

switch(x/10)

{

case 10:

case 9: printf(“A”);break;

case 8 : printf(“B”);break;

case 7 : printf(“C”);break;

case 6 : printf(“D”);break;

default:

printf(“E”);break;

}

}

else

printf(“error”);

return 0;}

前续和后续字符 #include int main(){

char x;

x=getchar();switch(x){ case'0':printf(“first”);printf(“ %c”,x+1);break;case'9':printf(“%c ”,x-1);printf(“last”);break;case'1': case'2': case'3': case'4': case'5': case'6': case'7': case'8': printf(“%c ”,x-1);printf(“%c”,x+1);break;default: printf(“error”);break;

} return 0;}

20秒后的时间 #include #include int main(){

int h,m,s;

scanf(“%d:%d:%d”, &h,&m,&s);

s=s+20;

if(s>59)

{

s=s%60;

m++;

if(m>59)

{

m=m%60;

h++;

if(h>23)

h=0;

}

}

printf(“%02d:%02d:%02dn”, h, m, s);

return 0;}

分期还款

#include #include int main(){

int d,p;

double r,a,m;

scanf(“%d %d %lf”,&d,&p,&r);

a=(p/(p-d*r));

m=log(a)/log(1+r);

if(p>0&&d>0)

{

if(d<=m*p)

printf(“%.1f”,m);

else

printf(“God”);

}

else

printf(“0.0”);

return 0;}

第五章

字母分类统计 #include #include int main(){

char ch;

int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;

while((ch=getchar())!='n')

{

if(ch<=127&&ch>=123)

a++;

else if(ch>=97&&ch<=122)

b++;

else if(ch<=96&&ch>=91)

c++;

else if(ch<=90&&ch>=65)

d++;

else if(ch>=58&&ch<=64)

e++;

else if(ch>=48&&ch<=57)

f++;

else if(ch>=33&&ch<=47)

g++;

else if(ch==32)

h++;

else

i++;

}

printf(“%d %d %d %d”,d+b,f,h,a+c+e+g+i);}

水仙花数

#include int main(){

int n,a,b,c;

for(n=100;n<1000;n++)

{

a=n/100;

b=(n%100)/10;

c=n%10;

if(n==a*a*a+b*b*b+c*c*c)

{

printf(“%dn”,n);

}

}

return 0;}

计算数列和

#include int main(){

int a=1,n,i,sum=0;

scanf(“%d”,&n);

for(i=1;i<=n;i++)

{

sum=sum+a;

a=a+2;

}

printf(“%d”,sum);

return 0;}

自由落体

#include int main(){

int i,n;

double h=100.0,s=0.0,c=100.0;

scanf(“%d”,&n);

{

s=s+c;

h=h/2;

c=2*h;

}

printf(“%.3lf”,s);

printf(“%.3lf”,h);

return 0;}

迭代法求平方根 #include #include int main(){

float x1,x2,a;

x2=1;

scanf(“%f”,&a);

x1=a/x2;

while(fabs(x1-x2)>=1e-5)

{

x1=x2;

x2=0.5*(x1+a/x1);

}

printf(“%.4fn”,x2);

return 0;}

打印三角形

#include #include #include int main(){

int n,k,i,j;

scanf(“%d”,&n);

for(i=0;i<2*n-1;i++)

{

k=abs(n-1-i);

for(j=0;j

{

printf(“");

}

for(j=0;j

{

printf(”*“);

}

printf(”n“);

}

return 0;}

勾股数

#include int main(){

int a,b,c,n;

scanf(”%d“,&n);

for(a=1;a<=n;a++)

{

for(b=1;b<=n;b++)

{

for(c=1;c<=n;c++)

{

if(c*c==a*a+b*b)

{

if(a<=b)

{

printf(”%d %d %dn“,a,b,c);

}

}

}

}

}

return 0;}

第六章

18052插入数据 int x,i,t;

scanf(”%d“,&x);

a[15]=x;

for(i=15;i>0;i--){

if(a[i]

{

t=a[i];

a[i]=a[i-1];

a[i-1]=t;

} }

大于平均分

#include int main(){

int a[10];

int i,sum=0,average,count;

for(i=0;i<10;i++)

{

scanf(”%d“,&a[i]);

}

for(i=0;i<10;i++)

{

sum=sum+a[i];

}

average=sum/10;

count=0;

for(i=0;i<10;i++)

{

if(a[i]>average)

count++;

}

printf(”%d“,count);

return 0;}

输出不同的数据 #include int main(){

int a[20];

int i,t,p=0;

for(i=0;i<10;i++)

{

scanf(”%d“,&a[i]);

}

for(i=0;i<10;i++)

{

for(t=0;t

if(a[t]==a[i])break;

if(t==i)printf(”%dn“,a[i]);

} }

主对角线上的元素之和 #include int main(){

int a[3][4],i,j,sum=0;

for(i=0;i<3;++i)

{

for(j=0;j<4;++j)

{

scanf(”%d“,&a[i][j]);

}

}

for(i=0;i<3;++i)

{

sum+=a[i][i];

}

printf(”%dn“,sum);

return 0;}

1051 鞍点

#include int main(){ int i,j,k,t=0,flag=0,m=0,n=0,a[3][4],max,min;for(i=0;i<3;i++){

for(j=0;j<4;j++)

{

scanf(”%d“,&a[i][j]);

} }

for(i=0;i<3;i++){

max=a[i][0];

for(j=0;j<4;j++)

{

if(max

{

max=a[i][j];m=i;n=j;

}

}

for(k=0;k<3;k++)

{

min=a[m][n];

if(min>a[k][n])

flag=1;

}

if(flag==0)

{

t=1;

printf(”%dn“,a[m][n]);}

flag=0;}

if(t==0)

printf(”NO“);

return 0;}

ASCII码值之和的差 #include #include int main(){

char s1[80];

char s2[80];

int i,sum1=0,sum2=0;

gets(s1);

gets(s2);

for(i=0;i

{

sum1+=s1[i];

}

for(i=0;i

{

sum2+=s2[i];

}

printf(”%d“,sum1-sum2);

return 0;}

第七章

所有数字之和 #include int sum(int n){

if(n<10)

return n;

int res=0;

res=(n%10)+sum(n/10);

return res;} main(){

int n;

scanf(”%d“,&n);

printf(”%d“,sum(n));}

元音字母

#include #include void yuan(char*s,char*s2){

int i,k=0;

char c;

for(i=0;*(s+i)!='';i++)

{

c=*(s+i);

switch(c)

{

case'a':

case'e':

case'i':

case'o':

case'u':

case'A':

case'E':

case'I':

case'O':

case'U':*(s2+k)=c;k++;break;

default:break;

}

}

*(s2+k)='';} int main(){

char str[81],str2[81];

gets(str);

yuan(str,str2);

printf(”%s“,str2);}

字符统计

#include #include #include int nL=0,nN=0;int statistics(char*s){

int nS=0,a;

while(*s!='')

{

a=*s;

if(a==' ')

nS++;

else

{

if(a>='1'&&a<='9')

nN++;

else if((a>='a'&&a<='z')||a>='A'&&a<='Z')

nL++;

}

s++;

}

return nS;} int main(){

char s[81];

int nS;

gets(s);

nS=statistics(s);

printf(”%d%d%dn“,nL,nN,nS);

return 0;}

选择排序

#include int sort(int a[],int n){

int i,j,k,tmp;

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[j]

tmp=a[k];a[k]=a[j];a[i]=tmp;

} } int main(){

int a[10];

int i;

for(i=0;i<10;i++)scanf(”%d“,&a[i]);

sort(a,10);

for(i=0;i<10;i++)printf(”%dn“,a[i]);

return 0;}

X的N次方

#include int F(int x,int n){

if(n==0)return 1;

else return x*F(x,(n-1));} int main(){

int x,n;

scanf(”%d%d“,&x,&n);

printf(”%d“,F(x,n));

return 0;}

行列互换

#include void swap(int*a,int*b){

int temp;

temp=*a;*a=*b;*b=temp;} void col(int a[][4],int i,int j){

int k;

for(k=0;k<4;k++)

swap((*(a+k)+i),(*(a+k)+j));} void row(int a[][4],int i,int j){

int k;

for(k=0;k<4;k++)

swap((*(a+i)+k),(*(a+j)+k));} int main(){

int a[4][4];

int i,j;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

scanf(”%d“,&a[i][j]);

col(a,0,2);

row(a,0,2);

col(a,1,3);

row(a,1,3);

col(a,0,3);

row(a,0,3);

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

printf(”%d“,a[i][j]);

printf(”n“);

}

return 0;}

学生信息统计 #include void average(double a[][5],int n){

int i,j;

for(i=0;i

{

double sum=0,av;

for(j=0;j<5;j++)

sum=sum+a[i][j];

av=sum/5.0;

printf(”%.2f “,av);

}

printf(”n“);} void average2(double a[][5],int n){

int i,j;

for(j=0;j<5;j++)

{

double sum=0,av;

for(i=0;i

sum=sum+a[i][j];

av=sum/n;

printf(”%.2f “,av);

}

printf(”n“);} void top(double a[][5],int n){

int i,j;

double max;

for(j=0;j<5;j++)

{

max=a[0][j];

for(i=0;i

{

if(a[i][j]>max)max=a[i][j];

}

printf(”%.2f “,max);

} } int main(){

double a[10][5];

int i,j;

for(i=0;i<10;i++)

for(j=0;j<5;j++)

scanf(”%lf",&a[i][j]);

average(a,10);

average(a,10);

top(a,10);

return 0;}

第四篇:C语言程序设计教程课后习题答案

C语言程序设计教程课后习题答案

第一章 C语言程序设计概述 -习题答案 算法的描述有哪些基本方法?

1、自然语言

2、专用工具C语言程序的基本结构是怎样的?举一个例子说明。

1、C语言程序由函数构成;

2、“/*”与“*/”之间的内容构成C语言程序的注释部分;

3、用预处理命令#include、#define可以包含有关文件或预定义信息;

4、大小写字母在C语言中是有区别的;

5、除main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。C语言有什么特点?

1、具有结构语言的特点,程序之间很容易实现段的共享;

2、主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译代码,以实现程序的模块化;

3、运算符丰富,包含的范围很广;

4、数据类型丰富;

5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能;

6、限制不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚;

7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。★指出合法与不合法的标识符命名。

AB12--√ leed_3--a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× C.D--×说明下列Turbo C热键的功能。

F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序)Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。

①main()

{printf(“********************n”);printf(“ welcome you n”);printf(“ very good n);printf(”********************n“);} ②main()

{ int a,b,c,t;printf(”please input three numbers;“);scanf(”%d,%d,%d“,&a,&b,&c);/*教材S是错误的*/ t=max(max(a,b),c);printf(”max number is:%dn“,t);} int max(int x, int y){ int z;if(x>y)z=x;else z=y;return(z);} 答

运行结果:

******************** welcome you very good ******************** 运行结果:

please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/ max number is:4 7 一个C程序是由若干个函数构成的,其中有且只能有一个___函数。

main()8 在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。

1、User screen

2、Alt+F5 9 ★C语言对标识符与关键字有些什么规定?

1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。

2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。C源程序输入后是如何进行保存的?

是以C为扩展名保存的纯文本文件。

第二章 C语言程序的基本数据类型与表达式 -习题答案 ★指出下列常数中哪些是符合C语法规定的。

''--× '101'--× ”“--× e3--× 019--√ 0x1e--√ ”abn“--√ 1.e5--×(2+3)e(4-2)--× 5.2e2.5--×请找出下列程序中的错误,改正后写出程序运行结果。

①void main(){int x,y=z=5,aver;x=7 AVER=(x+y+z)/3 printf(”AVER=%dn“,aver);} ②void main()

{ char c1='a';c2='b';c3='c';int a=3.5,b='A' printf(”a=%db='“endn”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 答

main(){int x,y=5,z=5,aver;x=7;aver=(x+y+z)/3;printf(“AVER=%dn”,aver);}

运行结果:AVER=5 ②main()

{ char c1='a', c2='b', c3='c';int a=3,b='A';printf(“a=%d,b='%c'”end“n”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);}

运行结果:a=3,b='A'“end”

aabcc abc 3 写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。int 99

-1 char 'h'

unsigned int

float

55.78

long int

答 int 99 104 66 55 68-1 char 'c' 'h' 'B' '7' 'D'

unsigned int 99 104 66 55 68 65535

float 99.00 104.00 66.00 55.78 68.00-1.00

long int 99 104 66 55 68-1

★写出程序运行结果。

①void main(){int i,j;i=8,j=10;printf(“%d,%d,%d,%dn”,i,j,++i,j++);} ②main()

{ int a=1,b=2,c=30;;printf(“%d,%d,%d,%dn”,a=b=c,a=b==c,a==(b=c),a==(b==c));} 注意:a=b=c,a=b==c之间应为逗号,教材有误 答

运行结果: 9,11,9,10 运行结果: 30,1,0,0

③void main()

{int a=10,b=20,c=30,d;d=++a<=10||b-->=20||c++;printf(“%d,%d,%d,%dn”,a,b,c,d);}

运行结果: 11,19,30,1

★写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5)。⑴a%=(b%=3)

⑵n++,a+=a-=a*=a ⑶(float)(a+c)/2+(int)x%(int)y ⑷a*=b+c ⑸++a-c+b++ ⑹++a-c+++b ⑺a

⑼a+b,18+(b=4)*3,(a/b,a%b)

⑽x+a%3*(int)(x+y)%2/4+sizeof(int)⑾a

⑴0 ⑵0 ⑶9.500000 ⑷90 ⑸10 ⑹10 ⑺'A' ⑻2 ⑼4.5 ⑽1 ⑾0 ⑿20 ⒀0 下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)?

①m=(a=4,4*5)与m=a=4,4*5 ②(float)(a/b)与(float)a/b ③(int)a+b与(int)(a+b)④m%=2+a*3与m=m%2+a*3 ⑤m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b 答

①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同;

②前面的表达式中a/b结果为一整数,结果已经取整,精度可能受到影响,之后强制float后才为浮点型,后面的是先将a转换为float后再与b相除,其值保证了精度,所以不同。

③因为a、b均为整数,其前后两个表达式的计算结果是一致的。

④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。⑤前后表达式的计算结果应该是一致的:a=2, b=3, m=6 7 条件表达式x>0?x:-x的功能是什么?

如果x的值是一正数,则表达式的值为x值;如果x的值是一非正数,则表达式的值为-x。其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。用一个条件表达式描述从a、b、c中找出最大都赋给max.答

max=a>(b>c?b:c)?a:(b>c?b:c);9 ★若x为int型变量,则执行以下语句后x的值为()。x=6;x+=x-=x*x;A.36 B.-60 C.60 D.-24 答 B.10 ★若有以下类型说明语句: char w;int x;float y;double z;则表达式w*x+z-y的结果为()类型。A.float B.char C.int D.double 答 D.第三章 顺序结构程序设计 -习题答案 变量k为float类型,调用函数scanf(“%d”,&k),不能使变量k得到正确数值的原因是___。

格式修饰符与变量类型不一致。因为%d输入的数据类型应该为十进制整数,而&k为占用4个字节的float类型变量的地址。★a=1234,b=12,c=34,则执行“printf(“|%3d%3d%-3d|n”,a,b,c);”后的输出是___。

|1234 1234 |

分析如下:

①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受限制。

②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。★设有“int a=255,b=8;”,则“printf(“%x,%on”,a,b);”输出是___。答 ff,10 ①如果“printf(“%X,%on”,a,b);”则输出为FF,10。说明在输出十六进制字母时,其大小写受格式修饰符的限制,如果是“%x”则输出小写,如果是“%X”则输出大写。

②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改“printf(“%#x,%on”,a,b);”为或“printf(“%#X,%on”,a,b);”。本条解释不必须掌握。★以下程序输出的结果是___。main(){ int a1=1,a2=0,a3=2;printf(“%d,%d,%dn”,a1,a1+a2+a3,a3-a1);} 答 1,3,1 5 printf函数中用到格式符%5s,其中5表示输出字符占用5列。如果字符串长度大于5,则按___输出;如果字符串长度小于5,则按___输出。

①实际 ②左端补空格 6 ★已定义变量如下: int a1,a2;char c1,c2;若要求输入a1、a2、c1和c2的值,正确的输入函数调用语句是___。

scanf(“%d,%d,%c,%c”,&a1,&a2,&c1,&c2);7 输入两个整型变量a、b的值,输出下列算式以及运算结果___。a+b、a-b、a*b、a/b、(float)a/b、a%b 每个算式占一行。如a=10,b=5,a+b输出为:10+5=15 答

设int a=10,b=5;以下为输出语句及结果: ①printf(“%d+%d=%dn”,a,b,a+b);10+5=15 ②printf(“%d-%d=%dn”,a,b,a-b);10-5=5 ③printf(“%d*%d=%dn”,a,b,a*b);10*5=50 ④printf(“%d/%d=%dn”,a,b,a/b);10/5=2 ⑤printf(“%(float)d/%d=%fn”,a,b,(float)a/b);(float)10/5=2.000000 ⑥printf(“%d%%%d=%dn”,a,b,a%b);10%5=0 8 ★输入一个非负数,计算以这个数为半径的圆周长和面积。答

#define PI 3.1415926 main(){ float r,l,area;printf(“Input a positive:”);scanf(“%f”,&r);l=2*PI*r;area=PI*r*r;printf(“l=%ftarea=%fn”,l,area);} 9 输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。

main(){ int x,y;printf(“Input a number(100-999):”);scanf(“%d”,&x);y=100*(x%10)+10*(x/10%10)+x/100;/*注意分析此处算法*/

第五篇:影视动画试听语言课本课后习题答案整理

一、名词解释

1、视听语言: 就是利用视觉和听觉的双重刺激向受众传播某种信息的一种感性语言,是电影的艺术手段,是利用镜头与镜头之间的组合来表达特殊意义,讲述故事,表达内容与情感的方法,是一种电影创作者与观众沟通的符号系统。

2、构图:主要是指画面的安排,即把画面内各个组成部分构成一个统一的画面整体。

3、剪辑: 剪辑师要依照剧情发展和结构的要求,将各个镜头的画面和声音,经过选择.,整理和修剪,然后按照剪辑规则和一定的叙事规则,以一定的顺序组接起来,成为一部结构完整,内容连贯,含义明确并且具有艺术感染力的影片。

4、景别 :在影视画面中,一般是指被摄对象在镜头中所呈现出的视野范围,他决定观众将看到多少主题内容(面积大小0

5、中景:是指摄取膝盖以上或事物的大部分以及场景局部的画面。

6、特写:是表现被摄对象某一局部(如人物肩部以上或头部以及某一被摄对象的细节)的画面,日惊呆的眼神·清晰的署名等,是对影片更细致的展现,揭示出待定的含义。

7、几何角度 :几何角度与摄相机镜头的位置有直接的关系,包括拍摄高度和拍摄方向两个内容。

8、心理角度:心理角度与镜头带给观众的感觉有关,可分为客观视角拍摄角度和主观视角拍摄角度两个方面。

9、镜头运动 :从广义上说来说,镜头运动应该分为固定镜头和运动镜头两种。

10、运动镜头 :是相对比较复杂的一种镜头运动方式,是指摄像机持续运动拍摄的画面,即在一个画面中通过移动摄像机机位,或者改变镜头光轴,或者变化镜头焦距而进行的拍摄。

12、焦距:一束平行光通过镜头时,在光轴上汇聚一点,称为焦点。从焦点到镜头后主平面的距离称为焦距。

13、景深:景深是指摄像机完成对焦后,被摄对象前后产生较为清晰影像的最近点至最远点的距离

14、短焦距镜头:短焦镜头又称为广角镜头,这类镜头的特点是:焦距短,视角大,景深,大,具有表现开阔空间和宏大场面的有力条件,拍摄画面具有很强的透视感、15、长焦距镜头:长焦镜头又称为望远镜头或窄角镜头,特点是:视角窄,拍摄范围小,影像放大率大,景深小,拍摄画面空间深度明显减弱,一般不易较好的再现被摄对象与周围环境的关系

16、构图:艺术家为了表现作品的思想内容和美感效果,在一定的二维空间内,安排和处理人与物的关系和位置,把个别或局部的形象组成艺术的整体。

17、均衡:画面的均衡是人们对画面表现主题的一种形式感觉,是产生稳定感的因素。

18、动态构图:动态构图是影视作品所特有的一种构图类别,根据画面中拍摄对象和摄像机的运动情况可以把动态构图分为三种,被摄对象运动,摄像机运动,被摄对象和摄像机同时运动而形成的总和运动

19、光位:光位即光源的位置,也是动画片中虚拟灯光的位置所在。

20、光型:光线的造型,按照光的造型效果,可以分为主光,辅助光,背景光,轮廓光,修饰光,眼神光等。

21、侧光:测光是指从被摄对象旁侧照射过来的光线

22、色彩基调: 色彩基调是之一族色彩关系在一幅画面,一个片段乃至全片中形成的色彩倾向,展现色彩的总体特征

23、色彩构图:色彩构图是指画面中色彩参与构图,形成一种形式上的美,是对色彩加以谋篇布局,从而形成和谐统一而又蕴含对比关系的构图安排

24、场面调度:场面调度即对荧幕空间中各种有意义的元素的组合和安排

25、镜头调度:镜头场面调度是指导演运用摄像机机位的变化--如推,拉,摇,移,升,降等运动方法,俯仰,平斜等不同角度以及不同焦距的镜头画面来表现,描摹人物关系与环境气氛的变化及跟进事件发展的手法

26、对象调度:对象场景调度是导演通过对角色的运动方向,所处位置以及角色入场出场等方面的安排和处理来创造镜头画面的不同造型和景别,从而解释角色关系及情绪的变化,获得的最佳的画面效果

27、平面场面调度:平面场面调度在平面中通过任务的移动来不断转换观众的视觉焦点,在电影中其常常和摄像机的横移拍摄或摇拍相结合使用

28、纵深场面调度:纵深场面调度就是利用人或物做前景,背景处的任务在纵深处由后面走向前面,既由全景走向近景,或者有前景走向纵深,扩大环境,变为全景。

29、分切场面调度:根据人物动作和位置变化,将摄像机分别放在不同的位置,以固定的设想方法,拍摄不同景别,不同角度的镜头画面,然后组接起来,这种调度方法就是分切场面调度

30、重复场面调度: 重复场面调度一般指重复出现两次或两次以上相同或相似的较色调度和镜头调度

31、象征场面调度:导演往往借助场面调度寄托某种寓意或象征某种事物的内涵

32、对比场面调度:常常把相同或者相反的事物加以比较或衬托,以使对比的双方互相辉映,相得益彰,能够更加生动,鲜明地显示出各自的性格和特点。

33、轴线:轴线,是指被摄对象的视线方向,运动方向和不同对象之间的关系所形成的一条假想的直线或曲线,分别为方向轴线,运动轴线和关系轴线

34、方向轴线:当被摄对象禁止不动时,通过其目光看向某一物体的视线之间形成的虚拟线就是方向轴线

35、运动轴线:处于运动中的人或物体,其运动方向构成主体的运动轴线

36、关系轴线:有两个或者两个以上角色的镜头中,角色之间又会产生交流,这个时候就会出现一种新的轴线,即关系轴线。

37、剪接点:动画中流畅的动作,中间都会有相对的停顿,也就是说某一个动作,总是有相对静止的时刻,而这个相对静止的时刻通常就是women要选择的剪接点。

38、镜头组接 :镜头组接是把每一个镜头按照一定的顺序和手法连接起来,成为一个具有条理性和逻辑性的整体,是一种方法和技巧。

39、蒙太奇:蒙太奇就是根据影片所要表达的内容和观众的心理顺序,将摄像机拍摄下来的镜头按照生活逻辑、推理顺序、作者的观点倾向及其美学原则连接起来的手段。

40、叙事蒙太奇:叙事蒙太奇按照情节发展的时间流程、逻辑顺序、因果关系来分切组合镜头、场面和段落,表现动作的连贯,推动情节的发展,引导观众理解影片的内容,是电影中最基本、最常用的叙述手法,其优点是脉络清楚,逻辑连贯。

41、表现蒙太奇:通过不同内容镜头的排列,来暗、比喻或表达一个原来所不曾有的新含义。

42、转场:是指场景或段落之间的连接方式。具体来说就是指从一个场景转至另一个场景,或从一个段落转至另一个段落所采取的连接技法。

43、叠化转场:是指前一个镜头和后一个镜头相叠加,前一个镜头逐渐隐去,后一个镜头逐渐显现的过程。

44、特写镜头转场:是指无论前一组镜头的最后一个镜头是什么,后一组镜头都是从特写开始。

45、对话:又称对白,至两个以上剧中人物的交流活动,是影视艺术中有声语言的主体

46、旁白:旁白是以画外音形式出现的第一人称自述或第三人称的评论和解说,用于交代事件,地点,人物,环境,背景等,通常以剧作者“第三人称”的客观视点或以某剧中人物“第一人称”的主观视点出现

47、独白:独白指以画外音形式出现在剧中,表达人物角色和人物内心活动的话语

48、有源音乐:有源音乐是指发出音乐的音源直接出现在画内空间或者外空间的音乐

49、无源音乐:无源音乐是指没有比较明显的时空特征,在影片画面中不存在声音发出的音源 50、音效:动作音效是由影片中的角色运动所产生的声音,环境音效主要是指自然界的音响效果

51、主题曲:动画片中主题曲一般是出现在影片的开头或者末尾的较完整的音乐形式,多是歌与曲的组合。动画片中的主题曲能够体现影片的艺术构思,是影视动画综合艺术的有机组成部分,在突出影片的抒情性,戏剧性和气氛方面起着特殊作用

二、简答题

1、简述画面造型语言元素的种类和基本功能。

A 构图: 主要是指画面的安排,即把和画面内各个组成部分构成一个统一的画面整体

B 色彩: 不仅仅是更加逼真的在线显示,还能营造环境氛围,加强戏剧效果,同时也体现出创作者的思想感情以及角色的性格特点等

C 光线: 光线是展现环境体现角色性格的重要表达方式,而却在屏幕上表现各种视觉形象,包括他们的空间位置,形状,颜色,物理性质,变化和运动等,也都离不开光

2、简述划分景别的基本方法和依据。

以画面中成年人所占画面比例的大小进行划分,即远景--被摄对象所处的环境,全景--人物全部及周围背景,中景--膝以上,近景--胸以上,特写--肩以上

3、简述近景与中景的区别。

近景与中景相比,近景画面表现的空间范围进一步缩小,画面内容跟趋向于单一,环境和背景的作用进一步降低,吸引观众注意力的是画面中占主导地位的角色形象

4、简述俯角度拍摄和仰角度拍摄的功能。

俯角拍摄的特点是视野辽阔,能见的场面大,景物全,可以纵观全局多用于拍摄大场面,拍摄人物时,使人物感到被压近地面,变得矮小和压抑,表现正面人物的无、反面人物的可憎渺小或展示人物的卑劣行径;仰角度拍摄的特点是可使景物拍的宏伟高大拍摄建筑物有直插云霄之感;拍摄高台跳水,以蓝天作为背景,显示运动员有凌云之势,腾空飞翔之感;拍摄正面人物可以显示人物的威严以及地位的高贵等,同时还可以舍弃杂乱的背景,使画面简洁,主体突出。

5、简述主观视角拍摄角度的作用。

可以带给观众影片中人物相似的视觉感受,产生身临其境的现场感,进而影响观众的视觉心理,使之随着影片中人物的情绪变化而变化。主观视角的镜头可使观众视角与影片主体角色的视觉重合,从而更容易调动观众的参与感和注意力,一起观众的心理感应。

6、简述摇镜头和移镜头的区别。

摇镜头:摄像机的位置不动只是改变镜头的拍摄方向 移镜头:摄像机的位置平行移动

移镜头跟摇镜头在画面上给人的视觉效果是完全不同的。摇镜头是摄像头的位置不动,只是拍摄角度发生了变化,适合于拍摄远距离的对象;而移镜头则是拍摄角度不变,摄像机本身位置移动,适合于拍摄距离较近的对象。移镜头跟摇镜头一样能扩大屏幕二维空间表现能力,但因摄像机是运动的,所以移镜头比摇镜头有更大的自由度,它能打破画面的局限,扩大空间视野,吧表现广阔的场景。在实际拍摄中,移镜头拍摄时除了借助于铺设在轨道上的移动车外,还可以利用其他的运动工具。

7、简述推、拉、摇、移、跟五种基本运动镜头的实现方法。

推:从画面景别的角度看,就是画面构图范围由大范围、大景别到小范围、小景别连续过渡的镜头。

拉:从画面景别的角度看,就是画面构图范围由小范围、小景别到大范围、大景别连续过渡的镜头。

摇:拍摄时,摄像机的位置不动只是改变镜头的拍摄方向。

移:拍摄时,把摄像机放在移动车上等,沿着古驿道进行拍摄。

跟:是指摄像机紧跟着运动着的人活着物进行拍摄。

8、简述短焦距镜头与长焦距镜头的功能,举例说明。

短焦距镜头:

A 利用短焦距镜头有利于表现宏伟的群众场面、辽阔的田野、壮观的建筑以及复杂的纵深调度等多层景物的场景。

B 利用短焦距镜头的透视效果强的特点进行拍摄,有时候用于人物对话中,拉开两人的空间距离,进而表现出他们心理上的隔阂。

C 利用短焦距镜头线条透视的夸张变形效果形成某种特殊的表现意义。不仅改变画面的深度空间,在纵向空间,它的夸张效果使景物显得更加高大、雄伟,并以一种对客观景物变形和夸张的造型效果撞击着观众的审美心境,赋予画面某种特殊意义。D 短焦距镜头有助于刻画人物某种性格。

长焦距镜头:

A 由于长焦镜头视角窄,影像放大率大的特点,即使在远距离拍摄时也能够摄出被摄对象的小景别画面,从而使被摄对象突出地表现出来。B 利用长焦距镜头的远摄功能,可以拍摄距离较远的对象,追求真实自然地艺术效果。

C 由于长焦距离镜头的景深小,除主体意外,前后景都可以处于模糊状态,可以把不可回避的杂乱背景虚化,从而减少杂乱背景的干扰,达到突出主体的目的

D 长焦距镜头透视感弱,可以压缩处于纵向空间的被摄对象之间的空间距离,能够把多层景物和人物压缩在一起,加强画面拥挤,堵塞和紧张的感觉,从而使画面形象饱满,烘托环境气氛。

E 长焦距镜头拍摄横向运动的物体时,前后景在画面中变化快且虚,横向跟拍运动物体可以获得横向跟移的效果,增强画面的视觉节奏感,表现紧张,不安和欢快等情绪。

F 长焦距镜头拍摄还可以完成焦点的转换,突出被摄对象。

G 长焦距镜头常常用于拍摄人物肖像,拍摄人物面部特写可以正确还原出人脸的五官比例

9、简述画面构图的不同形式和特点。

影视动画的构图可分为惊天构图和动态构图两类。静态构图就是被摄对象与摄像机均处于静止状态,镜头内的构图关系基本固定。

动态构图是指被摄对象或摄像机处于运动状态,使画面构图组合发生连续或间断变化。动态构图是影视画面所独具的构图形式,但是其构图原理和形式也是以静态构图为基础。

10、简述用光方法的分类及其作用。

光位:按照光源位置和照射角度可以分为顺光、侧光、侧逆光、逆光、顶光、脚光和平行光 直射光和散射光:按光线的性质分可分为直射光和散射光

光型:按照光的造型效果可以分为主光、辅助光、背景光、轮廓光、修饰光、眼神光等

11、简述光线对角色形象的塑造作用,并举例说明。

A 对角色形象的造型作用,被摄对象只有在光线的照明下,才能使观众认识到它的形象,有了“形”,才可以以“形”写神,以“形”传神 B 对角色形象的情感进行刻画。

C 对角色形象具有社会角色的刻画作用,即光线的照明作为某种理念或观点的表征,使得在画面中的角色形象因为某种光线或者影调的出现而具有一种特定的隐喻、象征或比喻的效果,从而使作品生化到某种象征的高度。

12、简述光线的构图作用,并举例说明。

A 影响构图平衡:光线控制着画面的明暗关系,影响着画面的平衡,因此在构图上可以通过光线打破画面的绝对平衡,形成动势,加快叙事的节奏。

B 突出主体形象:影片可以通过光线照明产生明暗效果突出主体,强调画面的兴趣中心。

13、简述色彩的生理感受,并举例分析。

A色彩之冷暖,不同的色彩可以使人产生冷暖、轻重等感觉 B色彩之轻重,色彩的轻重感主要与色彩的明度有关

C色彩之软硬,色彩的软硬感其感觉主要也来自色彩的明度,但也与饱和度有一定的关系

D色彩之远近,色彩的远近感是由于各种不同波长的色彩在人眼视网膜上的成像位置不同产生的,红橙等光波长的色彩在视网膜内侧成像,感觉比较迫近,蓝、紫等光波短的色彩则在视网膜外侧成像,在不同距离内感觉就比较后退,实际上这是视错觉的一种现象。

14、简述场面调度的分类和在动画片中的应用,举例说明。

A镜头场面调度,镜头场面调度是指导演运用摄像机机位的变化——推、拉、摇、移、升、降等运动方法,俯仰、平斜等不同角度以及不同焦距的镜头画面来展示、描摹人物关系与环境气氛的变化及跟进事件发展的手法。

B对像场面调度,是导演通过对角色的运动方向、所处位置以及角色入场等方面的安排和处理来创造镜头画面的不同造型和景别,从而揭示角色关系及情绪的变化,以获得最佳的画面效果。

15、相对于一般概念的电影,动画电影在场面调度方法的运用上有什么不同?

动画场面调度有高度的假设性,可以运用夸张等手法突出剧情,所以有巨大的表现空间和根伟丰富的表现力与创作自由

16、关系轴线中,两人对话镜头的拍摄最为经典的拍摄技法有哪些?分别适用于什么场景?

A 三角形拍摄原理,场景中两个中心角色之间的关系轴线是以他们相互视线的走向为基础的。在关系轴线的两侧顶点与轴线中心外侧顶点构成一个底边与关系线平行的三角形

B 内反拍与外反拍,台摄像机都处于关系轴线同一侧,机位方向基本相背,分别向外对着各自主体进行拍摄,称为内反拍角度。摄像机处于关系轴线的同一侧,向里对着主体,称为外反拍角度。

C 骑轴镜头,骑轴镜头是两个摄像机处在轴线上,背对背或者正面相对分别拍摄各自主体

D平行镜头,两台摄像机的视轴互相平行,分别拍摄各自主体,如果主体是面向摄像机,那么就是正面拍摄,如果主体实测面对着摄像机,那么就是侧面拍摄,这样拍摄得到的镜头称为平行镜头

17、什么叫越轴?越轴会产生什么影响?如何避免越轴镜头的出现?

越轴:拍摄中出现镜头越过轴线,到另一侧进行拍摄,在后期剪辑中又无法有效避免这种不遵循轴线规则的镜头,当前后镜头剪辑在一起时,就会出现人物动作、方向和关系的偏离、称之为“越轴”。

影响:越轴后的画面,被摄主体与前面所摄画面中主体的位置和方向是不一致的,出现镜头方向上的矛盾,造成前后画面无法组接。方法:在影视拍摄和剪辑中,要保证画面的连贯、流畅,就要使画面空间有视觉完整感和统一感,这正是通过掌握轴线的规则实现的。

18、简述镜头剪辑的规律和方法,并举例说明。

A 镜头组接必须符合观众心理和生活逻辑 B景别的变化要采取循序渐进的方法 C镜头组接要遵循轴线规律 D镜头组接要遵循“动接动”“静接静”的规律 E镜头组接的时间长度应遵循观众视觉心理的规律 F镜头组接要注意影调和色彩的过渡 G镜头组接节奏应符合情节发展需要

19、简述根据景别变化进行镜头组接的几种蒙太奇组接方式,并举例说明。

A前进式镜头组接,这种组接方式是指景别由远景、全景向近景、特写过度,用来表现由低沉到高昂向上的情绪和剧情的发展。

B后退式镜头组接,这种组接方式是由近到远,景别从特写向远景过度,表示由高昂到低沉、压抑的情绪,在影片中表现由细节扩展到全部。C环形镜头组接,环形镜头组接就是把前进式镜头组接和后退式镜头组接结合在一起使用。有全景——中景——近景——特写,再由特写——近景——中景——全景,表现情绪由低沉到高昂,再由高昂转向低沉。20、简述蒙太奇的分类,举例说明。

蒙太奇主要可分为两大类:叙事蒙太奇和表现蒙太奇

叙事蒙太奇具体划分为连续蒙太奇、平行蒙太奇、交叉蒙太奇、重复蒙太奇、积累蒙太奇等

表现蒙太奇可划分为隐喻蒙太奇、对比蒙太奇、心理蒙太奇、抒情蒙太奇等

21、简述无技巧转场的方法,并举例说明。

A相同(相似)主体的转换B遮挡镜头转场C主观镜头转场D特写镜头转场E动势转场F运动镜头转场G空镜头转场H声音转场I闪回镜头转场J变换背景转场

22、简述对话的功能,举例说明。

A交代说明。凡需要而又无需用画面表现出来的生活内容或事件过程,诸如剧情发生的时间、地点、时代背景、剧中人物的职业、社会关系,特别是在剧情展开前就介绍了祖巴的地位和他与儿子阿历克斯的关系。

B推进剧情。对话能够展露人物丰富内心活动,并且能够影响其他角色,形成内心交流或者碰撞,最终引起双方心情或相互关系的微妙变化,从而推进剧情。

C塑造人物性格人物性格的反映是通过多种方式来展现的。比如行为动作、心理活动等,而语言同样是塑造人物形象、体现人物性格的重要手段。23,、简述主题音乐和场景音乐的区别,并举例说明。

主题音乐是表达影片主题思想、基本情绪或主要人物性格的音乐。它表现为一个旋律式或者主导动机式的音乐核心,具有鲜明的主体思想、情绪基调和性格特征。与场景音乐相比,它与影片中的情节、画面、人物等场景没有密切关系,而是与画面形成一种并行的关系,并且在影片的重要场面或者情绪高潮段落反复出现,从而使观众领悟到影片的主题和深层的意蕴。相比场景音乐,主题音乐具有更鲜明的形象和跟完整的结构。

三、实践题

1、观赏动画片《小马王》,选择你认为经典的片段,分析在拍摄中所运用的不同焦距镜头的画面及其所包含的意义。

2、观赏那个动画片《埃及王子》,选择你认为经典的片段进行转场分析,分析不同转场手法的运用及其达到的艺术效果。

下载C语言课后习题答案5篇word格式文档
下载C语言课后习题答案5篇.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    现代汉语课后习题答案

    第一章 绪论”习题答案 “绪论”思考和练习一 一、什么是现代汉民族共同语?它是怎样形成的? 现代汉民族的共同语就是“以北京语音为标准音,以北方话为基础方言,以典范的现代白......

    现代汉语课后习题答案

    练习一 一、什么是成语、谚语、惯用语、歇后语?它们之间有什么不同? 成语:成语是一种相沿习用、含义丰富、具有书面语色彩的固定短语。 谚语:谚语是群众口中通俗精炼、含义深刻......

    《现代汉语》课后习题答案

    现代汉语 课后习题答案 第一章 绪论”习题答案 “绪论”思考和练习一 一、什么是现代汉民族共同语?它是怎样形成的? 现代汉民族的共同语就是“以北京语音为标准音,以北方话......

    现代汉语课后习题答案

    现代汉语课后习题答案 第一章 一、什么是现代汉民族共同语?它是怎样形成的? 现代汉民族的共同语就是“以北京语音为标准音,以北方话为基础方言,以典范的现代白话文著作为语......

    雷雨 课后习题答案

    二、戏剧人物的语言往往有潜台词。揣摩下列语句,回答括号中的问题,体会人物语言的内涵的丰富性。1.鲁侍萍:可是她不是小姐,她也不贤惠,并且听说是不大规矩的。 (课文中鲁侍萍几次说......

    行政管理学课后习题答案

    第一章:导论 1.什么是行政管理?行政和政治有何区别? 现代行政管理的含义: a最广义的:指一切社会组织、团体对有有关事务的治理、管理和执行的社会活动 b广义的:指国家政治目标的执......

    《旅游学》课后习题答案(汇编)

    《旅游学》课后答案 第一章旅游发展的历史沿革 简答: 1、 Q:为什么说人类的迁移活动不属于旅游活动? A:由于社会经济条件的制约,在原始社会早期,人类不仅在客观上没有开展旅行活......

    电子商务课后习题答案汇总

    《电子商务概论》课后问题答案汇总 第一节 1.阅读教科书第1章和第2章,理解商务和电子商务的概念。理解电子商务的基本商务模式。 商务:是指以赢利为目的的市场经济主体,通过商......