第一篇:谭浩强C语言第八章答案.doc(范文模版)
8.1 # include
int a,b,Y,B;printf(“输入两个数字:n”);scanf(“%d%d”,&a,&b);Y=yueshu(a,b);B=beishu(a,b);printf(“最大公约数为Y=%dn最小公倍数为B=%dn”,Y,B);} int yueshu(int m,int n){
} int r,t;if(m } r=m%n;if(r==0)break;else { m=n;n=r;} return n;int beishu(int m,int n){ } 8.2 # include int c;c=m*n/yueshu(m,n);return c; int x1,x2; x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a);printf(“%fn%fn”,x1,x2);return 0;} float gen2(int a,int b,int c){ int x;x=-b/(2*a);printf(“%fn”,x);return x;} float gen3(int a,int b,int c){ } printf(“无实根;n”);return 0;float function(int a,int b,int c){ float x,y;y=a*x*x+b*x+c;return y;} void main(){ int x,a,b,c,y;printf(“请输入系数:n”); } 8.3 # include int sushu(int x);void main(){ int y;printf(“请输入要判断的数字:n”);scanf(“%d”,&y);sushu(y);} int sushu(int x){ } 8.4 # include } void zhuanzhi(int b[3][3]){ int i;float k;k=sqrt(x);for(i=2;i<=k;i++)if(x%i==0)break; if(i>k+1)printf(“%d就是素数!”,x);else printf(“%d不是素数n”,x);int a[3][3]={0};int i,j;printf(“请输入三维数组:n”);for(i=0;i<3;i++)for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);zhuanzhi(a);int i,j;for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf(“%2d”,b[j][i]); } 8.5 } } printf(“n”);# include char b[50];printf(“请输入字符串:n”);gets(b);fanxu(b);printf(“n”);} void fanxu(char a[50]){ int i;for(i=strlen(a);i>=0;i--) printf(“%c”,a[i]);} 8.6 # include lianjie(a,b);} { printf(“n”);void lianjie(char a1[20],char a2[20])int m,n,i;char a3[50];m=strlen(a1);n=strlen(a2);for(i=0;i } for(i=0;i a3[m+n]=' ';for(i=0;i printf(“%c”,a3[i]);8.7 # include char a1[50];printf(“请输入一字符串:n”);gets(a1);yuanyin(a1);} void yuanyin(char b[30]){ } 8.8 # include int i,j=0;char c1[20]={0},c2[20]={0};for(i=0;i if(b[i]=='a'||b[i]=='e'||b[i]=='i'||b[i]=='o'||b[i]=='u' ||b[i]=='A'||b[i]=='E'||b[i]=='I'||b[i]=='O'||b[i]=='U') { c1[j]=b[i]; j++;} // c1[j+1]=' '; strcpy(c2,c1);for(i=0;i kong(a);printf(“n”);} void kong(int b[4]){ } 8.9 # include } printf(“%d”,b[i]);printf(“ ”);gets(a);tongji(a);} void tongji(char b[50]){ int i;int d=0,x=0,s=0,k=0,q=0;for(i=0;i if(b[i]>='A'&&b[i]<='Z')d++;else if(b[i]>='a'&&b[i]<='z')x++;else if(b[i]>='0'&&b[i]<='9')s++;else if(b[i]==' ')k++;else q++;} printf(“大写%d个n小写%d个n数字%d个n空格%d个n其他%d个n”,d,x,s,k,q);} 8.10 # include # include } void danci(char str1[100],char w0[15]){ } int i=0,j=0,t=0;char w1[15];for(i=0;i if(!((str1[i]>='a'&&str1[i]<='z')||(str1[i]>='A'&&str1[i]<='Z'))){ t=i;i=0;continue;gets(a);danci(a,b); } w1[j]=str1[i];j++;if(j>=t)strcpy(w0,w1);} puts(w0);8.11 # include int b[10]={0},i;printf(“请输入十个数字:n”);for(i=0;i<10;i++)scanf(“%d”,&b[i]);maopao(b);printf(“所排顺序为:”); for(i=0;i<10;i++)printf(“%-3d”,b[i]);printf(“n”); } void maopao(int a[10]){ } int i,j,t;for(j=1;j<9;j++){ for(i=0;i<9-j;i++) } { } if(a[i]>a[i+1]){ t=a[i];a[i]=a[i+1];a[i+1]=t;} 8.12 # include void main(){ } void ND(int a,int b,int c,int d){ int p,q,r,s; printf(“请输入系数:n”);scanf(“%d%d%d%d”,&p,&q,&r,&s);printf(“方程为:%dX^3+%dX^2+%dX+%d=0n”,p,q,r,s);ND(p,q,r,s); float x=1,x0,x1;do { x1=x; x0=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);x=x0;}while(fabs(x1-x0)>1e-6);printf(“%fn”,x0); } 8.13 # include } float lerangde(float x1,int n){ if(n==0||n==1) } { if(n==0) return 1;else return x1;} else return((2*n-1)*x1-lerangde(x1,n-1)-(n-1)*lerangde(x1,n-2))/n;float x,y;int m;printf(“请输入x以及阶数m:n”);scanf(“%f%d”,&x,&m);y=lerangde(x,m);printf(“勒让德多项式值为:%-f”,y);putchar(10); 8.14# include //调用函数; void main(){ int a[2][3]={0};int i,j;printf(“输入学生以及对应的成绩:n”);for(i=0;i scanf(“%d”,&a[i][j]); stu_average(a);sourse_average(a);max(a);average(a);printf(“每个学生的平均分为:%fn”,stu_average(a)); } //计算每个学生平均成绩; float stu_average(int a[M][N]){ int i,j,sum=0;float x1;for(i=0;i for(j=0;j return x1;} //课程平均成绩; void sourse_average(int a[M][N]){ int sum=0,i,j;float x1;for(i=0;i { } sum=sum+a[i][j];x1=(float)(sum/N);printf(“每门课程的平均分为:%fn”,x1); } //最高分; void max(int a[M][N]){ int max=a[0][0],t,s,k,i,j;for(i=0;i for(j=0;j } if(max } max=a[i][j];a[i][j]=t;s=i+1;k=j+1;printf(“%d %d %dn”,max,s,k); } 8.15# include } shuru();printf(“排好顺序为:n”);paixu();found();void shuru(){ int i;printf(“请输入职工姓名以及工号:n”); } void paixu(){ for(i=0;i<4;i++)scanf(“%s%d”,m[i],&n[i]);for(i=0;i<4;i++)printf(“%s的工号是:%dn”,m[i],n[i]);int i,t,j;char c[20];for(j=0;j<=3;j++){ for(i=0;i<3-j;i++){ } } } if(n[i]>n[i+1]){ } t=n[i];n[i]=n[i+1];n[i+1]=t; strcpy(c,*m[i]);strcpy(*m[i],*m[i+1]);strcpy(*m[i+1],c);for(i=0;i<4;i++)printf(“%st%dn”,m[i],n[i]); void found(){ int p,i,j,flag=0,mid; printf(“输入要查找的职工号:n”);scanf(“%d”,&p);i=0;j=3;while(i<=j){ } mid=(i+j)/2;if(p==n[mid]){ flag=1;break;} else { } if(p>n[mid])j=mid-1;else i=mid+1; if(flag==1) printf(“找到了,名字是%sn”,m[mid]); else printf(“无此人!n”); } 8.16 # include char a[20]={0},c[20],b[20];int i,j,m,n,y;printf(“请输入十六进制数字:n”);gets(a);n=strlen(a);m=strlen(c);for(i=0;i<20;i++){ if(a[i]<='9')a[i]=a[i]-48;else if(a[i]<='F')a[i]=a[i]-55;else { a[i]=a[i]-87;} } for(i=0;i } for(i=0;i<20;i++){ int k;c[0]=c[0]*16+a[i];for(k=1;k<=m;k++)c[k]=c[k]*16;y=0;y=a[i];for(j=3;j>=0;j--){ } b[i*4+j]=y%2;y=y/2; } for(k=0;k<=m;k++){ } while(y>0){ } m++;c[m]=y%10;y=y/10;y=y+c[k];c[k]=y%10;y=y/10;for(i=m;i>=0;i--)printf(“%d”,c[i]);getchar();} 8.17 # include } scanf(“%d”,&n);F(n);putchar(10);void F(int m){ int j;if(m>=0&&m<=9)printf(“%d”,m);else { } j=m%10;F(m/10); printf(“%d”,j);} 8.18 # include void DJT(int y,int m,int d);int leap(int year);void main(){ int year,month,day;printf(“请输入年-月-日:n”); } int leap(int year){ } int flag=0;if(year%4==0){ if(year%100==0){ if(year%400==0)flag=1;else flag=0;scanf(“%d%d%d”,&year,&month,&day);DJT(year,month,day); } else flag=1;} else flag=0;return flag; void DJT(int y,int m,int d){ int p=0;int r=0;if(leap(y))r=29;else r=28;switch(m){ case 1:p=d;break;case 2:p=31+d;break;case 3:p=31+r+d;break;case 4:p=31+r+31+d;break;case 5:p=31+r+31+30+d;break;case 6:p=31+r+31+30+31+d;break; } case 7:p=31+r+31+30+31+30+d;break;case 8:p=31+r+31+30+31+30+31+d;break;case 9:p=31+r+31+30+31+30+31+31+d;break;case 10:p=31+r+31+30+31+30+31+31+30+d;break;case 11:p=31+r+31+30+31+30+31+31+30+31+d;break;case 12:p=31+r+31+30+31+30+31+31+30+31+30+d;break;default :;} printf(“这是%d年的第%d天n”,y,p); 一 选择题(24分,每小题2分) 1.已知函数fread的调用形式为fread(buffer,size,count,fp),其中buffer代表的是()。 A 存放读入数据项的存储区 B 存放读入数据的地址或指向此地址的指针 C 一个指向所读文件的文件指针 D 一个整形变量,代表要读入的数据项总数 2.以下程序的输出结果为()。main(){ int i=010,j=10; printf(“%d,%dn”,i++,j--);} A 11,9 B 9,10 C 8,10 D 9,9 3.设a为int型变量,执行下列赋值语句后,a的取值分别是()。a=125.534;a=20.0/3;a=(int)125.521%4;a=5<<2; A 125,6,31,1 B 125,6,1,20 C 125,6.666666,31,20 D 125.534,6.666666,2,20 4.设i和k都是int类型,则for循环语句()。for(i=0,k=-1;k=1;i++,k++)printf(“****n”);A 循环结束的条件不合法 B 循环体一次也不执行 C 循环体只执行一次 D 是无限循环 5.以下程序的输出结果为()。main(){ char c; int i; for(i=65;i<68;i++) { c=i+32; switch(c) { case 'a': case 'b': case 'c':printf(“%c,”,c);break; default:printf(“end”); } } } A a,b,c,end B a,a,a,end C a,a,a,D a,b,c,6.函数调用语句:fseek(fp,-10L,2);的含义是()。 A 将文件位置指针从文件末尾处向文件头的方向移动10个字节 B 将文件位置指针从当前位置向文件头的方向移动10个字节 C 将文件位置指针从当前位置向文件末尾方向移动10个字节 D 将文件位置指针移到距离文件头10个字节处 7.以下程序的输出结果为()。main(){ int i=0,j=0; while(s1[i]!=' ') i++; while(s2[j]!=' ') s1[i++]=s2[j++]; s1[i]=0; printf(“%sn”,s1);} A side B country C sidetry D countryside 8.下列说法不正确的是()。 A 主函数main中定义的变量在整个文件或程序中有效 B 不同函数中,可以使用相同名字的变量 C 形式参数是局部变量 D 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效 9.在下列程序段中,枚举变量 c1的值是()。enum color { red,yellow,blue=4,green,white}c1;c1=yellow;c1=white;A 1 B 3 C 5 D 6 10.设有说明 int(*ptr)();其中标识符ptr是()。 A 是一个指向整形变量的指针 B 是一个指针,它指向一个函数值是int的函数 C 是一个函数名 D定义不合法 11.定义由n个指向整形数据的指针组成的数组p,其正确的方式为()。 A int p;B int(*p)[n];C int *p[n];D int(*p)(); 12.具有相同类型的指针类型变量p与数组a,不能进行的操作是()。 A p=a;B *p=a[0];C p=&a[0];D p=&a; 二 判断对错,对的划“√”,错的划“×”(20分,每小题2分) 1.参加位运算的数据可以是任何类型的数据。 () 2.若有定义和语句: int a;char c;float f;scanf(“%d,%c,%f”,&a,&c,&f); 若通过键盘输入:10 A 12 5 则a=10,c=‘A’,f=12.5。 () 3.C语言把文件看作是一个字符(字节)的序列。 () 4.若有宏定义: #define S(a,b)t=a;a=b;b=t 由于变量t没定义,所以此宏定义是错误的。 () 5.在Turbo C中,下面的定义和语句是合法的: file *fp;fp=fopen(“a.txt”,“r”); () 6.若有定义: char s[ ]=“china”; 则Turbo C系统为数组s开辟6个字节的内存单元。 () 7.若有定义和语句: int a[3][3]={{3,5},{8,9},{12,35}},i,sum=0;for(i=0;i<3;i++) sum+=a[i][2-i];则sum=21。 () 8.若有定义和语句: struct student { int num; char name[10]; float score;} s[5]={{1,“lili”,98.5},{9,“xiaohua”,66}},*p=s;printf(“%d”,*p++);输出结果是1。 () 9.在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量。 () 10.在Turbo C中,此定义和语句是合法的: enum aa{ a=5,b,c}bb;bb=(enum aa)5; ()三 写出下列程序的运行结果(36分,每小题6分)1.main(){ int i=29,j=6,k=2,s; s=i+i/j%k-9;//s=i+(i/j)%k-9 printf(“s=%dn”,s);} 2.main(){ int x=31,y=2,s=0; do { s-=x*y; x+=2;y-=3; } while(x%3==0);//先执行,后判断 printf(“x=%dty=%dts=%dn”,x,y,s);} 3.main(){ int a[6]={10,20,30,40,50,60},i; invert(a,0,5); for(i=0;i<6;i++) printf(“%d,”,a*i+); printf(“n”);} invert(int s[ ],int i,int j)//倒置 { int t; if(i { invert(s,i+1,j-1);//函数自身的嵌套调用,形成循环 t=s[i]; s[i]=s[j]; s[j]=t; } } 4.#include main(){ char str[ ]=“The C program”,c; int i; for(i=2;(c=str[i])!=' ';i++) { switch(c) { case 'g': ++i;break;//由于++i,跳过了g后面的1个字母 case 'o': continue; default: printf(“%c”,c);continue; } printf(“*”); } printf(“n”);} 5.struct w //结构体 { char low; char high;}; union u //共用体 { struct w byte; short word;}uw; main(){ int result; uw.word=0x1234; printf(“word value:%04xn”,uw.word); printf(“high byte:%02xn”,uw.byte.high); printf(“low byte:%02xn”,uw.byte.low); uw.byte.low=0x74; printf(“word value:%04xn”,uw.word); result=uw.word+0x2a34; printf(“the result:%04xn”,result);} 6.main(){ char *s2=“I love China!”,**s1=&s2; char *s3,c,*s4=“w”; s3=&c; *s3='H'; s2=s2+2; printf(“%st%ct%st%cn”,s2,*s3,s4,**s1);} 四 阅读下列程序,在 处填入适当内容,使程序完整(20分,每个空2分) 1.百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹? main(){ int hb,hm,hl,n=0; for(hb=0;hb<=100;hb+=(1)) for(hm=0;hm<=100-hb;hm+=(2)) { hl=100-hb-(3); if(hb/3+hm/2+2*(3)==100) { n++; printf(“hb=%d,hm=%d,hl=%dn”,hb/3,hm/2,2*hl); } } printf(“n=%dn”,n);} 2.用“起泡法”对输入的10个字符排序后按从小到大的次序输出。#define N 10 char str[N]; void main(){ int i,flag; for(flag=1;flag==1;) { scanf(“%s”,str); flag=0; printf(“n”); } sort(___(4)___); for(i=0;i { printf(“%c”,str[i]); } printf(“n”);} sort(char str[N]){ int i,j; char t; for(j=1;j for(i=0;i<10-j;i++) if(str[i]>str[i+1]) { t=str[i]; ____(5)____; ____(6)____;//交换位置 } } 3.以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。) 例如,矩阵为: //冒泡排序 3 0 0 3 2 5 7 3 1 0 4 2 则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。 add(int m,int n,int arr[]){ for(i=0;i for(j=0;j sum=sum+____(7)____; for(j=0;j for(i=1;____(8)____;i++) sum=sum+arr[i*n+j]; return(sum);} 4.用指针作函数参数,编程序求一维数组中的最大和最小的元素值。#define N 10 main(){ void maxmin(int arr[],int *pt1,int *pt2,int n); int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b; p1=&a; p2=&b; maxmin(array,p1,p2,N); printf(“max=%d,min=%d”,a,b);} void maxmin(int arr[],int *pt1,int *pt2,int n){ int i; *pt1=*pt2=arr[0]; for(i=1;i { if(arr[i]>*pt1) ____(9)____; if(arr[i]<*pt2) ____(10)____; } } 答案 一 选择题(24分,每小题2分)1.(B)2.(C)3.(B)4.(D)5.(D)6.(A)7.(D)8.(A)9.(D)10.(B)11.(C)12.(D)二 判断对错,对的划“√”,错的划“×”(20分,每小题2分)1.(×)2.(√) 3.(√)4.(×) 5.(×)6.(√) 7.(√)8.(×) 三 写出下列程序的运行结果(36分,每小题6分)1.s=20 2.x=35 y=-4 s=-29 3.60,50,40,30,20,10, 4.e C pr*am 5.word value:1234 6.love China!H w l high byte:12 low byte:34 word value:1274 the result:3ca8 四 阅读下列程序,在 处填入适当内容,使程序完整(20分,每个空2分)1.(1)3(2)2(3)hm hl 2.(4)str(5)str[i]=str[i+1](6)str[i+1]=t 3.(7)arr[i*n+j](8)i 选择题 1.一个C程序的执行是从 a。 A)本程序的main函数开始,到main函数结束 B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束 2.以下叙述正确的是 c。 A)在C程序中,main函数必须位于程序的最前面 B)C程序的每行中只能写一条语句 C)C语言本身没有输入输出语句 D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误 3.以下叙述不正确的是 d。A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数 D)在C程序中,注释说明只能位于一条语句的后面 4.C语言规定:在一个源程序中,main函数的位置 c。 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 5.一个C语言程序是由 b。 A)一个主程序和若干子程序组成 B)函数组成 C)若干过程组成 D)若干子程序组成 6.C语言中的语句需要 b 符号作为结尾。A): B)C)。D)// 7.C 语言程序中可以对程序进行注释,注释部分用符号_c _括起来。A)‘{‘ 和’}’ B)‘[‘和’]’ C)“/*”和”*/” D)“*/”和”/*” 8.C语言中注释的位置 c。 A)必须在程序的最开始 B)必须在程序的结尾 C)可以在程序的任何位置 D)不可以写到main函数里面 9.C语言程序能够在不同的操作系统下面运行,这说明c语言具有很好的 c。A)适应性 B)移植性 C)兼容性 D)操作性 10.C语言经过编译后生成的文件的后缀是 b。A).c B).cpp C).exe D).obj 11.C语言编译程序的首要工作是 a。 A)检查C语言程序的语法错误 B)检查C语言程序的逻辑错误 C)检查程序的完整性 D)同时检查语法和逻辑错误 12.C语言经过链接后生成的文件的后缀是 c。A).c B).cpp C).exe D).obj 13.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 c。A)必须为字母 B)必须为下划线 C)必须为字母或下划线 D)可以是字母、数字和下划线中任一种字符 14.若以下选项中的变量已正确定义,则正确的赋值语句是 c。A)x1=26.8%3;B)1+2=x2;C)x3=0x12;D)x4=1+2=3;15.设变量x为float型且已经赋值,则以下语句中能够将x中的数值保留到小数点后面两位,并将第三位四舍五入的是 b。 A)x=x*100+0.5/100.0 B)x=(x*100+0.5)/100.0 C)x=(int)(x*100+0.5)/100.0 D)x=(x/100+0.5)*100.0 16.下列C语言中运算对象必须是整型的运算符是 a。A)%= B)/ C)= D)*= 17.若有以下程序段:int c1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3中的值是 a。A)0 B)0.5 C)1 D)2 18.设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是 D。 A)把x和y按从大到小排列 B)把x和y按从小到大排列 C)无确定结果 D)交换x和y中的值 19.下列变量定义中合法的是 a。 A)short _a=1-.le-1;B)double b=1+5e2.5;C)long do=0xfdaL;D)float 2_and=1-e-3;20.若变量已正确定义并赋值,符合C语言语法的表达式是 a。 A)a=b=7 B)a=7+b+c,a++ C)int(12.3%4)D)a=a+7=c+b 21.若有float x;则sizeof(x)和sizeof(float)两种描述 A。A)都正确 B)都不正确 C)前者正确 D)后者正确 22.有整型变量x,单精度变量y=5.5,表达式x=(float)(y*3+((int)y)%4)执行后,x的值 为(b)。 A)17 B)17.500000 C)17.5 D)16 23.已知float x=1,y;则y=++x*++x的结果是 a。A)y=9 B)y=6 C)y=1 D)表达式是错误的 24.下列关于单目运算符++、--的叙述中正确的是 D。A)它们的运算对象可以是任何变量和常量 B)它们的运算对象可以是char型变量和int型变量,但不能是float型变量 C)它们的运算对象可以是int型变量,但不能是double型变量和float型变量 D)它们的运算对象可以是char型变量、int型变量和float型变量 25.已定义ch为字符型变量,下列赋值语句中错误的是 c。A)ch='';B)ch=62+3;C)ch=NULL;D)ch='xaa';26.假定有以下变量定义,则能使值为3的表达式是 d。int k=7,x=12;A)x%=(k%=5)B)x%=(k-k%5)C)x%=k-k%5 D)(x%=k)-(k%=5)27.设有“int x=11;”则表达式(x++*1/3)的值是 a。A)3 B)4 C)11 D)12 28.已定义c为字符型变量,则下列语句中正确的是 c。A)c=’97’ B)c=“97” C)c=97 D)c=“a” 29.sizeof(float)是 c。 A)一个双精度型表达式 B)一个整型表达式 C)一种函数调用 D)一个不合法的表达式 30.有以下定义语句: double a,b;int w;long c;若各变量已正确赋值,则下列选项中正确的表达式是 c。A)a=a+b=b++ B)w%((int)a+b)C)(c+w)%(int)a D)w=a=b 31.若变量a是int类型,并执行了语句:a=‘A’+1.6;,则正确的叙述是 c。A)a的值是字符C B)a的值是浮点型 C)不允许字符型和浮点型相加 D)a的值是字符’A’的ASCII值加1 32.设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是 d。A)6.500000 B)6 C)5.500000 D)6.000000 33.在下列选项中,不正确的赋值语句是 d。A)++t;B)n1=(n2=(n3=0));C)k=i==j;D)b+c=1;34.已知char a;int b;float c;double d;则表达式a+b * c-d的结果为__d __型。A)char B)int C)float D)double 35.若x 为int型变量,则执行语句x=10;x+=x=x-x后,x的值为__a ____。A)0 B)10 C)20 D)30 36.若x、a、b、c均 为int型变量,则执行表达式x=(a = 4, b = 8, c = 12)后,x的 4 值为__c__。 A)4 B)8 C)12 D)24 37.在C程序中,x + y是_____、x + y;是___a____。 A)表达式、语句 B)表达式、表达式 C)语句、语句 D)语句、表达式 38.假设变量a是整型,b是实型,c是双精度型,则表达式30+a+c*b的值的数据类型是 c。 A)int B)float C)double D)不确定 39.在C语言中,char型数据在内存中的存储形式是 d。A)补码 B)反码 C)原码 D)ASCII码 40.执行下列程序片段时输出结果是 c。int x=13,y=5;printf(“%d”,x%=(y/=2));A)3 B)2 C)1 D)0 41.执行语句scanf(“%c%c%c”,&c1,&c2,&c3),输入abc时,变量c1、c2、c3的值分别为 a。A)'a', 'b', 'c' B)'a','b', '' C)'a', '', 'b' D)'a','','c' 42.设c1,c2均是字符型变量,则以下不正确的函数调用为 d。A)scanf(“c1=%cc2=%c”,&c1,&c2);B)c1=getchar();C)putchar(c2);D)putchar(c1,c2);43.下列函数中能够向终端输出一个字符或字符型变量值的是 d。A)gets B)puts C)getchar D)putchar 44.若有下列语句 char c=’A’; printf(“%d”,c);则输出的结果是 c。 A)A B)c C)65 D)错误的语句 45.下列程序输入’a’字母后,执行程序后输出的结果是 b。#include A)处理操作 B)数据流 C)控制流 D)调用关系 47.程序流程图中的菱形框表示 c。A)输入 B)输出 C)判断 D)循环 48.下面的流程图是 d 结构的程序设计。A)顺序 B)顺序加选择 C)判断 D)循环 49.NS图完全取消了 a,不允许有随意的控制流,全部算法写在一个矩形框内。A)流程线 B)输出 C)判断 D)循环 50.以下描述中正确的是 c。 A)由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C)do-while循环至少要执行一次循环语句 D)do-while循环中,根据情况可以省略while 51.逻辑运算符两侧运算对象的数据类型 d。 A)只能是0或1 B)只能是0或非0正数 C)只能是整型或字符型数据 D)可以是任何类型的数据 52.下列运算符中优先级最高的是 b。(非,算术,关系,AND,或,赋值运算符)A)< B)十 C)&& D)!= 53.能正确表示“当x 的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是 c。A)(x>=1)&&(x<=10)&&(x> = 200)&&(x<=210)B)(x>=1)||(x<=10)||(x>=200)||(x<=210)c)(x>=1)&&(x<=10)||(x>= 200)&&(x<=210 D)(x > =1)||(x< =10)&&(x> = 200)||(x<=210)54.判断char型变量 ch 是否为大写字母的正确表达式是 c。A)' A' <=ch<='z' B)(ch> = 'A')&(ch<=' Z')C)(ch>=' A')&&(ch<='Z')D)(' A' < = ch)AND('Z'> = ch)55.设x,y 和z是int型变量,且x = 3,y= 4,z= 5,则下面表达式中值为0的是 d。A)'y'&&'y' B)x < =y C)x||y+z&&y-z D)!(x printf(“It is the %dth day.”,x);return 0;} A)是死循环 B)循环执行2次 C)循环执行1次 D)有语法错误 61.对switch后括号内的表达式,叙述正确的是 c。A)只能是数字 B)可以是浮点数 C)只能是整型数据或字符型数据 D)以上叙述都不对 62.下列关于switch和break语句的说法中正确的是 b。A)break语句只能用在switch语句中 B)在switch语句中,可以根据需要决定是否使用break语句 C)在switch语句中必须使用break语句 D)以上选项都不正确 63.以下正确的描述是 b。 A)continue语句的作用是结束整个循环的执行 B)只能在循环体内和switch语句体内使用break语句 C)在循环体内使用break语句或continue语句的作用相同 D)从多层循环嵌套中退出时, 只能使用goto语句 64.以下说法中错误的是 d。 A)C语言总是从main函数开始执行 B)函数在程序中出现的先后位置与其被调用的顺序无关 C)一个完整的C程序可由若干个C源程序文件组成 D)main函数的定义必须出现在所有其他函数之前,否则将产生运行错误 65.C语言规定,函数返回值的类型是 c。 A)由return语句中表达式的类型所决定 B)由调用该函数的主调函数所具有的类型决定 C)由定义该函数时所指定的函数类型决定 D)由系统随机决定 66.以下说法中正确的是 b。 A)main函数和其他函数间可相互调用 B)main函数可以调用其他函数,但其他函数不能调用main函数 C)因为main函数可不带参数,所以其后的参数小括号能省略 D)根据情况可以不写main函数 67.以下函数定义中正确的是 b。A)fun(float x,y)B) fun(int x, int y)C) fun(int x, int y);D)void fun(int x, int y){ return x+y;} { return x+y;} { return x+y;} { return x+y;} 68.以下说法中正确的是 b。 A)在一个函数的执行过程中又出现对其他函数的调用,则称此函数为递归函数。B)递归函数中必须存在递归结束的条件 C)函数的递归调用可以提高程序的执行效率 D)递归函数中必须出现return语句 69.以下有关“递归函数”说法中正确的是 a。 A)既允许直接递归调用,也允许间接递归调用 B)只允许直接递归调用 C)既不允许直接递归调用,也不允许间接递归调用 D)只允许间接递归调用 70. C语言中,函数调用时若实参是数组名,则传递给被调函数对应形参的是 d。A)整个数组 B)数组元素的个数 C)数组占用的内存单元个数 D)数组在内存中存放的首地址 71.C语言中,函数调用时若实参是数组名,则被调函数对应形参 c。A)可以是相应类型简单变量 B)必须是相应类型数组名 C)可以是相应类型数组名 D)必须是相应类型的指针变量 72.以下说法中错误的是 d。 A)数组元素可以作为函数实参 B)指针可以作为函数的形参 C)结构变量可以作为函数参数 D)结构指针变量不能作为函数参数 73.C语言中,以下叙述中错误的是 a。A)主函数中定义的变量是全局变量 B)同一程序中,全局变量和局部变量可以同名 C)全局变量的作用域从定义处开始到本源程序文件结束 D)局部变量的作用域被限定在其所定义的局部范围中 74.在一个源程序文件中定义的全局变量,其作用域为 b。 A)整个源程序文件 B)从定义处开始到本源程序文件结束 C)整个主函数 D)所处C程序的所有源程序文件中 75.在C函数中,局部变量的隐含存储类型是 a。A)auto B)static C)register D)extern 76.在C程序中,如果限定一个局部变量只能在所定义的范围中起作用,那么这个变量的存储类型 a。 A)只能是auto B)只能是extern C)可以是auto或static D)可以是extern或static 填空题 1.在C语言中所提供的数据结构是以数据类型形式出现的,其中的基本类型包括int 型 即 整形、float型即_ 单精度浮点型、double型即 双精度浮点型、char型即 字符型 等。2.C语言中的标识符只能由三种字符组成,它们是 字母、数字 和 下划线。 3.C程序中的字符常量是用单引号括起来的一个字符;除此之外,还允许用一种特殊形式的字符常量,是以 反斜杠 开头,被称为转义字符。 4.字符串常量是一对双引号括起来的字符序列,且以 ‘ ’ 结束。5.常量是指在程序执行过程中其值 不能 _改变的量。6.变量是指在程序执行过程中其值 可以改变 的量。7.C实型变量分为 单精度 _和 双精度 _两类。 8.转义字符'n'表示 换行,使光标移到屏幕上下一行开头。9.一个字符变量在内存中占 1 字节。 10.一个字符数据既可以以字符形式输出,也可以以 整数 形式输出。11.字符串常量是用_ “” _括起来的字符序列。 12.在进行运算时,不同类型的数据必须_ 先强制类型转换 _,然后进行运算。13.可以利用_ 强制类型转换 _运算符将一个表达式的值转换成指定的类型。 14.有两种类型转换,一种是在运算时不必用户指定,系统自动进行类型转换;另一种是 用户自己定义的转换(强制类型转换)。15.两个整数相除的结果是_ 整数。16.求模运算符(%)只能用于 整数 _操作数。17.一个表达式的最后加上一个 ; 就成了一个语句。18.若int x = 3,则执行表达式x*= x+= xb;//(b=7)a = a-b;//(a=9)printf(“a=%d, b=%d n”, a,b);return 0;} A=9;b=7 3.写出以下程序运行的结果 , c = 3。#include 4.下面程序的功能是输出100至200之间的不能被3整除的数,请填空使程序完整。int main(){ int n;for(n=100;n<=200;n++){ if(n%3==0)else {printf(“%d ”,n);} } return 0;} 5.下面程序完成的功能是,在全班50个学 生中,征集慈善募捐,当总数达到2000元时就结束。请判断下面程序的正误,如果错误请改正过来(只有一处错误)。 int main(){ float amount,total;int i;for(i=1,total=0;i<=50;i++){ scanf(“%f”,&amount);total=total+amount;if(total>=2000)break;} printf(“%f ”,total);return 0;} 6.执行程序之后,输入2↙6↙3↙,以下程序运行后的输出结果是。(↙表示回车)#include printf(“%e”, t);return 0;} 9.请给出程序运行结果。int main(){ int i;for(i=1;i<=5;i++)printf(“%d ”,sub(i)); printf(“n”);以下程 序 运 行 后的输 出 结 果是。#include printf(“%dn”,fun(a,b)/m);return 0;} int fun(int x,int y){ int m=2;return x*y-m;} 4 11.以下程序的功能是求一个3*4矩阵中最小元素。请填空。 fun(int a[][4]){ int i,j,k,min=10000;for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j] min=a[i][j];return min;} int main(){ int a[3][4]={1,2,3,-22,5,6,-3,8,9,-8,22,10};int k;k= fun(a)printf(“%dn”,k);return 0;} 12.下面程序的功能是:用户从键盘输入两个float型数据a和b,计算并输出a除以b的商。请判断下面程序的正误,如果错误请改正过来。float cal(float a, b){ float x; x=a/b;//注意这样编程输入时 要输入带小说点,要不这一步做的是取整运算;// return x;} int main(){ float a,b;scanf(“%f %f”,&a,&b);printf(“商=%fn”,cal(a,b));return 0;} 5.下面程序的功能是:输出全局变量a、b两者的最小值。请判断下面程序的正误,如果错误请改正过来。(int a=8,b=7;既然是全局变量,应该写到前面,至少在main前) int min(int x,int y){ int z;z=x return 0;} int a=8,b=7 编程题 1.编写一个程序,求满足以下条件的最大的n值。12+22+32+„n2≤10001.#include printf(“长度为abc的三条边不能构成直角三角形n”);} else if(c>a&&c>b){ if((c*c)==(a*a+b*b))printf(“长度为abc的三条边能构成直角三角形n”);else printf(“长度为abc的三条边不能构成直角三角形n”);} return 0;} 3.判断用户输入的字符是数字字符、字母字符还是其它字符。 4.从键盘输入3名学生的5门成绩,分别找出每个学生的最高成绩,用循环嵌套。5.编写函数,删除字符串中的所有数字字符。6.分别求出1-100之间奇数之和、偶数之和。7.输入三个不同的整数,输出三个整数中的最大数。#include 例1.1 要求在屏幕上输入以下一行信息.This is a C program.编写程序: #include // 这是编译预?处理命令 int main() // 定义主函数 { // 函数开始的标志 printf(“This is a C program.n”); // 输出所指定的一行信息 return 0; // 函数执行完毕时返回函数值0 } 例1.2 求两个整数之和.编写程序: #include // 这是编译预处理命令 int main() // 定义主函数 { // 函数开始 int a,b,sum; // 本行是程序的声明部分,定义a、b、sum为整型变量 a = 123; // 对变量a赋值 b = 456; // 对变量b赋值 sum = a + b; // 进行a+b 的运算,并把结果存放在变量sum中 printf(“sum is %dn”,sum); // 输出结果 return 0; // 使函数返回值为0 } // 函数结束 例1.3 求两个整数的较大者.编写程序: #include // 定义主函数 { // 主函数体开始 int max(int x,int y); // 对被调用函数max的声明 int a,b,c; // 定义变量a,b,c scanf(“%d,%d”,&a,&b); // 输入变量a和b的值 c = max(a,b); // 调用max函数,将得到的值赋给c printf(“max=%dn”,c); // 输出c的值 return 0; // 返回函数值为0 } int max(int x,int y) //定义max函数,函数值为整型, 形式参数x和y为整型 { int z; // max函数中的声明部分,定义本函数中用到的变量z为整型 if(x > y)z = x;else z = y;return(z); //将z的值返回,通过max带回到调用函数的位置 } 例2.1 求1×2×3×4×5 编写程序: #include t=t*i; i=i+1;} printf(“%dn”,t);return 0;} 例2.2 有50个学生,要求将成绩在80分以上的学生的学号和成绩输出。编写程序: 例2.19 求 编写程序: #include int sign=1; double deno=2.0,sum=1.0,term; // 定义deno,sum,term为双精度变量 while(deno<=100) { sign=-sign; term=sign/deno; sum=sum+term; deno=deno+1; } printf(“%fn”,sum); return 0;} 例3.1 有人用温度计测量出用华氏法表示的温度(如 F,今要求把它转换为以摄氏法表示的温度(如 C)。 编写程序: #include float f,c; // 定义f和c为单精度浮点型变量 f=64.; // 指定f的值 c=(5.0/9)*(f-32); // 利用公式计算c的值 printf(“f=%fnc=%fn”,f,c); // 输出c的值 return 0;} 例3.2 计算存款利息。有1000元,想存一年。有三种方法可选:(1)活期,年利率为r1 (2)一年期定期,年利率为r2(3)存两次半年定期,年利率为r3 请分别计算出一年后按三种方法所得到的本息和。编写程序: #include float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3; p1 = p0 *(1 + r1); p2 = p0 *(1 + r2); p3 = p0 *(1 + r3/2)*(1 + r3/2); printf(“p1=%fnp2=%fnp3=%fn”,p1,p2,p3); return 0;} 11111123499100例3.3 给定一个大写字母,要求用小写字母输出。编写程序: #include char c1,c2; c1='A'; // 将字符'A'的ASCII代码放到c1变量中 c2=c1+32; // 得到字符'a'的ASCII代码,放在c2变量中 printf(“%cn”,c2); // 输出c2的值,是一个字符 printf(“%dn”,c2); // 输出c2的值,是字符'a'的ASCII代码 return 0;} 例3.10 改写例3.3程序,使之可以适用于任何大写字母.从键盘输入一个大写字母,在显示屏上显示对应的小写字母.编写程序: #include char c1,c2; c1=getchar(); // 从键盘读入一个字符,赋给字符变量c1 c2=c1+32; // 得到字符'a'的ASCII代码,放在字符变量c2中 putchar(c2); // 输出c2的值,是一个字符 putchar('n'); return 0;} #include char c1,c2; c1=getchar(); // 从键盘读入一个大写字符,赋给字符变量c1 c2=c1+32; // 得到对应的小写字符的ASCII代码,放在字符变量c2中 printf(“大写字母:%cn小写字母:%cn”,c1,c2);// 输出c1,c2的值---大小写字符 return 0;} 例3.4 给出三角形的三边长,求三角形面积。编写程序: #include double a,b,c,s,area; // 定义各变量,均为double型 a=3.67; // 对边长a赋值 b=5.43; // 对边长b赋值 c=6.21; // 对边长c赋值 s=(a+b+c)/2; // 计算s area=sqrt(s*(s-a)*(s-b)*(s-c)); // 计算area printf(“a=%ftb=%ft%fn”,a,b,c); // 输出三边a,b,c的值 printf(“area=%fn”,area); // 输出面积area的值 return 0;} 例3.5 求ax 2 bx c 0 方程的根。a、b、c由键盘输入 设 b ac >0 4编写程序: #include // 程序中要调用求平方根函数sqrt int main() {double a,b,c,disc,x1,x2,p,q; // disc是判别式sqrt(b*b-4ac) scanf(“%lf%lf%lf”,&a,&b,&c); // 输入实型变量的值要用格式声明“%f” disc=b*b-4*a*c; if(disc<0)printf(“This equation hav't real rootsn”); else { p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q;x2=p-q; // 求出方程的两个根 printf(“x1=%7.2fnx2=%7.2fn”,x1,x2); // 输出方程的两个根 } return 0;} 例3.6 用%f输出实数,只能得到6位小数.编写程序: #include 例3.8 先后输出BOY三个字符。编写程序: #include char a='B',b='O',c='Y'; putchar(a); putchar(b); putchar(c); putchar('n'); return 0;} #include char a,b,c; a='B';b='O';c='Y'; putchar(a); putchar(b); putchar(c); putchar('n'); return 0;} // 定义3个字符变量,并初始化 // 向显示器输出字符B // 向显示器输出字符O // 向显示器输出字符Y // 向显示器输出一个换行符 // 定义3个字符变量 // 给3个字符变量赋值 // 向显示器输出字符B // 向显示器输出字符O // 向显示器输出字符Y // 向显示器输出一个换行符 例3.9 从键盘输入BOY三个字符,然后把它们输出到屏幕。编写程序: #include { char a,b,c; // 定义字符变量a,b,c a=getchar(); // 从键盘输入一个字符,送给字符变量a b=getchar(); // 从键盘输入一个字符,送给字符变量b c=getchar(); // 从键盘输入一个字符,送给字符变量c putchar(a); // 将变量a的值输出 putchar(b); putchar(c); putchar('n'); return 0;} #include { putchar(getchar()); putchar(getchar()); putchar(getchar()); putchar('n'); return 0;} // 将变量a的值输出 // 将变量a的值输出 // 换行 // 将接收到的字符输出 // 将接收到的字符输出 // 将接收到的字符输出 例4.1 在例3.5的基础上对程序进行改进。题目要求是求 c 方程的根。axbx 02由键盘输入a,b,c。假设a,b,c的值任意,并不保证 b 4ac 0 。需要在程序中进行判别,如果 b 2 ac 0 ,就计算并输出方程的两个实根, 4否则就输出“方程无实根”的信息。 编写程序: #include // 程序中要调用求平方根函数sqrt int main() {double a,b,c,disc,x1,x2,p,q; // disc是判别式sqrt(b*b-4ac) scanf(“%lf%lf%lf”,&a,&b,&c); // 输入双精度浮点型变量的值要用格式声明“%lf” disc=b*b-4*a*c; if(disc<0)printf(“This equation hav't real rootsn”); else { p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q;x2=p-q; // 求出方程的两个根 printf(“real roots:nx1=%10.6fnx2=%10.6fn”,x1,x2); // 输出方程的两个根 } return 0;} 例4.2 输入两个实数,按代数值由小到大的顺序输出这两个数。编写程序: #include float a,b,t; scanf(“%f,%f”,&a,&b); if(a>b) { t=a; a=b; b=t; } printf(“%5.2f,%5.2fn”,a,b); return 0;} 例4.3 输入3个数a,b,c,要求按由小到大的顺序输出。编写程序: #include float a,b,c,t; scanf(“%f,%f,%f”,&a,&b,&c); if(a>b) { t=a; a=b; b=t; } // 实现a和b的互换 if(a>c) { t=a; a=c; c=t; } // 实现a和c的互换 if(b>c) { t=b; b=c; c=t; } // 实现b和c的互换 printf(“%5.2f,%5.2f,%5.2fn”,a,b,c); return 0;} 例4.4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。编写程序: #include char ch; scanf(“%c”,&ch); ch=(ch>='A' && ch<='Z')?(ch+32): ch; printf(“%cn”,ch); return 0;} 例4.5有一函数: 1(x0) y0(x0)1(x0) 编一程序,输入一个x值,要求输出相应的y值。编写程序: 程序1: #include int x,y; scanf(“%d”,&x); if(x<0) y=-1; else if(x==0)y=0; else y=1; printf(“x=%d,y=%dn”,x,y); return 0;} 程序2: #include int x,y; scanf(“%d”,&x); if(x>=0) if(x>0)y=1; else y=0; else y=-1; printf(“x=%d,y=%dn”,x,y); return 0;} 例4.6 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为 60分以下。成绩的等级由键盘输入。编写程序: #include char grade; scanf(“%c”,&grade); printf(“Your score:”); switch(grade) { default: printf(“data error!n”);break; case 'A': printf(“85~100n”);break; case 'B': printf(“70~84n”);break; case 'C': printf(“60~69n”);break; case 'D': printf(“<60n”);break; } return 0;} 例4.7 编写程序,用switch语句处理菜单命令。 在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个’A’或’a’字符,就会执行A操作,输入一个’B’或’b’字符,就会执行B操作,等等。 编写程序: #include void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) { case 'a': case 'A': action1(a,b);break; case 'b': case 'B': action2(a,b);break; default: putchar('a'); } return 0;} void action1(int x,int y){ printf(“x+y=%dn”,x+y);} void action2(int x,int y){ printf(“x*y=%dn”,x*y);} 例4.8 写一程序,判断某一年是否闰年。编写程序: 程序1: 程序2: #include #include int main(){ { int year,leap; int year,leap; scanf(“%d”,&year); scanf(“%d”,&year); if(year%4==0) if(year%4!=0) { if(year%100==0) { if(year%400==0) leap=1; else leap=0; } else leap=1; } else leap=0; if(leap) printf(“%d is ”,year); else printf(“%d is not ”,year); printf(“a leap year.n”); return 0; } leap=0; else if(year%100!=0) leap=1; else if(year%400!=0) leap=0;else leap=1;if(leap) printf(“%d is ”,year);else printf(“%d is not ”,year);printf(“a leap year.n”);return 0;} #include 程序3: int main(){ int year,leap; printf(“enter year:”); scanf(“%d”,&year); if((year%4==0 && year%100!=0)||(year%400==0)) leap=1; else leap=0; if(leap) printf(“%d is ”,year); else printf(“%d is not ”,year); printf(“a leap year.n”); return 0;} 程序4: #include #include int year; bool leap; scanf(“%d”,&year); if(year%4==0) { if(year%100==0){ if(year%400==0) leap=true; else leap=false;} else leap=true; } else leap=false; if(leap==true) printf(“%d is ”,year); else printf(“%d is not ”,year); printf(“a leap year.n”); return 0; } 例4.9 求 ax c 0 方程的解。bx编写程序: #include double a,b,c,disc,x1,x2,realpart,imagpart; scanf(“%lf,%lf,%lf”,&a,&b,&c); printf(“The equation ”); if(fabs(a)<=1e-6) printf(“is not a quadraticn”); else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf(“has two equal roots:%8.4fn”,-b/(2*a)); else if(disc>1e-6) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf(“has distinct real roots:%8.4f and %8.4fn”,x1,x2); } else { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(“ has complex roots:n”); printf(“%8.4f+%8.4fin”,realpart,imagpart); printf(“%8.4f-%8.4fin”,realpart,imagpart); } } return 0;} 例4.10 运输公司对用户计算运输费用。路程(s km)越远,每吨·千米运费越低。编写程序: #include int c,s; float p,w,d,f; printf(“please enter price,weight,discount:”); // 提示输入的数据 scanf(“%f,%f,%d”,&p,&w,&s); // 输入单价、重量、距离 if(s>=3000)c=12; else c=s/250; switch(c) { case 0: d=0;break; case 1: d=2;break; case 2: case 3: d=5;break; case 4: case 5: case 6: case 7: d=8;break; case 8: case 9: case 10: case 11: d=10;break; case 12: d=15;break; } f = p * w * s *(1-d / 100); printf(“freight=%10.2fn”,f); return 0;} // 3000km以上为同一折扣 // 3000km以下各段折扣不同,c的值不相同 // c=0,代表250km以下,折扣d=0 // c=1,代表250到500km以下,折扣d=2% // c=2和3,代表500到1000km以下,折扣d=5% // c=4-7,代表1000到2000km以下,折扣d=8% // c=8-11,代表2000到3000km以下,折扣d=10% // c12,代表3000km以上,折扣d=15% // 计算总运费 // 输出总运费,取两位小数 例5.1求1+2+3+„+100,即 n1编写程序: #include int i=1,sum=0; // 定义变量i的初值为1,sum的初值为0 while(i<=100) // 当i>100,条件表达式i<=100的值为假,不执行循环体 { // 循环体开始 sum=sum+i; // 第一次累加后,sum的值为1 n100 i++; } printf(“sum=%dn”,sum); return 0;} 例5.2 用do…while语句求:编写程序: #include { sum=sum+i; i++;}while(i<=100);printf(“%dn”,sum);return 0;} // 加完后,i的值加1,为下次累加作准备 // 循环体结束 // 输出1+2+3„+100的累加和 1001+2+3+…+100,即 nn例5.3 while和do---while循环的比较。编写程序: (1)用while循环 #include { sum=sum+i; i++;};printf(“sum=%dn”,sum);return 0;} (2)用do„while循环 #include { sum=sum+i; i++;}while(i<=10);printf(“sum=%dn”,sum);return 0;} 例5.4 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。编写程序: #include float amount,aver,total; int i; for(i=1,total=0;i<=1000;i++) { printf(“please enter amount:”); scanf(“%f”,&amount); total= total+amount; if(total>=SUM)break; } aver=total/i; printf(“num=%dnaver=%10.2fn”,i,aver); return 0;} 例5.5 要求输出100~200之间的不能被3整除的数。编写程序: #include {if(n%3==0) continue; printf(“%d ”,n); } printf(“n”);return 0;} 例5.6 输出以下4*5的矩阵。编写程序: #include int i,j,n=0; for(i=1;i<=4;i++) for(j=1;j<=5;j++,n++){ if(n%5==0)printf(“n”); //控制在输出5个数据后换行 printf(“%dt”,i*j);} printf(“n”); return 0;} #include int i,j,n=0; for(i=1;i<=4;i++) for(j=1;j<=5;j++,n++){ if(n%5==0)printf(“n”); //控制在输出5个数据后换行 if(i==3 && j==1)break; //遇到第3行第1列,终止内循环 printf(“%dt”,i*j);} printf(“n”); return 0;} #include int i,j,n=0; for(i=1;i<=4;i++) for(j=1;j<=5;j++,n++){ if(n%5==0)printf(“n”); //控制在输出5个数据后换行 if(i==3 && j==1)continue; //遇到第3行第1列,提前结束执行本次内循环体 printf(“%dt”,i*j);} printf(“n”); return 0;} 1111例5.7用 47公式求 的近似值,直到发现某一项的绝对值小于510*6 为止(该项不累计加)。编写程序: #include int sign=1; // sign用来表示数值的符号 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代表符号,下一项的符号与上一项符号相反 term=sign/n; // 求出下一项的值term } pi=pi*4; // 多项式的和pi乘以4,才是π的近似值 printf(“pi=%10.8fn”,pi); // 输出π的近似值 } #include int sign=1; // sign用来表示数值的符号 int t=0; // t 代表当前执行循环体的次数 double pi=0.0,n=1.0,term=1.0;// pi代表π,n代表分母,term代表当前项的值 while(fabs(term)>=1e-6) // 检查当前项term的绝对值是否大于或等于10的(-6)次方 {t=t+1; // 每进入一次循环体,t的值加1 pi=pi+term; // 把当前项term累加到pi中 n=n+2; // n+2是下一项的分母 sign=-sign; // sign代表符号,下一项的符号与上一项符号相反 term=sign/n; // 求出下一项的值term } pi=pi*4; // 多项式的和pi乘以4,才是π的近似值 printf(“pi=%10.6fn”,pi); // 输出π的近似值 } 例5.8 求费波那西(Fibonacci)数列的前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。即:(n1)F11(n2)F21 FFF(n3)n1n2n 编写程序: #include int f1=1,f2=1,f3; int i; printf(“%12dn%12dn”,f1,f2); for(i=1;i<=38;i++) { f3=f1+f2; printf(“%12dn”,f3); f1=f2; f2=f3;} return 0;} #include int f1=1,f2=1; int i; for(i=1;i<=20;i++) { printf(“%12d %12d ”,f1,f2); if(i%2==0)printf(“n”); f1=f1+f2; f2=f2+f1; } return 0;} // 每个循环中输出2个月的数据,故循环20次即可 // 输出己知的两个月的兔子数 // 计算出下一个月的兔子数,并存放在f1中 // 计算出下两个月的兔子数,并存放在f2中 例5.9输入一个大于3的整数n,判定它是否素数(prime,又称质数)。编写程序: #include printf(“please enter a integer number,n=?”); scanf(“%d”,&n); for(i=2;i<=n-1;i++) if(n%i==0)break; if(i else printf(“%d is a prime number.n”,n); return 0;} #include printf(“please enter a integer number:n=?”); scanf(“%d”,&n); k=sqrt(n); for(i=2;i<=k;i++) if(n%i==0)break; if(i<=k)printf(“%d is not a prime number.n”,n); else printf(“%d is a prime number.n”,n); return 0;} 例5.10 求100~200间的全部素数。编写程序: # include for(n=101;n<=200;n=n+2) // n从100变化到200,对每个n进行判定 { k=sqrt(n); for(i=2;i<=k;i++) if(n%i==0)break; // 如果n被i整除,终止内循环,此时i if(i>=k+1) // 若j>=k+1,表示n未被整除 {printf(“%d ”,n); // 应确定n是素数 m=m+1; // m用来控制换行,一行内输出10个录素数 } if(m%10==0)printf(“n”); // m累计到10的倍数,换行 } printf(“n”); return 0; } 例5.11 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。 A B C D E F G …… W X Y Z 编写程序: #include c=getchar(); // 输入一个字符给字符变量c while(c!='n') // 检查c的值是否换行符'n' {if((c>='a' && c<='z')||(c>='A' && c<='Z')) // c如果是字母 { if(c>='W' && c<='Z' || c>='w' && c<='z')c=c-22; // 如果是26个字母中最后4个字母之一 else c=c+4; // 如果是前面22个字母之一,就使c加4,即变成其后第4个字母 } printf(“%c”,c); // 输出己改变的字符 c=getchar(); // 再输入下一个字符给字符变量c } printf(“n”); return 0;} #include while((c=getchar())!='n') // 输入一个字符给字符变量c并检查它c的值是否换行符 {if((c>='A' && c<='Z')||(c>='a' && c<='z')) // c如果是字母 { c=c+4; // 只要是字母,都先加4 if(c>='Z' && c<='Z'+4 || c>'z') // 如果是26个字母中最后4个字母之一 c=c-26; // c的值改变为26个字母中最前面的4个字母中对应的字母 } printf(“%c”,c); // 输出己改变的字符 } printf(“n”); return 0;} 例6.1 对10个数组元素依次赋值为0,1, 2,3,4,5,6,7,8,9,要求按逆序输出。编写程序: #include int i,a[10]; for(i=0;i<=9;i++) a[i]=i; for(i=9;i>=0;i--) printf(“%d ”,a[i]); printf(“n”); return 0;} 例6.2 用数组处理求Fibonacci数列问题 编写程序: #include int i; int f[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) { if(i%5==0)printf(“n”); printf(“%12d”,f[i]); } printf(“n”); return 0;} 例6.3 有10个地区的面积,要求对它们按由小到大的顺序排列。编写程序: #include int a[10]; int i,j,t; printf(“input 10 numbers :n”); for(i=0;i<10;i++) scanf(“%d”,&a[i]); printf(“n”); for(j=0;j<9;j++) for(i=0;i<9-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf(“the sorted numbers :n”); for(i=0;i<10;i++) printf(“%d ”,a[i]); printf(“n”); return 0;} // 进行9次循环,实现9趟比较// 在每一趟中进行9-j次比较 // 相邻两个数比较 例6.4 将一个二维数组行和列的元素互换,存到另一个二维数组中。 14123a456 编写程序: #include int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; printf(“array a:n”); for(i=0;i<=1;i++) { for(j=0;j<=2;j++) { printf(“%5d”,a[i][j]); b[j][i]=a[i][j]; } printf(“n”); } printf(“array b:n”); for(i=0;i<=2;i++) { for(j=0;j<=1;j++) printf(“%5d”,b[i][j]); printf(“n”); } return 0;} b2536例6.5 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。编写程序: #include int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; // 定义数组并赋初值 max=a[0][0]; // 先认为a[0][0]最大 for(i=0;i<=2;i++) for(j=0;j<=3;j++) if(a[i][j]>max) // 如果某元素大于max,就取代max的原值 {max=a[i][j]; row=i; // 记下此元素的行号 colum=j; // 记下此元素的列号 } printf(“max=%dnrow=%dncolum=%dn”,max,row,colum); return 0;} 例6.6 输出一个已知的字符串。编写程序: #include int i; for(i=0;i<15;i++) printf(“%c”,c[i]); printf(“n”); return 0;} 例6.7 输出一个菱形图。编写程序: #include int i,j; for(i=0;i<5;i++) {for(j=0;j<5;j++) printf(“%c”,diamond[i][j]); printf(“n”); } return 0;} 例6.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。编写程序: #include { char string[81]; int i,num=0,word=0; char c; gets(string); // 输入一个字符串给字符数组string for(i=0;(c=string[i])!=' ';i++) // 只要字符不是' '就继续执行循环 if(c==' ')word=0; // 如果是空格字符,使word置0 else if(word==0) // 如果不是空格字符且word原值为0 {word=1; // 使word置1 num++; // num累加1,表示增加一个单词 } printf(“There are %d words in this line.n”,num); //输出结果 return 0;} 例6.9 有3个字符串,要求找出其中最大者。编写程序: #include char str[3][20]; // 定义二维字符数组 char string[20]; // 定义一维字符数组,作为交换字符串时的临时字符数组 int i; for(i=0;i<3;i++) gets(str[i]); // 读入3个字符串,分别给str[0],str[1],str[2] if(strcmp(str[0],str[1])>0) // 若str[0]大于str[1] strcpy(string,str[0]); // 把str[0]的字符串赋给字符数组string else // 若str[0]小于等于str[1] strcpy(string,str[1]); // 把str[1]的字符串赋给字符数组string if(strcmp(str[2],string)>0) // 若str[2]大于string strcpy(string,str[2]); // 把str[2]的字符串赋给字符数组string printf(“nthe largest string is:n%sn”,string); // 输出string return 0;} 例7.1 输出以下的结果,用函数调用实现。 ****************** How do you do! ****************** 编写程序: #include void print_message(); printstar(); print_message(); printstar(); return 0;} void printstar() { printf(“******************n”);} void print_message() {printf(“ How do you do!n”);} 例7.2 输入两个整数,要求输出其中值较大者。要求用函数来找到大数。编写程序: #include int a,b,c; printf(“please enter two integer numbers:”); scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“max is %dn”,c);} int max(int x,int y) // 定义max函数 { int z; // 定义临时变量 z=x>y?x:y; // 把x和y中大者赋给z return(z); // 把z作为max函数的伦值带回main函数 } 例7.3将例7.2稍作改动,将在max函数中定义的变量z改为float型。函数返回值的类型与指定的函数类型不同,分析其处理方法。编写程序: #include float a,b; int c; scanf(“%f,%f,”,&a,&b); c=max(a,b); printf(“max is %dn”,c); return 0;} int max(float x,float y){float z; z=x>y?x:y; return(z);} 例7.4 输入两个实数,用一个函数求出它们之和。编写程序: 程序1: #include float a,b,c;printf(“Please enter a and b:”);scanf(“%f,%f”,&a,&b);c=add(a,b);printf(“sum is %fn”,c);return 0;} float add(float x,float y) {float z; z=x+y; return(z);} 程序2: #include {float z; z=x+y; return(z);} void main(){ float a,b,c;printf(“Please enter a and b:”);scanf(“%f,%f”,&a,&b);c=add(a,b);printf(“sum is %fn”,c);} 例7.5 输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。编写程序: 程序1: #include // 对max4的函数声明 int a,b,c,d,max; printf(“Please enter 4 interger numbers:”); // 提示输入4个数 scanf(“%d %d %d %d”,&a,&b,&c,&d); // 输入4个数 max=max4(a,b,c,d); // 调用max4函数,得到4个数中的最大者 printf(“max=%d n”,max); // 输出4个数中的最大者 return 0;} int max4(int a,int b,int c,int d) // 定义max4函数 {int max2(int a,int b); // 对max2的函数声明 int m; m=max2(a,b); // 调用max2函数,得到a和b两个数中的大者,放在m中 m=max2(m,c); // 调用max2函数,得到a,b,c三个数中的大者,放在m中 m=max2(m,d); // 调用max2函数,得到a,b,c,d四个数中的大者,放在m中 return(m); // 把m作为函数值带回main函数 } int max2(int a,int b) // 定义max2函数 {if(a>=b) return a; // 若a>=b,将a为函数返回值 else return b; // 若a 程序4: #include int a,b,c,d,max; printf(“Please enter 4 interger numbers:”); scanf(“%d %d %d %d”,&a,&b,&c,&d); max=max4(a,b,c,d); printf(“max=%d n”,max);} int max4(int a,int b,int c,int d){int max2(int a,int b);return max2(max2(max2(a,b),c),d); } int max2(int a,int b){ return(a>b?a:b); } 程序2: #include int a,b,c,d,max; printf(“Please enter 4 interger numbers:”); scanf(“%d %d %d %d”,&a,&b,&c,&d); max=max4(a,b,c,d); printf(“max=%d n”,max); return 0;} int max4(int a,int b,int c,int d){int max2(int a,int b);int m; m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);} int max2(int a,int b){ return(a>b?a:b);} 程序3: #include int a,b,c,d,max; printf(“Please enter 4 interger numbers:”); scanf(“%d %d %d %d”,&a,&b,&c,&d); max=max4(a,b,c,d); printf(“max=%d n”,max);} int max4(int a,int b,int c,int d){int max2(int a,int b);int m; m=max2(max2(max2(a,b),c),d); /* 仔细分析此行 */ return(m);} int max2(int a,int b){ return(a>b?a:b); } 程序4: #include int a,b,c,d,max; printf(“Please enter 4 interger numbers:”); scanf(“%d %d %d %d”,&a,&b,&c,&d); max=max4(a,b,c,d); printf(“max=%d n”,max);} int max4(int a,int b,int c,int d){int max2(int a,int b);return max2(max2(max2(a,b),c),d); } int max2(int a,int b){ return(a>b?a:b); } 例7.6 有5个学生坐在一起 问第5个学生多少岁?他说比第4个学生大2岁 问第4个学生岁数,他说比第3个学生大2岁 问第3个学生,又说比第2个学生大2岁 问第2个学生,说比第1个学生大2岁 最后问第1个学生,他说是10岁 请问第5个学生多大 编写程序: #include printf(“NO.5,age:%dn”,age(5)); //输出第5人的年龄 return 0;} int age(int n) //定义递归函数 {int c; if(n==1) // 如果n等于1 c=10; // 年龄为10 else // 如果n不等于1 c=age(n-1)+2; // 年龄是前一人的年龄加2(如第4人年龄是第3人年龄加2) return(c); // 返回年龄 } 例7.7 用递归方法求n!。编写程序: #include int n; int y; printf(“input an integer number:”); scanf(“%d”,&n); y=fac(n); printf(“%lld!=%dn”,n,y); return 0;} int fac(int n){ int f; if(n<0) printf(“n<0,data error!”); else if(n==0||n==1) f=1; else f=fac(n-1)*n; return(f);} 例7.8 Hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A、B、C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座。要求编程序输出移动一盘子的步骤。编写程序: #include void hanoi(int n,char one,char two,char three); // 对hanoi函数的声明 int m; printf(“input the number of diskes:”); scanf(“%d”,&m); printf(“The step to move %d diskes:n”,m); hanoi(m,'A','B','C');} void hanoi(int n,char one,char two,char three) // 定义hanoi函数 // 将n个盘从one座借助two座,移到three座 { void move(char x,char y); // 对move函数的声明 if(n==1) move(one,three); else { hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } } void move(char x,char y) // 定义move函数 { printf(“%c-->%cn”,x,y);} 例7.9 输入10个数,要求输出其中值最大的元素和该数是第几个数。编写程序: #include {int max(int x,int y); int a[10],m,n,i; printf(“enter 10 integer numbers:”); for(i=0;i<10;i++) scanf(“%d”,&a[i]); printf(“n”); for(i=1,m=a[0],n=0;i<10;i++) { if(max(m,a[i])>m) // 若max函数返回的值大于m {m=max(m,a[i]); // max函数返回的值取代m原值 n=i; // 把此数组元素的序号记下来,放在n中 } } printf(“The largest number is %dnit is the %dth number.n”,m,n+1); } int max(int x,int y) { return(x>y?x:y);} 例7.10 有一个一维数组score,内放10个学生成绩,求平均成绩。编写程序: #include // 函数声明 float score[10],aver; int i; printf(“input 10 scores:n”); for(i=0;i<10;i++) scanf(“%f”,&score[i]); printf(“n”); aver=average(score); // 调用average函数 printf(“average score is %5.2fn”,aver); return 0;} float average(float array[10]) // 定义average函数 {int i; float aver,sum=array[0]; for(i=1;i<10;i++) sum=sum+array[i]; // 累加学生成绩 aver=sum/10; return(aver);} 例7.11 有两个班级,分别有35名和30名学生,调用一个average函数,分别求这两个班的学生的平均成绩。编写程序: #include float aver,sum=array[0]; for(i=1;i sum=sum+array[i]; aver=sum/n; return(aver);} 例7.12用选择法对数组中10个整数按由小到大排序。编写程序: #include scanf(“%d”,&a[i]);sort(a,10);printf(“The sorted array:n”);for(i=0;i<10;i++) printf(“%d ”,a[i]);printf(“n”);return 0;} void sort(int array[],int n){int i,j,k,t; for(i=0;i {k=i; for(j=i+1;j if(array[j] k=j; t=array[k];array[k]=array[i];array[i]=t;} } 例7.13 有一个3×4的矩阵,求所有元素中的最大值。编写程序: #include int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}}; printf(“Max value is %dn”,max_value(a)); return 0;} int max_value(int array[][4]){int i,j,max;max=array[0][0];for(i=0;i<3;i++) for(j=0;j<4;j++) if(array[i][j]>max)max=array[i][j];return(max);} 例7.14 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。编写程序: #include // 定义全局变量Max,Min int main(){ float average(float array[ ],int n); float ave,score[10]; int i; printf(“Please enter 10 scores:”); for(i=0;i<10;i++) scanf(“%f”,&score[i]); ave=average(score,10); printf(“max=%6.2fnmin=%6.2fnaverage=%6.2fn”,Max,Min,ave); return 0;} float average(float array[ ],int n) // 定义函数,有一形参是数组 {int i; float aver,sum=array[0]; Max=Min=array[0]; for(i=1;i {if(array[i]>Max)Max=array[i]; else if(array[i] sum=sum+array[i]; } aver=sum/n; return(aver);} 例7.15 若外部变量与局部变量同名,分析结果。编写程序: #include // a,b是全局变量 int main(){ int max(int a,int b); // 函数声明。a,b是形参 int a=8; // a是局局部变量 printf(“max=%dn”,max(a,b)); // 变量a是函数中定义的局部变量a return 0;} int max(int a,int b) // a,b是函数形参 { int c;c=a>b?a:b; // 把a和b中的大者存放在c中 return(c);} 例7.16 考察静态局部变量的值。编写程序: #include printf(“%dn”,f(a));return 0;} int f(int a){ auto int b=0; static c=3; b=b+1; c=c+1; return(a+b+c);} 例7.17 输出1到5的阶乘值。编写程序: #include printf(“%d!=%dn”,i,fac(i));return 0;} int fac(int n){ static int f=1; f=f*n; return(f);} 例7.18 调用函数,求3个整数中的大者。编写程序: #include extern int A,B,C; // 把外部变量A,B,C的作用域扩展到从此处开始 printf(“Please enter three integer numbers:”);scanf(“%d %d %d”,&A,&B,&C);printf(“max is %dn”,max());return 0;} int A ,B ,C; // 定义外部变量A,B,C int max() {int m;m=A>B?A:B;if(C>m)m=C;return(m);} 例7.19 给定b的值,输入a和m,求a*b和am的值。编写程序: 文件file1.c #include int main() {int power(int); int b=3,c,d,m; printf(“enter the number a and its power m:n”); scanf(“%d,%d”,&A,&m); c=A*b; printf(“%d*%d=%dn”,A,b,c); d=power(m); printf(“%d**%d=%dn”,A,m,d); return 0;} 文件file2.c extern A;int power(int n){int i,y=1; for(i=1;i<=n;i++) y*=A; return(y);} 例7.20 有一个字符串,内有若干个字符,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。编写程序: file1.c(文件1)#include // 以上3行声明在本函数中将要调用的已在其他文件中定义的3个函数 char c,str[80];enter_string(str); // 调用在其他文件中定义的enter_string函数 scanf(“%c”,&c);delete_string(str,c); // 调用在其他文件中定义的delete_string函数 print_string(str); // 调用在其他文件中定义的print_string函数 return 0; } file2.c(文件2)//#include gets(str); } file3.c(文件3)//#include if(str[i]!=ch) str[j++]=str[i];str[j]=' ';} file4.c(文件4)//#include 例8.1 通过指针变量访问整型变量。编写程序: #include // 定义整型变量a,b,并初始化 int *pointer_1, *pointer_2; // 定义指向整型数据的指针变量pointer_1, pointer_2 pointer_1=&a; // 把变量a的地址赋给指针变量pointer_1 pointer_2=&b; // 把变量b的地址赋给指针变量pointer_2 printf(“a=%d,b=%dn”,a,b); // 输出变量a和b的值 printf(“*pointer_1=%d,*pointer_2=%dn”,*pointer_1,*pointer_2); return 0;} 例8.2 输入a和b两个整数,按先大后小的顺序输出a和b。编写程序: #include printf(“please enter two integer numbers:”); scanf(“%d,%d”,&a,&b); // 输入两个整数 p1=&a; // 使p1指向变量a p2=&b; // 使p2指向变量b if(a // 如果a {p=p1;p1=p2;p2=p;} // 使p1与p2的值互换 printf(“a=%d,b=%dn”,a,b); // 输出a,b printf(“max=%d,min=%dn”,*p1,*p2); // 输出p1和p2所指向的变量的值 return 0;} 例8.3 题目要求同例8.2,即对输入的两个整数按大小顺序输出。现用函数处理,而且用指针类型的数据作函数参数。编写程序: #include int a,b; int*pointer_1,*pointer_2; printf(“please enter a and b:”); scanf(“%d,%d”,&a,&b); pointer_1=&a; pointer_2=&b; if(a printf(“max=%d,min=%dn”,a,b); return 0;} void swap(int *p1,int *p2){int temp; temp=*p1; *p1=*p2; *p2=temp;} 例8.4 对输入的两个整数按大小顺序输出。编写程序: #include int a,b; int*pointer_1,*pointer_2; printf(“please enter two integer numbers:”); scanf(“%d,%d”,&a,&b); pointer_1=&a; pointer_2=&b; if(a printf(“max=%d,min=%dn”,a,b); return 0;} void swap(int *p1,int *p2){int *p; p=p1; p1=p2; p2=p;} 例8.5 输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现。编写程序: #include // 函数声明 int a,b,c,*p1,*p2,*p3; printf(“please enter three numbers:”); scanf(“%d,%d,%d”,&a,&b,&c); p1=&a;p2=&b;p3=&c; exchange(p1,p2,p3); printf(“The order is:%d,%d,%dn”,a,b,c); return 0;} void exchange(int *q1, int *q2, int *q3) // 定义将3个变量的值交换的函数 {void swap(int *pt1, int *pt2); // 函数声明 if(*q1<*q2)swap(q1,q2); // 如果a if(*q1<*q3)swap(q1,q3); // 如果a if(*q2<*q3)swap(q2,q3); // 如果b } void swap(int *pt1, int *pt2) // 定义交换2个变量的值的函数 {int temp; temp=*pt1; // 换*pt1和*pt2变量的值 *pt1=*pt2; *pt2=temp;} 例8.6 有一个整型数组a,有10个元素,要求输出数组中的全部元素。编写程序:(1)下标法。#include int i; printf(“please enter 10 integer numbers:”); for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(i=0;i<10;i++) printf(“%d ”,a[i]); printf(“%n”); return 0;}(2)通过数组名计算数组元素地址,找出元素的值 #include int i; printf(“please enter 10 integer numbers:”); for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(i=0;i<10;i++) printf(“%d ”,*(a+i)); //通过故数组名和元素序号计算元素地址,再找到该元素 printf(“n”); return 0;}(3)用指针变量指向数组元素 #include int *p,i; printf(“please enter 10 integer numbers:”); for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(p=a;p<(a+10);p++) printf(“%d ”,*p); // 用指针指向当前的数组元素 printf(“n”); return 0;} 例8.7 通过指针变量输出整型数组a的10个元素。编写程序: #include p=a; printf(“please enter 10 numbers:”); for(i=0;i<10;i++) scanf(“%d”,p++); for(i=0;i<10;i++,p++) printf(“%d ”,*p); printf(“n”); return 0;} #include printf(“please enter 10 integer numbers:”); for(i=0;i<10;i++) scanf(“%d”,p++); p=a; for(i=0;i<10;i++,p++) printf(“%d ”,*p); printf(“n”); return 0;} 例8.8 将数组a中n个整数按相反顺序存放 编写程序: #include printf(“%d ”,a[i]); // 输出未交换时数组各元素的值 printf(“n”);inv(a,10); printf(“The array has been inverted:n”);for(i=0;i<10;i++) printf(“%d ”,a[i]); printf(“n”);return 0;} void inv(int x[ ],int n) {int temp,i,j,m=(n-1)/2; for(i=0;i<=m;i++) {j=n-1-i; temp=x[i];x[i]=x[j];x[j]=temp; } return 0;} // 调用inv函数,进行交换 // 输出交换后数组各元素的值 // 形参x是蚊数组名 // 把x[i]和x[j]交换 C语言设计 学习笔记 早晨: 06:40 起床 07:20——08:20 上午: 08:30——10:30 10:50——11:30 中午: 12:00——02:00 下午: 02:30——04:30 晚上: 05:30——08:00 08:00——09:00 09:00——11:00 11:30 英语 1小时 新概念英语(单词、语法、听读背)大学英语(单词、语法、听读背) 计算机基础 2小时 计算机科学技术导论 计算机组成原理 微机原理及接口技术 Intel微处理器结构编程与接口 深入理解计算机系统 80x86汇编语言程序设计 8086-8088宏汇编语言程序设计教程 BIOS研发技术剖析 自己动手写操作系统 操作系统原理 Windows操作系统原理 Windows内部原理系列 Windows程序内部运行原理 计算机网络第五版 午休 计算机应用及编程 Windows用户管理指南、AD配置指南、网络专业指南、Windows即学即会教程 Windows下32位汇编语言程序设计、C#编程 锻炼、晚餐 辅导 专业基础 2小时 大学数学、大学物理、电机及拖动、电力电子技术、通信技术 休息 目 录 第一章 C语言概述.................................................................................................................................1.1 C程序结构特点16................................................................................................................1.2 C程序上机步骤17...................................................................................................................第二章 程序的灵魂——算法23............................................................................................................2.1 算法24.....................................................................................................................................2.2 算法的三种基本结构...............................................................................................................2.3 结构化程序设计方法42..........................................................................................................第三章 数据类型 运算符与表达式48..................................................................................................3.1 C语言的基本元素48...............................................................................................................3.2 C的数据类型48.......................................................................................................................3.3 常量与变量48..........................................................................................................................3.4 基本类型...................................................................................................................................3.5 变量63.....................................................................................................................................3.6 不同类型数据间的混合运算...................................................................................................3.7 函数的调用过程(补充).......................................................................................................第四章 最简单的C程序设计——顺序程序设计77...........................................................................4.1 字符数据的输入输出...............................................................................................................第五章 选择结构的程序设计97............................................................................................................第六章 循环结构程序设计.....................................................................................................................6.1 语句标号...................................................................................................................................6.2 break语句和continue语句......................................................................................................第七章 数组132......................................................................................................................................7.1 构造类型...................................................................................................................................7.2 数组133...................................................................................................................................7.3 二维数组...................................................................................................................................7.4 字符串——字符数组...............................................................................................................7.5 字符串处理函数 #include 1.1 C程序结构特点16 1、C程序的基本构件——函数。 2、一个函数由函数首部和函数体两部分构成。 函数首部一般包括函数类型、函数名、函数参数等。 函数体一般包括声明部分和执行部分。其中:在声明部分中定义所用到的变量;执行部分则由若干个语句组成。 3、C程序只有一个main函数,且总是从main函数开始执行。 4、C语言语句必须以“;”结束。 5、用/* */作为注释。 6、C编译器一般自顶向下顺序编译C源程序,如果被调函数定义在主调函数之后位置时,要在主调函数前,给出被调函数的原型说明。以便编译器在编译被调函数的调用语句时,对调用语句进行参数检查。 如果不进行原型说明,则无法通过编译检查。 原型说明:类型说明 函数名(参数类型,参数类型,„„) 7、头文件——头文件包含了C语言的标准函数库的原型说明。 C语言通过使用#include <>预处理命令,将库函数的原型说明插入到源文件中。 1.2 C程序上机步骤17 1、编辑源文件.c; 2、编译成目标文件.obj; 3、连接——将目标程序和库函数及其他目标程序连接起来,生产可执行文件,文件扩展名为.exe; 4、执行。 结构体、共用体、枚举型。 3、指针类型:用于存储地址的一类数据类型。 4、空类型: 编译器根据变量的数据类型,给变量分配存储单元。 3.3 常量与变量48 1、符号常量——符号常量在其作用域内不能改变,也不能被赋值。#define 符号常量(大写)常量 2、变量——变量由变量名和变量值标识。数据类型 变量; 变量名实际上是一个符号地址,编译连接程序时给每个变量名分配一个内存地址,当程序访问变量值时,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。 3.4 基本类型 1、整形数据在内存中的存放,是以补码形式存放的。 2、实型数据:单精度 双精度。 在内存中以指数形势存放。 若数据超过有效位,则超过C语言规定有效位的数据将被舍去,故产生误差。 3、字符型数据:用一个字节存储单元存储。即将字符的ASCII码存储到内存单元中。 用单引号括起来的一个字符。 转义字符——特殊字符常量或者控制字符常量,它们都以“”开头。 Char、unsigned char区别:char用7位数表示,最大表示编码为127的字符;unsigned char用8位数表示,最大表示编码为255的字符。 字符数据与整型数据可以相互赋值。 字符数据可以以字符数据输出,也可以以整型数据形式输出。 4、字符串常量:C语言中,必须是用字符数组来保存字符串常量。在内存中顺序存储。 用一对双引号括起来的字符序列。 (2)一般把建立存储空间的声明称为变量定义,把不需要建立存储空间的声明成为变量声明。 3.6 不同类型数据间的混合运算 不同类型数据进行混合运算时,不同类型的数据要先转换成同一类型,按照类型级别由低到高(char,short—int——unsigned—long—double;float—double)的顺序进行转换。 强制类型转换——(类型名)表达式。强制类型转换也就是将存储数据的内存单元强制转换为另一种数据类型的单元大小。即强制将存放数据的内存单元改变。 赋值时进行类型转换:将数据复制给变量时,将会将数据强制转换为要赋值变量的类型。一般短类型转换为长类型时,进行符号扩展;长类型转换为短类型时,仅赋值低位,难以保证数据的正确性。 3.7 函数的调用过程(补充) C函数其实就是一个程序模块。 C函数在编译时,单独编译成一个指令模块,在函数模块开始处定义保护现场指令,将用到的CPU寄存器压入堆栈。在返回时定义了恢复现场指令,将堆栈数据恢复到CPU寄存器。 在调用函数时,一般利用堆栈传递输入参数;利用EAX传递输出参数,注意在函数调用完成后,要维持堆栈平衡,且函数返回输出参数在EAX中,在使用输出参数前,不要改变EAX的值。 第四章 最简单的C程序设计——顺序程序设计77 4.1 字符数据的输入输出 1、C语言没有输入输出语句,IO操作通过调用系统函数实现。 2、在程序的开头,要有:#include “stdio.h”或 #include stdio.h 输入输出语句 2、数组——数组必须先定义后引用。静态数组变量定义时编译器自动初始化数据元素为0,动态数组变量在程序执行时分配存储空间,在未被赋值初始化之前其值随机。 3、C语言只能逐个引用数组元素,不能一次引用整个数组。 4、数组引用是“数组名+下标”引用,数组下标均为整数。如a[2]。 7.3 二维数组 1、数组元素为数组。 2、在内存中,C语言的二维数组中数组元素的存放顺序是按行存放的。 3、二维数组引用是“数组名+下标+下标”。如a[1][2]。 7.4 字符串——字符数组 1、一般用 来标识字符串结尾。 占用一个字符变量空间。 2、用字符串赋值字符数组时,C编译器在字符串后自动加 赋给字符数字。 3、字符数组可以一次引用整个字符串数组。如整个字符串(数组)的输入输出,用%s格式,且在输入字符数组时,用数组名代表数组的首地址,对于二维数组,仅仅写行下标不写列下标,也可以代表给行数组的首地址。 在用%s输入输出字符串数组时,遇到 结束。 7.5 字符串处理函数 #include 1、gets(字符数组名) 从键盘输入一个字符串(以回车结束),并返回字符数组的起始地址。如get(str)。 2、puts(字符数组名/字符串) 将数组中的字符串( 结尾的字符序列)输出到终端上,输完换行。如puts(str),puts(“ok”)。 3、strcpy(目的字符数组1名,源字符串/字符数组2名)拷贝时,将“ ”一起拷贝过去。 4、strcat(字符数组1名,字符串/字符数组2名)将字符串/字符数组2连接到字符数组1中。 在某个复合语句中定义的变量。 2、全局变量——在函数之外定义的变量。有效范围是从定义变量的位置开始到源文件结束。 8.4 变量的存储类别 变量的存储类别,即生存期。内存中供用户使用的存储空间包括:程序区、静态存储区、动态存储区。 1、静态存储区——在编译时分配空间,在程序运行完后才释放存储空间。存储静态局部变量和全局变量。 局部静态变量在编译时赋初值,在执行时可改变该值,但该存储空间一直保存到程序结束。 定义局部静态变量,如果没有赋初值,编译时会自动赋默认初值。 局部静态变量只能在定义它的函数中使用。 全局变量都是静态的。 利用extern 外部变量方式表示变量的定义在别的文件中,提示编译器遇到此变量时,在其他模块中寻找其定义。而函数则是利用函数原型来声明。 用static 关键字说明一个不能在其他源文件中引用的全局变量。即静态全局变量在声明它的整个文件都是可见的,但是在文件之外是不可见的。 2、动态存储区——仅在在执行时分配空间,用完后释放存储空间。存放自动变量和形式参数。 寄存器变量——用register关键字说明。寄存器变量对寄存器的占用是动态的。 第九章 预处理命令197 9.1 预编译命令作用 预编译命令主要完成宏定义、文件包含、条件编译三种功能。 1、宏定义——指用一个指定的标识符(名字)来代表一个字符串。在预编译时,将宏名替代成字符串的过程称为宏展开。如: # define PI 3.1415926 定义宏, # undef PI 终止宏定义的作用域。 #define V(a,b,c)a*b*c 定义带参数的宏。当宏展开时,将引用宏名语句中的实参字符串代替宏定义的形参字符串。int v =V(2,3,4)则宏展开后为:int v= 2*3*4; 2、文件包含——指一个源文件可以将另一个源文件的全部内容包含进来。如: #include “文件名”或 #include <文件名> 编译预处理时,将包含文件的全部内容复制到源文件中。在编译时作为一个源程序来编译。 3、条件编译——在预编译处理时,确定编译时要编译的部分。如: 0 而数组名的值不可以改变。 6、函数的指针专门用来存放函数的入口地址,当把函数的地址赋值给它时,它就指向该函数的入口地址。 声明格式:数据类型(*指针变量名)()如:int(*P)(); 赋值格式:p=max; 注max为定义的函数名;函数名代表该函数的入口地址。引用格式:c=(*p)(a,b);等价——c=max(a,b); 7、只能将变量已分配的地址赋值给指针变量,不能直接将整数赋值给指针变量。 8、指针变量可以有null值,防止指针误作用。 第十一章 结构体270 11.1 结构体270 1、作用——将不同类型的数据组合成一个有机的整体。 2、结构体的定义——结构体是一种数据结构,按照某种规则定义,将若干个不同数据类型(也可相同)的数据项的组合成的一个有机整体。 3、声明结构体类型的形式:struct 结构体类型名字 {成员列表}; 成员列表形式:类型符 成员名 如:int num; 11.2 声明结构体类型变量的方法271 1、先定义结构体类型:struct 结构体类型名字 {成员列表};再定义结构体变量:struct结构体类型名字 结构体变量名。 2、可在定义结构体类型时,定义结构体类型变量。struct 结构体类型名字 {成员列表}结构体类型变量1,结构体类型变量2,„„; 11.3 结构体变量引用273 1、不能将一个结构体变量作为一个整体进行输入输出,只能对结构体变量成员分别赋值。 2、结构体变量成员引用方式:结构体变量名.成员名 3、如果结构体变量成员是另一个结构体变量,则要用若干个成员运算符,一级一级找到最低一级的成员。 11.8 共用体 297 1、共用体指将几种不同类型的变量存储在同一段内存单元中。 2、共用体变量的存储单元大小等于最长成员变量所占内存的长度 3、共用体变量中起作用的是最后一次存放成员。 4、共用体类型声明方式:union 公用体类型名称 {成员变量列表}; 5、共用体变量声明方式:(1)union 公用体类型名称 {成员列表}共用体变量;(2)先声明共用体类型,然后声明共用体变量,union 公用体类型名称 共用体变量。 11.9 枚举类型301 1、枚举类型——指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内的一个。 2、声明枚举类型:enum 枚举类型名称 {枚举常量列表}; 3、声明枚举变量:enum 枚举类型名称 枚举类型变量; 普通文件——指磁盘文件。 2、从操作系统的角度看:每一个与主机相关联的输入输出设备都可看作一个文件。 (1)根据文件的组织形式分为:顺序存取文件 和 随机存取文件。(2)根据文件的存储形式分为:ASCII文件 和 二进制文件。 13.3 C语言对文件的处理方法319 C语言中对文件的存取是以字符(字节)为单位的,一个输入输出流就是一个字节流或二进制流。 文件的存储方式分为缓冲文件系统和非缓冲文件系统。区别是缓冲文件系统是系统自动开辟缓冲区,非缓冲文件系统是由程序为每个文件设定缓冲区。 ANSI C标准只采用 缓冲文件系统 来处理文件。 13.4 文件结构体类型321 缓冲文件系统中,每个被使用的文件都在内存中开辟一个FILE结构体类型的区,用来存放文件的有关信息(文件名字、文件状态、当前位置、缓冲区等有关信息),FILE结构体类型原型: typedef struct{ short level; /*缓冲区“满”或“空”的程度*/ unsigned flags;/*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold;/*如无缓冲区不读取字符*/ short bsize; /*缓冲区的大小*/ unsigned char *buffer;/ *数据缓冲区的位置*/ unsigned char *curp;/*指针,当前的指向*/ unsigned istemp;/*临时文件,指示器*/ short token;/*用于有效性检查*/}FILE; 13.5 文件结构体数组和指针321 FILE *fp——声明了一个指向FILE类型结构体的指针变量。 buffer:是一个指针。对fread 来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址(均指起始地址)。 size: 要读写的字节数。 count: 要进行读写多少个size字节的数据项。fp: 文件型指针。 6、格式化读写函数: fprintf(文件指针,格式字符串,输出表列); fscanf(文件指针,格式字符串,输入表列); 注意: 用fprintf和fscanf函数对磁盘文件读写,使用方便,容易理解,但由于在输入时要将ASCII码转换为二进制形式,在输出时又要将二进制形式转换成字符,花费时间比较多。因此,在内存与磁盘频繁交换数据的情况下,最好不用fprintf和fscanf函数,而用fread和fwrite函数。 7、以“字”或者整数为单位读写函数: putw(int i,FILE * fp); int i = getw(FILE * fp); 8、以“字符串”为单位读写文件的函数: fgets(str,n,fp);从fp指向的文件读出n-1个字符,在最后加一个’ ’。返回值:str的首地址。如果遇到EOF则读入结束。 fputs(“china”,fp);把字符串写入到fp指向的文件。第一个参数可以是字符串常量、字符数组名或字符型指针。字符串末尾的′\0′不输出。 13.7 文件的定位333 1、将文件当前的位置指针重新返回到文件的开头位置:无返回值。 rewind(fp);执行后,将文件的位置指针重新定位到文件的开头。 2、随机读写:改变文件的位置指针,一般用于二进制文件。 fseek(文件类型指针,位移量,起始点);无返回值。起始点:文件开头 SEEK_SET 0 文件当前位置 SEEK_CUR 文件末尾 SEEK_END putw()把一个字输出到指定文件 fread()从指定文件中读取数据项 fwrite()把数据项写到指定文件中 fscanf()从指定文件按格式输入数据 fprintf()按指定格式将数据写到指定文件中 第十四章 C++对C的扩充 338 14.1 C++的特点338 1、C++保留了C语言原有的所有优点,增加了面向对象的机制。 2、C++源文件以.cpp为后缀。 3、除了可以用 /*……*/ 形式的注释行外,还允许使用以// 开头的单行注释。 4、除了可以用printf函数输出信息外,还可以用cout进行输出。cout的作用是将<<运算符右侧的内容送到输出设备中输出。使用cout需要用到头文件iostream.h,在程序的第一行用#include命令将该头文件“包含”进来。 cout <<“ This is a c++ program.n” ; 14.2 C++的输入输出 339 C++为了方便使用,除了可以利用printf和scanf函数进行输出和输入外,还增加了标准输入输出流cout和cin。cout是由c和out两个单词组成的,代表C++的输出流,cin是由c和in两个单词组成的,代表C++的输入流。它们是在头文件iostream.h中定义的。在键盘和显示器上的输入输出称为标准输入输出,标准流是不需要打开和关闭文件即可直接操作的流式文件。 14.3 C++的输出cout 1、cout必须和输出运算符<<一起使用。<< 在这里不作为位运算的左移运算符,而是起插入的作用,例如:cout<<“Hello!n”;的作用是将字符串“Hello!n” 插入到输出流cout中,也就是输出在标准输出设备上。 2、也可以不用n控制换行,在头文件iostream.h中定义了控制符endl代表回车换行操作,作用与n相同。endl的含义是end of line,表示结束一行。 0 存。在C++中,这种输入操作称为“提取”(extracting)或“得到”(getting)。>> 常称为“提取运算符”。 2、cin要与 >> 配合使用。例如: 3、C++为流输入输出提供了格式控制,如:dec(用十进制形式),hex(用十六进制形式),oct(用八进制形式),还可以控制实数的输出精度等。 14.5 函数的重载342 1、C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型不同,而且函数类型也可不同,这就是函数的重载,即一个函数名多用。 2、系统会根据参数的类型和个数找到与之匹配的函数,并调用不同的函数。 14.6 带缺省参数的函数344 C++允许实参个数与形参个数不同。办法是在形参表列中对一个或几个形参指定缺省值(或称默认值)。 例如某一函数的首部可用如下形式: void fun(int a,int b,int c=100)在调用此函数时如写成fun(2,4,6),则形参a,b,c的值分别为2,4,6(这是与过去一样的)。如果写成fun(2,4),即少写了最后一个参数,由于在函数定义时已指定了c的缺省值为100,因此a,b,c的值分别为2,4,100。请注意:赋予缺省值的参数必须放在形参表列中的最右端。例如: void f1(float a,int b,int c=0,char d=′a′)(正确)void f2(float a,int c=0,char d=′a′,int b) (不正确)注意:不要同时使用重载函数和缺省参数的函数,因为当调用函数时少写一个参数,系统无法判定是利用重载函数还是利用缺省参数的函数,会发生错误。 14.7 变量的引用类型345 1、“引用”(reference)是C++的一种新的变量类型,是对C的一个重要扩充。它的作用是为一个变量起一个别名。 2、假如有一个变量a,想给它起一个别名b,可以这样写: int a; 实参把变量名传给形参。i的名字传给引用变量a,这样a就成了i的别名。同理,b成为j的别名。a和i代表同一个变量,b和j代表同一个变量。在swap函数中使a和b的值对换,显然,i和j的值同时改变了。 当读者看到&a这样的形式时,怎样区别是声明引用变量还是取地址的操作呢?请记住,当&a的前面有类型符时(如int &a),它必然是对引用的声明;如果前面无类型符(如&a),则是取变量的地址。 14.8 内置函数 348 调用函数时需要一定的时间,如果有的函数需要频繁使用,则所用时间会很长,从而降低程序的执行效率。C++提供一种提高效率的方法,即在编译时将所调用函数的代码嵌入到主调函数中。这种嵌入到主调函数中的函数称为内置函数(inline function),又称内嵌函数。 例如: #include { if(b>a)a=b;if(c>a)a=c;return a;} void main(){int i=7,j=10,k=25,m;m=max(i,j,k);cout<<“max=”< 14.9 作用域运算符349 1、作用域运算符∷,∷aa表示全局作用域中的变量。 2、不能用∷ 访问函数中的局部变量。 425- 第一章 程序设计和C语言 【第15页】 1-5 #include printf(“ Very Good!nn”); printf(“**************************n”); return 0;} 1-6 #include max=b;if(max max=c;printf(“The largest number is %dn”,max);return 0;} 第2章算法——程序的灵魂 【第36页】暂无答案 第3章最简单的C程序设计——顺序程序设计 【第82页】 3-1 #include printf(“p=%fn”,p);return 0;} 3-2-1 #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-2-2 #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-2-3 #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=%10.2fn”,p1); // 输出按第1方案得到的本息和 printf(“p2=%10.2fn”,p2); // 输出按第2方案得到的本息和 printf(“p3=%10.2fn”,p3); // 输出按第3方案得到的本息和 printf(“p4=%10.2fn”,p4); // 输出按第4方案得到的本息和 printf(“p5=%10.2fn”,p5); // 输出按第5方案得到的本息和 return 0;} 3-3.#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;} 3-8-1 #include int c1,c2; //整型定义 printf(“请输入两个整数c1,c2:”); scanf(“%d,%d”,&c1,&c2); printf(“按字符输出结果:n”); printf(“%c,%cn”,c1,c2); printf(“按ASCII码输出结果为:n”); printf(“%d,%dn”,c1,c2); return 0;} 3-8-2 #include char c1,c2; //定义字符型变量 int i1,i2; printf(“请输入两个字符c1,c2:”); scanf(“%c,%c”,&c1,&c2); i1=c1; i2=c2; printf(“按字符输出结果:n”); printf(“%c,%cn”,i1,i2); printf(“按整数输出结果:n”); printf(“%d,%dn”,c1,c2); return 0;} 3-8-3 #include char c1,c2; int i1,i2; printf(“请输入两个整数i1,i2:”); scanf(“%d,%d”,&i1,&i2); c1=i1; c2=i2; printf(“按字符输出结果:n”); printf(“%c,%cn”,c1,c2); printf(“按整数输出结果:n”); printf(“%d,%dn”,c1,c2); return 0;} 3-8 #include //定义整型变量 //赋值给整型变量 //定义为字符型 //定义为整型 //将整数赋值给字符变量 printf(“用putchar语句输出结果为:”);putchar(c1);putchar(c2);printf(“n”);printf(“用printf语句输出结果为:”);printf(“%c %cn”,c1,c2);return 0;} 第4章选择结构程序设计【第111页】 4-4-1 #include 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-4-2 #include 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;} 4-5-2 #include int i,k; printf(“请输入一个小于%d的整数i:”,M); scanf(“%d”,&i); while(i>M) {printf(“输入的数不符合要求,请重新输入一个小于%d的整数i:”,M); scanf(“%d”,&i); } k=sqrt(i); printf(“%d的平方根的整数部分是:%dn”,i,k); return 0;} 4-5 #include int i,k; printf(“请输入一个小于%d的整数i:”,M); scanf(“%d”,&i); if(i>M) {printf(“输入的数不符合要求,请重新输入一个小于%d的整数i:”,M); scanf(“%d”,&i); } k=sqrt(i); printf(“%d的平方根的整数部分是:%dn”,i,k); return 0;} 4-6.#include printf(“输入x:”); scanf(“%d”,&x); if(x<1) /* x<1 */ { y=x; printf(“x=%3d,y=x=%dn” ,x,y); } else if(x<10) /* 1= printf(“x=%d, y=2*x-1=%dn”,x,y);} else /* x>=10 */ { y=3*x-11; printf(“x=%d, y=3*x-11=%dn”,x,y);} return 0;} 4-7-1 #include int x,y; printf(“enter x:”); scanf(“%d”,&x); y=-1; if(x!=0) if(x>0) y=1; else y=0; printf(“x=%d,y=%dn”,x,y);return 0;} 4-7-2 #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;} 4-8 #include { 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;} 4-9 #include 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); switch(place) {case 5:printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv); printf(“n反序数字为:”); printf(“%d%d%d%d%dn”,indiv,ten,hundred,thousand,ten_thousand); break; case 4:printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv); printf(“n反序数字为:”); printf(“%d%d%d%dn”,indiv,ten,hundred,thousand); break; case 3:printf(“%d,%d,%d”,hundred,ten,indiv); printf(“n反序数字为:”); printf(“%d%d%dn”,indiv,ten,hundred); break; case 2:printf(“%d,%d”,ten,indiv); printf(“n反序数字为:”); printf(“%d%dn”,indiv,ten); break; case 1:printf(“%d”,indiv); printf(“n反序数字为:”); printf(“%dn”,indiv); break; } return 0;} 4-10-1 #include int i; double bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+100000*0.05; bon6=bon4+100000*0.03; bon10=bon6+400000*0.015; printf(“请输入利润i:”); scanf(“%d”,&i); if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bon1+(i-100000)*0.075; else if(i<=400000) bonus=bon2+(i-200000)*0.05; else if(i<=600000) bonus=bon4+(i-400000)*0.03; else if(i<=1000000) bonus=bon6+(i-600000)*0.015; else bonus=bon10+(i-1000000)*0.01; printf(“奖金是: %10.2fn”,bonus); return 0;} 4-10-2 #include int i; double bonus,bon1,bon2,bon4,bon6,bon10; int branch; 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(“%d”,&i); branch=i/100000; if(branch>10)branch=10; switch(branch) { case 0:bonus=i*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.2fn”,bonus); return 0;} 4-11 #include 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) { 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;} 4-12 #include 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章循环结构程序设计【第140页】 5-2 #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代表符号,下一项的符号与上一项符号相反 term=sign/n; // 求出下一项的值term count++; // count累加1 } pi=pi*4; // 多项式的和pi乘以4,才是π的近似值 printf(“pi=%10.8fn”,pi); // 输出π的近似值 printf(“count=%dn”,count); // 输出循环次数 return 0;} 5-3 #include 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;} 5-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-5 #include int a,n,i=1,sn=0,tn=0; printf(“a,n=:”); scanf(“%d,%d”,&a,&n); while(i<=n) { tn=tn+a;/*赋值后的tn为i个 a组成数的值*/ sn=sn+tn;/*赋值后的sn为多项式前i项之和*/ a=a*10; ++i; } printf(“a+aa+aaa+...=%dn”,sn); return 0; } 5-6 #include {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;} 5-7 #include 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;} 5-8 #include int i,j,k,n; printf(“parcissus numbers are ”); 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(“%d ”,n); } printf(“n”); return 0; } 5-9-1 #define M 1000 /*定义寻找范围*/ #include int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10; int i,a,n,s; for(a=2;a<=M;a++) /* a是2-1000之间的整数,检查它是否完数 */ {n=0; /* n用来累计a的因子的个数 */ s=a; /* s用来存放尚未求出的因子之和,开始时等于a */ for(i=1;i /* 检查i是否a的因子 */ if(a%i==0) /* 如果i是a的因子 */ {n++; /* n加1,表示新找到一个因子 */ s=s-i; /* s减去已找到的因子,s的新值是尚未求出的因子之和 */ switch(n) /* 将找到的因子赋给k1...k9,或k10 */ {case 1: k1=i;break; /* 找出的笫1个因子赋给k1 */ case 2: k2=i;break; /* 找出的笫2个因子赋给k2 */ case 3: k3=i;break; /* 找出的笫3个因子赋给k3 */ case 4: k4=i;break; /* 找出的笫4个因子赋给k4 */ case 5: k5=i;break; /* 找出的笫5个因子赋给k5 */ case 6: k6=i;break; /* 找出的笫6个因子赋给k6 */ case 7: k7=i;break; /* 找出的笫7个因子赋给k7 */ case 8: k8=i;break; /* 找出的笫8个因子赋给k8 */ case 9: k9=i;break; /*找出的笫9个因子赋给k9 */ case 10: k10=i;break; /* 找出的笫10个因子赋给k10 */ } } if(s==0) { printf(“%d ,Its factors are ”,a); if(n>1)printf(“%d,%d”,k1,k2); /* n>1表示a至少有2个因子 */ if(n>2)printf(“,%d”,k3); /* n>2表示至少有3个因子,故应再输出一个因子 */ if(n>3)printf(“,%d”,k4); /* n>3表示至少有4个因子,故应再输出一个因子 */ if(n>4)printf(“,%d”,k5); /* 以下类似 */ if(n>5)printf(“,%d”,k6); if(n>6)printf(“,%d”,k7); if(n>7)printf(“,%d”,k8); if(n>8)printf(“,%d”,k9); if(n>9)printf(“,%d”,k10); printf(“n”);} } return 0;} 5-9-2 #include 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 if(m%i==0)printf(“%d ”,i); printf(“n”); } } return 0;} 5-10 #include int i,n=20; double a=2,b=1,s=0,t; for(i=1;i<=n;i++) { s=s+a/b; t=a,a=a+b,b=t; } printf(“sum=%16.10fn”,s); return 0; } 5-11 #include double sn=100,hn=sn/2; int n; for(n=2;n<=10;n++) { sn=sn+2*hn; /*第n次落地时共经过的米数*/ hn=hn/2; /*第n次反跳高度*/ } printf(“第10次落地时共经过%f米n”,sn); printf(“第10次反弹%f米n”,hn); return 0; } 5-12 #include int day,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2; /*第1天的桃子数是第2天桃子数加1后的2倍.*/ x2=x1; day--; } printf(“total=%dn”,x1); return 0;} 5-13 #include float a,x0,x1; printf(“enter a positive number:”); scanf(“%f”,&a); x0=a/2; x1=(x0+a/x0)/2; do {x0=x1; x1=(x0+a/x0)/2; }while(fabs(x0-x1)>=1e-5); printf(“The square root of %5.2f is %8.5fn”,a,x1); return 0;} 5-14 #include x1=1.5; do {x0=x1; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x1=x0-f/f1; }while(fabs(x1-x0)>=1e-5); printf(“The root of equation is %5.2fn”,x1); return 0;} 5-15 #include do {printf(“enter x1 & x2:”); scanf(“%f,%f”,&x1,&x2); fx1=x1*((2*x1-4)*x1+3)-6; fx2=x2*((2*x2-4)*x2+3)-6; }while(fx1*fx2>0); do {x0=(x1+x2)/2; fx0=x0*((2*x0-4)*x0+3)-6; if((fx0*fx1)<0) {x2=x0; fx2=fx0; } else {x1=x0; fx1=fx0; } }while(fabs(fx0)>=1e-5); printf(“x=%6.2fn”,x0); return 0;} 5-16 #include 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”); } return 0; } 5-17 #include int main(){ char i,j,k; /*是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(“A--%cnB--%cnC--%cn”,i,j,k); return 0; } 第6章利用数组处理批量数据 【第168页】 6-1 #include for(i=1;i<=100;i++) a[i]=i; a[1]=0; for(i=2;i 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;} 6-2 #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;} 6-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;} 6-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;} 6-5 #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-6 #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 {for(j=0;j<=i;j++) printf(“%6d”,a[i][j]); printf(“n”); } printf(“n”); return 0;} 6-7 #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;} 6-8 #include /* 数组为4行5列 */ int main(){ int i,j,k,a[N][M],max,maxj,flag; printf(“please input matrix:n”); for(i=0;i /* 输入数组 */ for(j=0;j scanf(“%d”,&a[i][j]); for(i=0;i {max=a[i][0]; /* 开始时假设a[i][0]最大 */ maxj=0; /* 将列号0赋给maxj保存 */ for(j=0;j /* 找出第i行中的最大数 */ if(a[i][j]>max) {max=a[i][j]; /* 将本行的最大数存放在max中 */ maxj=j; /* 将最大数所在的列号存放在maxj中 */ } flag=1; /* 先假设是鞍点,以flag为1代表 */ for(k=0;k if(max>a[k][maxj]) /* 将最大数和其同列元素相比 */ {flag=0; /* 如果max不是同列最小,表示不是鞍点令flag1为0 */ continue;} if(flag) /* 如果flag1为1表示是鞍点 */ {printf(“a[%d][%d]=%dn”,i,maxj,max); /* 输出鞍点的值和所在行列号 */ break;} } if(!flag) /* 如果flag为0表示鞍点不存在 */ printf(“It is not exist!n”); return 0;} 6-9 #include 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 found %d, its position is %dn”,number,loca+1); sign=1; }第二篇:谭浩强版C语言期末考试
第三篇:C语言谭浩强第四版例题
第四篇:C语言程序设计谭浩强重点笔记
第五篇:C语言程序设计(谭浩强)第四版_课后答案精讲