第一篇:C语言程序设计 科学出版社 曹计昌 习题答案范文
第一章习题 1.4 原码:对于一个二进制数X,如果规定其最高位为符号位,其余各位为该数的绝对值,并且规定符号位值为0表示正,为1表示负,采用这种方式的二进制编码称为该二进制数X的原码。
补码:正数的补码等于正数的原码,负数的补码为其原码除符号位不动外,其余各位变反再加1所得。
反码:对于正数而言,反码与原码相同;对于负数而言,反码符号位的定义与原码相同,但需要将对应原码的数值位按位变反。1.5 和:10101010 差:00010000 1.6 和 01073 差-0337 1.7 和 0x1AABA 差-0x5320 1.8(251)10=(11111011)2=(373)8=(FB)16 1.10 在16位机中,[157]补= ***1
[-153]补= ***1 157-153=157+(-153)=(***1)2+(***1)2=(***0)2=(4)10 1.14 算法设计:用变量s存储累加和,k表示计数 描述为:
(1)定义变量s,k。(2)s清零,k赋初值1。
(3)判断k<101?如果是,顺序执行(4);否则转步骤(5);(4)k加到累加和变量s中,k加1;转步骤(3)。(5)输出累加和s。(6)结束。
开始 结束
int s=0,k=1;k<101? s=s+k;k=k+1;输出s N Y 1.16
第二章习题 2.2(1)x, ++, +, y(2)-, 0xabL(3)2.89e+12L(4)”String+” FOO””(5)x, *, *, 2(6)”X??/”(7)a, ?, b(8)x,--, +=, y(9)intx, =, +, 10(10)”String”, “FOO”
2.3 不是表识符的如下:
4th 首字母为数字
sizeof关键字 x*y *不是字母、数字、下划线 temp-2-不是字母、数字、下划线 isn’t ’不是字母、数字、下划线 enum 关键字
2.4 合法常数:
.12 0.L
1.E-5
3.F 浮点型常量 2L
33333
0377UL 0x9cfU 整型常量 “a”“”字符串常量 ‘45’‘ ’‘a’字符常量
非法常数: ‘‘’必须用转义序列 0x1ag 十六进制没有g E20 没有尾数部分 ‘18’要用八进制数
‘ xa’格式错误,可以是’xa’ “3’4””需要转义序列 ‘”’需要转义序列
2.5(1)int a, b=5;(2)double h;(3)int x=2.3;0.3 会被截取。(4)const long y=1;必须赋初值(5)float a= 2.5*g;g 没有定义。
(6)int a=b=2;在 turbo C 中编译出错:未定义的符号’b’在main函数中。
2.6(1)4(2)0(3)1(4)6(5)8(6)0(7)3.00(8)1(9)108(10)0
2.7 答案不确定
(1)a==b==c c未定义(2)正确(3)正确(4)正确
(5)a*++-b
表达式缺值
(6)a||b^i
^运算的操作数必须是整型,而i不是(7)i*j%a %运算的操作数必须是整型,而a不是(8)正确(9)正确
(10)int(a+b)应该改成(int)(a+b)
2.9(1)0(2)-2(3)65535(4)5(5)60(6)113(7)-2(8)-1(9)65532(10)3 2.10 unsigned long encrypt(unsigned long x){
unsigned long x0,x1,x2,x3,x4,x5,x6,x7;
x0=(x & 0x0000000F)<< 8;
x1=(x & 0x000000F0);
x2=(x & 0x00000F00)<< 8;
x3=(x & 0x0000F000);
x4=(x & 0x000F0000)<< 8;
x5=(x & 0x00F00000);
x6=(x & 0x0F000000)>> 24;
x7=(x & 0xF0000000);
return(x0|x1|x2|x3|x4|x5|x6|x7);} 2.11 #include
unsigned long in;unsigned long a,b,c,d;scanf(“%ld”,&in);//in=1563;a=(in&0xff000000)>>24;b=(in&0x00ff0000)>>16;c=(in&0x0000ff00)>>8;d=in&0x000000ff;printf(“%d.%d.%d.%d”,a,b,c,d);} 2.15((k >>8)& 0xFF00)|((p & 0x00FF)<<8)2.16 max=a>b?a>c?a:c:b>c?b:c;max=a > b ?((a > c)? a : c):((b > c)? b : c);2.17 X=y>>n 2.18(c>=’0’&& c<=’9’)? c –‘0’ : c 2.19(a % 3 == 0)&&(a % 10 == 5)? a : 0;第三章习题
3.1 函数原型是指对函数的名称、返回值类型、参数的数目和参数类型的说明。其规定了调用该函数的语法格式,即调用形式。putchar函数的原型为:int putchar(int c);puts函数的原型为: int puts(const char *s);printf函数的原型为:int printf(const char *format,„);getchar函数的原型为:int getchar_r(void);gets函数的原型为:char * gets_r(char *s);scanf函数的原型为: int scanf(const char *format,„);3.2 不同点:① puts为非格式输出函数,printf为格式输出函数;
② puts函数的参数类型和数目一定(一个字符串),printf函数的参数类型和数目不固定; ③ puts函数输出后会自动换行,printf函数没有这一功能。相同点:①二者都向标准设备输出; ②二者返回值类型都为int。3.3 x1=-1,177777,ffff,65535
x2=-3,177775,fffd,65533
y1=123.456703,123.457,123.457,123.457(注意对齐)
y2=123.449997,1.23450e+02,123.45
x1(%4d)=-1 3.4 ⑴%c;⑵%c;⑶%f;⑷%f;⑸%lu;⑹%d;⑺%d;⑻%d;⑼%f;⑽%Lf 3.5 ⑴错误,运行提示为divide error ⑵正确,结果为b ⑶正确,结果为
* ⑷正确
⑸正确,但无法正常从结果中退出 ⑹正确
⑺正确,结果为82,63 ⑻编译错误,提示 cannot modify a const object ⑼正确 ⑽正确
3.6-6.70000
177601
123
0 3.8 #include
char c;
c= getchar_r();
if((c>='0'&&c<='9')||(c>='A'&&c<='F')||(c>='a'&&c<='f'))
{
if((c>='0'&&c<='9'))
{
printf(“%dn”,c-'0');
}
else if((c>='A'&&c<='F'))
{
printf(“%dn”,c-'A'+10);
}
else
printf(“%dn”,c-'a'+10);
}
else
putchar(c);} 3.9 #include
short num,high,low;
printf(“Please input a short number:n”);
scanf(“%hd”,&num);
low = 0x00ff & num;
high = 0x00ff &(num >> 8);
printf(“The high byte is:%cn”, high);
printf(“The low byte is:%cn”, low);
} 3.10 #include “stdafx.h”
int main(int argc, char* argv[]){
unsigned short int x;
unsigned short int high,low;
printf(“input a integer:n”);
scanf(“%d”,&x);
high =(x>>12)&0x000f;
low =(x<<12)&0xf000;
x= x&0x0ff0;
x=x|high|low;
printf(“%dn”,x);
return 0;} 3.11 #include
float f,c;
scanf(“%f”,&f);
c=(5*(f-32))/9;
printf(“%.0f(F)=%.2f(C)n”,f,c);} 或者
#include
float c;
scanf(“%d”,&f);
c=(5*(f-32))/9;
printf(“%d(F)=%.2f(C)n”,f,c);} 3.13 #include
double r, h;
double s, v;
printf(“Please input the r and h.”);
scanf(“%lf,%lf”, &r, &h);
s = 2 * PI * r * h + 2 * PI * r * r;
v = PI * r * r * h;
printf(“s is %lf, v is %lf”, s, v);
return 0;} 3.14 #include “stdafx.h”
int main(int argc, char* argv[]){
char a[4] = “编”;
printf(“机内码:%x%xtn”,a[0]&0xff,a[1]&0xff);
printf(“区位码:%xtn”,a[0]&0xff<<8+a[1]&0xff-0x2020-0x8080);
printf(“国际码:%xtn”,a[0]&0xff<<8+a[1]&0xff-0x8080);
return 0;} 第四章习题 4.1 #include
printf(“A gets the score %.1f”,a);if((b-a)*(b-c)<0)
printf(“B gets the score %.1f”,b);if((c-a)*(c-b)<0)
printf(“C gets the score %.1f”,c);} 4.3 #include
if(m==2)return(y%4==0 &&(y%100==0 || y%400==0))?29:28;
else if(m==4 || m==6 || m==9 || m==11)return 30;
else return 31;}
main(){
int y,m,d,days;
printf(“Enter year:”);
scanf(“%d”,&y);
printf(“Enter month:”);
scanf(“%d”,&m);
printf(“Enter day:”);
scanf(“%d”,&d);
days=d;
while(m>1){days+=mdays(y,m-1);m--;}
printf(“%dn”,days);} 4.4 if方法: #include “stdafx.h” #include
float x = 0;
printf(“input the salaryn”);
scanf(“%f”,&x);
if(x<0)
printf(“wrongn”);
else if(x>0 && x<1000)
printf(“0n”);
else if(x<2000)
printf(“%fn”,x*0.05);
else if(x<3000)
printf(“%fn”,x*0.1);
else if(x<4000)
printf(“%fn”,x*0.15);
else if(x<5000)
printf(“%fn”,x*0.2);
else
printf(“%fn”,x*0.25);
return 0;}
Case方法:
#include “stdafx.h” #include
float x;
printf(“input the salaryn”);
scanf(“%f”,&x);
int xCase = 0;
xCase =(int)(x/1000.0);
switch(xCase)
{
case 0:
printf(“0n”);
break;
case 1:
printf(“%fn”,x*0.05);
break;
case 2:
printf(“%fn”,x*0.1);
break;
case 3:
printf(“%fn”,x*0.15);
break;
case 4:
printf(“%fn”,x*0.2);
break;
default:
printf(“%fn”,x*0.25);
}
return 0;} 4.7 #include “stdafx.h” #include
char *sa;
char c;
int i = 0,j = 0,k = 0;
do
{
c= getchar_r();
sa[i++] = c;
}while(c!= 'r');
for(i=0;sa[i+1];i++)
{
for(j = i+1;sa[j];j++)
{
if(sa[i]==sa[j] && sa[j] ==' ')
{
for(k=j;sa[k];k++)
sa[k] = sa[k+1];
j--;
}
}
}
for(k=0;sa[k];k++)
printf(“%2c”,sa[k]);
return 0;} 4.10 #include
int s=1;
float n=1.0,t=1.0,pi=0;
while(1.0/n>=EPS)
{
pi=pi+t;
n=n+2;
s=s*(-1);
t=s/n;
}
pi=pi*4;
printf(“pi=%10.6fn”,pi);} 4.11 #include
int a,b,num1,num2,temp;
printf(“Input a & b:”);
scanf(“%d%d”,&num1,&num2);
if(num1>num2)
{
temp=num1;num1=num2;num2=temp;
}
a=num1;b=num2;
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}
printf(“The GCD of %d and %d is: %dn”,num1,num2,a);
printf(“The LCM of them is: %dn”,num1*num2/a);} 4.13 #include “stdafx.h” #include
int i,j;
int num;
for(num = 4;num<=100;num++)
{
if(num%2 == 0)
{
for(i=1;i { for(j=1;j { if(num == i+j) { if(Primes(i)&& Primes(j)) { printf(“%d=%d+%dn”,num,i,j); } } } } } } return 0;} int Primes(int x){ int i; int n = 0; for(i = 1;i<=x;i++) { if(x%i==0) n++; } if(n==2) return 1; else return 0;} 4.17 #include int c,i; for(i=1,c=32;c<=126;++i,++c) { printf(“%3d%-5c”,c,c); if(!(i%8)) printf(“n”); } } 4.18 #include “stdafx.h” #include int x; int i,n,sum; printf(“input 10 numbersn”); for(i = 0,n = 0,sum = 0;i<10;i++) { scanf(“%d”,&x); if(x >0) { sum+=x; n++; } } if(n) printf(“numbers = %d,average = %fn”,n,1.0*sum/n); return 0;} 第五章习题 5.5 Extern和static存储类型的区别: Static型外部变量和extern型外部变量的唯一区别是作用域的限制。静态外部变量只能作用于定义它的文件,其他文件中的函数不能使用。Extern型外部变量的作用域可以扩大到整个程序的所有文件。 Static和auto存储类型的区别: 静态局部变量和自动变量有根本性的区别。由于静态局部变量在程序执行期间不会消失,因此,它的值有连续性。当退出块时,它的值能保存下来,以便再次进入块时使用,而自动变量的值在退出块时都丢失了。如果定义时静态局部变量有显示初始化,只在第一次进入时执行一次赋初值操作,而自动变量每次进入时都要执行赋初值操作。5.6 不能。 在C语言中,参数的传递方式是“值传递”,即把实参的值拷贝到参数的存储区中。因此,swap()函数交换的只是实参的本地拷贝,代表swap()实参的变量并没有被改变。5.7 6,12 5.10 #include double s=0; int i; double fac=1.0; for(i=1;i<=n;i++) { fac*=1.0/i; s+=fac; } return s;} void main(void){ int n; printf(“Please enter the integer n:”); scanf(“%d”,&n); printf(“the sum is %lfn”,sum_fac(n));} 5.17 #include char ch= getchar_r(); if(ch!='n') { reverse(); putchar(ch); } } int main(){ reverse(); printf(“n”); return 0;} 第六章习题 6.1(1)正确 (2)错误,不需要加“;”(3)错误,“ident”与“(”之间不能有空格(4)错误,宏名不能是关键字“void”(5)错误,将x*y改成((x)*(y))6.4 将会导致变量blue的重复定义 6.5(1)#define NO 0(2)#include “common.h”(3)#line 3000(4)#undef TRUE #define TRUE 1(5)#if TRUE!=0 #define FALSE 0 #else #define FALSE 1 #endif(6)#ifndef SIZE assert(0);#else assert(SIZE<10&&SIZE>1);#endif(7)#define SQUARE_VOLUME(x)(x)*(x)*(x)6.10 #include v=%.2fn”,r,v[r]);} return 0;} 第七章习题 7.9 #include int RandomInteger(int low,int high){ int k; double d; d=(double)rand()/((double)RAND_MAX+1); k=(int)(d*(high-low+1)); return(low+k);} void main(){ long i;int n=0;int szWord[RAND];char a[]=“heads”;char b[]=“tails”;srand(time(0));for(i=0;i szWord[i]=RandomInteger(0,1); if(szWord[i]==1) { printf(“n%s”,a); n++; } else { printf(“n%s”,b); n=0; } if(n==3) { printf(“nIt took %ld flips to get heads 3 consecutives times”,i+1); break; } } } 7.16 char *MonthName(int month);int MonthDays(int month,int year);int FirstDayOfMonth(int month,int year);int IsLeapYear(int year);enum weak{SUNDAY ,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY}; #include “caltools.h” char *MonthName(int month){ Switch(month){ Case 1: return(“January”);Case 2: return(“February”);Case 3: return(“March”);Case 4: return(“April”);Case 5: return(“May”);Case 6: return(“June”);Case 7: return(“July”);Case 8: return(“August”);Case 9: return(“September”);Case 10: return(“October”);Case 11: return(“November”);Case 12: return(“December”);Default : printf(“input error!n”);} } int MonthDays(int month,int year){ Case 1: Case 3: Case 5: Case 7: Case 8: Case 10: Case 12: return(31);Case 4: Case 6: Case 9: Case 11: return(30);Case 1: return(IsLeapYear(year)?29:28);} int FirstDayOfMonth(int month,int year){ Int i;Long total=0;If(year=2000){ For(i=1;i int IsLeapYear(int year){ Return(!((year%4)&&(year%400))||!(year%400));} #include Printf(“the name of the month is %sn”, MonthName(month)); Printf(“there are %d days in this month.n”, MonthDays(month,int year)); Printf(“the first day of the month in this year is %d”, FirstDayOfMonth(month,year));} 第八章习题 8.4 #include “stdafx.h” #include “malloc.h” #define N 65535 void DelSpace(char sa[]);int main(int argc, char* argv[]){ char sa[N]; char c; int i =0; do { c = getchar_r(); if(c == 13) sa[i++] = 'n'; else sa[i++] = c; }while(c!='@'); DelSpace(sa); int j = 0; while(1) { if(sa[j] == '@') break; printf(“%c”,sa[j++]); } printf(“/n”); return 0;} void DelSpace(char sa[]){ char *t1 =(char*)malloc(sizeof(sa)); char *t2 =(char*)malloc(sizeof(sa)); t1 = t2 = sa; while(*t1) { *t2++ = *t1++; if(*(t2-1)==' ' && *t1==' ') t2--; } } 还有一个方法: void DelSpace(char sa[],int n){ char* tmpbuf =(char*)malloc(sizeof(sa)+1); int p1 = 0, p2 = 0; bool bSpace = false; while(p1 < n) { if(bSpace && sa[p1] == ' ') { p1++; } else { if(sa[p1] == ' ') bSpace = true; else bSpace = false; tmpbuf[p2++] = sa[p1++]; } } strcpy(sa, tmpbuf); free(tmpbuf);} 8.7 #include “stdafx.h” #define NUM 100 struct stuInfo { char name[10]; int mark;}stu[NUM]; void scoreSort(stuInfo stu[],int n);int main(int argc, char* argv[]){ int n; printf(“input the number of students:n”); scanf(“%d”,&n); printf(“intput the name and scoren”); for(int i = 0;i { scanf(“%s”,&stu[i].name); scanf(“%d”,&stu[i].mark); } scoreSort(stu,n); int j = 0;; while(j { printf(“name:%s score:%dn”,stu[j].name,stu[j].mark); j++; } return 0;} void scoreSort(stuInfo *stu,int n)//n为学生数 { for(int i= 0;i { for(int j =i;j { if(stu[i].mark { stuInfo temp; temp = stu[i]; stu[i] = stu[j]; stu[j] = temp; } } } } 8.9 // c84.cpp : Defines the entry point for the console application.// #include “stdafx.h” #define NUM 100 struct stuInfo { char name[10]; int mark;}stu[NUM]; void scoreSort(stuInfo stu[],int n);int find(stuInfo *stu,int n,int score);int main(int argc, char* argv[]){ int n; printf(“input the number of students:n”); scanf(“%d”,&n); printf(“intput the name and scoren”); for(int i = 0;i { scanf(“%s”,&stu[i].name); scanf(“%d”,&stu[i].mark); } scoreSort(stu,n); printf(“input the socre you want to findn”); int score; scanf(“%d”,&score); int ifind =find(stu,n,score); if(ifind>=0) printf(“name:%s score:%dn”,stu[ifind].name,stu[ifind].mark); else printf(“Not Find”); return 0;} void scoreSort(stuInfo *stu,int n)//n为学生数 { for(int i= 0;i { for(int j =i;j { if(stu[i].mark { stuInfo temp; temp = stu[i]; stu[i] = stu[j]; stu[j] = temp; } } } } int find(stuInfo *stu,int n,int score){ int i = 0,j = n-1,mid; while(i <= j) { mid =(i+j)/2; if(score { j = mid-1; } else if(score>stu[mid].mark) { i = mid +1; } else return mid; } return-1;} 8.11 #include “stdafx.h” #include “malloc.h” int *strnins(char *s,char *t,int n);int main(int argc, char* argv[]){ char *s = “abcd”; char *t = “ttt”; int n = 2; strnins(s,t,n); return 0;} int *strnins(char *s,char *t,int n){ char *p =(char*)malloc(sizeof(s)-1); int tlong = 0;//字符串t的长度 while(t[tlong]!=' ') { tlong++; } int i = n; int j = 0; while(j { p[j]=s[j]; j++; } j=0; while(s[i]!= ' '&&t[j]!=' ') { p[i+tlong] = s[i]; p[i]= t[j]; i++; j++; } if(s[i]==' ') { p[i] = t[j]; i++; j++; } else if(t[j]==' ') { p[i+tlong] = s[i]; i++; } printf(“%s”,p); free(p); printf(“n”); return 0;} 8.18 #include “stdafx.h”;#define n 200 void del(int *str,int m,int lenth);int main(int argc, char* argv[]){ int i=0,j=-1,str[n]; int total = 0; int m = n; while(j { i++; j++; if(i==3)//数到3 { del(str,j+1,m); total++; i=0; m--; } if(total == n-1)//如果退出了N-1个人 break; if(j == m)//循环到最后一位 j=-1; } printf(“%d”,j); return 0;} void del(int *str,int m,int lenth)//将编号为m以后的往前移一位 { int i =m; while(i { str[i] = str[i+1]; i++; } } 第九章习题 9.2 #include void chachen(int *x,int *y){ int i,j,a,b,c;int k='i';int *pz,z[3][3];pz=&z[0][0];for(i=0,j=0;j<3;j++){ *(pz+3*i+j)=k++;} for(i=1,j=0;j<3;j++){ *(pz+3*i+j)=*(x+j);} for(i=2,j=0;j<3;j++){ *(pz+3*i+j)=*(y+j);} a=(*(pz+3*1+1))*(*(pz+3*2+2))-(*(pz+3*1+2))*(*(pz+3*2+1));b=(*(pz+3*1+0))*(*(pz+3*2+2))-(*(pz+3*1+2))*(*(pz+3*2+0));c=(*(pz+3*1+0))*(*(pz+3*2+1))-(*(pz+3*1+1))*(*(pz+3*2+0));printf(“the juzhen z is:n”);for(i=0,j=0;j<3;j++)printf(“%3c”,*(pz+3*i+j));printf(“n”);for(i=1;i<3;i++){for(j=0;j<3;j++)printf(“%3d”, *(pz+3*i+j));printf(“n”);} printf(“the result is:(%d)i +(%d)j +(%d)k”,a,b,c);} 9.5(用指针做)#include void main(){ int i,a[N]; printf(“please input five numbers:”); for(i=0;i scanf(“%d”,&a[i]); reverse(a,N);} 9.5(用数组做)#include int i,temp; for(i=0;i { temp=p[i]; p[i]=p[n-1-i]; p[n-1-i]=temp; } for(i=0;i printf(“%4d”,p[i]);} void main(){ int i,a[N]; printf(“please input five numbers:”); for(i=0;i scanf(“%d”,&a[i]); reverse(a,N);} 9.9 #include 第十章习题 10.4 #include double distance(struct line);struct line extenddistance(struct line,int);main(){ struct line a={{1,1,1},{2,2,2}};struct line changeline;double length;int k;printf(“please input the position of the starting points”);scanf(“%d%d%d”, &a.start.x, &a.start.y, &a.start.z);printf(“please input the position of the ending points”);scanf(“%d%d%d”, &a.end.x, &a.end.y, &a.end.z);length =distance(a);printf(“the distance of the two points is %fn”, length);printf(“input the value of the kn”);scanf(“%d”, &k);changeline= extenddistance(a,k);printf(“the new position of the ending points is %d,%d,%dn”,changeline.end.x,changeline.end.y,changeline.end.z);} double distance(struct line m){ return(sqrt((m.start.x-m.end.x)*(m.start.x-m.end.x)+(m.start.y-m.end.y)*(m.start.y-m.end.y)+(m.start.z-m.end.z)*(m.start.z-m.end.z)));} struct line extenddistance(struct line m,int n){ double extendlength;struct line y;extendlength=n*distance(m);y.start.x=m.start.x;y.start.y=m.start.y;y.start.z=m.start.z;y.end.x=n*m.end.x+(1-n)*m.start.x;y.end.y= n*m.end.y+(1-n)*m.start.y;y.end.z= n*m.end.z+(1-n)*m.start.z;return(y);} 10.10 #include printf(“please input the new number:n”); scanf(“%s”,student->num); printf(“modify sucessfully,the new number is %sn”,student->num);break;case 2: printf(“please input the new name:n”); scanf(“%s”,student->name); printf(“modify sucessfully,the new number is %sn”,student->name);break;case 3: printf(“please input the new score of math:n”); scanf(“%d”,student->math); printf(“modify sucessfully,the new number is %sn”,student->math);break;case 4: printf(“please input the new score of english:n”); scanf(“%d”,student->english); printf(“modify sucessfully,the new number is %sn”,student->english);break;case 5: printf(“please input the new score of chinese:n”); scanf(“%d”,student->chinese); printf(“modify sucessfully,the new number is %sn”,student->chinese); break;default: printf(“input error!”);} } float *aver_score(struct stu_study student[],float scores[]){ int i;for(i=1;i<6;i++){ scores[i]=(student[i].math+ student[i].english+ student[i].chinese)/3;} return scores;} sort(struct stu_study student[],float scores[]){int i,j,t,k,m;float s_scores[6];for(m=1;m<6;m++){s_scores[m]=scores[m];} for(i=1;i<5;i++){ for(j=1;j<6-i;j++)if(s_scores[j] printf(“please input the new number:n”); scanf(“%s”,p->num); printf(“modify sucessfully,the new number is %sn”,p->num);break;case 2: printf(“please input the new name:n”); scanf(“%s”,p->name); printf(“modify sucessfully,the new number is %sn”,p->name);break;case 3: printf(“please input the new score of math:n”); scanf(“%d”,p->math); printf(“modify sucessfully,the new number is %sn”,p->math);break;case 4: printf(“please input the new score of english:n”); scanf(“%d”,p->english); printf(“modify sucessfully,the new number is %sn”,p->english);break;case 5: printf(“please input the new score of chinese:n”); scanf(“%d”,p->chinese); printf(“modify sucessfully,the new number is %sn”,p->chinese); break;default: printf(“input error!”);} } void aver_score(){ int i;struct stu_list *p;float m;p=head->next;for(i=1;i<6;i++){ p->scores=(p->math+p->english+p->chinese)/3;p=p->next;} } void sort(){int i,j,m,k,t;float s_scores[6];struct stu_list *p;p=head->next;for(m=1;m<6;m++){s_scores[m]=p->scores;p=p->next;} for(i=1;i<5;i++){ for(j=1;j<6-i;j++)if(s_scores[j] 10.13 #include while(p){ printf(“%ct”,p->data);p=p->next;} printf(“n”);} C语言程序设计教程课后习题答案 第一章 C语言程序设计概述 -习题答案 算法的描述有哪些基本方法? 答 1、自然语言 2、专用工具C语言程序的基本结构是怎样的?举一个例子说明。 答 1、C语言程序由函数构成; 2、“/*”与“*/”之间的内容构成C语言程序的注释部分; 3、用预处理命令#include、#define可以包含有关文件或预定义信息; 4、大小写字母在C语言中是有区别的; 5、除main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。C语言有什么特点? 答 1、具有结构语言的特点,程序之间很容易实现段的共享; 2、主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译代码,以实现程序的模块化; 3、运算符丰富,包含的范围很广; 4、数据类型丰富; 5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能; 6、限制不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚; 7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。★指出合法与不合法的标识符命名。 答 AB12--√ leed_3--a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× C.D--×说明下列Turbo C热键的功能。 答 F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序)Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。 ①main() {printf(“********************n”);printf(“ welcome you n”);printf(“ very good n);printf(”********************n“);} ②main() { int a,b,c,t;printf(”please input three numbers;“);scanf(”%d,%d,%d“,&a,&b,&c);/*教材S是错误的*/ t=max(max(a,b),c);printf(”max number is:%dn“,t);} int max(int x, int y){ int z;if(x>y)z=x;else z=y;return(z);} 答 运行结果: ******************** welcome you very good ******************** 运行结果: please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/ max number is:4 7 一个C程序是由若干个函数构成的,其中有且只能有一个___函数。 答 main()8 在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。 答 1、User screen 2、Alt+F5 9 ★C语言对标识符与关键字有些什么规定? 答 1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。 2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。C源程序输入后是如何进行保存的? 答 是以C为扩展名保存的纯文本文件。 第二章 C语言程序的基本数据类型与表达式 -习题答案 ★指出下列常数中哪些是符合C语法规定的。 答 ''--× '101'--× ”“--× e3--× 019--√ 0x1e--√ ”abn“--√ 1.e5--×(2+3)e(4-2)--× 5.2e2.5--×请找出下列程序中的错误,改正后写出程序运行结果。 ①void main(){int x,y=z=5,aver;x=7 AVER=(x+y+z)/3 printf(”AVER=%dn“,aver);} ②void main() { char c1='a';c2='b';c3='c';int a=3.5,b='A' printf(”a=%db='“endn”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 答 main(){int x,y=5,z=5,aver;x=7;aver=(x+y+z)/3;printf(“AVER=%dn”,aver);} 运行结果:AVER=5 ②main() { char c1='a', c2='b', c3='c';int a=3,b='A';printf(“a=%d,b='%c'”end“n”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 运行结果:a=3,b='A'“end” aabcc abc 3 写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。int 99 -1 char 'h' unsigned int float 55.78 long int 答 int 99 104 66 55 68-1 char 'c' 'h' 'B' '7' 'D' unsigned int 99 104 66 55 68 65535 float 99.00 104.00 66.00 55.78 68.00-1.00 long int 99 104 66 55 68-1 ★写出程序运行结果。 ①void main(){int i,j;i=8,j=10;printf(“%d,%d,%d,%dn”,i,j,++i,j++);} ②main() { int a=1,b=2,c=30;;printf(“%d,%d,%d,%dn”,a=b=c,a=b==c,a==(b=c),a==(b==c));} 注意:a=b=c,a=b==c之间应为逗号,教材有误 答 运行结果: 9,11,9,10 运行结果: 30,1,0,0 ③void main() {int a=10,b=20,c=30,d;d=++a<=10||b-->=20||c++;printf(“%d,%d,%d,%dn”,a,b,c,d);} 答 运行结果: 11,19,30,1 ★写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5)。⑴a%=(b%=3) ⑵n++,a+=a-=a*=a ⑶(float)(a+c)/2+(int)x%(int)y ⑷a*=b+c ⑸++a-c+b++ ⑹++a-c+++b ⑺a ⑼a+b,18+(b=4)*3,(a/b,a%b) ⑽x+a%3*(int)(x+y)%2/4+sizeof(int)⑾a 答 ⑴0 ⑵0 ⑶9.500000 ⑷90 ⑸10 ⑹10 ⑺'A' ⑻2 ⑼4.5 ⑽1 ⑾0 ⑿20 ⒀0 下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)? ①m=(a=4,4*5)与m=a=4,4*5 ②(float)(a/b)与(float)a/b ③(int)a+b与(int)(a+b)④m%=2+a*3与m=m%2+a*3 ⑤m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b 答 ①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同; ②前面的表达式中a/b结果为一整数,结果已经取整,精度可能受到影响,之后强制float后才为浮点型,后面的是先将a转换为float后再与b相除,其值保证了精度,所以不同。 ③因为a、b均为整数,其前后两个表达式的计算结果是一致的。 ④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。⑤前后表达式的计算结果应该是一致的:a=2, b=3, m=6 7 条件表达式x>0?x:-x的功能是什么? 答 如果x的值是一正数,则表达式的值为x值;如果x的值是一非正数,则表达式的值为-x。其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。用一个条件表达式描述从a、b、c中找出最大都赋给max.答 max=a>(b>c?b:c)?a:(b>c?b:c);9 ★若x为int型变量,则执行以下语句后x的值为()。x=6;x+=x-=x*x;A.36 B.-60 C.60 D.-24 答 B.10 ★若有以下类型说明语句: char w;int x;float y;double z;则表达式w*x+z-y的结果为()类型。A.float B.char C.int D.double 答 D.第三章 顺序结构程序设计 -习题答案 变量k为float类型,调用函数scanf(“%d”,&k),不能使变量k得到正确数值的原因是___。 答 格式修饰符与变量类型不一致。因为%d输入的数据类型应该为十进制整数,而&k为占用4个字节的float类型变量的地址。★a=1234,b=12,c=34,则执行“printf(“|%3d%3d%-3d|n”,a,b,c);”后的输出是___。 答 |1234 1234 | 分析如下: ①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受限制。 ②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。★设有“int a=255,b=8;”,则“printf(“%x,%on”,a,b);”输出是___。答 ff,10 ①如果“printf(“%X,%on”,a,b);”则输出为FF,10。说明在输出十六进制字母时,其大小写受格式修饰符的限制,如果是“%x”则输出小写,如果是“%X”则输出大写。 ②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改“printf(“%#x,%on”,a,b);”为或“printf(“%#X,%on”,a,b);”。本条解释不必须掌握。★以下程序输出的结果是___。main(){ int a1=1,a2=0,a3=2;printf(“%d,%d,%dn”,a1,a1+a2+a3,a3-a1);} 答 1,3,1 5 printf函数中用到格式符%5s,其中5表示输出字符占用5列。如果字符串长度大于5,则按___输出;如果字符串长度小于5,则按___输出。 答 ①实际 ②左端补空格 6 ★已定义变量如下: int a1,a2;char c1,c2;若要求输入a1、a2、c1和c2的值,正确的输入函数调用语句是___。 答 scanf(“%d,%d,%c,%c”,&a1,&a2,&c1,&c2);7 输入两个整型变量a、b的值,输出下列算式以及运算结果___。a+b、a-b、a*b、a/b、(float)a/b、a%b 每个算式占一行。如a=10,b=5,a+b输出为:10+5=15 答 设int a=10,b=5;以下为输出语句及结果: ①printf(“%d+%d=%dn”,a,b,a+b);10+5=15 ②printf(“%d-%d=%dn”,a,b,a-b);10-5=5 ③printf(“%d*%d=%dn”,a,b,a*b);10*5=50 ④printf(“%d/%d=%dn”,a,b,a/b);10/5=2 ⑤printf(“%(float)d/%d=%fn”,a,b,(float)a/b);(float)10/5=2.000000 ⑥printf(“%d%%%d=%dn”,a,b,a%b);10%5=0 8 ★输入一个非负数,计算以这个数为半径的圆周长和面积。答 #define PI 3.1415926 main(){ float r,l,area;printf(“Input a positive:”);scanf(“%f”,&r);l=2*PI*r;area=PI*r*r;printf(“l=%ftarea=%fn”,l,area);} 9 输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。 答 main(){ int x,y;printf(“Input a number(100-999):”);scanf(“%d”,&x);y=100*(x%10)+10*(x/10%10)+x/100;/*注意分析此处算法*/ 1、li 300.0 chang 30 200.0 chang 2、#include char sid[100]; char name[100]; float score[3];}student;void main(){ int i;float j; printf(“nPlease input sid: ”); scanf(“%s”,student.sid); printf(“nPlease input name: ”); scanf(“%s”,student.name); printf(“nPlease input 3 score:(like1,1,1)”);/*输入逗号隔开*/ scanf(“%f,%f,%f”,&student.score[0],&student.score[1],&student.score[2]); printf(“nsid = %s”,student.sid); printf(“nname = %s”,student.name); j=(student.score[0]+student.score[1]+student.score[2])/3.0; printf(“naverage = %.2f”,j); getch();} 3、#include do { n++; printf(“nnPlease input %d student message: nn”,n); printf(“t%d student sid: ”,n); p1=(student *)malloc(F);p1->next=NULL; scanf(“%s”,p1->sid); printf(“nt%d student name: ”,n); scanf(“%s”,p1->name); printf(“nt%d student scores(englesh,math,c_language): ”,n); scanf(“%d,%d,%d”,&p1->score.english,&p1->score.math,&p1->score.c_language); p1->score.all=p1->score.english+p1->score.math+p1->score.c_language; if(n==1) { head->next=p1;p2=p1;} else { p2->next=p1; p2=p1; } printf(“nntttContinue or back(press y/n): ”); ch=getch(); }while(ch=='y'||ch=='Y');return head;} void average1(student *head){ student *p;int j;clrscr();p=head->next; while(p) { j=p->score.all/3; printf(“nnname: %staverage: %d”,p->name,j); p=p->next; } printf(“nnnPress eny key return.”);getch();} void average2(student *head){ student *p;int n=0,temp1=0,temp2=0,temp3=0;p=head->next;while(p){ temp1+=p->score.english; temp2+=p->score.math; temp3+=p->score.c_language; p=p->next;n++;} printf(“nnaverage english is : %dnaverage math is : %dnaverage c_language is : %dt”,temp1/n,temp2/n,temp3/n);} student *sort(student *head){ student *head1,*p,*q,*r;int temp1=0,temp2=0,temp3=0,temp4;char s[15],n[15];head1=head;for(p=head1->next;p->next!=NULL;p=p->next){ r=p; for(q=p->next;q;q=q->next) if(q->score.all>r->score.all) r=q; if(r!=p) { strcpy(s,p->sid);strcpy(n,p->name); temp1=p->score.english; temp2=p->score.math; temp3=p->score.c_language; temp4=p->score.all; strcpy(p->sid,r->sid);strcpy(p->name,r->name); p->score.english=r->score.english; p->score.math=r->score.math; p->score.c_language=r->score.c_language; p->score.all=r->score.all; strcpy(r->sid,s);strcpy(r->name,n); r->score.english=temp1; r->score.math=temp2; r->score.c_language=temp3; r->score.all=temp4; } } return head1;} void output(student *head){ student *head2,*p;int i=1;clrscr();head2=sort(head);for(p=head2->next;p!=NULL;p=p->next) printf(“nnname: %stsid: %stenglish: %dtmath: %dtc_language: %dtaverage: %dtmingci: %d”,p->name,p->sid,p->score.english,p->score.math,p->score.c_language,p->score.all/3,i++); average2(head); printf(“nnnttPress eny key back.”);getch();} void main(){ student *head,*p1,*p2;int i=0,j=1;head=input();do { clrscr(); printf(“nn(1): average1.nn(2): average2.nn(3): sort.nn(4): output.nnn Please choose: ”); scanf(“%d”,&i); switch(i) { case 1: average1(head);break; case 2: clrscr();average2(head);printf(“nnnPress eny key retuen.”);getch();break; case 3: clrscr();p1=sort(head);for(p2=p1->next;p2!=NULL;p2=p2->next)printf(“nttname: %stmingci:%d”,p2->name,j++);printf(“nnnPress eny key back.”);getch();break; case 4: output(head);break; default: printf(“nYour choose is not right.”);break; } }while(i!=-1);} 4、#include p=(worker *)malloc(F);p->next=0; printf(“nntPlease input %d worker message : ”,n); printf(“n%d worker sid: ”,n);scanf(“%s”,p->sid); printf(“n%d worker name: ”,n);scanf(“%s”,p->name); printf(“n%d worker money: ”,n);scanf(“%d”,&p->money); if(n==1) { head->next=p;q=p; max=p->money;strcpy(a,p->name); min=p->money;strcpy(b,p->name); } else { q->next=p; if(p->money>max){max=p->money;strcpy(a,p->name);} if(p->money q=p; } printf(“ntty/n”);ch=getch();}while(ch=='y'||ch=='Y');return head;} void output(){ clrscr();printf(“nThe max money is: %dttname is: %snn”,max,a);printf(“nThe min money is: %dttname is: %s”,min,b);} void main(){ input();output();getch();} 5、6、#include“stdio.h” #define F sizeof(stu)#define NULL 0 typedef struct student { int sid;int average;struct student *next;}stu;stu *head;stu *create(){ stu *p1,*p2;int n=0;char ch;head=(stu *)malloc(F);head->next=NULL; do { n++; printf(“nnPlease input %d student message: nn”,n); printf(“t%d student sid: ”,n); p1=(stu *)malloc(F);p1->next=NULL; scanf(“%d”,&p1->sid); printf(“nt%d student average: ”,n); scanf(“%d”,&p1->average); if(n==1) { head->next=p1;p2=p1;} else { p2->next=p1; p2=p1; } printf(“nntttContinue or back(press y/n): ch=getch(); }while(ch=='y'||ch=='Y');return head;} stu *select(stu *head,int x){ stu *s;s=head->next;while(s){ if(s->sid==x) break; s=s->next;} return s;} stu *insert(stu *head,int x,int y){ stu *p,*r,*q;clrscr();p=head->next;r=(stu *)malloc(sizeof(stu));r->sid=x;r->average=y;if(p==NULL)/*如果插入空表*/ { p=r; r->next=NULL; ”); printf(“ninsert success!”); } else { while(x>p->sid)/*找到插入的位置,按学号大小。(找到位置或者到了表尾都会跳出循环)*/ { if(p->next==NULL)break;p=p->next; } if(x sid) /*插到中间位置*/ { r->sid=p->sid; r->average=p->average; p->sid=x; p->average=y; r->next=p->next; p->next=r; printf(“ninsert success!”); } else if(x==p->sid)/*学号不能相同*/ printf(“nError--->your input this same sid.”); else /*插到末尾*/ { p->next=r; r->next=NULL; printf(“ninsert success!”); } } return head;} stu *get(stu *head,int n)/*得到位置为n的结点的指针*/ { stu *p;int i;p=head->next;if(n==0)return head;else { for(i=1;i p=p->next; return p;} } stu *delete(stu *head,int sid){ stu *p,*q;int temp=0,i=0;p=head->next;if(!p) { printf(“nlist is empty.press eny key back.”);getch();return head;}/*表空*/ else { while(p) /*查找学号为sid的结点的指针*/ {i++;/*标记学号为sid的结点的位置*/ if(p->sid==sid) {temp=1;break;} /*temp=1标记找到了*/ p=p->next;} if(temp==1)/*如果有学号为sid的结点*/ { q=get(head,i-1);/*得到sid的前一个结点的指针*/ q->next=p->next; free(p); printf(“nndelete sucess!!”); return head; } else /*没有找到*/ { printf(“nnNO this data.n”); return head; } } } void print(stu *head){ stu *p;p=head->next;if(!p){printf(“nlist is empty.press eny key back.”);getch();} while(p){ printf(“n%d :t%d ”,p->sid,p->average); p=p->next;} } main(){ stu *p1,*p2;char ch1;int n,i=0,j=0;head=create();do {clrscr();printf(“n1.insert.”);printf(“n2.select.”);printf(“n3.delect.”);printf(“n4.print list.”);printf(“n5.EXIT ”);printf(“n ............choice(1-5).............”);ch1=getch();switch(ch1){ case '1': { clrscr(); printf(“nplease input insert sid.and average(like 1,1):”); scanf(“%d,%d”,&i,&j); head=insert(head,i,j); printf(“nnnPress eny key back.”);getch(); break; } case '2': { clrscr(); printf(“ninput you want to selete sid: ”); scanf(“%d”,&n); p1=select(head,n); { if(p1)printf(“nsid:%dtaverage:%d”,p1->sid,p1->average); else printf(“nNo this data.”); } printf(“nnnPress eny key back.”);getch(); break; } case '3': { clrscr();printf(“nPlease input you want delete sid: ”); scanf(“%d”,&n); head=delete(head,n); printf(“nnnPress eny key back.”);getch(); break; } case '4': { clrscr(); printf(“All information :”); print(head); printf(“nnnPress eny key back.”);getch(); break; } case '5': return; default: printf(“nnYour enter is not right.press eny key back.”);getch();} }while(n);} 7、#include char data; struct list *next;}L;L *set_list(){ L *head,*p1,*p2; char c; int n=0; head=(L *)malloc(F);head->next=0; /*建立链表*/ p1=p2=head; printf(“nPlease input char(press * finish):”); scanf(“%c”,&c); while(c!='*') { n++; if(n==1) p1->data=c; else { p1=(L *)malloc(F); p1->data=c; p2->next = p1; p2 = p1; p1->next = 0; } scanf(“%c”,&c); } p1=head; while(p1) { printf(“%c ”,p1->data);p1=p1->next; } printf(“nnn”); return head;} void change_list(L *head1) /*算法:p2指向最后一个元素,p1指向第一个元素。交换他们的值,p1,p2同时往中间靠拢。*/ { L *p1,*p2,*p3; int i,j,k,n=1; char temp; p1=head1;p2=head1;p3=head1; while(p3->next) { p3=p3->next;n++; }/*求链长*/ for(i=n;i>(n/2);i--)/*外循环使p1后移,p2前移。*/ { p2=head1;for(j=1;j p2=p2->next;/*p2指向最后一个元素*/ temp=p1->data;p1->data=p2->data;p2->data=temp;/*交换他们的值*/ p1=p1->next;/*p1向后移*/ } while(head1) { printf(“%c ”,head1->data);head1=head1->next;} } void main(){ L *head;head=set_list();change_list(head);getch();} 第3章习题解答 第1章 1.C 语言程序主要由预处理命令、函数、注释等组成。 2.填空 (1)分号 (2)main(3)stdio.h 3.源程序: #include printf(“*************************n”);printf(“Hello World!n”); printf(“*************************”);} 4.源程序: #include int a, b, c;/* 定义变量 */ scanf(“%d”, &a);/* 输入第一个整数 */ scanf(“%d”, &b);/* 输入第二个整数 */ c=a-b;/* 计算差 */ printf(“%d-%d=%d”,a,b,c);/* 输出结果 */ } 5.(1) (3)printf(“s=%dn”,s); 第2章 1.(1)c(2)a(3)b g(4)a d e(5)d 2.a.5 b.295 c.4 d.29 e.9 3.a.x=4,y=6 b.x=4,y=3 f.x=3,y=6 4.16 5.#include int a,b,c; scanf(“%d%d”,&a,&b);c=a*b; printf(“%d*%d=%d”,a,b,c);} 第3章 1.(1)b(2)b(3)d(4)a(5)b 2.(1)&a,&b(2)l,s 3.printf(“x=%.2f,y=%.2fn”,x,y); 4.#include int num1,num2,num3,sum; float average; scanf(“%d%d%d”,&num1,&num2,&num3); sum=num1+num2+num3; average=sum/3.0; printf(“sum=%d,average=%.2fn”,sum,average);} 5.#include int hour,minute,second,total;/* 定义变量代表时、分、秒和总秒数 */ scanf(“%d”,&total); hour=total/3600; minute=total%3600/60; second=total%3600%60; printf(“%dhours:%dminutes:%dsecondsn”,hour,minute,second);} 第4章 1.(1)a(2)b(3)b(4)b (5)b 2.0 3.(1)6(2)4(3)1(4)1 4.#include int x,y; scanf(“%d”,&x); if(x>-5 && x<0) y=5*x; if(x == 0) y=-1; if(x>0 && x<10) y=2*x+1; printf(“x=%d,y=%dn”,x,y);} 5.#include int score,rank;/* score 表示成绩,rank 表示级别 */ printf(“Please input score:”); scanf(“%d”,&score); rank=score/10; switch(rank) { case 10: case 9: printf(“成绩等级为:An”);break; case 8: printf(“成绩等级为:Bn”);break; case 7: printf(“成绩等级为:Cn”);break; case 6: printf(“成绩等级为:Dn”);break; default:printf(“成绩等级为:En”);break; } } 6.#include int n; printf(“Please input the digit:”); scanf(“%d”,&n); switch(n) { case 1:printf(“Jan n”);break; case 2:printf(“Feb n”);break; case 3:printf(“Mar n”);break; case 4:printf(“Apr n”);break; case 5:printf(“May n”);break; case 6:printf(“Jun n”);break; case 7:printf(“Jul n”);break; case 8:printf(“Agu n”);break; case 9:printf(“Sep n”);break; case 10:printf(“Oct n”);break; case 11:printf(“Nov n”);break; case 12:printf(“Dec n”);break; } } 第5章 1.(1)b(2)a(3)b(4)d(5)d 2.7,1 3.y=-1 4.m=6 5.10,14 6.3 7.5 8.ABABCDCD 9.# include int i; long int sum=0; for(i=2;i<=200;i+=2) sum+=i; printf(“2+4+6+...+200=%ld”,sum);} 10.#include long int n; int sum = 0; printf(“Please input the nber:”); scanf(“%ld”,&n); while(n!= 0) { sum += n % 10; n /= 10; } printf(“%dn”, sum);} 第6章 1.(1)d(2)b(3)d(4)c (5)a 2.11 3.3 4.5689 5.12,6 6.(1)i--(2)n 7.(1)char k; (2)i float a[10]; int i; float sum=0,average; for(i=0;i<10;i++) { printf(“a[%d]=?”,i); scanf(“%f”,&a[i]); sum+=a[i]; } average=sum/10; printf(“average is %.2fn”,average);} 9.#include int a[N],i,target,found; for(i=0;i scanf(“%d”,&a[i]); printf(“Please input a number:”); scanf(“%d”,&target); i=0; while(i i++; found = i printf(“%dn”,found);} 10.#include char str[N]; int len=0,i=0; printf(“Please input a string:”); gets(str); while(str[i++]!= 0)len++; printf(“the length of string is %d.n”,len);} 第7章 1.21 2.136 3.16 4.(1)func (2)m++ 5.9 6.1,6,3,2,3 7.2,5,1,2,3,-2 8.#include int a,b,c,max; printf(“Please input three numbers:”); scanf(“%d%d%d”,&a,&b,&c); max=fun(a,b,c); printf(“Max is %d.n”,max);} int fun(int a,int b,int c){ int max; max= a>b?(a>c?a:c):(b>c?b:c); return max;} 9.#include int n; printf(“n=?”); scanf(“%d”,&n); printf(“Sum=%ld.n”,sum(n));} long int sum(int n){ if(n = = 1)return 1; else return sum(n-1)+n;} 10.#include int n; printf(“n=?”); scanf(“%d”,&n); fun(n); } void fun(n){ if(n = = 0)return; else { fun(n/2); printf(“%-2d”,n%2); } } 第8章 1.(1)b(2)d(3)b(4)c(5)c 2.8 3.123456789 4.2 3 4 5 6 5.345 6.1 2 3 4 5 6 7.b[i] 8.bcdefgha 9.p=sum 10.#include { char str[80]; char *p1, *p2;gets(str);p1=str; p2=str+strlen(str)-1; while(p1 puts(p1 } 第9章 1.a.#define F(x)(x)*(x)*(x)b.#define F(x)(x)%4 c.#define F(x,y)(x)*(y)<100?1:0 2.a.4 b.4 c.#define DOUBLE(x)2*(x)3.d 4.-20 5.N is undefined 6.7.5 7.y=6 8.#include #define SWAP(a,b){int temp;temp=a;a=b;b=temp;} main(){ int x,y; printf(“x=?”); scanf(“%d”,&x); printf(“y=?”); scanf(“%d”,&y); SWAP(x,y) printf(“x=%d,y=%d.n”,x,y);} 第10章 1.struct student{ int sno; char sname[10]; char sex;}stu1,stu2;2.12 3.合法的有a,b,d c.改成 s.u.rectangle.length=25; e.改成 s.u.circle.radius=5; f.改成 s.u.circle.radius=5; 4.a,b,c,d(说明:变量 b 有确定的值之后,b++是合法的。)5.改为 typedef struct product { char name[10];float price;}PRODUCT; PRODUCT products[10]; 6.(1)struct employee(2)printemp(emp)7.2 4 3 9 8 8.#include int hour; int minute; int second;}; main(){ struct time_struct time; printf(“Input time?n(Example 18:28:38)n”); scanf(“%d:%d:%d”,&time.hour,&time.minute,&time.second); printf(“Time is %d:%d:%dn”,time.hour,time.minute,time.second);} 9.#include int hour; int minute; int second;}time; void enter_time();void display_time();main(){ enter_time(); display_time();} void enter_time(){ printf(“Enter the time(example 18:28:38)?”); scanf(“%d:%d:%d”,&time.hour,&time.minute,&time.second);} void display_time(){ printf(“Time is %d:%d:%d.n”,time.hour,time.minute,time.second);} 10.#include char name[31];/*旅馆名称*/ char address[31];/*旅馆地址*/ int grade;/*旅馆级别*/ float average_charge;/*平均房价*/ int number;/*房间数量*/ }h[N]={ {“h1”,“上海路”,5,500.00,80}, {“h2”,“北京大街”,5,480.00,70}, {“h3”,“南京大街”,3,300.50,100} }; main(){ int grade,i; printf(“请输入级别(3-5)?”); scanf(“%d”,&grade); for(i=0;i if(h[i].grade==grade) printf(“名称:%sn 地址:%sn 级别:%dn平均房价%.2fn 房间数量:%dn”,h[i].name,h[i].address,h[i].grade,h[i].average_charge,h[i].number);} 第11章 1.(1)c (2)d(3)b(4)b(5)b 2.Basican 3.fgetc(fp) 4.“record.dat”, “w” 5.#include typedef struct Employee { int id; char name[20]; char gender[20]; int age; char address[20];}Employee; int main(void){ FILE *fp; char another,choice; Employee emp; long int recsize; fp=fopen(“employee.dat”,“rb+”); if(fp==NULL) { fp=fopen(“employee.dat”,“wb+”); if(fp==NULL) { printf(“Can't Open File”); exit(0); } } recsize=sizeof(emp); while(1) { printf(“1.添加记录 2.显示男员工 3.退出n”); printf(“Enter your choice(1-3):”); fflush(stdin); scanf(“%c”,&choice); switch(choice) { case'1': fseek(fp,0,SEEK_END); another='Y'; while(another=='Y'|| another=='y') { printf(“输入信息(id 姓名 性别 年龄 住址):n”); scanf(“%d %s %s %d %s”,&emp.id,&emp.name,&emp.gender,&emp.age,&emp.address); fwrite(&emp,recsize,1,fp); printf(“是否继续(Y/N): ”); fflush(stdin); another=getchar(); } break; case '2': printf(“学号t 姓名t性别t 年龄t住址n”); rewind(fp); while(fread(&emp,recsize,1,fp)==1) if(strcmp(emp.gender,“男”)==0) printf(“%dt%st%st%dt%sn”,emp.id,emp.name,emp.gender,emp.age,emp.address); break; case '3': fclose(fp); exit(0); } } } 6.#include“stdio.h” #include“stdlib.h” #define M 2 #define stu struct student stu { int num; char name[20]; float s1; float s2; float s3; float avg;};main(){ stu st[M]; FILE *fp; int i; printf(“请输入 5 名同学生的成绩,按照学号,姓名,成绩 1,成绩2,成绩 3 的顺序,中间用空格隔 开:n”); for(i=0;i { scanf(“%d%s%f%f%f”,&st[i].num,st[i].name,&st[i].s1,&st[i].s2,&st[i].s3); st[i].avg=(st[i].s1+st[i].s2+st[i].s3)/3; } if((fp=fopen(“stud.rec”,“wb”))==NULL) { printf(“cannot open filen”); } for(i=0;i { if(fwrite(&st[i],sizeof(stu),1,fp)!=1) printf(“file write errorn”); } fclose(fp); fp=fopen(“stud.rec”,“rb”); printf(“numtnametscore1tscore2tscore3taveragen”); for(i=0;i { fread(&st[i],sizeof(stu),1,fp); printf(“%dt%st%.2ft%.2ft%.2ft%.2fn”,st[i].num,st[i].name,st[i].s1,st[i].s2,st[i].s3,st[i].avg); } fclose(fp);} 第12章 1.a.2 b.4 c.11 d.4 e.-15 f.28 g.-36 2.程序设计分析:先将整数x 右移4 位,将该整数机内码的第4 到7 位移至第0 到3 位,然后与0x000f(***1)进行位与运算,所保留的低4 位就是所要的结果 #include int x,y; scanf(“%d”,&x); y=x>>4;y=y&0x000f; printf(“4~7位的十六进制数:y=%#xn”,y);} 3.d 4.(1)p!=NULL (2)p=p->next 5.p=p->next 6.略 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........自考Java语言程序设计 (一)课后习题及答案 自考Java语言程序设计 (一)第一章Java语言概述课后习题 一、Java语言概述 1.Java语言有哪些特点? 2.什么叫做类?什么叫做对象? 3.简述Java的运行机制。 4.简述Java应用程序的开发流程。 5.当初Sun公司发展Java的原因是:来源:www.xiexiebang.comumber_1 = new ComplexNumber(3,-5); ComplexNumber cNumber_2 = 本文来源:考试大网 new ComplexNumber(2,2); double d = 10.0; System.out.println(cNumber_1.toString()+ “ 加 ” + cNumber_2.toString()+ “ 等于 ” + cNumber_1.complexAdd(cNumber_2).toString()); System.out.println(cNumber_1.toString()+ “ 加 ” + d + “ 等于 ” + cNumber_1.complexAdd(d).toString()); System.out.println(cNumber_1.toString()+ “ 减 ” + cNumber_2.toString()+ “ 等于 ” 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........+ cNumber_1.complexMinus(cNumber_2).toString());System.out.println(cNumber_1.toString()+ “ 减 ” + d + “ 等于 ” + cNumber_1.complexMinus(d).toString());System.out.println(cNumber_1.toString()+ “ 乘 ” + cNumber_2.toString()+ “ 等于 ” + cNumber_1.complexMulti(cNumber_2).toString());System.out.println(cNumber_1.toString()+ “ 乘 ” + d + “ 等于 ” + cNumber_1.complexMulti(d).toString());} } class ComplexNumber { //域 private double m_dRealPart;private double m_dImaginPart;//构造方法 ComplexNumber(){ m_dRealPart = 0.0;m_dImaginPart = 0.0;} ComplexNumber(double r,double i){ m_dRealPart = r;m_dImaginPart = i;} ComplexNumber(ComplexNumber c){ m_dRealPart = c.getRealPart();m_dImaginPart = c.getImaginaryPart();} //get,set方法 double getRealPart(){ return m_dRealPart;} double getImaginaryPart(){ return m_dImaginPart;} void setRealPart(double d){ 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........m_dRealPart = d;} void setImaginaryPart(double d){ m_dImaginPart = d;} //复数运算方法 ComplexNumber complexAdd(ComplexNumber c){ return new ComplexNumber(this.m_dRealPart + c.getRealPart(), this.m_dImaginPart + c.getImaginaryPart());} ComplexNumber complexAdd(double c){ return new ComplexNumber(this.m_dRealPart + c, this.m_dImaginPart);} ComplexNumber complexMinus(ComplexNumber c){ return new ComplexNumber(this.m_dRealPartc.getImaginaryPart());} ComplexNumber complexMinus(double c){来源:www.xiexiebang.com return new ComplexNumber(this.m_dRealPart-c, this.m_dImaginPart);} ComplexNumber complexMulti(ComplexNumber c){ return new ComplexNumber(this.m_dRealPart * c.getRealPart() -this.m_dImaginPart * c.getImaginaryPart(), this.m_dRealPart * c.getImaginaryPart()+ this.m_dImaginPart * c.getRealPart());} ComplexNumber complexMulti(double c){ return new ComplexNumber(this.m_dRealPart * c, this.m_dImaginPart * c);} //toString()public String toString() 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........{ return “(” + m_dRealPart + “ + ” + m_dImaginPart + “ i” + “)”; } } 8.答:接口是用来实现类间多重继承功能的结构。接口与类相似,但是接口中只能包括常量和抽象方法。定义接口相当于定义了一组抽象的功能、属性集合,可以使了ava程序的类层次结构更加合理,并实现多重继承。 9.答:使用关键字implements可以定义类实现某接口。实现某接口的类如果不是抽象类,则需要通过重载来实现该接口中的所有抽象方法;如果这个类是抽象类,则它可以不必实现该接口中的所有抽象方法。 10.答:接口可以被继承。 SubInterface中的抽象方法有:public abstract int supMethod();和public abstract string subMethod();两个。 自考Java语言程序设计 (一)第七章Java常用类库介绍课后习题 七、Java 常用类库介绍 1.指出下列陈述是对还是错,并做出解释。 (1)当String对象用= = 比较时,如果String包括相同的值则结果为true。 (2)一个String类的对象在其创建后可被修改。 2.对于下列描述,各写出一条语句完成要求的任务 (1)比较s1中的串和s2中的串的内容的相等性; (2)用+=向串s1附加串; (3)判断s1中串的长度;来源:考试大 3.说明capacity()与length()用法上的差异? 4.如果ch为StringBuffer对象,ch=“Java Apple”,下列结果为何? (1)ch.insert(3,’p’)(2)ch.append(“Basic”) (3)ch.setlength(5)(4)ch.reverse() 5.Math类中提供用来常数π和e的静态属性分别是什么? 6.下面关于Vector类的说法正确的是() (1)类Vector在java.util包中。 (2)一个向量(Vector)对象存放的是一组有序的对象。 (3)一个向量(Vector)对象大小可以根据存放的元素个数的增加而自动增加。 (4)一个向量(Vector)对象中每个元素可以是不同类型的对象。 7.有三个字符串,编写程序找出其中最大者。 8.编写一个程序,设定一个有大小写字母的字符串,先将字符串的大写字符输出,再将字符串中的小写字符输出。 9.设定5个字符串,要求只打印那些以字母“b”开头的串,编写程序完成。 10.设定一个有大小写字母的字符串和一个查找字符,使用类 String方法IndexOf()来判断在该字符串中该字符出现的次数。 参考答案 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........1.答: (1)错。用= =操作符比较String对象实际上是判断它们在内存中是否为同一对象,并不是判断它们的值是否相同。 (2)错。String类的对象是常量。它们被创建后不可被修改。 2.答: (1)s1.equals(s1,s2); (2)s1+=s2; (3)s1.length(); 3.答:capacity()返回字符串对象的当前缓冲区的长度,length()返回字符串对象字符的长度。考试大收集整理 4.答: (1)结果:Javpa Applet (2)结果:Javpa AppletBasic (3)结果:ch长度变为5 (4)结果:apvaJ 5.答:PI、E 6.答:(3) 7.public class max1 { public static void main(String args[]) { String s1= “Hello Java”; String s2= “Java Applet”; String s3= “Java”; String s; if(s1.compareTo(s2)<0) s=s2; else s=s1; if(s.compareTo(s3)<0) s=s3; Systrm.out.println(“big=”+s); } } 8.public class out { public static void main(String args[]) { String s1= “Hello Java”; StringBuffer bufup=new StringBuffer(); StringBuffer buflow=new StringBuffer(); for(int I=0;I {if(s1.charAt(i)<97) 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........{bufup.append(s1.charAt(i));bufup.append(' ');} else { buflow.append(s1.charAt(i));buflow.append('');} } System.out.println(“s1= ”+s1);System.out.println(“ uppercase= ”+bufup);System.out.println(“ lowercase= ”+buflow);} } 9. public class prin_b { public static void main(String args[]){ String s1=“hello”;String s2=“bee”;String s3=“java”;String s4=“brove”;String s5=“bag”;if(s1.indexOf('b')= =0)System.out.println(s1);if(s2.indexOf('b')= =0)System.out.println(s2);if(s3.indexOf('b')= =0)System.out.println(s3);if(s4.indexOf('b')= =0)System.out.println(s4);if(s5.indexOf('b')= =0)System.out.println(s5);} } 10. public class ppp { public static void main(String args[]){ String s1=“abcdefghi”;int num=0;for(int i=0;i {i=s1.indexof('e',i);num++; 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........} System.out.print(“ s1=”+s1+“e=”); if(num= =0) System.out.println(“ no found”); else System.out.println(num); } } 自考Java语言程序设计 (一)第八章Java异常处理及输入输出流简介课后习题 八、Java异常处理及输入输出流简介 1.列出5个常见的异常。 2.写出Java语言的异常处理机制的优点。 3.为什么异常处理技术不应该用于常规的程序控制? 4.引起异常产生的条件是什么? 5.异常没有被捕获将会发生什么? 6.编写一个程序,以说明catch(Exception e)如何捕获各种异常。 7.下面的代码段中finally语句块会被执行吗? public class ExceptionExam3 { public static void main(String [] args) { try { int [] a=new int[3]; System.exit(0); } catch(ArrayIndexOutOfBoundsException e) {System.out.println(“发生了异常”);} finally {System.out.println(“Finally”);} } } 8.throws的作用是什么? 9.应在程序的什么地方使用异常处理? 10.下面的代码有什么错误吗? class ExceptionExam{„} throw new ExceptionExam(); 11.异常类型匹配的处理方式。程序功能:首先输出“这是一个异常处理的例子”,然后在你程序中主动地产生一个 ArithmeticException 类型被0 除而产生的异常,并用catch 语句捕获这个异常。最后通过ArithmeticException类的对象e的方法getMessage 给出异常的具体类型并显示出来。 12.根据所给创建自定义异常类的使用格式,编写一个自定义异常的小程序。 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........13.什么叫流?流式输入输出有什么特点? 14.Java流被分为字节流、字符流两大流类,两者有什么区别? 15.File类有哪些构造函数和常用方法? 16.利用文件输入输出流编写一个实现文件拷贝的程序,源文件名和目标文件名通过命令行参数传入。 17.编写一个程序,在当前目录下创建一个子目录test,在这个新创建的子目录下创建一个文件,并把这个文件设置成只读。 18.位置指针的作用是什么?RandomAccessFile类提供了哪些方法实现对指针的控制? 19.编写一个程序,从键盘输入一串字符,统计这串字符中英文字母、数字、其他符号的字符数。 20.编写一个程序,从键盘输入一串字符,从屏幕输出并将其存入a.txt文件中。采集者退散 21.编写一个程序,从键盘输入10个整数,并将这些数据排序后在标准输出上输出。 参考答案 1.答:内存耗尽、数组下标超出边界、被0除、非法的方法参数、算法溢出处。来源:考试大的美女编辑们 2.答:(1)Java通过面向对象的方法进行异常处理,把各种异常事件进行分类,体现了良好的层次性,提供了良好的接口,这种机制对于具有动态特 性的复杂提供了强有力的控制方式。(2)Java的异常处理机制使得处理异常的代码和“常规”代码分开,减少了代码的数量,增强了程序的可读性。(3)Java的异常处理机制使得异常事件可以沿调用栈自动向上传播,而不是C语言中通过函数的返回值来传播,这样可以传递更多的信息,并且简化了代码的编写。(4)由于把事件当成事件处理,利用类的层次性我们可以把多个具有相同父类的异常统一处理,也可以区分不同的异常分别处理,使用非常灵活。 3.答:a.异常处理用于不经常发生但通常导致程序终止的情况,因此要求编程人员为编译器的优化执行实现异常处理。b.常规控制结构的控制流程通常比异常的更为清晰、交流更高。c.在发生异常,并且没有释放异常发生之前分配的资源时,堆栈是展开的,所以会出现一些问题。d.“额外的”异常会妨碍真正错误类型的异常。这种使程序员更难 以跟踪大量的异常。 4.答:异常产生的方式有3种。第一种是在某些内部错误时,Java虚拟机可以产生异常,该异常不在你的程序控制范围内,通常不作处理。第二种是由程序代码中的错误引起,这种异常需要你的程序处理。第三种是通过使用throw语句手动生成的异常。 5.答:未捕获的异常最终会导致程序非正常终止。 6.public class ExceptionExam { public static void main(String [] args) { try { int i=0; i=3/i;//将产生算术异常。 } catch(ArithmeticException e)//找到了匹配的异常,执行该catch块。 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........{ System.out.println(“发生了ArithmeticException异常”); } catch(AarryIndexOutOfBoundsException e)//不是匹配的异常,且不会再捕获 //异常,如果发生数组索引超出范围所产生的异常,将执行该catch块。 { System.out.println(“发生了AarryIndexOutOfBoundsException异常”); } catch(Exception e) //前两个catch块均无法捕获try块中发生的异常时,才会执行该catch块。 { System.out.println(“发生了异常”); } finally { System.out.println(“执行d Finally”);} } } 7.答:无论是出于何种原因,只要执行离开try/catch代码块,就会执行finally代码块。即无论try是否正常结束,都会执行 finally定义的最后的代码。如果try代码块中的任何代码或它的任何catch语句从方法返回,也会执行finally代码块。但本题中在try代 码块中执行了“System.exit(0);”语句,执行了这一语句后,Java虚拟机(JVM)将被终止。那么finally语句块一定不会被执行。 8.答:在某些情况下,如果一个方法产生自己不处理或无法处理的异常,它就必须在throws子句中声明该异常。 9.答:通常,可以采用两种方式来报告错误:返回值和异常。在Java中异常处理很常用,虽然返回错误代码在某些情况下是一种有效的方式,但是异常处理可以提供强大的结构化方法来处理异常。所以需要处理代码中的错误时就可以采用异常的方法进行处理。 10.答:ExceptionExam不是继承(扩展)Throwable的子类,只有Throwable的子类可以由throw抛出。所以,这一段代码会出错。 11.public class ExceptionExam1 { public static void main(String [] args) { try {int i=0; i=3/i; } catch(ArithmeticException e) { System.out.println(“异常是:”+e.getMessage()); } finally { 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........System.out.println(“finally 语句被执行”); } } } 注意:如果在catch 语句中声明的异常类是Exception,catch 语句也能正确地捕获,这是因为Exception 是ArithmeticException 的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch的参数为Exception,即说明异常的类型为Exception。 12.class Excp1 extends Exception {} class Excp2 extends Excp1 {} public class ExceptionExam7 { public static void main(String [] args)throws Exception { try { throw new Excp2(); } catch(Excp2 e) { System.out.println(“catch1”); throw new Excp1(); } catch(Excp1 e) { System.out.println(“catch2”); throw new Exception(); } catch(Exception e) { System.out.println(“catch3”); } finally { System.out.println(“finally”); } } } 说明:自定义异常类,关键是选择继承的超类——必须是Exception或者其子类。用异常代表错误,而不要再使用方法返回值。 13.答:所谓流是指同一台计算机或网络中不同计算机之间有序运动着的数据序列,Java把这些不同来源和目标的数据都统一抽象为数据流。数据流可分为输入流和输出流,输 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........入流代表从其他设备流入计算机的数据序列,输出流代表从计算机流向外部设备的数据序列。 流式输入输出的特点是数据的获取和发送沿数据序列的顺序进行,即每一个数据都必须等待排在它前面的数据,等前面的数据读入或送出之后才能被读写。所以流和队列一样,只能以“先进先出”的方式对其中的数据进行读写,而不能随意选择读写的位置。 14.答:两者都作为Object类的直接子类,基本输入流(无效Stream)和基本输出流(OutputStream)是处理以8位字节为基本单位的字节流类;Reader和Writer类是专门处理16位字符流的类。 15.答:构造函数有: (1)public File(String pathname):创建一个对应于参数pathname的File类对象。参数pathname是包含目录和文件名的字符串。如果没有文件名,则代表目录。 (2)public File(String parent , String child):该构造函数将pathname分成两部分parent和child,参数parent表示目录或文件所在路径,参数child表示目录或文件名称。 (3)public File(File parent, String child):该构造函数与上面一个不同在于将parent的参数类型由String变为File,代表parent是一个已经创建的File类文件对象(指向目录)。 常用方法有: (1)public boolean canWrite():返回文件是否可写。 (2)public boolean canRead():返回文件是否可读。 (3)public boolean createNewFile():当文件不存在时创建文件。 16.import java.io.*; class CopyFile{ public static void main(String[] args){ String file1,file2; int ch = 0; try { file1=args[0]; file2=args[1]; File无效Stream fis = new File无效Stream(file1); FileOutputStream fos=new FileOutputStream(file2); while((ch=fis.read())!=-1) fos.write(ch); fis.close(); fos.close(); } catch(FileNotFoundException e){ System.out.println(“源文件:未找到!”); }catch(ArrayIndexOutOfBoundsException e){ System.out.println(“缺少运行参数!”); System.exit(-1); } catch(IOException e){ System.out.println(e.toString()); } 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........} } 17.答: import java.io.*; public class NewFile{ public static void main(String args[]){ File f=new File(“test”); if(f.exists()&&f.isDirectory()) System.err.println(“目录:”+f.toString()+“已经存在!”); else{ if(f.mkdir()){ System.out.println(“目录”+f.getAbsolutePath()+“创建结束!”); File f2=new File(f,“my.txt”); try{ f2.createNewFile(); f2.setReadOnly(); }catch(IOException e){ System.out.println(e.toString()); } System.out.println(“文件:”+f2.getAbsoluteFile()+“创建结束!”); } else System.out.println(“目录”+f.getAbsoluteFile()+“创建失败!”); } } } 18.答:要实现对文件的随机读取,也就是在文件的任何位置执行读写数据的操作,需要一个指针来指定读写的位置。在创建 RandomAccessFile类对象的同时,系统自动创建了一个指向这个文件开头的指针,当执行读写操作后,指针自动指向被读写数据之后的第一个字节 处。指针初始值是0,每读/写一个字节,指针自动增加1。RandomAccessFile类提供了一些控制指针移动的方法。 public long getFilePointer();获取当前指针指向文件的位置。考试大论坛 pulbic void seek(long pos);将指针移动到参数pos指定的位置。 public int skipBytes(int n);指针从当前位置向后移动n个字节位置,并返回指针实际移动的字节数。 19.答: import java.io.*; public class Count{ public static void main(String[] args) { int x=0,y=0,z=0; int ch; try{ while((ch=System.in.read())!='r'){ 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')x++;else if(ch>='0'&&ch<='9')y++;else z++;} }catch(IOException e){ System.out.println(e.toString());} System.out.println(“英文字母:”+x);System.out.println(“数字字符:”+y);System.out.println(“其它字符:”+z);} } 20.答: import java.io.*;public class InFile{ public static void main(String[] args){ int ch;try{ FileOutputStream out=new FileOutputStream(“a.txt”);while((ch=System.in.read())!='r'){ System.out.write(ch);out.write(ch);} out.close();System.out.write('n');}catch(IOException e){ System.out.println(e.toString());} System.out.println(“输出至文件完毕!”);} } 21.答: import java.io.*;public class Sort{ public static void main(String args[]){ int a[]=new int[10];byte b[]=new byte[10];int t;String str; 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........System.out.println(“请输入10个整数:”); try{ for(int i=0;i<10;i++) {System.out.print(“No.”+(i+1)+“: ”); System.in.read(b); str=new String(b); str=str.trim(); a[i]=Integer.parseInt(str); } }catch(IOException e){ System.out.println(e.toString()); } catch(NumberFormatException e){ System.out.println(e.toString()); } for(int i=0;i<9;i++) for(int j=i+1;j<10;j++) { if(a[i]>a[j]){ t=a[i]; a[i]=a[j]; a[j]=t; } } for(int i=0;i<10;i++) System.out.println(a[i]+“t”); } } 自考Java语言程序设计 (一)第九章JavaApplet概述课后习题 九、Java Applet概述 1.下列方法中,哪一个不是Applet的基本方法() A、init()B、run()C、stop()D、start() 2.在Java中判定Applet的来源的方法有() A、getcodebase()B、get文档base() C、getCodeBase()D、get文档Bade() 3.下面关于Applet的说法正确的是 A、Applet也需要main方法 B、Applet必须继承自javawt.Applet C、Applet能访问本地文件 D、Applet程序不需要编译 4.Applet类的直接父类是() 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........() A.Component类 B.Container类 C.Frame类 D.Panel类 5.判断:一个Applet编译后的类名是Test.class,运行此小程序的命令是Java Test。 6.编写同时具有Applet与Application的特征的程序。具体方法是:作为Application要定义main()方法,并且把 main()方法所在的类定义一个类。为使该程序成为一个Applet,main()方法所在的这个类必须继承Applet类或JApplet类。www.xiexiebang.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........A.FlowLayoutB.BorderLayout C.GridLayoutD.CardLayout 10.编写程序,创建下面的GUI(不必为各组件提供功能)。考试大收集整理 参考答案 1: false 2:true 3:true 4.true 5:版面管理器 6.图形用户界面 7.mouseReleased 8.C 9.B 10.import javawt.*; public class Chp9_3_A extends Frame{ TextField t=new TextField(); String[] op={“7”,“8”,“9”,“/”,“4”,“5”,“6”,“*”,“1”,“2”,“3”,“-”,“0”,“.”,“=”,“+”}; Button[] btn=new Button[16]; Panel p=new Panel(); public Chp9_3_A(){ setLayout(new BorderLayout()); p.setLayout(new GridLayout(4,4)); for(int i=0;i btn[i]=new Button(op[i]); p.add(btn[i]); } add(t,BorderLayout.NORTH); add(p,BorderLayout.CENTER); setSize(400,300); } public static void main(String[] args){ new Chp9_3_A().setVisible(true); } } 自考Java语言程序设计 (一)第十二章课后习题 十二、常用组件之一________命令按钮与标签框 1.判断:标签是是一个容器。() 2.判断:在Swing用户界面的程序设计中,容器可以被添加到其它容器中去。() 3.用户不能修改的文本称为_______。 4.关于awt和swing说法正确的是:来源:考试大 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........A、awt在不同操作系统中显示相同的风格。B、swing在不同的操作系统中显示相同的风格 C、javawt的子类 D、awt和swing都支持事件模型 5.下列_________用户图形界面组件在软件安装程序中是常见的。a.滑块 b.进度条来源:考试大 c.对话框 d.标签 6.包含可单击按钮的类的Java类库是__________。a.AWT b.Swing c.二者都有来源:www.xiexiebang.com d.二者都没有 7.下面的__________用户界面组件不是容器。a.JScrollPane b.JFrame考试大-全国最大教育类网站(www.xiexiebang.com)c.JWindows d.JScrollBar 8.创建下面的GUI,颜色列表框为红色、绿色和蓝色(不必为各组件提供功能)。参考答案 1.false 2.true 3.标签 4.B D 5.B 6.C 7.D 8.参考程序如下: import javawt.*;public class Chp9_3_B extends Frame{ Choice ch;Checkbox bg,fg;Button btnOK,btnCancel;Panel p,p1,p2;public Chp9_3_B(){ p=new Panel();p.setLayout(new GridLayout(2,1));p1=new Panel();p2=new Panel();p1.setLayout(new FlowLayout());p2.setLayout(new FlowLayout());ch=new Choice();ch.add(“红色”); 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........ch.add(“绿色”);ch.add(“蓝色”);bg=new Checkbox(“背景”);fg=new Checkbox(“前景”);p1.add(bg);p1.add(fg);btnOK=new Button(“确定”);btnCancel=new Button(“取消”);p2.add(btnOK);p2.add(btnCancel);p.add(p1);p.add(p2);add(ch,BorderLayout.NORTH);add(p,BorderLayout.CENTER);setSize(400,300);} public static void main(String[] args){ new Chp9_3_B().setVisible(true);} } 自考Java语言程序设计 (一)第十三章课后习题 十三、常用组件之二 _______单行文本框与多行文本框,单选框和复选框 1.判断:列表对象总包含滚动条。() 2.判断:面板的默认管理器是BorderLayout。 3.____________类用于创建一组单选按钮。来源:考试大 4.欲编写如下图的一个界面,用于显示用户指定的图像: 如果在区域A中只能放置一个 AWT组件,从各组件的本来功能角度考虑,最好使用哪种组件: A、TextArea B、Panel C、Applet D、Canvas 5.Java应用程序中的默认外观是_________。 A.Motif B.Windows C.METAl 6.创建下面的GUI,要求在文本框中输入分数,单击“求和”按钮后在结果文本框中显示总分。 7.编写一个将华氏温度转换为摄氏温度的程序。应从键盘输入华氏温度,然后通 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........过文本显示转换后的摄氏温度。使用下面的公式进行温度转换: 摄氏温度=5/9Χ(华氏温度-32) 8.编写一个程序,使用户能够使用鼠标在applet中绘制一个矩形。按住鼠标左键,确定矩形的左上角,然后拖动鼠标,在需要的位置(即矩形右下角)释放鼠标。另外,在状态栏中显示矩形面积。 参考答案 1.false 2.true 3.CheckboxGroup 4.D 5. C 6.参考程序如下: import javawt.*;来源:考试大 import javawt.event.*; public class Chp9_3_C extends Frame implements ActionListener{ TextField textField1,textField2,textField3; Button button1=new Button(“求和”); Panel panel1,panel2; public Chp9_3_C(){ textField1=new TextField(); textField2=new TextField(); textField3=new TextField(); panel1=new Panel(); panel2=new Panel(); panel1.setLayout(new GridLayout(3,2)); panel2.setLayout(new FlowLayout()); panel1.add(new Label(“数学: ”)); panel1.add(textField1); panel1.add(new Label(“英语: ”)); panel1.add(textField2); panel1.add(new Label(“总分: ”)); panel1.add(textField3); panel2.add(button1); add(panel1,BorderLayout.CENTER); add(panel2,BorderLayout.SOUTH); button1.addActionListener(this); setSize(300,200); setVisible(true); } public static void main(String[] args){ new Chp9_3_C(); } public void actionPerformed(ActionEvent e){ int n1,n2,sum; 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........n1=Integer.parseInt(textField1.getText());n2=Integer.parseInt(textField2.getText());sum=n1+n2;textField3.setText(“"+sum);} } 6.参考程序如下: import javawt.*;import javawt.event.*;public class Chp9_3_D extends Frame{ TextField textField1,textField2;Button button1;public Chp9_3_D(){ textField1=new TextField(30);textField2=new TextField(30);button1=new Button(”转换“);setLayout(new FlowLayout());add(new Label(”华氏温度:“));add(textField1);add(new Label(”摄氏温度:“));add(textField2);textField2.setEditable(false);add(button1);setSize(400,300);pack();button1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ button1_actionPerformed(e);} });addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });} public static void main(String[] args){ new Chp9_3_D().setVisible(true);} private void button1_actionPerformed(ActionEvent e){ double d=Double.parseDouble(textField1.getText());double h=5.0/9.0*(d-32);textField2.setText(”“+h);} 更多优质自考资料尽在百度贴吧自考乐园俱乐部 (http://tieba.baidu.com/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........} 7.参考程序如下: import javapplet.Applet; import javawt.*; import javawt.event.*; public class Chp9_3_E MouseListener,MouseMotionListener{ int x1,y1,x2,y2; public void init(){ addMouseListener(this); addMouseMotionListener(this); } public void paint(Graphics g){ g.drawRect(x1,y1,x2,y2); int area=Math.abs(x2-x1)*Math.abs(y2-y1); showStatus(”矩形面积: "+area); } //implementation of MouseListener public void mousePressed(MouseEvent e){ x1=e.getX(); y1=e.getY(); } public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} //implementation of MouseMotionEvent public void mouseDragged(MouseEvent e){ x2=e.getX(); y2=e.getY(); repaint(); } public void mouseMoved(MouseEvent e){} } extends Applet implements第二篇:C语言程序设计教程课后习题答案
第三篇:C语言程序设计教程第九章习题答案
第四篇:c语言程序设计(科学出版社)课后习题解答
第五篇:自考Java语言程序设计(一)课后习题及答案