C语言程序设计(第2版)课后习题答案
第一章
1.请参照本章例题,编写一个C程序,输出以下信息:
**************************
Very good!
**************************
解:
#include
void main()
{
printf("**************************");
printf("\n");
printf("Very good!\n");
printf("\n");
printf("**************************");
}
2.编写一个C程序,输入a、b、c三个值,输出其中最大值。
解:
#include
void main()
{
int a,b,c,max;
printf("请输入三个数a,b,c:\n");
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max
if(max printf("最大数为: %d",max); } 第二章 1.假如我国国民生产总值的年增长率为10%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为P=(1+r)^n,r为年增长率;n为年数;P 为与现在相比的百分比。 解: #include #include void main() { double P, r=0.1, n=10; P=pow((1+r), n); printf("%lf\n", P); } 3.请编程序将"China"译成密码,译码规律是用原来字母后面的第4个字母代替原来的字母。例如,字母"A"后面第4个字母是"E","E"代替"A"。因此,"China"应译为"Glmre"。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为'C'、'h'、'i'、'n'、'a',经过运算,使c1、c2、c3、c4、c5分别变为'G'、'l'、'm'、'r'、'e',并输出。 解: #include void main() { char c1='C',c2='h',c3='i',c4='n',c5='a'; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5); } 第三章 3.用下面的scanf函数输入数据,使a=3, b=7, x=8.5, y=71.82, c1='A', c2='a'。问在键盘上如何输入? 解: #include void main() { int a, b; float x, y; char c1, c2; scanf("a=%d, b=%d", &a, &b); scanf(" x=%f, y=%e", &x, &y); scanf(" c1=%c, c2=%c",&c1, &c2); } a=3, b=7 x=8.5, y=71.82 c1=A, c2=a 5. 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后2位数字。请编程序。 解: #include void main() { float r,h,C1,Sa,Sb,Va,Vb; scanf("%f,%f",&r,&h); C1=2*3.14*r; Sa=3.14*r*r; Sb=4*Sa; Va=4*3.14*r*r*r/3; Vb=Sa*h; printf("C1=%.2f\n",C1); printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb); } 6. 输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9,输出要求有文字说明,取位2小数。 解: #include void main() { float F,c; scanf("%f",&F); c=5*(F-32)/9; printf("c=%.2f",c); } 7. 编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符。思考以下问题: (1)变量c1、c2应定义为字符型或整形?或二者皆可? (2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数? (3)整形变量与字符变量是否在任何情况下都可以互相代替?如: char c1,c2;与int c1, c2;是否无条件地等价? 解: #include void main() { char c1,c2; c1=getchar(); c2=getchar(); putchar(c1);putchar(‘\n');putchar(c2);putchar(‘\n'); } #include void main() { char c1,c2; c1=getchar(); c2=getchar(); printf("c1=%d c2=%d\n",c1,c2); printf("c1=%c c2=%c\n",c1,c2); } 第四章 3. 写出下面各逻辑表达式的值。设a=3,b=4,c=5。 (1) a+b>c&&b==c (2) a||b+c&&b-c (3) !(a>b)&&!c||1 (4) !(x=a)&&(y=b)&&0 (5) !(a+b)+c-1&&b+c/2 解: (1) 0 (2) 1 (3) 1 (4) 0 (5) 1 5. 有3个整数a、b、c,由键盘输入,输出其中最大的数,请编程序。 解: #include void main() { int a,b,c,temp,max; printf("请输入3个整数: "); scanf("%d,%d,%d",&a,&b,&c); temp=(a>b)?a:b; max=(temp>c)?temp:c; printf("3个整数的最大数是%d\n",max); } 6. 给一个百分制成绩,要求输出等级'A'、'B'、'C'、'D'、'E'。90分以上为'A',80~90分为'B',70~79分为'C',60分以下为'D'。 解: #include void 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';break; } printf("成绩是%5.1f, 相应的等级是%c. \n",score,grade); } 7. 给定一个不多于5位的正整数,要求: (1)求出它是几位数; (2)分别输出每一位数字; (3)按逆序输出各位数字。例如原数为321,应输出123。 解: #include void main() { long int num; int indiv,ten,hundred,thousand,ten_thousand,place; /*分别代表个位、十位、百位、千位、万位和位数*/ printf("请输入一个整数(0~99999): "); scanf("%ld",&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("place =%d\n", place); ten_thousand=num/10000; thousand=num/1000%10; hundred=num/100%10; ten=num%100/10; indiv=num%10; switch(place) { case 5: printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv); printf("\n反序数字为: "); printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand); break; case 4: printf("%d,%d,%d,%d",thousand,hundred,ten,indiv); printf("\n反序数字为: "); printf("%d%d%d%d\n",indiv,ten,hundred,thousand); break; case 3: printf("%d,%d,%d",hundred,ten,indiv); printf("\n反序数字为: "); printf("%d%d%d\n",indiv,ten,hundred); break; case 2: printf("%d,%d",ten,indiv); printf("\n反序数字为: "); printf("%d%d\n",indiv,ten); break; case 1: printf("%d",indiv); printf("\n反序数字为: "); printf("%d\n",indiv); break; } } 8. 企业发放的奖金根据企业的当年利润决定。当利润I低于或等于100000元时,奖金可提成10%;利润大于100000元,小于200000元(1000001000000)时,超过1000000元的部分按1%提成。从键盘输入当年利润I,求应发放奖金总数。要求: (1)用if语句编程序;(2)用switch语句编程序。 解: (1) 用if语句编程序。 #include void main() { long i; float bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; /*利润为10万元时的奖金*/ bon2=bon1+100000*0.075; /*利润为20万元时的奖金*/ bon4=bon2+200000*0.05; /*利润为40万元时的奖金*/ bon6=bon4+200000*0.03; /*利润为60万元时的奖金*/ bon10=bon6+400000*0.015; /*利润为100万元时的奖金*/ printf("请输入利润i: "); scanf("%ld",&i); if(i<=100000) bonus=i*0.1; /*利润在10万元以内按0.1提成奖金*/ else if(i<=200000) bonus=bon1+(i-100000)*0.075; /*利润在10万至20万元时的奖金*/ else if(i<=400000) bonus=bon2+(i-200000)*0.05; /*利润在20万至40万元时的奖金*/ else if(i<=600000) bonus=bon4+(i-400000)*0.03; /*利润在40万至60万元时的奖金*/ else if(i<=1000000) bonus=bon6+(i-600000)*0.015; /*利润在60万至100万元时的奖金*/ else bonus=bon10+(i-1000000)*0.01; /*利润在100万元以上时的奖金*/ printf("奖金是%10.2f\n",bonus); } (2) 用switch语句编程序。 #include void main() { long i; float bonus, bon1, bon2, bon4, bon6, bon10; int c; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; printf("请输入利润i: "); scanf("%ld",&i); c=i/100000; if(c>10) c=10; switch(c) { case 0: bonus=1*0.1;break; case 1: bonus=bon1+(i-100000)*0.075;break; case 2 : case 3: bonus=bon2+(i-200000)*0.05; break; case 4: case 5: bonus=bon4+(i-400000)*0.03;break; case 6: case 7: case 8: case 9: bonus=bon6+(i-600000)*0.015;break; case 10: bonus=bon10+(i-1000000)*0.01; } printf("奖金是%10.2f",bonus); } 9. 输入4个整数,要求按由小到大的顺序输出。 解: #include void main() { int t,a,b,c,d; printf("请输入4个整数: "); scanf("%d,%d,%d,%d",&a,&b,&c,&d); printf("\n a=%d,b=%d,c=%d,d=%d\n",a,b,c,d); if(a>b) {t=a; a=b; b=t;} if(a>c) {t=a; a=c; c=t;} if(a>d) {t=a; a=d; d=t;} if(b>c) {t=a; 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); } 10. 有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1。这4个塔的高度分别为10m。塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。 解: #include void 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-x1)*(x-x1)+(y-y1)*(y-y1); /*求该点到各中心点的距离*/ d2=(x-x2)*(x-x2)+(y+y2)*(y+y2); d3=(x+x3)*(x+x3)+(y-y3)*(y-y3); d4=(x+x4)*(x-x4)+(y+y4)*(y+y4); if(d1>1&&d2>1&&d3>1&&d4>1) h=0; /*判断该点是否在塔外*/ printf("该点高度为%d\n",h); } 11. 求方程的解。 根据代数知识,应该有以下几种可能: (1)a=0, 不是二次方程,而是一次方程。 (2) ,有两个相等的实根。 (3) ,有两个不等的实根。 (4) ,有两个共轭复根。 编写程序,运行时,分别给出不同的a, b, c值,相应于上面4种情况,分析输出结果。 解: #include #include #include void main() { float a,b,c,disc,x1,x2,realpart,imagpart; scanf("%f,%f,%f",&a,&b,&c); printf("The equation"); if(fabs(a)<=1e-6) printf("is not a quadratic\n"); else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf("has tow eual roots:%8.4f\n",-b/(2*a)); else if(fabs(disc)>1e-6) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("has distinct real roots:%8.4f and %8.4f\n",x1,x2); } else { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("has complex roots:\n"); printf("%8.4f+%8.4fi\n",realpart,imagpart); printf("%8.4f-%8.4fi\n",realpart,imagpart); } } } 第五章 1. 求100~200间的全部素数。 解: #include #include void main() { int m,i,n=0; double k; for(m=101;m<=200;m=m+2) { k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0) break; if(i>=k+1) { printf("%d",m); n=n+1; } if(n%10==0) printf("\n"); printf("\n"); } 2. 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。解: #include void main() { char c; int i=0,j=0,k=0,l=0; while((c=getchar())!='\n') { if(c>='A'&&c<='Z'||c>='a'&&c<='z') i++; else if(c>='0'&&c<='9') j++; else if(c==' ') k++; else l++; } printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l); } 3. 输出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 解: #include #include void main() { int i,j,k,n; printf(""水仙花"数是:"); for(n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i+j*j*j+k*k*k) printf("%4d",n); } printf("\n"); } 4. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。 解: #include void main() int day,x1,x2; day=9; x2=1; while(day>0) { x1=(x2+1)*2; x2=x1; day--; } printf("total=%d\n",x1); } 5. 一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时,共经过了多少米?第10次反弹多高? 解: #include void main() { int i,n;double h=100,s=100; scanf("%d",&n); for(i=1;i<=n;i++) { h*=0.5; if(i==1) continue; s=2*h+s; } printf("h=%f,s=%f\n",h,s); } 6. 打印以下图案 * *** ***** ******* ***** *** * 解: #include #include void main() { int i,j,k; for(i=0;i<=3;i++) { 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"); } } 7. 两个乒乓球队进行比赛,各出3人。甲队为A、B、C 3人,乙队为X、Y、Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Y比,请编程序找出3三队选手的对阵名单。 解: #include void main() { char i,j,k; /*i是A的对手,j是B的对手,k是C的对手*/ for(i='X';i<='Z';i++) for(j='X';j<='Z';j++) { if(i!=j) for(k='X';k<='Z';k++) { if(i!=k&&j!=k) { if(i!='X'&&k!='X'&&k!='Z')printf("order is A--%c\tB--%c\tC--%c\n",i,j,k); } } } } 第六章 1. 已知一个班10个学生的成绩,要求输入这10个学生的成绩,然后求出它们的平均成绩。 解: #include main() { float a[10],sum,avg; int i; sum=0.0; printf("Please input the students score:"); for(i=0;i<10;i++) {scanf("%f",&a[i]); sum=sum+a[i]; } avg=sum/10; printf("The average is:%f\n",avg); } 2. 已知一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生的成绩和该生的序号。 解: #include void main() { int ch[10]; int i,max=0,xh; printf("请输入10个学生的成绩:\n"); for(i=0;i<10;i++) { scanf("%d",&ch[i]); if(ch[i]>max) { max=ch[i]; xh=i; } } printf("成绩最高为:%d\n",max); printf("该生的序号为:%d\n",xh); } 3. 有3个学生,上4门课,要求输入全部学生的各门课成绩,并分别求出每门课的平均成绩。 解: #include #include #define RENSHU 3 #define KECHENG 4 void main() { float chengji[4][4]; int i,j; printf("\n请按人输入(一次输入一个人所有课程的成绩)成绩(%d人,%d门课程):",RENSHU,KECHENG); { printf("\n第%d人:",i+1); for(j=0;j scanf("%f",&chengji[i][j]); } for(j=0;j { chengji[RENSHU][j]=0; for(i=0;i chengji[RENSHU][j]+=chengji[i][j]; chengji[RENSHU][j]=chengji[RENSHU][j]/RENSHU; } for(i=0;i<=RENSHU;i++) { for(j=0;j printf("%8.2f",chengji[i][j]); printf("\n"); } printf("\n"); } 4. 已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将各学生的成绩记录排序。 解: #include void main () { int i,j,k; float a[5][5]={{78,79,90,67},{60,76,89,63}, {86,75,96,56},{54,63,86,96}, {63,96,98,97}}; float sum,t; for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%12f",a[i][j]); printf("\n"); } for(i=0;i<5;i++) { sum=0; for(j=0;j<4;j++) sum=sum+a[i][j]; a[i][4]=sum/4; } for(k=0;k<4;k++) for(i=0;i<4-k;i++) if(a[i][4] {t=a[i][j];a[i][j]=a[i+1][j];a[i+1][j]=t;} for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%12f",a[i][j]); printf("\n"); } } 5. 将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。 解: #include void main() { int i,a [10],temp; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf("%4d",a[i]); for(i=0;i<5;i++) { temp=a[i]; a[i]=a[9-i]; a[9-i]=temp; } for(i=0;i<10;i++) printf("%4d",a[i]); printf("\n"); } 6. 有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则输出"无此数"。解: #include int main() { int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}; int key,mid,star=0,end=15-1; printf("enter a look for number:\n"); scanf ("%d",&key); if(key>a[0]||key { printf("无此数\n");} else { while(star<=end) { mid = (star+end)/2; if(key==a[mid]) { printf("这个数在第%d\n",mid);break;} else if(key>a[mid]) {end=mid-1;} else {star=mid+1;} } if(star>end) { printf("无此数\n");} } } 7. 输出以下图案: ***** ***** ***** ***** ***** 解: #include void main() { int i,j,k;char a[5][5]; for(i=0;i<5;i++) { for(j=0;j<5;j++) { a[i][j]='*'; printf("%c",a[i][j]); } printf("\n"); for(k=1;k<=i+1;k++) printf(" "); } printf("\n"); } 8. 有一篇文章,共有3行文字,每行有个80字符。要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。 解: #include void 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("\nPlease input line %d:\n",i+1); gets(text[i]); for(j=0;j<80&&text[i][j]!='\0';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++; } } for(i=0;i<3;i++) printf("%s\n",text[i]); printf("upper case:%d\n",upp); printf("lower case:%d\n",low); printf("digit case:%d\n",dig); printf("space case:%d\n",spa); printf("other case:%d\n",oth); } 9. 有一行电文,已按下面规律译成密码: A->Z a->z B->Y b->y C->X c->x … 即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。假如已知道密码是Umtorhs,要求编程序将密码译回原文,并输出密码和原文。 解: #include void main() { int i;char str1[100],str2[100]; gets(str1); for(i=0;str1[i]!='\0';i++) if(str1[i]>=65&&str1[i]<=90) str2[i]=155-str1[i]; else if(str1[i]>=97&&str1[i]<=122) str2[i]=219-str1[i]; else str2[i]=str1[i]; printf("%s\n%s\n",str1,str2); } 10. 编一程序,将两个字符串连接起来,(1)用strcat函数;(2)不用strcat函数。解: (1) #include void main() { int i,j;char str1[100],str2[100],str3[201]; gets(str1); gets(str2); str3=strcat(str1,str2); printf("%s\n%s\n%s\n",str1,str2,str3); } (2) #include void main() { int i,j;char str1[100],str2[100],str3[201]; gets(str1); gets(str2); for(i=0;str1[i]!='\0';i++) str3[i]=str1[i]; for(j=0;str2[j]!='\0';j++) str3[j+i]=str2[j]; printf("%s\n%s\n%s\n",str1,str2,str3); } 第七章 1. 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 解: #include int maxyueshu(int m,int n) { int i=1,t; for(;i<=m&&i<=n;i++) { if(m%i==0&&n%i==0) t=i; } return(t); } int minbeishu(int m,int n) { int j; if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++) ; return j; } void main() { int a,b,max,min; printf("enter two number is: "); scanf("%d,%d",&a,&b); max=maxyueshu(a,b); min=minbeishu(a,b); printf("max=%d,min=%d\n",max,min); } 2. 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。解: #include int psushu(int m) { int i,t=1; for(i=2;i if(m%i==0) t=0; return t; } void main() { int a,s; printf("enter sushu is \n"); scanf("%d",&a); s=psushu(a); if(s==1) printf("a is sushu\n"); else printf("s is not sushu\n"); } 3. 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 解: #include int zhuangzhi(int b[3][3]) { int i,j,t; for(i=0;i<3;i++) for(j=0;j>=i&&j<3-i;j++) {t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;} } void main() { int a[3][3];int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(" %d",a[i][j]); printf("\n"); } zhuangzhi(a); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(" %d",a[i][j]); printf("\n"); } } 4. 写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。解: #include void main() { char str0[100]; gets(str0); fanxu(str0); puts(str0); } fanxu(char str1[100]) { int i,t,j; char str2[100];strcpy(str2,str1); t=strlen(str1); for(i=0,j=t-1;j>-1;i++,j--) str1[i]=str2[j]; } 5. 写一函数,将两个字符串连接。 解: #include lianjie(char a[100],b[100]) { strcat(a,b); } void main() { char str1[100],str2[100]; gets(str1);gets(str2); lianjie(str1,str2); puts(str1); } 6. 写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。解: C语言程序设计谭浩强第四版期末复习重点 Newly compiled on November 23, 2020 第一章 程 序设计和C 语言 .什么是计算机程序 程序.. :一组计算机能识别和执行的指令。只要让计算机执行这个程序,计算机就会自动地、有条不紊地进行工作 计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成。 什么是计算机语言 计算机语言:人和计算机交流信息的、计算机和人都能识别的语言。 计算机语言发展阶段:机器语言(由0和1组成的指令) 符号语言(用英文字母和数字表示指令) 高级语言(接近于人的自然语言和数学语言) 面向过程的语言(非结构化的语言、结构化语言);面向对象的语言 语言的发展及其特点 C 语言是一种用途广泛、功能强大、使用灵活的过程性编程语言,既可用于编写应用软件,又能用于编写系统软件。因此C 语言问世以后得到迅速推广。 C 语言主要特点: 语言简洁、紧凑,使用方便、灵活。(只有37个关键字、9种控制语句;程序书写形式 自由,源程序短) 运算符丰富。(34种运算符;把括号、赋值、强制类型转换等都作为运算符处理;表达 式类型多样化) 数据类型丰富。(包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型;C99又扩充了复数浮点类型、超长整型、布尔类型;指针类型数据,能用来实现各种复杂的数据结构的运算。) 具有结构化的控制语句。(如if…else语句、while语句、do…while语句、switch语句、for语句用函数作为程序的模块单位,便于实现程序的模块化;C语言是完全模块化和结构化的语言) 语法限制不太严格,程序设计自由度大。(对数组下标越界不做检查;对变量的类型使用比较灵活,例如,整型量与字符型数据可以通用;C语言允许程序编写者有较大的自由度,因此放宽了语法检查) 允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作。(C语言具有高级语言的功能和低级语言的许多功能,可用来编写系统软件;这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言) 用C语言编写的程序可移植性好。(C的编译系统简洁,很容易移植到新系统;在新系统上运行时,可直接编译“标准链接库”中的大部分功能,不需要修改源代码;几乎所有计算机系统都可以使用C语言) 生成目标代码质量高,程序执行效率高。 1.C语言允许用两种注释方式:计算法 3.编写程序 4.对源程序进行编辑、编译和连接 5. 运行程序,分析结 6.编写程序文档 第二章算法——程序的灵魂 一个程序主要包括以下两方面的信息: (1) 对数据的描述。在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式,这就是数据结构。 (2) 对操作的描述。即要求计算机进行操作的步骤,也就是算法。 数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。 着名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:算法 + 数据结构 = 程序 第7章函数 例7.1 #include 例7.3 #include 1、用筛选法求100之内的素数。解: #include {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×3的整型矩阵对角线元素之和。解: #include 《C 语言程序设计》教案 职称: 助教 ____________ 单 位:湖南理工职业技术学院 学院(教研室):风能工程学院 工业机器人专业 授课教师: 周常欣 教 学 重 占 八、、 和 难 占 八、、 一、 程序设计和 C 语言 重点:计算机程序、计算机语言、 C 语言编译软件的安装、最简单的 C 语言程序 二、 算法:程序的灵魂 重点:简单的算法举例、算法的特性、用流程图表示算法。 三、 顺序结构程序设计 重点:C 语言的数据类型、C 语句的种类、赋值语句、数据的输入输出及输入输出 中最常用的 控制格式。 四、 选择结构程序设计 重点:关系运算符与逻辑运算符及其组成的具有逻辑值的表达式、 二条分支语句的格 式及基本应用、多分支的选择语句。 五、 循环结构程序设计 重点:C 构成循环的四种方法,尤其是后三种方法、 break 与continue 语句的基本作 用。 难点:while 语句;do-while 语句;for 语句;循环的嵌套; break 与continue 语句。 六、 数组 重点:一维数组、二维数组的定义与引用;字符数组的定义与引用、常用字符串处 理函数及字符处理函数;数组的应用 难点:二维数组的定义与引用;字符数组;数组的应用 七、 函数 重点:函数的定义;函数的参数和函数的值;函数的调用;函数的嵌套调用;函数的 递归调 用;数组作为函数参数;变量作用域;量存储类别; 难点:函数定义、函数调用、函数声明等基本基本概念;函数的嵌套调用与递归调 用;数组作 为函数的参数、变量的存储类别与作用域。 八、 指针 重点和难点:指针与地址的基本概念、指针与变量的关系;指针与数组;指针与字 符串、指针 数组与二级指针;指针的应用 九、 建立自己的数据类型 重点和难点:定义和使用结构体变量、用指针处理链表、共用体类型 十、文件 重点:文件的基本知识、 fopen 、fclose 函数打开与关闭文件、顺序读与数据文件、 随机读写数据文件 难点:用二进制方式向文件读写一组数据。 十一、常见错误分析 重点和难点:文件的基本概念;文件的打开、关闭、常用读写方法。 十二、数组高级应用 重点:不定长数组与二维数组的应用 难点:不定长数组与二维数组的应用 十三、综合应用 重点:数组、if 语句、循环语句、函数知识的综合应用 难点:二维数组、指针 教材、 参 考书 教材:《C 程序设计》(第四版) 谭浩强著 清华大学出版社2010年6月 参考书:《C 程序设计语言》 Kernighan&Ritchie 机械工业出版社 《C 语言程序设计》教案 第1-2课时 C语言程序设计课后习 题答案第四版谭浩强 HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】 第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例6 1.4.2C语言程序的结构10 1.5运行C程序的步骤与方法12 1.6程序设计的任务14 1-5 #include 1-6#include 2.2简单的算法举例17 2.3算法的特性21 2.4怎样表示一个算法22 2.4.1用自然语言表示算法22 2.4.2用流程图表示算法22 2.4.3三种基本结构和改进的流程图26 2.4.4用N S流程图表示算法28 2.4.5用伪代码表示算法31 2.4.6用计算机语言表示算法32 2.5结构化程序设计方法34 习题36 第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例37 3.2数据的表现形式及其运算39 3.2.1常量和变量39 3.2.2数据类型42 C语言设计 学习笔记 早晨:06:40 起床 07:20——08:20 英语 1小时 新概念英语(单词、语法、听读背) 大学英语(单词、语法、听读背) 上午:08:30——10:30 计算机基础 2小时 10:50——11:30 计算机科学技术导论 计算机组成原理 微机原理及接口技术 Intel微处理器结构编程与接口 深入理解计算机系统 80x86汇编语言程序设计 8086-8088宏汇编语言程序设计教程 BIOS研发技术剖析 自己动手写操作系统 操作系统原理 Windows操作系统原理 Windows内部原理系列 Windows程序内部运行原理 计算机网络第五版 中午:12:00——02:00 午休 下午:02:30——04:30 计算机应用及编程 Windows用户管理指南、AD配置指南、网络专业 指南、Windows即学即会教程 Windows下32位汇编语言程序设计、C#编程 晚上:05:30——08:00 锻炼、晚餐 08:00——09:00 辅导 09:00——11:00 专业基础 2小时 大学数学、大学物理、电机及拖动、电力电子技 术、通信技术 11:30 休息 目录 第一章C语言概述................................................................................................................................. - 1 - 1.1 C程序结构特点16 ................................................................................................................ - 1 - 1.2 C程序上机步骤17 ................................................................................................................... - 1 -第二章程序的灵魂——算法23 ............................................................................................................ - 2 - 2.1 算法24 ..................................................................................................................................... - 2 - 2.2 算法的三种基本结构............................................................................................................... - 2 - 2.3 结构化程序设计方法42 .......................................................................................................... - 2 -第三章数据类型运算符与表达式48 .................................................................................................. - 2 - 3.1 C语言的基本元素48 ............................................................................................................... - 2 - 3.2 C的数据类型48 ....................................................................................................................... - 2 - 3.3 常量与变量48 .......................................................................................................................... - 3 - 3.4 基本类型................................................................................................................................... - 3 - 3.5 变量63 ..................................................................................................................................... - 4 - 3.6 不同类型数据间的混合运算................................................................................................... - 5 - 3.7 函数的调用过程(补充)....................................................................................................... - 5 -第四章最简单的C程序设计——顺序程序设计77 ........................................................................... - 5 - 4.1 字符数据的输入输出............................................................................................................... - 5 -第五章选择结构的程序设计97 ............................................................................................................ - 6 -第六章循环结构程序设计..................................................................................................................... - 6 - 6.1 语句标号................................................................................................................................... - 6 - 6.2 break语句和continue语句 ...................................................................................................... - 6 -第七章数组132 ...................................................................................................................................... - 6 - 7.1 构造类型................................................................................................................................... - 6 - 7.2 数组133 ................................................................................................................................... - 6 - 7.3 二维数组................................................................................................................................... - 7 - 7.4 字符串——字符数组............................................................................................................... - 7 - 7.5 字符串处理函数#include C程序设计谭浩强第二 章习题与答案 TYYGROUP system office room 【TYYUA16H-TYY-TYYYUA8Q8- 习题 2.1什么是算法?是从日常生活中找三个例子,描述他们的算法 答:对操作的描述,即操作步骤,就是算法。 广义的说;为解决一个问题而采取的方法和步骤,就称为“算法”。 例:(略) 2.2什么叫结构化的算法为什么要提倡结构化的算法 2.3 答:由基本节构所构成的算法属于“结构化”的算法。 结构化的算法便于编写、阅读、便于修改和维护。这就减少了程序出错的机会、提高了程序的可靠性,保证了程序的质量。 2.4试述三种基本结构的特点,你能否自己另外设计两种基本结构(要符合基本结构 的特点)。 答:基本结构有以下共同点: 1:只有一个入口。图2-中的a点为入口。 2:只有一个出口。图2-中的b点为出口。注意,一个判断框有两个出口,但一个选择结构只有一个出口。不能混淆。 3:结构内的每一部分都有被执行到的机会。也就是说,对每一个框来说,都应当有一条到出口的路径通过它。图2-20中就没有一条从入口到出口的路径通过A框。 4:结构内不存在死循环(无终止的循环)。图2-21就是一个死循环。 需要说明的是基本结构并不一定只限于以上3中,只要有以上四种特点就可以。人们可以自己定义之。例:如下两图 2.5用传统流程图表示求解一下问题的算法。 (1)有两个瓶子A和B,分别放醋和酱油,要求将他们互换。 #include<>void main(){int a;int b;int c;a=10;b=5;printf("%d,%d\n",a,b);c=a;a=b;b=c;printf("%d,%d\n",a,b);} (2)一次将10个数输入,要求将将其中最大的数输出。 #include<>void main(){int a[10];int i;int max;printf("input 10 numbers.\n");for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n");max=a[0];for(i=1;i<10;i++) if(maxvoid main(){int a;int b;int c;int t;scanf("%d%d%d",&a,&b,&c);printf("\n");printf("the first numbers:");printf("%d,%d,%d\n",a,b,c);if(a C程序设计(第四版)(谭浩强)第2章课 后习题答案 算法——程序的灵魂 P017 2.1 计算机1-5相乘的积. #include 暂时没法做. P019 2.3 判断2000-2500年中的闰年,并输出. 年的概念是地球围绕太阳一周的时间(所谓公转周期)称为一年,这个周期是相当稳定的,很长时间也不会变动1秒,但是真正的一年是365.2423天(目前)。所以,如果每年定义为365天的话,1年就会多出0.2423天,4年就会多出0.9692天,非常接近1天,这样闰年就出现了,也就是每4年要有1年设置为366天,来抵消这多出的1天。规则为:·1)如果年份能被4整除,则该年计为闰年;可是,假如不做调整的话,当400年的时候,累计才多出96.92天,接近于多出97天,闰年的设置却多出来100天,所以要在400年内,再撤销3个闰年。怎么撤销呢?就有了下面这个规则:·2)如果年份能被100整除,则不计为闰年;问题又来了,400年里有4个100年吧,去掉后四个100年后,又少了一个,所以再加一个规则就是:·3)如果年份能被400整除,则计为闰年。简单说来每400年里设置了97个闰年,也就是400里的前3个100年不设置闰年,误差被调整到400年仅有0.08天。 #include 第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例6 1.4.2C语言程序的结构10 1.5运行C程序的步骤与方法12 1.6程序设计的任务14 1-5 #include 2.5结构化程序设计方法34 习题36 第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例37 3.2数据的表现形式及其运算39 3.2.1常量和变量39 3.2.2数据类型42 3.2.3整型数据44 3.2.4字符型数据47 3.2.5浮点型数据49 3.2.6怎样确定常量的类型51 3.2.7运算符和表达式52 3.3C语句57 3.3.1C语句的作用和分类57 3.3.2最基本的语句——赋值语句59 3.4数据的输入输出65 3.4.1输入输出举例65 3.4.2有关数据输入输出的概念67 3.4.3用printf函数输出数据68 3.4.4用scanf函数输入数据75 3.4.5字符数据的输入输出78 习题82 3-1 #include C语言程序设计谭浩强第四版期末复习重点
C程序设计第四版谭浩强_习题&例题第7章
C语言程序设计第四版第六章答案_谭浩强
《C语言程序设计》_谭浩强版教案
C语言程序设计课后习题答案第四版谭浩强完整版
C语言程序设计谭浩强重点笔记
C程序设计谭浩强第二章习题与答案
C程序设计(第四版)(谭浩强)第二章课后习题答案
(完整版)《C语言程序设计》课后习题答案(第四版)谭浩强