C课后习题参考答案
更新时间:2024-05-31 14:00:01 阅读量: 综合文库 文档下载
- c课后题答案推荐度:
- 相关推荐
习题参考答案
习 题 参 考 答 案
习 题 1
一、选择题
1、B 2、C 3、B 4、D 5、A 6、B 7、C 二、填空题
1、源程序文件 c 2、obj 3、可执行文件 exe 4、机器语言 汇编语言 高级语言 三、解答题 略 四、编程题 1、 main() {
printf(“Hello! Welcome to China!”);
} 2、 main() {int x;
scanf(“%d”,&x);
if(x>=20&&x<1000) printf(“x=%d”,x); else printf(“Input error!”); }
习 题 2
一、选择题
1、C 2、A 3、B 4、D 5、 A 6、D 7、B 8、B 9、B 10、D 11、D 12、B 13、A 14、B 15、C 二、填空题
1、整型、实型、字符型 2、用户标识符、关键字标识符 3、存储单元、符号地址、内存地址 4、十、十六、八 5、double(双精度型) 6、 8 7、5.500000 8、a=-32768
295
习题参考答案
9、+0017,021,0x11 三、写程序运行结果
3257 32 57
7.88, -345.12,7.8765,-345.1230 7.87654e+00, -3.5e+02 a,97,141,61 1234,2322,4d2 CHINESE, CHI 四、scanf函数的使用
a=3 b=7 8.5 71.82 A a
五、用scanf函数输入数据
10
20Aa1.5-3.75 123.45,67.8
注意,其中123.45可以是任意实数,因为该值将被跳过,不用于赋值。
习 题 3
一、选择题 1. C 2. B 3. D 4. D 二、填空题 基本概念题 1. 2 2. 2 3. 1
阅读程序写出运行结果题 4. 1.00 5. 1,0,1
6. 9,11,9,10
三、写出下面表达式运算后a的值,设原来a=12。 (1)24 (2)10 (3)60 (4)0
(5)0 (6)0
习 题 4
一、选择题
1、B 2、D 3、B 4、D 5、A 6、C 二、填空题
1、1,0,1 2、1,2,3
3、ch1>=′A′&&ch1<=′Z′ ch1=ch1-32; 三、编程题
296
习题参考答案
1、从键盘输入三个数,然后按照由小到大的顺序输出。要求,设三个数放在变量a、b、中,最后仍然按照a、b、c的顺序输出。
#include
scanf(“%d,%d,%d”,&a,&b,&c); if(a>b) {t=a; a=b; b=t;} if(a>c) {t=a; a=c; c=t;} if(b>c) {t=b; b=c; c=t;} printf(“%d,%d,%d\\n”,a,b,c); }
2、编写程序根据以下的函数关系,对输入的x值输出相应的y值。
x y 2 #include 3、求一元二次方程ax2 +bx+c=0的解。 #include {float a,b,c,d,disc,x1,x2,realpart,imagpart; scanf(“%f,%f,%f”,&a,&b,&c); if(fabs(a)<=1e-6) Printf(is not a quadratic); else 297 c习题参考答案 {disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf(“has two equal roots:%8.4\\n”,-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.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); } } } 4、假设工资税率如下,其中s代表工资,r代表税率: s<500 r=0% 500<=s<1000 r=5% 1000<=s<2000 r=8% 2000<=s<3000 r=10% 3000<=s r=15% 编一程序实现从键盘输入一个工资数,输出实发工资数。要求使用switch语句。 main() {int salarly,r,g; scanf(“%d”,&salarly); if(salary>=3000) r=0.15; g=salary/500; switch(g) {case 1: r=0.05; case 2: case 3: r=0.08; case 4: case 5: r=0.10; } salary=salary*(1-r); printf(“%d\\n”,salary); 298 习题参考答案 习 题 5 一、选择题 1、A 2、C 3、C 4、D 5、A 6、A 7、A 8、B 9、C 10、B 11、B 12、D 二、填空题 1、continue 2、[1]n<=999或n<1000 [2]n 3、[1]x>=0或x>=0.0 [2]x 6、[1]n [2]flag=1 [3]n— 7、[1]j #include {int m,n,p,r,temp; printf(“Please input m,n:”); do {scanf(“%d%d”,&m,&n); }while(m<=0||n<=0); if(n { temp=n; n=m; m=temp; } /*确保大数放到n中*/ p=n*m; /*保留n和m的乘积到p中,以便求最小公倍数*/ while(m!=0) /*求n和m的最大公约数*/ {r=n%m; n=m; m=r; } printf(“最大公约数为:%d\\n”,n); printf(“最小公倍数为:%d\\n”,p/n); } 2、 #include int letter=0,space=0,digit=0,other=0; printf(“Please input a line character:”); while((c=getchar())!=’\\n’) {if(c>=’a’&&c<=’z’||c>=’A’&&c<=’Z’) letter++; else if(c==‘ ’) space++; else if(c>=’0’&&c<=’9’) digit++; else other++; } printf(“Letter is %d,Space is %d,Digit is %d,Other 299 { char str1[20], str2[10]; int i=0,j=0; gets(str1); gets(str2)? while(str1[i]!=?\\0?) i++; while(str2[j]!=?\\0?) str1[i++]=str2[j++]; str1[i]=?\\0?; puts(str1); } 2. # define M 3 # define N 4 # include 3. # include 习题参考答案 305 习题参考答案 { int i, j, a[5][5]={{2,8,1,9,4},{5,7,1,3,0},{7,1,7,5,2},{3,2,2,1,5},{0,2,1,6,8}}; for (i=0;i<5;i++) { for (j=0;j<5;j++) printf(“M”, a[i][j]); printf(“\\n”); find(a); } 4. #include { int a[3][5],x,y,i,j,k,flag=0; int max,min; for(i=0;i<3;i++) for(j=0;j<5;j++) scanf(\ /**/ for(i=0;i<3;i++) { max=a[i][0];y=0; for(k=1;k<5;k++) if(max for(k=0;k<3;k++) if(min>a[k][y]) {x=k;min=a[k][y];} if(i==x) {printf(\} if(flag==0) printf(\} 5. # include { a[j]=a[j+1]; j++; } a[N-1]=temp; } main() { int a[N]={8,5,6,9,4,1,-1,7,3,2}; int i; crl(a); for (i=0; i 6. # include # include int Replace_string(char line[ ], char str1[ ], char str2[ ]) { int i=0, j, loc; char temp[80]; while(i<=strlen(line)-strlen(str2)) { j=0; loc=i; while(str1[j]= =line[loc]&&str1[j]!=?\\0?) { loc++; j++; } if (str1[j]= =?\\0?) { strcpy(temp, &line[loc]); strcpy(&line[i], str2); i+=strlen(str2); strcpy(&line[i], temp); return 1; } else i++; } return 0; } 习 题 7 一、选择题 1.A 2.A 3. D 4.C 5. A 6.C 7.B 8.C 9.B 10.D 二、填空题 1.a=0,b=7 2.110 3.20 习题参考答案 307 习题参考答案 4.abc,ABC,bc,BC,c,C, 5.1 4 6. len++ p++ 三、编程题 1、编写一个程序,将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该字符串,请用指针完成。 main() {char ch[20]=\ int i; for(i=0;i 2、输入3个字符串,按由小到大的顺序输出。 main() {char str1[20],str2[20],str3[20]; char char p[20],*p1,*p2; printf(\ gets(str1); gets(str2); gets(str3); p1=str1;p2=str2; if(strcmp(str1,str2)>0) { strcpy(p,p1);strcpy(p1,p2); strcpy(p2,p); } p1=str1;p2=str3; if(strcmp(str1,str3)>0) { strcpy(p,p1);strcpy(p1,p2); strcpy(p2,p); } p1=str2;p2=str3; if(strcmp(str2,str3)>0) { strcpy(p,p1);strcpy(p1,p2); strcpy(p2,p); } printf(\ printf(\} 3、求一个3×3矩阵主对角线元素之和。 main() {int a[3][3],*p,i,s=0; for(i=0;i<3;i++) scanf(\ p=&a[0][0]; for(i=0;i<3;i++) s=s+*(p+3*i+i); 308 习题参考答案 printf(\} 4、将一个3×3矩阵转置。 main() {int a[3][3],*p; int i,j,t; printf(\ for(i=0;i<3;i++) scanf(\ p=&a[0][0]; for(i=0;i<3;i++) for(j=i;j<3;j++) {t=*(p+3*i+j); *(p+3*i+j)=*(p+3*j+i); *(p+3*j+i)=t; } printf(\ for(i=0;i<3;i++) printf(\} 5、输出给定的字符串中某一个字符前面的一串字符。如指定字符'a',则对字符串\,输出\。若无指定字符,则输出相应的提示信息。 #include char *ptr,str[10],ch; printf(\ scanf(\ ptr=str; getchar(); printf(\ scanf(\ while(ch=='\\n') {printf(\ scanf(\ } while(*ptr!=ch) {ptr++;n++;} 309 习题参考答案 for(i=0;i 注意:本题中getchar()的作用是吸收键入给第一个scanf函数的字符串尾部的回车符,如果无getchar(),则将无法正确输入字符给变量ch。 6、输入一行字符,计算其中大写字母、小写字母、数字、空格及其他字符的数目。 #include {int upper=0,lower=0,digit=0,space=0,other=0,i=0; char *p,s[20]; printf(\ while((s[i]=getchar())!='\\n') i++; p=s; /*使p指向数组s的首地址*/ while(*p!='\\n') { if(('A'<=*p)&&(*p<='Z')) ++upper; else if(('a'<=*p)&&(*p<='z')) ++lower; else if(*p==' ') ++space; else if((*p<='9')&&(*p>='0')) ++digit; else ++other; p++; } printf(\ printf(\} 7、从一个给定的字符串中找出某一子字符串的位置(从1开始)。例如子串“efg”在字符串“abcdefghijk”中位置为5。若字符串中没有指定的子串,则标记为0。 #include char str1[20],str2[20],str3[20]; char *p1=str1,*p3=str3,*p=str1; printf(\ gets(str1); 310 习题参考答案 printf(\ gets(str2); n=strlen(str2); while(*p1!='\\0') { for(i=0;i } *p3='\\0'; /* 在新生成的字符串尾添加结束符 */ if(strcmp(str3,str2)==0) /*新生成的字符串存放在str3中*/ { printf(\ p1='\\0'; } else { p1++; /*使p指向字符串str1的下一字符*/ p=p1; p3=str3; /*使p3重新指向数组str3首地址*/ } } if(*p1=='\\0') printf(\} 注意:由于gets函数可以接收带有空格的字符串,所以本题中采用gets而未采用不可接收带空格字符串的函数scanf。 8、编程删除字符串中的所有空白字符。 main() {char str1[20],str2[20]; char *p1,*p2; printf(\ gets(str1); /* str1用于存放原始字符串 */ p1=str1; p2=str2; /* str2用于存放去掉空格后的字符串,使p2指向str2 */ while(*p1!='\\0') { if(*p1!=' ') { *p2=*p1++; /* 将原始字符串中的字符依次赋值给str2 */ p2++; } else p1++; /* 遇空格符,只移动指针p1,而不把空格符赋值给str2 */ p3++; 311 习题参考答案 } printf(\} 9、有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 main() { int i,num[20],*p,n=0,m,k; printf(\ scanf(\ for(i=0;i num[i]=i+1; /* 以1至n为序给每个人编号 */ p=num; m=0; /* m为退出人数 */ i=0; /* i为每次循环时的计数变量 */ k=0; /* k为按1,2,3报数时的计数变量 */ while(m if(k==3) /* 本if分支对退出的人的编号赋值为0 */ { *(p+i)=0; k=0; /* 重新从1到3报数 */ m++; /* 退出人数加1 */ } i++; if(i==n) i=0; /*报数到一圈人的尾部时,i恢复为0,也即使人围成一圈*/ } while(*p==0) p++; printf(\} 10、有一个字符串,包含n个字符。编程实现:将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。 main() { char str1[20],str2[20]; char *p=str1; int n,m,i; printf(\ gets(str1); n=strlen(str1); printf(\ scanf(\ if(n printf(\ else { for(i=0;i 312 习题参考答案 *(str2+i)=*(p+m-1+i); *(str2+i)='\\0'; } printf(\} 习 题 8 一、选择题 1、C 2、A 3、D 4、D 5、A 6、A 7、A 8、C 9、A 10、B 11、B 12、C 13、B 14、C 15、B 16、C 17、B 18、D 19、B 20、B 二、填空题 1、main 2、scanf gets 3、2 4、auto 5、1,2 6、3235 7、5,25 8、15 9、3 10、6,720 11、9 12、[1] x [2] x-f(x)/f1(x) 三、改错题 1、参考答案与分析: 分析: 第1处错误:题目中已经告诉我们“函数void dbubble(int *f,int n)的功能是”,但在程序的第2行定义函数时头部就与题目要求不一致,因此,第1处错误就在第2 行,只要将第2行改成“void dbubble(int *f,int n)”即可。 第2处错误:在函数dbubble()中的第二个内循环(反向冒泡),题目要求很清楚:“从f[n-2]开始(i=n-2),比较f[i]与f[i+1],若f[i]小于f[i-1],则交换f[i]和f[i-1]两个元素的值,”,所以,其中的“if(f[j]>f[j-1])”应改成“if(f[j] 第3处错误:在主函数中定义数组时使用了“int a[n]={4,7,-3,2,10,17,1,6,9,-4};”这样的形式,其中n是变量,而根据数组的定义我们知道,在定义数组时[]中表示的是数组元素的个数,必须由“常量表达式”组成,而不能是变量。因此,只要将n改成10即可。 第4处错误:在主函数中,调用函数dbubble()时调用方式不对。原调用方式是“void dbubble(n,a);”,此处有两个错误,一是以语句方式调用函数时,其前面不能有“void”,应去掉;二是实参的顺序与函数dbubble()定义时的顺序不一致。因此,本错误应改成“dbubble(a,n);”。 2、参考答案与分析: 分析: 第1处错误:在函数find()的头部定义出错。函数头部定义为“void find(int a[5][])”,在二维数组的名字作为形参时,必须明确第二维的大小,第一维可以省略;但不能省略第二维中的每行的元素个数。因此,可以改成“void find(int a[][5])”或“void find(int a[5][5])”。 第2处错误: 这处错误应在计算列元素之和的语句“for(row=0;row<5;row++) sum2+=a[j][row];”中。由于要求的是列元素之和,则列下标不应该变,而变化的是行下标。因此,可以将本处错误改成“for(row=0;row<5;row++) sum2+=a[row][j];”。 第3处错误: 在C语言中,判断两个整数是否相等用的运算符是“==”,而“=”是赋值运算符,所以这处错误在“if(sum1=sum2) printf(\”语句中。应该改成“if(sum1==sum2) printf(\”。 第4处错误:这处错误出现在主函数中,在调用find()函数时,由于定义find()函数时形参只有一个,即二维数组的数组名,但在调用时却有两个实参,显然是错误的。应将语句“find(a,5);”改成“find(a);” 313 习题参考答案 四、编程题 1、参考答案: #include int jiec(int k); /*声明函数*/ float s=0; printf(“ 计算代数式的值\\n\\n”); for(k=1;k<=M;k++) s+= 1.0/jiec(k); /*函数以表达式方式调用*/ printf(“计算结果为:s=%f\\n”,s); } int jiec(k) /*计算阶乘值的函数,函数名前的int表示返回值的类型*/ int k; { int s,i; s=1; for(i=1;i<=k;i++) s*=i; /*计算1*2*3*?*k,并将计算结果赋值给变量s*/ return(s); /*将计算得的阶乘值返回调用函数(这里是主函数)*/ } 2、参考答案: #include { int j,k=0; /*计数变量k清零*/ for(j=2;j<=sqrt(n);j++) if(n%j==0) k++; if(k!=0) return(0); else return(1); } main() { int n,k; printf(“Please input n:”); scanf(“%d”,&n); k=shushu(n); if(k==0) printf(“\\nNO!”); else printf(“\\nYes!”); } 3、参考答案: int str_len(char *str) {int k=0; while(*str!=?\\0?) {k++; str++; } 314 return(k); } main() { char s[80]; printf(“Please input a string:”); gets(s); printf(“\\nThe string length is : %d”,str_len(s)); } 4、参考答案: #include a=k/1000; b=k/100; c=k/10; d=k; str[0]='0'+a; str[1]='0'+b; str[2]='0'+c; str[3]='0'+d; } main() {int i,k; char s[4]; do{ printf(\请输入一个4位整数:\ scanf(\ ex(k,s); for(i=0;i<4;i++) printf(\ } 5、参考答案: #include void zhuanzhi(int a[][3]) {int i,j,t; for(i=0;i<3;i++) for(j=i+1;j<3;j++) {t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; } } main() {int b[3][3],i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(\ zhuanzhi(b); 习题参考答案 315 习题参考答案 for(i=0;i<3;i++) {for(j=0;j<3;j++) printf(\ printf(\ } } 6、参考答案: #include {if(a[i]>max) { max=a[i]; j=i; } if(a[i] if(j!=0) {temp=a[j]; a[j]=a[9]; a[9]=temp; } if(k!=9) {temp=a[0]; a[0]=a[k]; a[k]=temp; } } void input(int a[]) {int i; for(i=0;i<10;i++) scanf(\} void output(int a[]) {int i; printf(\ for(i=0;i<10;i++) printf(\} main() {int b[10]; input(b); duihuan(b); output(b); } 7、参考答案: #include for(i=1;i for(j=0; (j {t=s[j]; s[j]=s[j+1]; s[j+1]=t; } 316 习题参考答案 } main() {char str[80]; printf(\请输入一个字符串:\ gets(str); sort(str); printf(\排序后的字符串是: %s\ } 8、参考答案: #include int letter,digit,space,other; void func(char s[]) {int i; for(i=0;s[i]!='\\0';i++) {if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') letter++; else if(s[i]==' ') space++; else if(s[i]>='0'&&s[i]<='9') digit++; else other++; } } main() {char str[80]; printf(\ gets(str); letter=0; digit=0; space=0; other=0; func(str); printf(\,Space is %d,Digit is %d,Other is %d,\ } 9、参考答案: #include if((i=n/10)!=0) convert(i); putchar(n+'0'); } main() { int number; printf(\ scanf(\ printf(\ if(number<0) { putchar('-'); number=-number; 317 习题参考答案 } convert(number); } 习 题 9 一、选择题 1、D 2、C 3、A 4、B 二、阅读程序题 1、575 2、第一行是 1104 ,第二行是 3380 ,第三行是 0550 三、完善程序题 1、 typedef i pu[k].grade< pu[j].grade 2、 pk->next pj->d pn!=head return k 四、改错题 注:错误的地方加上了下划线,正确的作为注释写在同一行 1、 #include char name[20], num[20]; }; struct T stu[5]={”cai”,”2106”,”li”,”4512”,”wang”,”6723”,”zhang”,”5129”}; int search(struct T items[], char name[], int n) { int low=0,high=n-1,mid; while(low if(items[mid].name=name) /* strcmp(items[mid].name,name)= =0 */ return mid; else if(items[mid].name low=mid+1; else high=mid-1; } return -1; } int main(void) { char name[30];int i; 318 习题参考答案 printf(“input the name:”);scanf(“%s”,name); i=search(stu[],name,4); /* stu */ if(i!=-1) printf(“name:%s num:%s\\n”,sut[i].name,stu[i].num); else printf(“\\nNot found! \\n”); } 2、 #include struct T{ char name[20], num[20]; struct T * next; }; struct T stu[5]={”cang”,”6723”,NULL,”cai”,”2106”,NULL, ”zhang”,”5129”,NULL,”zhang”,”4512”,NULL,”an”,”6868”,NULL}; void MakeChain(struct T items[], int n) { int k; for(k=0;k items[k]->next=&items[k+1]; /* items[k].next */ } stuct T *Search(struct T items[], char who[20]) { struct T *temp=items[0]; /* items */ while(temp) if(strcmp(temp->name, who)==0) break; else temp=temp->next; return items; /* temp */ } void main(void) { char name[20]; struct T *loc; scanf(“%s”, name); MakeChain(stu,5); loc=Search(name,stu); /* Search(stu,name) */ if(loc) printf(“name:%s num:%s\\n”, loc->name, loc->num); else printf(“Not found! \\n”); } 五、编程题 1、 struct {int num; float emid; 319 习题参考答案 float efinal; }stu; main() { float escore; scanf(“%d,%f,%f”,&stu.num,&stu.emid,&stu.efinal); escore=stu.emid*0.3+stu.efinal*0.7; printf(“%f\\n”,escore); } 2、 已知结构体类型如下: struct user { char name[20]; char num[10]; }; main {struct user sp[5],temp; int i,j,k; for(i=0;i<5;i++) { gets(sp[i].name); gets(sp[i].num);} for(i=0;i<4;i++) { k=I; for(j=i+1;i<5;j++) if(strcmp(sp[k].name,sp[j].name)>0) k=j; temp=sp[k]; sp[k]= sp[i]; sp[i]= temp; } for(i=0;i<5;i++) printf(“%s,%s\\n”,sp[i].name,sp[i].num); } 3、 struct result { char name[20]; float score[6]; float aver; }; main() { struct result player,*p; int i; 320 习题参考答案 float max,min,sum=0; p=&player; gets(p->name); for(i=0;i<6;i++) scanf(“%f”,&player.score[i]); sum=max=min=player.score[0]; for(i=1;i<6;i++) {sum+=p->score[i]; if(p->score[i]>max) max=p->score[i]; else min=p->score[i];} =(sum-max-min)/4; printf(“%s:%f\\n”,p->name,p->aver); } 4、 struct node { int x; struct node *next; }; struct node *find_del(struct node *head,struct node **pm) {struct node *p1,*p2,*pmax,*pre; if(head==NULL) return NULL; pmax=head; p2=p1=pmax; while(p1) { if(p1->x>pmax->x) { pre=p2;pmax=p1;} p2=p1;p1=p1->next; } if(pmax==head) head=pmax->next; else pre->next=pmax->next; *pm=pmax; return head; } 习 题 10 一、选择题 1、D 2、C 3、C 4、D 5、B 6、C 7、A 8、D 9、D 11、D 12、C 13、C 14、D 15、A 16、A 17、B 18、B 19、D 二、填空题 10、B 20、C 321 习题参考答案 1、16 8 2、stdio.h 3、”a+” 4、fread 5、0或NULL 6、缓冲文件系统 非缓冲文件系统 7、fseek(fp,32,0);或fseek(fp,32,SEEK_SET); 8、”abc.dat” “r” 不能打开abc.dat文件 打开abc.dat文件成功 9、fgetc(fp) ch!=EOF fgetc(fp) 10、10,11 30,31 50,51 三、编程题 1、 #include char ch, fname[10]; printf(“Input the name of file.\\n”); gets(fname); if((fp=fopen(fname,”w”))==NULL) {printf(“Cannot open file!\\n”); exit(1); } printf(“Input data:\\n”); while((ch=getchar()!=?#?) fputc(ch,fp); fclose(fp); } 2、 #include {FILE *fp; int letter=0,digit=0,space=0; char c; if((fp=fopen(\ {printf(\ while((c=fgetc(fp))!=EOF) {if(isalpha(c)) letter++; if(isdigit(c)) digit++; if(c==? ?) space++; } printf(“Letter=%d,Digit=%d,Space=%d\\n”,letter,digit,space); fclose(fp); } 3、 #include if((fp=fopen(\ {printf(\ c=fgetc(fp); 322 while(c!=EOF) {if(c>='a'&&c<='z') { c=c-32; fseek(fp,-1,SEEK_CUR); fputc(c,fp); fseek(fp,0,SEEK_CUR); } c=fgetc(fp); } fclose(fp); } 4、 #include char str[][11]= {\\char s[8][11]; int i; if((fp=fopen(\ {printf(\ exit(1); } for(i=0;i<8;i++) /*将字符串数组写入文件中*/ { fputs(str[i],fp); fputs(\ } rewind(fp); /*将文件指针复位到文件开头*/ printf(\ for(i=0;i<8;i++) /*从文件中读出字符串输出到屏幕上*/ { fgets(s[i],11,fp); puts(s[i]); } fclose(fp); } 5、 #include char addr[20]; int salary; char health[8]; char class[10]; }em[10]; struct emp {char name[10]; 习题参考答案 323 习题参考答案 int salary; }em_new[10]; void creat() {FILE *fp; int i,j; printf(\ for(i=0;i<4;i++) /*输入数据*/ scanf(\m[i].salary,em[i].health,em[i].class); /*将数据写入文件*/ if((fp=fopen(\ { printf(\ exit(0); } for(i=0;i<4;i++) if(fwrite(&em[i],sizeof(struct employee),1,fp)!=1) printf(\ fclose(fp); } main() {FILE *fp1,*fp2; int i,j; creat(); if((fp1=fopen(\ { printf(\ exit(0); } printf(\ NO. name sex age address salary health clasee\\n\ for(i=0;fread(&em[i],sizeof(struct employee),1,fp1)!=0;i++) {printf(\ em[i].sex,em[i].age,em[i].addr,em[i].salary,em[i].health,em[i].class); strcpy(em_new[i].name,em[i].name); em_new[i].salary=em[i].salary; } printf(\ if((fp2=fopen(\ { printf(\ exit(0); } printf(\ Name Salary\\n\ for(j=0;j {if(fwrite(&em_new[j],sizeof(struct emp),1,fp2)!=1) printf(\ printf(\ s ?\ } 324 习题参考答案 printf(\ fclose(fp1); fclose(fp2); } 习 题 11 一、填空题 1、文本模式 图形模式 2、字符 像素 3、80 25 0 0 79 24 4、图形系统初始化 关闭图形系统 5、BGI 二、程序设计题 1、参考程序 #include /* 将屏幕初始化成自测试图形方式 */ void init() { int gd=DETECT,gm,err; initgraph(&gd,&gm,\ err=graphresult(); if(err!=0) {printf(\ printf(\ getch(); exit(1); } cleardevice(); } main() {char str[30]=\ int i,j,maxx,maxy,k; init(); maxx=getmaxx(); maxy=getmaxy(); k=1; while(k<20) { i=rand()%maxx; /*产生不小于最大屏幕x值的随机数*/ j=rand()%maxy; /*产生不小于最大屏幕y值的随机数*/ setcolor(WHITE+k); outtextxy(i,j,str); 325 习题参考答案 delay(100000); k++; } getch(); closegraph(); } 2、参考程序 #include /* 将屏幕初始化成自测试图形方式 */ void init() { int gd=DETECT,gm,err; initgraph(&gd,&gm,\ err=graphresult(); if(err!=0) {printf(\ printf(\ getch(); exit(1); } cleardevice(); } /*函数large()将显示放大的字符*/ void large(int x,int y,unsigned char *str,int space,int color) {void readcclib(); unsigned char buf[72]; unsigned int upattern; int i,ci; char ascstr[2]; setcolor(color); ci=0; while(ci ascstr[0]=str[ci];ascstr[1]='\\0'; settextstyle(SMALL_FONT,HORIZ_DIR,9); outtextxy(x,y-3,ascstr);x=x+textwidth(\ ci+=strlen(ascstr); } } main() {int i; char str[30]=\ init(); 326 for(i=100;i<110; i++) large(50+i,50+i,str,5,WHITE+i); getch(); closegraph(); } 3、参考程序 #include /* 将屏幕初始化成自测试图形方式 */ void init() { int gd=DETECT,gm,err; initgraph(&gd,&gm,\ err=graphresult(); if(err!=0) {printf(\ printf(\ getch(); exit(1); } } main() {int i; init(); setbkcolor(BLUE); for(i=10;i<130; i+=10) {setcolor(WHITE+i/10); circle(250,250,i); } getch(); } 4、参考程序 #include /* 将屏幕初始化成自测试图形方式 */ void init() { int gd=DETECT,gm,err; initgraph(&gd,&gm,\ err=graphresult(); if(err!=0) {printf(\ printf(\ getch(); 习题参考答案 327 习题参考答案 exit(1); } cleardevice(); } /* 画一个四边形填充框 (left,top) : 左上角坐标 ; (right,bottom) : 右下角坐标 ; color : 填充颜色 */ void draw_window(int left,int top,int right,int bottom,int color) { setwritemode(0); setfillstyle(SOLID_FILL,color); bar(left,top,right,bottom); } /* 画一个带凸凹的四边形填充框 (left,top) 左上角坐标; (right,bottom) :右下角坐标; width : 凸或凹的宽度; color1 : 下边框颜色; color2 : 上边框颜色; color3 : 内框填充颜色 */ void draw3d(int left,int top,int right,int bottom, int width,int color1,int color2,int color3) { int shape[6]; setwritemode(0); setfillstyle(SOLID_FILL,color1); bar(left+width,bottom-width,right-width,bottom); bar(right-width,top+width,right,bottom); setfillstyle(SOLID_FILL,color1); setcolor(color1); shape[0]=right; shape[1]=top+width; shape[2]=right; shape[3]=top; shape[4]=right-width; shape[5]=top+width; fillpoly(3,shape); shape[0]=left+width; shape[1]=bottom; shape[2]=left+width; shape[3]=bottom-width; shape[4]=left; shape[5]=bottom; fillpoly(3,shape); setfillstyle(SOLID_FILL,color2); bar(left,top,right-width,top+width); bar(left,top+width,left+width,bottom-width); setfillstyle(SOLID_FILL,color2); setcolor(color2); shape[0]=right-width; shape[1]=top; shape[2]=right; shape[3]=top; shape[4]=right-width; shape[5]=top+width; fillpoly(3,shape); shape[0]=left; shape[1]=bottom-width; shape[2]=left+width; shape[3]=bottom-width; shape[4]=left; shape[5]=bottom; fillpoly(3,shape); setfillstyle(SOLID_FILL,color3); bar(left+width,top+width,right-width,bottom-width); 328 习题参考答案 } /* 画按钮 color1,color2,color3 : 见 draw3d() 函数的说明 */ void draw_bar(int left,int top,int right,int bottom, int color1,int color2,int color3,char s[]) { draw3d(left+5,top+3,right-5,bottom-3,2,color2,color1,color3); setcolor(BLACK); outtextxy(left+16,top+12,s); } main() { init(); setfillstyle(SOLID_FILL,LIGHTGRAY); bar(100,100,200,210); draw_window(105,105,195,205,WHITE); draw_window(108,108,192,202,LIGHTGRAY); draw_bar(120,110,180,140,WHITE,BLACK,LIGHTGRAY,\ draw_bar(120,140,180,170,WHITE,BLACK,LIGHTGRAY,\ draw_bar(120,170,180,200,WHITE,BLACK,LIGHTGRAY,\ getch(); closegraph(); } 329
正在阅读:
C课后习题参考答案05-31
兰大15年-秘书学原理课程作业 - A11-26
编译原理语法分析程序09-10
§15.2. 2完全平方公式03-24
襄阳市住宅装饰行业服务规范(试行)01-19
K3期初仓存异常余额数据来源及处理05-27
第二章和第三章教案05-19
干部考察材料办公室负责人02-11
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 课后
- 习题
- 答案
- 参考