c语言课后答案.docx
《c语言课后答案.docx》由会员分享,可在线阅读,更多相关《c语言课后答案.docx(42页珍藏版)》请在冰豆网上搜索。
c语言课后答案
《C程序设计》课外作业及参考答案
说明:
(1)章节顺序按照PowerPoint电子教案;
(2)教材上的作业注明了章节和题号;
(3)所用教材是《C程序设计(第二版)》 谭浩强 清华大学出版社;
第一章C语言概述
1.1简答题:
写出C语言的主要特点(教材习题1.1)。
1.2填空题:
1.C语言与操作系统并称“栾生兄弟”。
2.C语言俗称为形式。
3.C源程序文件经过处理后产生目标文件,目标文件经处理后生成可执行文件。
1.3单项选择题
1.以下说法中正确的是。
(A)C语言程序总是从第一个定义的函数开始执行
(B)在C语言程序中,要调用的函数必须在main函数中定义
(C)C语言程序总是main函数开始
(D)C语言程序中的main函数必须放在程序的开始部分
2.以下正确的C标识符是。
(A)_125(B)C#(C)C++(D)A$
1.4多项选择题
1.以下关于C语言的说法中,错误的是。
(A)俗称为“低级语言的高级形式”,因此功能简单
(B)不是结构化程序设计语言
(C)可能直接访问内存
(D)语法限制不严
2.以下标识符属于C语言关键字的有。
(A)integer(B)else(C)include(D)while
第二章C语言基本数据类型、变量、常量与表达式
2.1简答题
1.求下面算术表达式的值。
(教材习题3.9)
a)x+a%3*(int)(x+y)%2/4
设x=2.5,a=7,y=4.7
b)(float)(a+b)/2+(int)x%(int)y
设a=2,b=3,x=3.5,y=2.5
2.写出下面程序的运行结果。
(教材习题3.10)
main()
{inti,j,m,n;
i=8;j=10;m=++i;n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
3.写出下面表达式运算后a的值,设原来a=12。
设a和n已定义为整型变量。
(教材习题3.12)
a)a+=ab)a-=2c)a*=2+3
b)d)a/=a+ae)a%=(n%=2),n的值等于5f)a+=a-=a*=a
4.C语言中如何表示“真”和“假”?
系统如何判断一个量的“真”和“假”?
2.2填空题
1.写出下面各逻辑表达式的值。
设a=3,b=4,c=5。
(教材习题5.3)
(1)a+b>c&&b==c
(2)a||b+c&&b-c
(3)!
(a>b)&&!
c||1(4)!
(x=a)&&(y=b)&&0
(5)!
(a+b)+c-1&&b+c/2
2.
(1)5<<2
(2)0!
=1(3)!
!
3
(4)105%10(5)3/2*2(6)5^3
(7)1<2<0(8)1%2*2
3.已知inta=1,b=2,c;执行下列语句后,写出各变量的值。
c=++b―a++;变量
(1)a=,
(2)b=,(3)c=
4.数学式
对应的C语言表达式是。
5.当算术表达式中出现了float型变量时,系统自动将该型变量值转换为
(1) 类型,然后参与运算,如果出现char型变量时,直接转换为
(2)型参与运算。
2.3单项选择题
1.C语言中,常量0.5F在内存需占用字节存储。
(A)1(B)2(C)4(D)8
2.下列符号中,合法的C常量是。
(A)097(B)0.5e+1.0(C)0x5FH(D)'\\'
3.C语言没有专门的逻辑变量,它表示逻辑真的方法是。
(A)TRUE(B)0(C)1 (D)一切非零数值
4.以下C常量错误的是。
(A)'\xX0d'(B)-1U(C)1e-2F(D)
5.以下不正确的字符串常量是。
(A)"12'12"(B)'abc'(C)"\\0"(D)""
6.逻辑运算符两侧运算对象的数据类型。
(A)只能是0或非0正数(B)可以是任何类型的数据。
(C)只能是整型或字符型数据。
(D)只能是0或1
7.下列符号中,合法的C常量是。
(A)‘\t’(B)079(C)3.5e2.1(D)0xch
2.4多项选择题
1.以下变量在内存中占2个字节的是。
(只考虑TC2.0)
(A)inta;(B)intb[2];(C)charc[2];(D)floatd[2];
2.C语言中,与常量'A'等效的常量表达式有
。
(A)65(B)'\x41'(C)'a'-32(D)0101
第三章简单C程序设计
3.1程序设计题
1.输入一个华氏温度,要求输出摄氏温度。
公式为
要求输出要有文字说明,取2位小数。
(教材习题4.9)
2.输入年增长率p,编程计算并输出经过多少年后,生产总值会翻一翻。
3.2单项选择题
1.已知实型变量a存贮的是一个0~1之间的实数,将a以两位小数百分比形式输出(如:
a=0.,则输出为34.75%)正确的打印语句是。
(A)printf(“%.2f%%”,a*100);(B)printf(“%.2f%”,a);
(C)printf(“%.2f%%”,a/100);(D)printf(“%.2f%%”,100*(a+0.5));
2.能正确输出字符A的语句是。
(A)putchar(‘\41’);(B)puthcar(“A”);(C)printf(“%d”,‘A’);(D)putchar(‘\101’);
第四章C语言的控制语句及基本程序设计技术(统计/计数、递推/迭代、数论问题、字符图形、搜索/穷举求解)
4.1程序分析题
1.若a=3,b=2,c=1,则执行下列if语句后,依次写出a、b、c的值。
if(a>b)a=b;
if(b>c)b=c;
elsec=b;c=a;
2.执行下列程序后,x和y的值分别是多少。
intx,y;
for(y=1,x=1;y<=50;y++)
{if(x>=10)break;
if(x%2==1)
{x+=5;continue;}
x-=3;
}
3.写出以下程序的输出结果。
#include
main()
{intc='A',a=0,k=1;
while((k+=2)<8)
{putchar(++c);a+=k;
}
printf("%d\n",a);
return1;
}
4.下面程序的循环体共执行了多少次,输出的结果是什么?
#include"stdio.h"
voidmain()
{intm,n;
m=10;n=-1;
do{m++;n+=5;
if(!
(n%3))printf("%4d%4d\n",m,n);
}while(m>n);
}
5.若输入为ABCD↵,下面程序的输出是什么?
#include
voidmain()
{charch,n;
for(n=0;(ch=getchar())!
=10;n++)putchar(ch+32);
printf("%d\n",n);
}
4.2单项选择题
1.以下程序的输出结果是 。
x=0;doprintf(“%d”,x++);while(x<1);
(A)0 (B)01 (C)012 (D)无任何显示
2.以下能正确计算10!
的程序段是。
(A)do{i=1;s=1;s=s*i;i++;}while(i<=10);
(B)do{i=1;s=0;s=s*i;i++;}while(i<=10);
(C)i=1;s=1;do{s=s*i;i++;}while(i<=10);
(D)i=1;s=0;do{s=s*i;i++;}while(i<=10);
3.若变量已有正确定义,程序a=0;for(i=1;i<=n;i++)for(j=0;j<=i;j++)a++;执行后,变量a的值是。
(A)n(n+1)/2(B)(n+1)(n+2)/2
(C)n(n-1)/2(D)n(n+3)/2
4.与语句if(a!
=0)…等效的语句是。
(A)if(!
a)… (B)if(a)… (C)if(a==0)…(D)if(a>=0||a<=0)…
5.break语句的作用是()。
(A)中止函数的执行(B)立即中止循环
(C)中止本次循环,直接开始下一次循环(D)从一个循环体直接跳转至另一个循环体内
4.3程序填空题
#include"stdio.h"
#include"
(1)"
main()
{intm,i,k;
for(m=2;m<=1000;m++)
{k=(int)sqrt(m)+1;
for(i=2;i<=k;i++)if(
(2))break;
if((3))printf("%5d",m);
}
4.4程序设计题
1.企业放发的奖金根据利润提成。
设企业的利润为I,提成标准如下:
I<10万元时,提成10%;
10万元<I≤20万元时,低于10万元部分仍按10%提成,高于10万元部分按7.5%提成;
20万元<I≤40万元时,低于20万元部分按前面方法提成,高于20万元部分按5%提成;
40万元<I≤60万元时,低于40万元部分按前面方法提成,高于40万元部分按3%提成;
60万元<I≤100万元时,低于60万部分按前面方法提成,高于60万部分按1.5%提成;
100万元<I时,低于100万元部分按前面方法提成,高于100万元部分按1%提成。
编程输入利润I,计算输出提成金额。
(教材习题5.8)
2.编写一个决定学生成绩的程序。
这个程序将读入一个学生的三次考试成绩(0-100),然后计算其平均值,并根据这个平均值决定学生的总成绩(用字母A,B,C,D,E来表示)。
字母成绩按如下规定来确定:
A平均成绩在90或90分以上
B平均成绩在80到89分
C平均成绩在70到79分
D平均成绩在60到69分
E平均成绩在60分以下。
(教材习题5.6)
输入若干整数,直到输入0时停止,统计并输出奇数的数目和偶数的数目。
3.输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
(教材习题6.2)
4.计算s=
。
要求n值由用户输入。
(教材习题6.4)
5.打印水仙花数(教材习题6.6)。
6.输入x值,计算
,要求最后一项绝对值小于10-6时停止计算。
7.用公式
计算π的近似值,计算时取1000个因子。
8.韩信点兵:
有兵一队,五伍剩一,六伍剩五,七伍剩四,十一伍剩十,问兵几何?
9.有30个男女小孩同在一家饭馆进餐,共花了50元,其中每男宾3元,女宾2元,小孩1元。
问男、女、小孩各多少?
10.将一张面值100元的人民币兑换为5元、2元、1元和5角的零钞,要求零钞总数不超过40张且每种至少1张,求所有兑换方案。
11.有一个算式缺少了四个数字(如下所示),请编程找出这四个数字。
10566+(475-349)*16=
12.打印如下图形。
要求输入最大的字母来控制打印行数。
比如,下图应该输入字母D。
A
B-B
C―――C
D―――――D
C―――C
B-B
A
13.如果一个自然数的所有因子之和等于该数本身,称这个数为“完数”。
编程输出1000以内的全部完数。
要求输出格式如下:
(教材习题6.7)
28=1+2+4+7+14
第五章数组
5.1单项选择题
1.C语言的数组下标默认从开始。
(A)1(B)0(C)任意整数(D)有时为1,有时为0
2.若有定义inta[5],k=4;以下表达式没有安全隐患的是。
(A)a[k-1](B)a[-1](C)a[++k];(D)a[5]
5.2多项选择题
1.以下能对二维数组a正确定义并进行初始化的语句有。
(A)inta[2][3]={{1,1},{2}};(B)inta[3][]={{1},{2},{3}};
(C)inta[][]={1,2,3,4,5,6};(D)inta[][3]={{1,1,1},{2,2},{3}};
5.3程序设计题
1.求一个3⨯3矩阵对角线元素之和。
(教材习题7.3)
2.一个数组中的值按逆序重新存放。
(教材习题7.5)
3.用二维数组实现如下格式杨辉三角形的打印。
(教材习题7.6)
4.有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。
(教材习题10.5)
第六章指针初步
6.1程序分析题
1.写出下面程序的运行结果。
#include"stdio.h"
inta[4]={1,2,3,4};
voidmain()
{int*p=a,m,n;
for(m=3;m>=0;m--)
for(n=0;n<=m;n++)printf("%d",*(p+n));
}
2.#include“stdio.h”
#defineN8
voidmain()
{inta[N],k,*p;
for(k=0;kp=a;
for(k=0;kif(a[k]>0)*p++=a[k];
while(p>a)printf(“%d”,――*p);
}
若该程序的输入为0-96-14543-521,则程序的输出是什么?
6.2单项选择题
1.有定义staticinta[]={0,1,2,3,4},*p=a+2;表达式*++p的值为。
(A)1(B)2(C)3(D)4
2.已有定义intk=2;int*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。
(A)k=*ptr1+*ptr2;(B)ptr2=k;
(C)ptr1=ptr2;(D)k=*ptr1*(*ptr2);
3.若有定义:
inta[10],*p=a;,则p+5表示(8)。
(A)元素a[5]的地址(B)元素a[5]的值(C)元素a[6]的地址(D)元素a[6]的值
第七章函数(含习题课)
7.1程序分析题
1.下面程序的运行结果是。
voidfl(void)
{intx=1;
staticy=2;
x++;
y++;
printf("%d,%d\n",x,y);
}
main()
{intk;
for(k=1;k<=3;k++)fl();
}
2.下列程序的运行结果是。
intd=1;
voidfl(intp)
{intd=2;
d+=p++;
printf("%d",d);
}
main()
{inta=3;
fl(a);
d+=a++;
printf("%d\n",d);
}
3.下列程序的运行结果是。
#include
inta=10,c=5;
main()
{inta=1,b=2,d=4,e=5;
printf("%d\n",func((a+b,b*c,c%d),(d,e/b)));
}
intfunc(intx,inty)
{
returnx+y;
}
4.下面程序的运行结果是什么?
#include
staticintx=150;
voidshow(intx,inty)
{printf("x=%d,y=%d\n",x,y);
x=300;y=400;
}
voidmain()
{intx=100,y=200;
show(y,x);
printf("x=%d,y=%d\n",x,y);
}
5.下面程序的运行结果是。
voidfl(void)
{intx=1;
staticy=2;
x++;
y++;
printf("%d,%d\n",x,y);
}
voidmain()
{intk;
for(k=1;k<=3;k++)fl();
}
7.2程序填空题
1.以下函数f的功能是实现N⨯N阶方阵转置,请填空。
#defineN8
voidswap()
{inttemp=*p;
*p=*q;*q=temp;
}
voidf(int)
{inti,j;
for(i=0;ifor(j=0;j<;j++)swap(&a[i][j],);
}
2.下程序的功能是求M行N列矩阵的最大值元素,请填空。
#include"stdio.h"
#defineM5
#defineN4
float*getmax()
{inti,j;float*pmax;
pmax=;
for(i=0;i*pmax)pmax=;
return();
}
floata[M][N];
voidmain()
{inti,j;
for(i=0;iprintf("max=%.2f\n",*getmax());
}
3.bubsort函数的功能是实现对N元整型数组冒泡排序(由大到小),请填空使之完善。
#defineN10
inta[N];
voidbubsort()
{inti,j,t;
for(i=1;ifor(j=0;j<;j++)
if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=;}
}
7.3填空题
1.C语言中变量有4种存储类型,即extern、static、register和。
2.在结构化程序设计中,只需使用三种程序结构,分别是顺序结构、
(1) 结构和
(2) 结构。
7.4单项选择题
1.C语言中,形参与实参之间的数据传递方式是。
(A)只能按值传递(B)只能按地址传递
(C)由使用者指定传递方式(D)既可以按值传递也可以按地址传递
2.若有函数声明为:
voidfunc(double*p);则以下函数调用正确的是。
(A)doublex;f(x);(B)doublex;f(*x);(C)doublex;f(&x);(D)intx;f(&x);
3.以下语句用于函数返回的是。
(A)break;(B)continue;(C)return;(D)quit;
4.以下关于C语言static型变量的说法正确的是。
(A)都是局部变量(B)都是全局变量(C)存储在动态数据区(D)初值自动为0
5.定义C函数时,不给出返回值类型,则默认的返回值类型是。
(A)float(B)void(C)int(D)NULL指针
7.5多项选择题
1.若有函数原型voidf(inta[]);和数组定义intb[10];则以下函数调用正确的是。
(A)f(b[0]);(B)f(&b[0]);(C)f(b);(D)f(b+2);
2.若定义交换实型变量值的函数swap如下,以下函数调用正确的是。
voidswap(float*p,float*q){floatt=*p;*p=*q;*q=t;}
main(){floata[4],x,y;…}
(A)swap(x,y);(B)swap(&x,&y);
(C)swap(a+1,a+2);(D)swap(*a,*(a+1));
7.6程序设计题
1.写两个函数,分别求两个整数的最大公约数与最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。
(教材习题8.1)
2.写一个判素数的函数,在主函数输入一个整数,输出是否是素数的信息。
(教材习题8.3)
3.写一个函数,实现N个整数的由小到大排序,要求用改进冒泡排序方法。
4.实现长整数按数位分解打印,如:
输入34289,输出34289。
(要求用递归函数实现)
字符串处理专题
7_1.程序分析题
1.#include”stdio.h”
voidmain()
{chara[61],*s;intn;
gets(a);
for(s=a;*s;s++)if(*s>=’A’&&*s<=’Z’)*s+=32;
puts(a);
}
若程序的输入为SWJTU,则输出结果为。
2.若程序输入为ABCD,下面程序的输出结果是。
#include"stdio.h"
#include"string.h"
voidmain()
{chars[81],*p,*q,t;
gets(s);
p=s;q=s+strlen(s)-1;
while(pputs(s);
}
3.下面程序的输出是。
#include"stdio.h"
voidmain()
{chara[40]="administrators",*p;
for(p=a;*p!
='i';p++)putchar(*p-32);
}
7_2.单项选择题
1.以下语句,没有语法错误的是。
(A)a*=3+2++;(B)inta[5];++a;
(C)chars[10];strcpy(s,""); (D)ifa>0a=1;elsea=0;
2.C语言存贮字符串时,用特殊字符()表示字符串结束。
(A)’\x0d’(B)’0’(C)’\n’(D)’\0’
3.以下选项中,不能正确赋值的是。
(A)chars[10];s="Hello";(B)chars[]={'H','e','l','l','o','\0'};
(C)chars[10]="Hello";(D)char*s="Hello\n";