admin 管理员组文章数量: 887021
2023年12月16日发(作者:导轨滑块的组成)
C语言程序设计第1-7章选择、填空习题及答案
第一篇:C语言程序设计 第1-7章选择、填空习题及答案
习
题
一
一、选择题
1.C程序的基本单位是(A)。A.函数 B.文件 C.语句 D.字符 2.C程序中的变量(B)。A.不用说明 B.先说明后引用 D.引用和说明顺序无关 B.执行语句之前 D.位置无关 B.符号语言 D.面向对象的语言 C.先引用后说明 3.变量的说明在(B)。A.执行语句之后 C.执行语句当中 4.C语言是一种(C)。A.机器语言 C.高级语言
二、填空题
1.一个C程序总是从 主函数 开始执行。2.结构化程序由 顺序、选择、循环 三种基本结构构成。3.一个C程序只有一个名为 main 的主函数。4.C程序中的每个语句以 分号 结束。5.C程序中,函数由
函数首部 和 函数体 组成。6.每个基本结构有 一个 入口和 一个 出口,没有 死循环 和 死语句。7.算法是 计算机解决问题所依据的步骤。习
题
二
一、选择题
1.下列数据中属于字符串常量的是(B)。A.ABC A.4 A.6
B.“ABC” C.'abc' D.'A' 2.在计算机内存中,'n'占用的字节数是(C)。B.3 C.1 D.2 D.4 D.2.654e11 3.字符串“ABC”在内存中占用的字节数是(D)。B.8 C.3 4.在C语言中,合法的长整型常数是(B)。A.568701400 B.0L A.ASCII代码值
C.0.03546287 B.BCD代码值 D.内码值 C. b.β C.“ D.b_4
D.0x4 5.char型常量在内存中存放的是(A)。C.十进制代码值
A.?bb A. 6.下列各项中正确的标识符是(D)。B.a=8 B. 0
7.下列不正确的转义字符是(D)。8.设整型变量a、b的值均为5,则表达式(m=n=a++)/(n=b-2)的值为(B)。A.0 B.1 C.2 D.3
D.b=(float)a/2 9.设a的值为5,执行下列语句后,b的值不为2的是(C)。A.b=a/2 B.b=6-(--a)B.3,2,2 B.0 B.%
C.b=a%2 10.执行语句x=(a=3,b=a--)后,x、a、b的值依次是(C)。A.3,3,2 A.3 A.&& A.1 A.6 A.1 C.3,2,3
C.9 D.2,3,2 D.-12 11.设有语句int a=3;,则执行了语句a+=a-=a*a;后,变量a的值是(D)。12.在下列运算符中,优先级最高的是(B)。C.= C.2 C.2 C.2 D.>= D.表达式出错
D.表达式出错 D.2.0 13.设整型变量a的值为3,则计算表达式a---a后,表达式的值为(B)。B.0 14.设整型变量a、b、c的值均为2,表达式a---b+++c++的结果是(C)。B.9 B.2.5 15.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是(D)。16.下列表达式中符合C语言语法的赋值表达式是(C)。A.a=4+b++c=a+8 B.a=4+b++=a+8 D.a=4+b,c=a+8
C.char D.double C.a=(4+b,b++,a+8)A.int
二、填空题
1.在内存中存储”A“要占 2 个字节,存储'A'要占 1 个字节。2.符号常量的定义方法是 #define 常量名 常量。3.无符号基本整型的数据类型符为 unsigned int双精度实型数据类型符为 double,字符型数据类型符为 char。4.十进制数673的二进制、八进制和十六进值数分别为 1010100001、2412 和 2A1。5.在C语言中,书写八进制数时必须加前缀 0 ;书写十六进制数时必须加前缀 0x。6.在微机上,int型、short型、long型、float型和double型数据一般在内存中分别占 2 字节、2 字节、4 字节、4 字节和 8 字节。7.设有下列运算符:<<、+、++、&&、>=,其中优先级最高的是 ++,优先级最低的是 &&。8.设x、y为int型变量,且x=1,y=2,则表达式1.0+x/y的值为 1.0。9.设整型变量x、y、z均为5,则: ① 执行x-=y-z后,x的值为 5。② 执行x%=y+z后,x的值为 5。10.数学式a 的C语言表达式为 a/b*c)。b×c 17.若有以下定义:char a;int
b;float c;double d;,则表达式a*b+d-c的值的类型为(D)。B.float
三、简答题
1.字符常量与字符串常量有什么区别? 2.对于Turbo C系统来说,char型变量与int型变量在内存中存储数据的区别是什么? 3.整型变量可细分为哪六类? 4.什么是一个实型数据的规范化指数形式?
5.设x=3.5,a=5,y=6.7,求算术表达式x+a%3*(int)(x+y)%2/4的值。6.设a=2,b=3,x=4.5,y=1.6,求表达式(float)(a+b)/2+(int)x%inty的值。7.设整型变量a=12,写出下列表达式运算后a的值。① a*=2+5 ② a/=a+a ③ a+=a-=a*=a 8.写出下列程序的运行结果。main(){ char
c1='A',c2='B',c3='C',c4='101',c5='h42';printf(”A%cb%ct%ctbcn“,c1,c2,c3);printf(”tb%c%c“,c4,c5);} 结果:AAbB C abc AB 9.写出下面程序的运行结果。main(){ int i,j,m,n;i=5;j=6;m=++i;n=--j;printf(”%d,%d,%d,%d“,i,j,m,n);} 结果:6,5,6,5
习
题
三
一、选择题
1.printf()函数输出实数时,使用的格式字符是(C)。A.%d
B.%c C.%f D.%o 2.下面变量说明中(C)是正确的。A.char:a ,b ,c;B.char a;b;c;D.char a,b ,c C.char a , b , c;A.整型变量表达式值 C.字符串 3.putchar()函数可以向终端输出一个(D)。B.实型变量值 D.字符或字符型变量值 4.阅读以下程序,当输入数据的形式为:25,13,10〈CR〉,正确的输出结果为(D)。main(){
x,y,z;scanf(”%d%d%d“,&x,&y,&z);printf(”x+y+z=%dn“,
x+y+z);}
A.x+y+z=48 B.x+y+z=35 C.x+z=35 D.不确定值 5.以下说法正确的是(D)。A.输入项可以是一个实型常量 B.只有格式控int
制,没有输入项,也能进行正确输入,如scanf(”a=%d,b=%d“);C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(”%4.2f“,&f);D.当输入数据时,必须指明变量的地址,如scanf(”%f“,&f);6.以下能正确地定义整型变量a、b和c并为其赋初值5的语句是(C)。A.int a=b=c=5;B.int a,b,c=5;C.int
a=5,b=5,c=5;A.ch='a+b';A.++x;A.f
D.a=b=c=5;C.ch='8';D.ch=”“;7.已知ch是字符型变量,下面正确的赋值语句是(B)。B.ch='xff';8.设x、y均为float型变量,则以下不合法的赋值语句是(B)。B.y=(x%2)/10;C.x*=y+8;D.x=y=0;B.e(E)C.g(G)D.x
C.123.4560 D.+123.4560 9.以下格式符中,不能用来输入实型数的是(B)10.若float num=123.456,以%+10.4d的格式输出,结果正确的是(B)A.123.456000 B. 123.4560
二、填空题
1.以下程序的输出结果是 x=1 y=2 *sum*=3 10 squaredis :100。main(){ int x=1,y=2;printf(”x=%d y=%d
*sum*=%dn“,x,y,x+y);printf(”10 squared is :%dn“,10*10);}
2.以下程序的输出结果是 a=325 x= 3.14。main(){ int
a=325;double x=3.1415926;printf(”a=%2d x=%7.2fn“,a,x);}
3.假设变量a和b均为整型,以下语句可以不借助任何变量把a、b中的值进行交换。请填空:a+=b;b=a-b ;a-=b ; 4.若x为int型变量,则执行以下语句后x的值是-14。x=7;
x+=x-=x+x;
5.C语句可以分为五类,含 7 种控制语句、声明 语句、表达式
语句、空语句和复合语句。6.赋值语句是由 赋值表达式 加上一个分号构成。7.a=12,n=5,表达式a%=(n%=2)值是 0。8.有一个输入函数scanf(”%d“,k);则不能使float类型变量k得到正确数值的原因是
k前无& 和 %d与k的类型不一致。9.putchar()函数可以向终端输出一个 字符。10.已有定义int i,j;float x;为将-10赋给 i,12赋给 j,410.34赋给x,则对应以下scanf()函数调用语句的数据输入形式是-
12 C 410.34。scanf(”%o%x%e“,&i,&j,&x);11.pirntf()函数中用到格式符%5s,其中数字5表示输出的字符串占5列,如果字符串长度大于5,则 按实际宽度输出。12.使用getchar()和putchar()函数必须在源程序中加 #include”stdio.h“。
习
题
四
一、选择题
1.执行下面的程序段后,b的值为(B)。int x=35;char
z='A';int b;b=((x&&15)&&(z<'a'));A.0 A.1 B.1 C.2 D.3 2.设a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n-c>d)后n的值为(B)。B.2 C.3 D.4 3.若k是int型变量,且有下面的程序段,输出结果是(A)。K=-3;
if(k<=0)printf(”####“);else printf(”&&&&“);A.####
C.####&&&& A.A&&B C.A‖B+C&&B 5.阅读程序:
B.&&&& D.有语法错误,无输出结果 B.A<=B D.!((A
a++;b++;break;} printf(”a=%d,b=%d\n“,a,b); }
B.0.250000 D.1.000000 上面程序输出结果是(A)。A.a=2,b=l C.a=l,b=0 7.下面程序的输出是(C)。main(){ int a=–1,b=4,k;k=(a++<=0)&&(!(b--<=0));printf(”%d%d%d%\n“,k,a,b);}
B.a=l,b=l D.a=2,b=2 A.0 0 3 B.0 1 2 C.1 0 3 D.1
1 2 8.为表示关系x≥y≥z,应使用C语言表达式(A)。A.(x>=y)&&(y>=z)C.(x>=y>=z)A.a<>0 10.若有以下定义:
B.(x>=y)AND(y>=z)D.(x>=y)&(y>=z)D.a 9.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为(D)。B.!a C.a=0 float x;int a,b;则正确的switch语句是(D)。A.switch(x){case 1.0:printf(”*n“);
case2.0:printf(”**n“);} B.switch(x){case 1,2:printf(”*\n“); case 3:printf(”**\n“);}
C.switch(a+B){case 1:printf(”n“);
case 1+2:printf(”**\n“);} D.switch(a+b); {case 1:printf(”*\n“); case 2:printf(”**\n“);} 11.下列语句中,错误的是(C)。A.while(a=b)a++;B.while(0);C.do D.do
{printf(“okn”);{x++;
}while(x==5)}while(--x==0);12.执行语句:for(i=1;i++<4;)后变量i的值为:(B)。A.3 B.4 C.5 D.6 13.以下程序的输出结果是:(D)。main(){ int
x=10,y=10,i;for(i=0;x>8;y=++i)printf(”%d %d“,x--,y);} A.10 1
9 2 B.9 8 7 6 C.10 9 9 0 D.10 10 9 1 14.以下for语句的循环次数为:(B)。int i=0,j=0;for(;!j&&i<=5;i++)j++;A.5次 B.1次 C.6次 D.无限多次 15.以下程序段中内嵌循环共被执行的次数为:(A)for(i=5;i;i--)
for(j=0;j<4;j++){…} A.20
二、填空题
B.24 C.25 D.30 1.设ch是char型变量,其值为A,且有下面的表达式: ch=(ch>'A'&&ch<='Z')?(ch+32):ch 该表达式的值是 A。2.若已知a=10,b=20,则表达式“!a=0);printf(”%d%d%dn“,k,a,b);} 5.假定所有变量均已正确说明,下列程序段运行后,x的值是 4。a=b=c=0;x=35;if(!a)x--;else if(b);if(c)x=3;else
x=4;6.若执行下面的程序时,从键盘上输入3和4,则输出结果是 3。main(){ int a,b,s;scanf(”%d%d“,&a,&b);s=a;if(a&&b)printf(”%d\n“,s);else printf(”%d\n“,s--);} 7.以下程序的输出结果是 x=11,i=11。main(){ int
x=1,i=1;for(;x<50;i++){if(x>=10)break;if(x%2!=1){x+=3;continue;} x-=1;} printf(”x=%d,i=%dn“,x,i);} 8.以下程序的输出结果是 i=9,j=10。main(){ int i=10,j=0;do {j=j+i;i--;}while(i>j);printf(”i=%d,j=%dn“,i,j);} 9.以下程序的输出结果是 35。main(){int m=7,n=5,i=1;do
{if(i%m==0)if(i%n==0){printf(“%dn”,i);break;}
i++;}while(i!=0);} 10.以下程序的输出结果是 1,-2。main(){ int
x=3;do {printf(”%d“,x-=2);}while(!(--x));} 11.以下程序的输出结果是 i=4,j=6。main(){ int
i,j;for(i=0;i<5;i++){for(j=1;j<10;j++)if(j==6)break;if(i<3)continue;if(i>3)break;} printf(”i=%d,j=%dn“,i,j);}
习
题
五
一、选择题
1.下列为一维数组初始化时, 正确的是(D).A.int a[ ]={1,3,5,7,9,…,15};C.int a[5]={5*3};B.int a[5]={ };D.int a[5]={0};2.下列一维数组说明中,正确的是(A).A.#define M 10 float
s[M];B.int m;float a[m];C.int m=10, a[m];A.int
a[4]={2,4,6,8};C.int
a[4];a={2,4,6,8};a[0]=2;a[1]=4,a[2]=6;a[3]=8;4.若有说明: int
a[5][5];则对数组元素的正确引用是(C).A.a[3+2][3] B.a[0,3]
A.int a[2][ ]={{3,4},{5}};C.int
a[3][3]={0};a[5][4]={{1,2},{2,3},{3,4},{4,5}};6.若有以下数组定义:
char ch[]=”book_120n“;则数组ch的存储长度是(D)。A.7 B.8
C.9 D.10 7.以下程序段的输出结果是(A).char
str[8]={'a','b','c','d','','y','z',''};printf(”%s“,str);
scanf(“%d”,&m);D.int a[ ];B.int a[ ]={2,4,6,8};D.int
a[4];3.若要将2,4,6,8存入数组a中,不正确的是(C).C.a[4][1+2]
DD.a[ ][2] 5.下列二维数组初始化中,错误的是(A).B.int
a[][3]={2,3,4,5,6,7};.int A.abcd 8.设有如下定义: B.abcd yz
C.abcdyz D.出错 char s1[20]=”tianjin“, s2[10]=”beijing“;执行语句:strcpy(s1+4,s2);printf(”%s“,s1);后,输出结果是(B).A.tian B.tianbeijing C.tianjinbeijing D.tianbeij 9.合法的数组定义是(B)A.int a[ ]={”string“};C.char a={”string“};B.int a[ ]={0, 1, 2, 3, 4, 5};D.char a[ ]={0, 1, 2, 3, 4,
5};10.若有以下说明,则数值为4的表达式是(D)int
a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='a',d,g;A.a[g-c] B.a[4]
C.a['d'-'c'] D.a['d'-c] 11.下列语句中,正确的是(D)A.char
a[3][ ]={'abc', 'I'};C.char a[3][ ]={ 'a', ”I“};B.char a[ ][3]={'abc',
'I'};D.char a[ ][3]={”abc“, ”I“};12.设有如下定义,则正确的叙述为(C)char x[]={”abcdefg“};char
y[]={'a','b','c','d','e','f','g'};A.数组x和数组y等价
二、填空题
B.数组x和数组y的长度相同 D.数组x的长度小于数组y的长度 C.数组x的长度大于数组y的长度 1.设有定义语句“int
a[3][4]={{1}, {2}, {3}}”,则a[1][1]值为 0,a[2][1]的值为 0。2.执行“int b[5]={ }, a[ ][3]={1, 2, 3, 4, 5, 6}”后,b[4]= 0,a[1][2]= 6。3.下面程序的功能是输出数组s中最大元素的下标,请填空。
main(){ int k,p;int s[]={1,-9,7,2,-10,3};for(p=0,k=p;p<6;p++)k=p;if(s[p]>s[k])printf(”%dn“,k);}
4.下面程序的功能是将一个字符串str的内容颠倒过来,请填空。#include”string.h“
str[ ]={
a[5][5],i,j,ss;printf(”input
data:“);for(i=0;i<5;i++)for(j=0;j<5;j++)scanf(”%d“,&a[i][j]);ss= 1;for(i=0;i<5;i++)ss= ss* a[i][j];printf(”ss=%dn“,ss);} 6.以下程序求任意10个实数的最大值和最小值。#include main(){ int i;float
a[10],max,min;for(i=0;i<10;i++)scanf(”%f“,&a[i]);max=min=a[0];for(i=1;i<10;i++){ if(maxa[i])min=a[i];} printf(”最大值=%fn“,max);printf(”最小值=%fn“,min);} 7.以下程序求二维数组中每行元素的最大值。#include #define M 4 #define N 5 main(){ int
a[M][N],amax,i,j;for(i=0;iamax)amax=a[i][j];printf(”%d %dn“,i,amax);} }
习
题
main(){ int i,j, k;char
int ”1234567“};for(i=0,j=strlen(str)/2;i main(){
六
一、选择题
1.以下叙述不正确的是(D)。A.一个C源程序可由一个或多个函数组成 B.一个C源程序必须包含一个main()函数 C.C程序的基本组成单位是函数 D.C程序中的注释说明只能位于一条语句的后面 2.以下关于C语言函数参数的说法不正确的是(B)。A.实参可以是常量、变量或表达式 C.实参可以为任意类型 A.地址传递 B.形参可以是常量、变量或表达式 D.形参应与其对应的实参类型一致
B.由实参传给形参再由形参传回给实参 D.由用户指定传递方式
C.long型 D.double型 3.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是(C)。C.单向值传递 A.float型
4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是(B)。B.int型 5.C语言规定,函数返回值的类型是由(D)。A.return语句中的表达式类型所决定 C.调用该函数时系统临时决定
B.调用该函数时的主调函数类型所决定 D.定义函数时所指定的函数类型所决定 6.在C语言程序中,以下正确的描述是(C)。A.函数可以嵌套定义,但不可以嵌套调用 B.函数的定义和调用均可以嵌套
C.函数不可以嵌套定义,但可以嵌套调用 D.函数的定义和调用均不可以嵌套 7.若用数组名作为函数调用的实参,传递给形参的是(A)。A.数组的首地址 B.数组第一个元素的值 D.数组元素的个数 B.在该函数中有效 D.为非法变量 C.数组中全部元素的值 8.如果在一个函数中的复合语句中定义了一个变量,以下关于该变量正确的说法是(A)。A.只在该复合语句中有效 C.在本程序范围内均有效 9.以下不正确的说法为(D)。A.在不同函数中可以使用相同名字的变量
B.形式参数是局部变量 C.在函数内定义的变量只在本函数范围内有效 D.在函数内的复合语句中定义的变量在本函数范围内有效 10.以下程序的正确运行结果是(A)。#include main(){ int
k=4,m=1,p;p=func(k,m);printf(”%d,“,p);p=func(k,m);printf(”%dn“,p);} func(int a,int b){ static int
m=0,i=2;i+=m+1;m=i+a+b;return(m);} A.8,17 B.8,16 C.8,20
D.8,8 11.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用<>(尖括号)括起时,寻找被包含的文件的方式是(C)。A.仅仅搜索当前目录 B.先在源程序所在目录搜索,再按系统设定的标准方式搜索 C.直接按系统设定的标准方式搜索目录
D.仅仅搜索源程序所在目录 12.以下程序的正确运行结果是(A)。int d=1;fun(int p){ int d=5;d+=p++;printf(”%d,d);} main(){ int
a=3;fun(a);d+=a++;printf(“%dn,d);} A.84 B.99 C.95 D.44
13.若有以下调用语句,则不正确的fun()函数的首部是(D)。main(){ …
int a[50],n;…
fun(n,&a[9]);… } A.void fun(int m,int x[ ])C.void fun(int
p,int *s)B.void fun(int s,int h[41])D.void fun(int n,int a)14.下面的程序执行后输出的结果是(A)。f(int a){ int b=0;static int
c=3;b++;c++;return(a+b+c);} main(){ int
a=2,i;for(i=0;i<3;i++)printf(”%d “,f(a));} A.7 8 9 B.7 9 11 C.7
10 13 D.7 7 7 15.以下程序执行后的输出结果是(B)。int a,
b;void fun(){ a=100;b=200;} main(){ int
a=5,b=7;fun();printf(”%d,%d n“, a,b);} A.100,200 A.包含文件
B.5,7 C.200,100 C.宏定义 D.7,5 D.连接 16.下列不属于编译预处理的是(D)。B.条件编译 17.下列语句中正确的是(D)。A.#define MYNAME=”ABC“ C.for(i=0;i<10;i++);B.#include
string.h D.#include B.#include ”math.h“ 18.下列语句中错误的是(A)。A.#define PI=3.1415926
C.if(2);D.for(;;)if(1)break;19.设有以下宏定义,则执行语句“z=2*(N+Y(5+1));”后,z的值为(B)。#define N 3 #define
Y(n)((N+1)*n)A.出错 B.42 C.48 D.54 20.以下程序中的for循环执行的次数是(C)。#include ”stdio.h“ #define N 2 #define
M N+1 #define NUM(M+1)*M/2 main(){ int
i,n=0;for(i=1;i<=NUM;i++)printf(”n“);} A.5
二、填空题 B.6 C.8 D.9 1.C语言中的函数,从能否可以返
回值上可分为 有返回值 函数和 无返回值 函数。2.定义函数时,在函数头中除有函数名称外,还应有 函数类型、参数类型 和 名称 等信息。3.必须对函数 定义 才能确立函数可实现的功能,只有对函数 调用 才能实现函数的功能。4.C语言中,函数的调用有 函数语句、函数表达式 和 函数实参 三种方式。5.C语言中,每个变量都有作用域和生存期,变量的作用域是 变量有效范围,变量的生存期是 变量作用域。6.对函数或变量的 声明 是告诉系统此程序段要用到在其后面才定义的函数或变量,使函数或变量的作用域得以扩展。7.C语言中,变量的存储类型有 4 种,存储方式有 2 种。8.以下程序的输出结果是 246。void fun(){ static int a=0;a+=2;printf(”%d“,a);} main(){ int
cc;for(cc=1;cc<4;cc++)fun()printf(”n“);} 9.以下程序的运行结果是 111。main(){ increment();increment();increment();}
increment(){ int x=0;x+=1;printf(”%d“,x);} 10.以下程序执行后输出的结果是 34。#include f(int a){ int b=0;static c=3:
a=c++,b++;return(a);} main(){ int
a=2,i,k;for(i=0;i<2;i++)k=f(a++);printf(”%dn“,k);} 11.以下程序执行后输出的结果是 4。long fib(int n){ if(n>2)return(fib(n-1)+fib(n-2));else return(2);} main(){ printf(”%dn“,fib(3));} 12.以下程序执行后输出的结果是 14。#include
long sum(register int x,int n){ long s;int i;register int
t;t=s=x;for(i=2;i<=n;i++){ t*=x;s+=t;} return(s);} main(){ int x=2,
n=3;printf(”s=%ldn“,sum(x, n));} 13.设有定义如下:#define
F(N)2*N, 则表达式F(2+3)的值是 7。14.下面程序的执行结果是 5,6,12。#include int fx(int x,int y){ int s;s=(x++)+(++y);return s;}
main(){ int a,b,k;a=5;b=6;k=fx(a,b);printf(”%d %d %dn“,a,b,k);}
15.下面程序for循环执行 6 次,程序的运行结果是 12345。#include #define M 3 #define FMN M+M main(){int
i,n=0;for(i=0;i #define SR(x)x*x main(){ int a,m=5,n=2;a=SR(m-n)/SR(m+n);printf(”%dn“,a);} 17.设数组a有50个元素,函数fun1()的功能是按顺序分别给数组a中的元素赋以从2开始的偶数值,
函数fun2()则按顺序每五个元素求一个平均值,并将求得的值放在数组s中,在空白处完成该程序。#include #define N 50 fun1(float
a[]){ int k,i;for(i=0,k=2;i #include main(){ int k=0;char
s1[10]=”abc“,s2[10]=”xyz“;strcat(s1,s2);while(s1[k++]!='')s2[k]=s1[k];puts(s2);} 19.下面程序经宏展开后,程序运行结果是 200。#define PR printf(”sum=%dn“,sum)#define ADD sum+=i
main(){ int i,sum=0;for(i=10;i<20;i++)ADD;PR;}
习
题
七
一、选择题
1.变量的指针,其含义是指该变量的(B)。A.值 B.地址
C.名 D.一个标志 2.以下程序中调用scanf()函数给变量a输入数值的方法是错误的,错误原因是(B)。main(){ int
*p,*q,a,b;p=&a;printf(”input a :“);scanf(”%d“,*p);┆ } A.*p表示的是指针变量p的地址 B.*p表示的是变量a的值,而不是变量a的地址 C.*p表示的是指针变量p的值 D.*p只能用来说明p是一个指针变量 3.以下程序错误的原因是(A)。main(){ int *p,i;char
*q,ch;p=&i;q=&ch;*p=40;*p=*q;┆ } A.p和q的类型不一致,不能执行*p=*q;语句 B.*p中存放的是地址值,因此不能执行*p=40;语句 C.q指向具体的存储单元,所以*q没有实际意义 D.q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行*p=*q;语句 4.已有定义int k=2;int *ptr1, *ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是(B)。A.k=*ptr1+*ptr2;B.ptr2=k;C.ptr1=ptr2;5.以下程序运行结果是(B)。D.k=*ptr1*(*ptr2);sub(int x ,int y ,int *z){ *z=y-x;}
main(){ int
a ,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf(”%4d,%4d,%4dn“,a,b,c);} A.5,2,3 B.-5,-12,-7 6.下面程序段的运行结果是(A)。char *s=”abcde“;s+=2;printf(”%d“,s);
C.-5,-12,-17 D.5,-2,-7 A.cde B.字符'c' C.字符'c'的地址
D.无确定的输出结果 7.若有以下定义,则对a数组元素地址的正确引用是(B)。int a[5],*p=a;A.*&a[5] B.a+2 C.*(p+5)8.若有以下定义,则对a数组元素地址的正确引用是(A)。int a[5],*p=a;
D.*(a+2)A.p+5 B.*a+1 9.若有以下定义,则p+5表示(A)。int a[10],*p=a;
C.&a+1 D.&a[0] A.元素a[5]的地址 B.元素a[5]的值 C.元素a[6]的地址 D.元素a[6]的值 10.若有以下定义,且0≤i<6,则正确(的A赋)值。语C句.是(D.)。int
s[4][6],t[6][4],(*p)[6];A.p=t;B.p=s;11.下面程序段的运行结果是p=s[i];Dp=t[i];char
int *format= ”%s,a=%d,b=%dn“
a=1,b=10;a+=b;printf(format, ”a+=b“,a,b);A.for, ”a+=b“,ab B.format, ”a+=b“ D.以上结果都不对 C.a+=b,a=11,b=10
12.下面程序段的运行结果是(D)。char
*p= ”%d,a=%d,b=%dn“;int
.1,a=111,b=10 a=111,b=10,c;c=a%b;p+=3;printf(p,c,a,b);AC.a=111,b=10 13.下面程序的运行结果是(A)。B.a=1,b=111
D.以上结果都不对 #include ”stdlib.h“ fun(int **a,int
p[2][3]){ **a=p[1][1];} main(){ int x[2][3]={2,4,6,8,10,12},*p;p=(int
*)malloc(sizeof(int));fun(&p,x);printf(”%dn“,*p);} A.10 B.12
C.6 14.设有如下定义,则以下说法中正确的是(C)。char
*aa[2]={”abcd“,”ABCD“};
D.8 A.aa数组元素的值分别是”abcd“和ABCD” B.aa是指针变量,它指向含有两个数组元素的字符型一维数组 C.aa数组的两个元素分别存放的是含有四个字符的一维字符数组的首地址 D.aa数组的两个元素中各自存放了字符'a'和'A'的地址 15.设有以下定义,则下列能够正确表示数组元素a[1][2]的表达式是(D)。int
a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(*prt)[3]=a,*p=a[0];A.*((*prt+1)[2])C.(*prt+1)+2 16.下列程序的输出结果是(B)。
B.*(*(p+5))D.*(*(a+1)+2)main(){ int
a[5]={2,4,6,8,10},*p,**k;p=a;k=&p;printf(“%d”,*(p++));printf(“%dn”,**k);} A.4 4 B.2 2 17.执行以下程序后,y的值是(C)。main(){ int a[]={2,4,6,8,10};int
y=1,x,*p;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);printf(“%dn”,y);}
C.2 4 D.4 6 A.17 B.18 C.19 D.20 18.设有如下定义,则执行语句*--p;后*p的值是(B)。int
a[5]={10,20,30,40,50},*p=*a[2];A.30 B.20 C.19 D.29 19.设有如下定义,则下列程序段中正确的是(C)。char *st=“how are
you”;A.char a[11], *p;strcpy(p=a+1,&st[4]);C.char
a[11];strcpy(a, st);B.char a[11];strcpy(++a, st);D.char a[],
*p;strcpy(p=&a[1],st+2);20.若有以下说明和定义,在必要的赋值之后,对fun()函数的正确调用语句是(B)。fun(int *c){ }
main(){
序的输出结int(*a)()=fun,*b(),w[10],c;┆
果是(C)。main(){
}
char
A.a(w);B.(*a)(&c);C.b=*b(w);D.fun(b);21.有如下程序,该程ch[2][5]={“6937”,“8254”},*p[2];int
i,j,s=0;for(i=0;i<2;i++)p[i]=ch[i];for(i=0;i<2;i++)for(j=0;p[i][j]>'';j+=2)s=10*s+p[i][j]-'0';printf(“%dn”,s);} A.69825
二、填空题 B.63825 C.6385 D.693825 1.指针运算符&和*分别称为 取址运算 和 间接访问 运算。2.当用指针变量作为函数参数时,此时的参数传递是 地址 传递。3.对于二维数组arr[5][5],arr,*arr,&arr[0],arr[2]+3,*(arr+2), *(arr[2]+3)的含义分别是 5行5列元素值,0行地址,0行0列地址,0行地址,2行3列元素地址,2行0列地址,2行3列元素值。4.函数的指针是 函数入口地址。5.返回指针值的函数是 指针类型的函数。6.若有说明语句 int
a[3]={1,3,5},*p=a;则*++p,*p++,*p+1的值分别是 3,1,2。
第二篇:C语言程序设计教程课后习题答案
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--× --× 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(“
②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源程序输入后是如何进行保存的?
welcome you
n”);printf(“ very good n);printf(”********************n“);}
答
是以C为扩展名保存的纯文本文件。
第二章 C语言程序的基本数据类型与表达式 -习题答案 ★指出下列常数中哪些是符合C语法规定的。
答
''--× '101'--× ”“--× e3--× 019--√ 0x1e--√ ”abn“--√
1.e5--×(2+3)e(4-2)--× 5.2e2.5--×请找出下列程序中的错误,改正后写出程序运行结果。
①void
{
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
main(){int
char
x,y=z=5,aver;x=7 AVER=(x+y+z)/3
a=3.5,b='A'
printf(”AVER=%dn“,aver);} ②void main()
c1='a';c2='b';c3='c';int
printf(”a=%db='“endn”,a,b);printf(“a%cb%cbc%ctabcn”,c1,
float 99.00 104.00 66.00 55.78 68.00-1.00
long int 99 104 66 55 68-1
★写出程序运行结果。
①void
{
main(){int
int
i,j;i=8,j=10;printf(“%d,%d,%d,%dn”,i,j,++i,j++);} ②main()
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
答
运行结果: 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)与③(int)a+b与m=a=4,4*5 ②(float)(a/b)与(float)a/b
与m=m%2+a*3 (int)(a+b)④m%=2+a*3a=10,b=20,c=30,d;d=++a<=10||b-->=20||c++;printf(“%d,%d,%d,%dn”,a,b,c,d);}
⑤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的结果为()类型。 答 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);”是___。为或int
“printf(“%#X,%on”,a,b);”。本条解释不必须掌握。★以下程序输main(){
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.0000
00 ⑥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;/*注意分析此处算法*/
第三篇:C语言程序设计教程第九章习题答案
1、li
300.0 chang 30
200.0 chang
2、#include struct students {
char sid[100];
char name[100];
float score[3];}student;void main(){
int i;float j;
printf(“nPlease input sid:
”);
scanf(“%s”,);
printf(“nPlease input name: ”);
scanf(“%s”,);
printf(“nPlease input 3 score:(like1,1,1)”);/*输入逗号隔开*/
scanf(“%f,%f,%f”,&[0],&[1],&[2]);
printf(“nsid = %s”,);
printf(“nname = %s”,);
j=([0]+[1]+[2])/3.0;
printf(“naverage = %.2f”,j);
getch();}
3、#include #include #define F sizeof(student)#define NULL
0 typedef struct scores { int english;int math;int c_language;int
all;}TP;typedef struct students { char sid[15];char name[15];TP
score;struct students *next;}student;student *input(){ student
*head,*p1,*p2;int
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->h,&p1->,&p1->score.c_language);
p1->=p1->h+p1->+p1->score.c_language;
if(n==1)
{ head->next=p1;p2=p1;}
else
{ p2->next=p1;
p2=p1;
n=0;char ch;clrscr();head=(student
*)malloc(F);head->next=NULL;
}
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->/3;
printf(“nnname:
%staverage: %d”,p->name,j);
p=p->next;
} printf(“nnnPress eny key return.”);getch();} void
average2(student
1+=p->h;
temp2+=p->;
temp3+=p->score.c_language;
p=p->next;n++;} printf(“nnaverage english is : %dnaverage
math
*head){
is :
student
%dnaverage c_language
*head1,*p,*q,*r;int
is : %dt”,temp1/n,temp2/n,temp3/n);} student *sort(student
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->>r->)
r=q;
if(r!=p)
{ strcpy(s,p->sid);strcpy(n,p->name);
temp1=p->h;
*head){ student *p;int
n=0,temp1=0,temp2=0,temp3=0;p=head->next;while(p){ temp
temp2=p->;
temp3=p->score.c_language;
temp4=p->;
strcpy(p->sid,r->sid);strcpy(p->name,r->name);
p->h=r->h;
p->=r->;
p->score.c_language=r->score.c_language;
p->=r->;
strcpy(r->sid,s);strcpy(r->name,n);
r->h=temp1;
r->=temp2;
r->score.c_language=temp3;
r->=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->h,p->,p->score.c_language,p->/3,i++);
average2(head);
printf(“nnnttPress
clrscr();
printf(“nn(1): (2): (3): (4):
Please choose:
”);
scanf(“%d”,&i);
switch(i)
eny key back.”);getch();} void
main(){ student *head,*p1,*p2;int i=0,j=1;head=input();do {
{ 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 #include #define NULL 0 #define F
sizeof(worker)typedef struct work { char sid[15];char name[15];int
money;struct work *next;}worker;int min=0,max=0;char
a[15],b[15];worker *input(){ worker *head,*p,*q;int n=0;char
ch;head=(worker *)malloc(F);head->next=0;do { n++;
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->moneymoney;strcpy(b,p->name);}
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
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)
/*插到中间位置*/
{
head;} stu *select(stu
*head,int x){ stu *s;s=head->next;while(s){
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 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 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(“.”);printf(“.”);printf(“.”);printf(“ list.”);printf(“
”);printf(“n
............choice(1-5).............”);ch1=getch();switch(ch1){
case '1':
{ clrscr();
printf(“nplease input insert 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 eny key
back.”);getch();}
}while(n);}
7、#include #define F sizeof(L)typedef struct list {
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();}
第四篇:自考Java语言程序设计(一)课后习题及答案
更多优质自考资料尽在百度贴吧自考乐园俱乐部
(一)课后习题及答案
自考Java语言程序设计
(一)第一章Java语言概述课后习题
一、Java语言概述
1.Java语言有哪些特点?
2.什么叫做类?什么叫做对象?
3.简述Java的运行机制。
4.简述Java应用程序的开发流程。
5.当初Sun公司发展Java的原因是:来源:er_1 =
new ComplexNumber(3,-5);
ComplexNumber cNumber_2 = 本文来源:考试大网
new ComplexNumber(2,2);
double d = 10.0;
n(cNumber_ng()+ “ 加 ”
+ cNumber_ng()+ “ 等于 ”
+ cNumber_xAdd(cNumber_2).toString());
n(cNumber_ng()+ “ 加 ”
+ d + “ 等于 ”
+ cNumber_xAdd(d).toString());
n(cNumber_ng()+ “ 减 ”
+ cNumber_ng()+ “ 等于 ”
更多优质自考资料尽在百度贴吧自考乐园俱乐部
private double m_dRealPart;private double m_dImaginPart;//构造方法
ComplexNumber(){ m_dRealPart = 0.0;m_dImaginPart = 0.0;}
ComplexNumber(double
r;m_dImaginPart
c){ m_dRealPart
double
= i;}
=
r,double i){ m_dRealPart =
=
ComplexNumber(ComplexNumber
lPart();m_dImaginPart
return m_dRealPart;}
ginaryPart();} //get,set方法
getRealPart(){ double
void getImaginaryPart(){ return m_dImaginPart;}
setRealPart(double d){
更多优质自考资料尽在百度贴吧自考乐园俱乐部
ComplexNumber complexAdd(ComplexNumber c){ return
new ComplexNumber(this.m_dRealPart
c){
+ lPart(),
new
this.m_dImaginPart + ginaryPart());} ComplexNumber
complexAdd(double return
ComplexNumber(this.m_dRealPart + c, this.m_dImaginPart);}
ComplexNumber complexMinus(ComplexNumber c){ return new
ComplexNumber(this.m_ginaryPart());}
ComplexNumber complexMinus(double
return
c){来源:new
ComplexNumber(this.m_dRealPart-c, this.m_dImaginPart);}
ComplexNumber complexMulti(ComplexNumber c){ return new
ComplexNumber(this.m_dRealPart * lPart()
-this.m_dImaginPart * ginaryPart(), this.m_dRealPart
* ginaryPart()+ this.m_dImaginPart * lPart());}
ComplexNumber complexMulti(double c){ return new
ComplexNumber(this.m_dRealPart * c, this.m_dImaginPart * c);}
//toString()public String toString()
更多优质自考资料尽在百度贴吧自考乐园俱乐部
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)(3,’p’)(2)(“Basic”)
(3)gth(5)(4)e()
5.Math类中提供用来常数π和e的静态属性分别是什么?
6.下面关于Vector类的说法正确的是()
(1)类Vector在包中。
(2)一个向量(Vector)对象存放的是一组有序的对象。
(3)一个向量(Vector)对象大小可以根据存放的元素个数的增加而自动增加。
(4)一个向量(Vector)对象中每个元素可以是不同类型的对象。
7.有三个字符串,编写程序找出其中最大者。
8.编写一个程序,设定一个有大小写字母的字符串,先将字符串
的大写字符输出,再将字符串中的小写字符输出。
9.设定5个字符串,要求只打印那些以字母“b”开头的串,编写程序完成。
10.设定一个有大小写字母的字符串和一个查找字符,使用类
String方法IndexOf()来判断在该字符串中该字符出现的次数。
参考答案
更多优质自考资料尽在百度贴吧自考乐园俱乐部
(1)错。用= =操作符比较String对象实际上是判断它们在内存中是否为同一对象,并不是判断它们的值是否相同。
(2)错。String类的对象是常量。它们被创建后不可被修改。
2.答:
(1)(s1,s2);
(2)s1+=s2;
(3)();
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(eTo(s2)<0)
s=s2;
else s=s1;
if(eTo(s3)<0)
s=s3;
n(“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((i)<97)
更多优质自考资料尽在百度贴吧自考乐园俱乐部
public class prin_b { public static void main(String
args[]){ String s1=“hello”;String s2=“bee”;String
s4=“brove”;String s3=“java”;String
s5=“bag”;if(f('b')=
=0)n(s1);if(f('b')=
=0)n(s2);if(f('b')=
=0)n(s3);if(f('b')=
=0)n(s4);if(f('b')=
=0)n(s5);} } 10.
public class ppp { public static void main(String args[]){ String
s1=“abcdefghi”;int num=0;for(int i=0;i
{i=f('e',i);num++;
更多优质自考资料尽在百度贴吧自考乐园俱乐部
(“ s1=”+s1+“e=”);
if(num= =0)
n(“ no found”);
else n(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];
(0);
}
catch(ArrayIndexOutOfBoundsException e)
{n(“发生了异常”);}
finally
{n(“Finally”);}
}
}
8.throws的作用是什么?
9.应在程序的什么地方使用异常处理?
10.下面的代码有什么错误吗?
class ExceptionExam{„}
throw new ExceptionExam();
11.异常类型匹配的处理方式。程序功能:首先输出“这是一个异常处理的例子”,然后在你程序中主动地产生一个
ArithmeticException 类型被0 除而产生的异常,并用catch 语句捕获这个异常。最后通过ArithmeticException类的对象e的方法getMessage 给出异常的具体类型并显示出来。
12.根据所给创建自定义异常类的使用格式,编写一个自定义异常的小程序。
更多优质自考资料尽在百度贴吧自考乐园俱乐部
14.Java流被分为字节流、字符流两大流类,两者有什么区别?
15.File类有哪些构造函数和常用方法?
16.利用文件输入输出流编写一个实现文件拷贝的程序,源文件名和目标文件名通过命令行参数传入。
17.编写一个程序,在当前目录下创建一个子目录test,在这个新创建的子目录下创建一个文件,并把这个文件设置成只读。
18.位置指针的作用是什么?RandomAccessFile类提供了哪些方法实现对指针的控制?
19.编写一个程序,从键盘输入一串字符,统计这串字符中英文字母、数字、其他符号的字符数。
20.编写一个程序,从键盘输入一串字符,从屏幕输出并将其存入文件中。采集者退散
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块。
更多优质自考资料尽在百度贴吧自考乐园俱乐部
n(“发生了ArithmeticException异常”);
}
catch(AarryIndexOutOfBoundsException e)//不是匹配的异常,且不会再捕获
//异常,如果发生数组索引超出范围所产生的异常,将执行该catch块。
{
n(“}
catch(Exception e)
//前两个catch块均无法捕获try块中发生的异常时,才会执行该catch块。
{
n(“发生了异常”);
}
finally
{ n(“执行d Finally”);}
}
}
7.答:无论是出于何种原因,只要执行离开try/catch代码块,就会执行finally代码块。即无论try是否正常结束,都会执行 finally定义的最后的代码。如果try代码块中的任何代码或它的任何catch语句从方法返回,也会执行finally代码块。但本题中在try代 码块中执发生了AarryIndexOutOfBoundsException异常”);
行了“(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)
{
n(“异常是:”+sage());
}
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)
{
n(“catch1”);
throw new Excp1();
}
catch(Excp1 e)
{
n(“catch2”);
throw new Exception();
}
catch(Exception e)
{
n(“catch3”);
}
finally
{
n(“finally”);
}
}
}
说明:自定义异常类,关键是选择继承的超类——必须是Exception或者其子类。用异常代表错误,而不要再使用方法返回值。
13.答:所谓流是指同一台计算机或网络中不同计算机之间有序运动着的数据序列,Java把这些不同来源和目标的数据都统一抽象为数据流。数据流可分为输入流和输出流,输
更多优质自考资料尽在百度贴吧自考乐园俱乐部
流式输入输出的特点是数据的获取和发送沿数据序列的顺序进行,即每一个数据都必须等待排在它前面的数据,等前面的数据读入或送出之后才能被读写。所以流和队列一样,只能以“先进先出”的方式对其中的数据进行读写,而不能随意选择读写的位置。
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 .*;
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=())!=-1)
(ch);
();
();
}
catch(FileNotFoundException e){
n(“源文件:未找到!”);
}catch(ArrayIndexOutOfBoundsException e){
n(“缺少运行参数!”);
(-1);
}
catch(IOException e){
n(ng());
}
更多优质自考资料尽在百度贴吧自考乐园俱乐部
}
17.答:
import .*;
public class NewFile{
public static void main(String args[]){
File f=new File(“test”);
if(()&&ctory())
n(“目录:”+ng()+“已经存在!”);
else{
if(()){
n(“目录”+olutePath()+“创建结束!”);
File f2=new File(f,“”);
try{
NewFile();
dOnly();
}catch(IOException e){
n(ng());
}
n(“文件:”+oluteFile()+“创建结束!”);
}
else
n(“目录”+oluteFile()+“创建失败!”);
}
}
}
18.答:要实现对文件的随机读取,也就是在文件的任何位置执行读写数据的操作,需要一个指针来指定读写的位置。在创建
RandomAccessFile类对象的同时,系统自动创建了一个指向这个文件开头的指针,当执行读写操作后,指针自动指向被读写数据之后的第一个字节 处。指针初始值是0,每读/写一个字节,指针自动增加1。
RandomAccessFile类提供了一些控制指针移动的方法。
public long getFilePointer();获取当前指针指向文件的位置。考试大论坛
pulbic void seek(long pos);将指针移动到参数pos指定的位置。
public int skipBytes(int n);指针从当前位置向后移动n个字节位置,并返回指针实际移动的字节数。
19.答:
import .*;
public class Count{
public static void main(String[] args)
{
int x=0,y=0,z=0;
int ch;
try{
while((ch=())!='r'){
更多优质自考资料尽在百度贴吧自考乐园俱乐部
import .*;public class InFile{ public static void
main(String[] args){ int ch;try{ FileOutputStream out=new
FileOutputStream(“”);while((ch=())!='r'){ (ch);(ch);}
();('n');}catch(IOException
e){ n(ng());} n(“输出至文件完毕!”);} } 21.答:
import .*;public class Sort{ public static void
main(String args[]){ int a[]=new int[10];byte b[]=new byte[10];int
t;String str;
更多优质自考资料尽在百度贴吧自考乐园俱乐部
try{
for(int i=0;i<10;i++)
{(“No.”+(i+1)+“: ”);
(b);
str=new String(b);
str=();
a[i]=nt(str);
}
}catch(IOException e){
n(ng());
}
catch(NumberFormatException e){
n(ng());
}
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++)
n(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必须继承自
C、Applet能访问本地文件
D、Applet程序不需要编译
类的直接父类是()
更多优质自考资料尽在百度贴吧自考乐园俱乐部
ent类
ner类
类
类
5.判断:一个Applet编译后的类名是,运行此小程序的命令是Java Test。
6.编写同时具有Applet与Application的特征的程序。具体方法是:作为Application要定义main()方法,并且把 main()方法所在的类定义一个类。为使该程序成为一个Applet,main()方法所在的这个类必须继承Applet类或JApplet类。/club/5346389)欢迎❤加入...欢迎❤交流...止不住的惊喜等着你.........Layout
yout
10.编写程序,创建下面的GUI(不必为各组件提供功能)。考试大收集整理
参考答案
1: false
2:true
3:true
5:版面管理器
版权声明:本文标题:C语言程序设计第1-7章选择、填空习题及答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702699238h427280.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论