第一篇:C语言课后习题答案
C语言课后习题答案-第四版-第一章
5、请参照本章例题,编写一个C语言程序,输出以下信息: **************************** V e r y G o o d!**************************** #include
printf(“**************************nn”);printf(“
Very Good!nn”);printf(“**************************n”);return 0;}
6、编写一个C语言程序,输入a,b,c三个值,输出其中最大值。#include
第3章
1、假如我国国民生产总值的年增长率为9%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为
P=(1+r)^n r 为年增长率,n 为年数,p为与现在相比的倍数。#include
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
// 一次存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
6、请编将“China”,编译成密码,密码规律是:用原有的字母后面第4个字母代替原来的字母。#include
7、设圆半径r =1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。#include
//要求输入圆半径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 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 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 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 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 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 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 { 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 /*求该点到各中心点距离*/ 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 // 程序中用到数学函数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 // 求出下一项的值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 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 } printf(“a+aa+aaa+...=%dn”,sn);return 0;} 6、求和:1!+2!+3!+„„+20!。#include 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 {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 } 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 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 } printf(“sum=%16.10fn”,s);return 0;} 11、一个球从100米敢赌下落,每次反弹高度为原来的一半,在下落,在反弹。求第10次落地时共经过多少米?第10次反弹多高? #include } printf(“第10次落地时共经过%f米n”,sn);printf(“第10次反弹%f米n”,hn);return 0;} 12、猴子吃桃问题。猴子第1天摘了若干个桃子,当即吃了一半零一个;第2剩下的吃了一半零一个,一次循环。到第十天时想吃就剩下一个桃子。求第一天摘了几个桃子? #include /*第n次落地时共经过的米数*/ hn=hn/2; /*第n次反跳高度*/ while(day>0){ x1=(x2+1)*2; /*第1天的桃子数是第2天桃子数加1后的2倍.*/ } printf(“total=%dn”,x1);return 0;} 16、输出以下图案: * *** ***** ******* ***** *** * #include 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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语言程序设计实验报告 学院 数学与信息技术 班级 学号 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 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 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 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 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 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第二篇:c语言课后习题