习题一
一、名词解释
(1)程序P1 (2)程序设计P1 (3)机器语言P1(4)高级语言P2
(5)汇编程序P3 (6)编译程序P4 (7)算法P5(8)结构化程序设计方法P10
二、简答题
1. 设计程序时应遵循哪些基本原则?P4
答:正确性、可靠性、简明性、有效性、可维护性、可移植性。
2. 算法具有哪些特点?
答:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。
3. 算法的表示形式有哪几种?
答:自然语言、伪代码、传统流程图、N-S流程图、计算机语言。
4. 结构化程序设计方法的三种基本结构是什么?
答:顺序结构、选择结构和循环结构。
5. 传统流程图与N-S流程图最大的区别是什么?
答:N-S流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。
三、用传统流程图或N-S流程图表示求解以下问题的算法。
1. 从键盘输入10个整数,求出其中的最小数并输出。
2. 求1 2 3 … 100的值。
3. 求10~50的所有素数之和。
4. 求下列分段函数的值。
四、请参照本章例题,编写一个简单的C程序,输出以下三行信息。
**************************
Yangtze University
**************************
#include <stdio.h>
void main()
{
printf("**************************\n")
printf("Yangtze University\n")
printf("**************************\n")
}
习题二
一、选择题
1~10: B C D C D D B C A A
11~20: D A C D B D B A C D
二、填空题
1.字母 L 或字母 l
2. %c(或字符) 、%d(或整数)
3. 在程序运行过程中,其值可以在一定的范围内变化的量
4. '\0'
5. 小数形式、 指数形式
6. 关键字 、 预定义标识符 、 用户标识符
7. 字母 、 数字 、 下划线 、 数字
8. 18
9. 2 、 1 、 30
10. 双精度实数或double
11. 赋值 、 逗号 、 20 、 20 、 20 、 4
12. 4 、 4
习题三
一、选择题
1~10: B C C B C C C D C C
注:第4题答案D为: 10 22↙
33↙
二、填空题
1. printf 、 scanf
2. h
3. "]"
4. '\0'
5. e 、 E
6. 6
7. s 、 c
8. *
9. - 、
10. i
三、编程题
1. 编写程序,从键盘输入一个以秒为单位的时间数,将其换算成几小时几分几秒,然后进
行输出。例如输入的时间为4258秒,则输出结果为:1小时10分58秒。
#include <stdio.h>
void main()
{
int x,h,m,s
scanf("%d",&x)
h=x/3600m=x600/60s=x`
printf("%ds=%d:%d:%d!\n",x,h,m,s)
}
2. 编写程序,读入三个整数给变量a、b、c,然后交换它们中的数,把a中原来的值给b,
把b中原来的值给c,把c中原来的值给a。
#include <stdio.h>
void main()
{
int a,b,c,t
printf("input a b c:")
scanf("%d%d%d",&a,&b,&c)
printf("a=%d,b=%d,c=%d\n",a,b,c)
t=aa=cc=bb=t
printf("a=%d,b=%d,c=%d\n",a,b,c)
}
习题四
一、填空题
1. 1 、 0
2. ! % + <= != && || =
3. x==0
4. 0 、 2
5. 20 、 0 、 0
二、选择题
1~7:D D C A D D C
三、程序阅读题
1. 595959
2. 0.500000
3. 1
4. 2
5. 6
6. a=2,b=1
7. pass
warn
8.1
四、编程题
1. 设a为整型变量且其值大于零,请将以下if语句改写成switch语句。
if(a<60) m=1
else if(a<70) m=2
else if(a<80) m=3
else if(a<90) m=4
else m=5
方法1
#include <stdio.h>
void main()
{
int a,m
scanf("%d",&a)
switch(a/10)
{
case 0:case 1:case 2:case 3:
case 4:case 5:m=1break
case 6:m=2break
case 7:m=3break
case 8:m=4break
default:m=5break
}
printf("m=%d\n",m)
}
方法2
#include <stdio.h>
void main()
{
int a,m
scanf("%d",&a)
m=0
switch(a/10)
{
default:m
case 8:m
case 7:m
case 6:m
case 5:case 4:case 3:case 2:
case 1:case 0:m
}
printf("m=%d\n",m)
}
2. 编写程序,从键盘输入一个整数,打印出它是奇数还是偶数。
#include <stdio.h>
void main()
{
int a
scanf("%d",&a)
if(a%2==1)
printf("%d is a odd number!\n",a)
else
printf("%d is a even number!\n",a)
}
3. 编写程序,从键盘输入一个字符,判别它是否是小写字母,如果是,将它转换为大写字母;如果不是,不转换。然后输出最后得到的字符。
#include <stdio.h>
void main()
{
char ch
scanf("%c",&ch)
if(ch>='a' &&ch<='z')
ch=ch-32
printf("%c\n",ch)
}
4. 编写程序,从键盘输入一个不多于4位的正整数,打印出它是几位数。
#include <stdio.h>
void main()
{
int x,n
scanf("%d",&x)
if(x>1000) n=4
else if(x>100) n=3
else if(x>10) n=2
else n=1
printf("%d\n",n)
}
5. 当一个人的月收入在3500元以下时免税;月收入在3500元到5000元之间时,超过3500的部分纳税3%;月收入在5000元以上时,3500至5000之间的部分纳税3%,超过5000的部分纳税10%。编写程序从键盘输入月收入income,计算并输出应交税款tax。
#include <stdio.h>
void main()
{
int income
float tax
scanf("%d",&income)
if(income<=3500) tax=0
else if(income<=5000) tax=0.03*(income-3500)
else tax=0.03*(5000-3500) 0.10*(income-5000)
printf("tax=%f\n",tax)
}
6. 回文是指正读和反读都一样的数或字符串。例如:12321、55455、35553等都是回文。请编写一个程序,从键盘上读取一个包含五位数字的长整数,并判断它是否是回文。(提示:用除法运算和求余运算把一个数的个位、十位、百位、千位等分别分离出来。)
#include <stdio.h>
void main()
{
long x
int a,b,d,e
scanf("%ld",&x)
a=x/10000
b=x000/1000
d=x0/10
e=x
if(a==e &&b==d)
printf("%ld is huiwen!\n",x)
else
printf("%ld is not huiwen!\n",x)
}
习题五
一、阅读题
1.8
2.4321
3.X
4.-1
5.23
6.52
7.5
8.3
二、填空题
1. 18
2. 2
3. b=i 1
4. 17
5. i<=9、 j%3!=0
6. d=1.0 、 k=k 1 、 k<=10
三、选择题
1~8:A D D A B D D A
四、编程题
1. 编写程序,打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方之和等于该数本身。例如,407是一个“水仙花数”,因为407=43 03 73。(注:若将题意改为打印出最大的或最小的“水仙花数”,则应将循环语句作如何调整?)。
#include <stdio.h>
void main()
{
int a,b,c,k
for(k=100k<=999k )
//求最大的“水仙花数”改用:for(k=999k>=100k--)
{
a=k/100b=k/10c=k
if(k==a*a*a b*b*b c*c*c)
{
printf("]",k)
//求最大或最小”水仙花数”时增加一个语句:break
}
}
printf("\n")
}
2. 编写程序,输出1980~2880年所有闰年的年号。每输出5个年号换一行。
#include <stdio.h>
void main()
{
int k,flag,n=0
for(k=1980k<=2880k )
{
flag=(k%4==0)&&(k0!=0)||(k@0==0)
if(flag)
{
printf("]",k)
n
if(n==0)
printf("\n")
}
}
printf("\n")
}
3. 编写程序,求1-3 5-7 …-99 101的值。
#include <stdio.h>
void main()
{
int n,t=1,s=1
for(n=3n<=101n =2)
{ t=-ts=s t*n}
printf("s=%d\n",s)
}
4. 编写程序,计算并输出下列级数的前n项之和Sn。n的值从键盘输入。
#include <stdio.h>
void main()
{
int fz,fm,n,i
float s,t
fz=2fm=1s=0
scanf("%d",&n)
for(i=1i<=ni )
{
t=(1.0*fz)/fm
s=s t
fz=fz fm
fm=fz-fm
}
printf("s=%f\n",s)
}
5.编写程序,求e的值e=1 1/1! 1/2! 1/3! 1/4! … 1/n!
#include <stdio.h>
void main()
{
int n,i
float t,fm=1,e=1
scanf("%d",&n)
for(i=1i<=ni )
{ fm=fm*it=1.0/fm e=e t }
printf("n=%d,e=%f\n",n,e)
}
6. 已知某球从80米高度自由落下,落地后反复d起,每次d起的高度都是上次高度的一半。求此球8次落地所经过的总路程。
#include <stdio.h>
void main()
{
int n
float s=80,h=s/2
for(n=2n<=8n )
{
s=s 2*h
h=h/2
}
printf("s=%f\n",s)
}
7. 用牛顿迭代法求高次方程f(x)=2x3-4x2 5x-18=0的根(约为2.466)。
注:牛顿迭代公式为:x2=x1-f(x1)/f’(x1),其中f’(x1)为导函数在点x1的值。
#include <stdio.h>
#include <math.h>
void main()
{
float x,f,f1
x=8 // x的初值可为任意值
do
{ f=2*x*x*x-4*x*x 5*x-18f1=6*x*x-8*x 5x=x-f/f1
}while(fabs(f)>0.00001)
printf("x=%f,f=%f\n",x,f)
}
8. 有这样一些真分数:其分子和分母都是两位正整数,且分子的个位数与分母的十位数相同,如果把该分数的分子的个位数与分母的十位数同时去掉,所得到的新的分数正好与原分数的值相等,如26/65=2/5。试编程求出所有满足上述条件的真分数。
#include <stdio.h>
void main()
{
int a,b,c // 设这个分数为ab/bc
for(a=1a<=9a )
for(b=1b<=9b )
for(c=1c<=9c )
if((a<c)&&(1.0*a/c==(a*10.0 b)/(b*10.0 c)))
printf("%d/%d=%d%d/%d%d=%f\n",a,c,a,b,b,c,1.0*a/c)
}
9. 编写程序,求数列:1,(1 1/2),(1 1/2 1/3),(1 1/2 1/3 1/4),(1 1/2 1/3 1/4 1/5),…的前10项之和。
#include <stdio.h>
void main()
{
float s,t
int i
s=0,t=0
for(i=1i<=10i )
{ t=t 1.0/is=s t}
printf("s=%f\n",s)
}
10. 编写程序,求3到100之间的所有素数之和。
#include <stdio.h>
void main()
{
int s,i,k,flag
s=0
for(i=3i<=100i )
{
flag=1
for(k=2k<ik )
if(i%k==0)
{ flag=0break}
if(flag)
{ s=s iprintf("M",i)}
}
printf("\nsum=%d\n",s)
}
11. 编写程序,求Fibonacci数列中大于800的最小的一个数(结果为987)。
#include <stdio.h>
void main()
{
int f1=1,f2=1,f3
while(f3<=800)
{
f3=f1 f2
f1=f2
f2=f3
}
printf("Fibonacci数列中大于800的最小数是]\n",f3)
}
习题六
一、选择题
1~10:D D C B A B C D C D
11~20:A B B C C D C A B B
21~30:B B D D D D C D C A
注:第16题答案C为:字符串"SHORT"与"SHORT "相等
第19题题目为:已知:char str1[10],str2[10]={"books"}则在程序中能够将字符串
"books"赋给数组str1的正确语句是 。
第21题题目为:设有:char str1[20]="abcde",str2[20]="xyz"则执行语句:
printf("%d",strlen(strcpy(str1,str2))的结果是 。
第28题答案D为: aaaa
bbbb
cccc dddd
二、填空题
1.9 、 0
2.先行后列
3.
c语言程序设计第三版指导答案
附录F 课后题参考答案
习 题 1
1.1 填空题
1.函数
2.主函数main();主函数main() 3.主函数main() 4.函数首部;函数体 5.{;}
6.顺序结构;选择结构;循环结构 7..c;.obj;.exe
1.2 思考题
1.答:结构化程序设计是指,为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。顺序结构,选择结构,循环结构
2.答:算法是对具体问题求解步骤的一种描述。计算机算法的表达工具通常采用以下几种方法:①用自然语言表示算法;②用流程图表示算法;③用伪代码表示算法;④用程序设计语言表示算法。
3.略 4.略 5.略 1.3 编程题 1.答:
#include "stdio.h" main()
{ float a=10, b=20, h=5, s s=(a+b)*h/2
printf("s=%f " , s ) }
2.答:
#include "stdio.h"
main()
{ printf("******************************") printf("* hello world *") printf("******************************") }
习 题 2
2.1 单选题
DBDCA DCABB CA
2.2 填空题
1.2.000000
2.1;0.500000
3.9;2 4.6 5.100;d 6.(1)20
(2)0
(3)60 7.(1)10;6;4
(2)6;9;15
(3)3;60;83
8.55或 '7'
9.x=4;y=6;z=3;m=463
2.3 改错题(略)
习 题 3
3.1 单选题
BDABC ADCAC BBA
3.2 填空题
1.3 2.261 3.10
4.2, 1;互换a,b的值 5.6.6 6.003 7.7
8.5.0,4,c=3<Enter>
9.i=10,j=20<Enter>
10. (1)65 (2)65,A (3)3.14,123.46
(4)3.141600e+000,1.234560e+002 (5)8765.432100 (6)8.765432e+003
11.a=2b=5x=8.8y=76.34c1=65c2=97 12.%d/%d;%d/%d=%.2f\n
3.3 改错题(略) 3.4 编程题
1.答:
#include "stdio.h" main() {
int x,y
scanf("%d%d",&x,&y) printf("\t\tx\ty\n")
printf("十进制数\t%d\t%d\n",x,y) printf("八进制数\t%o\t%o\n",x,y) printf("十六进制数\t%X\t%x\n",x,y) }
2.答:
#include "stdio.h" main() {
char ch
printf("请输入一个大写英文字母") scanf("%c",&ch)
printf("大写英文字母是%c\n",ch) printf("它的前导字符是%c\n",ch-1) printf("它的后续字符是%c\n",ch+1) }
3.答:
#include "stdio.h" main() {
int x,a,b,c,y
printf("请输入一个三位整数\n") scanf("%d",&x) a=x/100
b=(x-a*100)/10 c=x%10
y=c*100+b*10+a
printf("反向输出该整数:%d\n",y) } }
4.答:
#include "stdio.h" main()
{ int hour
double salary, salaryday
scanf("%d,%lf", &hour, &salaryday )
salary=hour*salaryday- hour*salaryday*0.1
printf("%8.2lf\n", salary) }
5.答:
#include "stdio.h" main() {
int a,b,c,t
printf("请输入三个整数\n") scanf("%d%d%d",&a,&b,&c)
printf("交换前a=%d,b=%d,c=%d\n",a,b,c) t=aa=cc=bb=t
printf("交换后a=%d,b=%d,c=%d\n",a,b,c) }
习 题 4
4.1 单选题
BADDD ACBBB BA
4.2 填空题
1.1
2.(1)a>0 || b>0
(2)x>0 && x<=10 (3)a==1.5 && b==1.5 && c==1.5
(4)p<a || p<b || p<c
3.(1)0 (2)1 (3)1 (4)0 (5)1
4.c=1 5.-4 6.1 7.5, 0, 3 8.5 9.123
10.( cvb= ='y'||cvb= ='Y')&&(work>=3||college=='y'|| college=='Y')&&age<=35
4.3 改错题(略) 4.4 编程题
1.答
#include "stdio.h"
#include "math.h" main() {
double a,b,c,p,area
scanf("%lf%lf%lf",&a,&b,&c)
printf("三角形的三边为:%.llf,%.1lf,%.1lf\n",a,b,c) if (a+b>c&&a+c>b&&b+c>a) {p=(a+b+c)/2
area=sqrt(p*(p-a)*(p-b)*(p-c))
printf("三角形的面积为%.2lf\n",area) } else
printf("不能构成三角形\n") }
2.答:
#include "stdio.h" main()
{ int x,y
scanf("%d,%d",&x,&y) if(x*x+y*y>1000)
printf("%d\n",(x*x+y*y)/100) else
printf("%d\n",x+y) }
3.答:
#include "stdio.h" #include "math.h" main()
{ double x,y
scanf("%lf",&x) if(x<-2) y=x*x-sin(x) else if (x<=2) y=pow(2,x)+x else y=sqrt(x*x+x+1)
printf("x=%.2lf y=%.2lf\n",x,y) }
4.答:
#include "stdio.h" main( )
{ long ge,shi,qian,wan,x scanf("%ld",&x) wan=x/10000
qian=x%10000/1000 shi=x%100/10
ge=x%10
if (ge==wan&&shi==qian) /*个位等于万位并且十位等于千位*/ printf("this number is a huiwen\n") else
printf("this number is not a huiwen\n")
}
5.答:
#include "stdio.h" main()
{ float p,w,s,d,f
scanf("%f,%,%f",p,s,w) if (s>3000) d=0.15 else if( s>=2000) d=0.1 else if(s>=1000) d=0.08 else if(s>=500) d=0.05 else if(s>=250) d=0.02 else d=0 f=p*w*s*(1-d) printf("%f",f) }
6.答:
#include "stdio.h" main()
{ int year,money char x
printf("是否是本公司产品(y/n):") scanf("%c",&x)
if(x=='y'||x=='Y')
{printf("产品使用的年限:") scanf("%d",&year)
if(year<=1) money=0
else if(year<8) money=50 else money=100
printf("产品保修额是:%d\n",money)
}
else
{ money=200
printf("不是本公司产品,产品保修额是:%d\n",money) } }
7.答:
#include "stdio.h" main()
{ int money,num1,num2
printf("请输入取款额(≤2000):") scanf("%d",&money)
if(money>2000) printf("请输入取款额数≤2000!\n") else if(money%50==0) { num1=money/100 num2=(money-num1*100)/50 printf("需支付100元:%d张\n",num1) printf("需支付50元:%d张\n",num2) } else printf("输入钱数必须是50的倍数!\n") }
习 题 5
5.1 单选题
CDABA ABDDB DBCB
5.2 填空题
1.2 0 2.333
3.(1)i<10 或 i<=9 (2)j%3!=0
4.(1)flag*(float)k/(k+1) 或1.0*flag*k/(k+1) (2)flag=-flag 5.(1)max=x
(2)x!=-1 (3)scanf("%d", &x)
6.(1)x<=9或x<10
(2)y=9-x
5.3 改错题(略) 5.4 编程题
1.答:
(1)for循环,其他略
#include "stdio.h"
main()
{ int i,s=0
for(i=1i<=100i++) s+=i*i
printf("%d\n",s) }
(2)for循环,其他略
#include "stdio.h" main()
{ int i=1,p=1 double s=1 do {
s+=1.0/p p*=++i
}while(1.0/p>1e-6) printf("%lf",s) }
2.答:
#include "stdio.h" main()
{ int m,n,t,a,b
scanf("%d,%d" ,&m,&n) if (m<n)
{ t=m m=n n=t } a=m b=n t=m%n while(t)
{ m=n n=t t=m%n} printf("%d",n) }
3.答:
#include "stdio.h" main()
{ int x,y,s=1
scanf("%d,%d",&x,&y) for( y>0 y--)s*=x
printf("%d,%d,%d\n ",s%10,s/10%10,s/100%10) }
4.答:
#include "stdio.h" main()
{ int x,y,z
for( x=1 x<20 x++) for( y=1 y<33 y++) { z=100-x-y
if ((z%3)==0 &&(5*x+3*y+z/3)==100) printf("x=%d,y=%d,z=%d\n",x,y,z) } }
5.答: (a)
#include "stdio.h" main()
{ int j,k
for( j=1 j<=4 j++)
{ for(k=1k<=4-jk++)printf(" ") printf("****") printf("\n") } }
(b)
#include "stdio.h" main()
{ int j,k
for( j=1 j<=4 j++)
{for(k=1k<=4-jk++)printf(" ") for(k=1 k<=2*j-1 k++) printf("*") printf("\n") } }
6.答:
程序分析:利用for循环控制在100~999之间,对每个数分解出个位、十位、百位。
#include <stdio.h> main() { int i,j,k,n printf("water flower'number is:") for(n=100n<1000n++) { i=n/100/*分解出百位*/ j=n/10%10/*分解出十位*/ k=n%10/*分解出个位*/ if(n==i*i*i+j*j*j+k*k*k) { printf("%-5d",n) } } printf("\n") }
7.答:
#include <stdio.h> main() { int x for(x=1000x>=3x--) if(x%3==1&&x%5==2&&x%7==3) {
printf("该校的学生人数是:%d人\n",x) break } }
8.答:
#include <stdio.h> main() { int x=12,i=1 while(1)
{ if((x+20+i)==2*(x+i)) break i++ } printf("小明母亲在%d年后比小明的年龄大一倍\n",i) printf("那时小明年龄是:%d岁,小明母亲年龄是:%d岁\n",x+i,x+20+i) }
习 题 6
6.1 单选题
DBCCB BDC
C语言程序设计教程(第3版)
278
6.2 填空题
1.c 2.60 3.1000 10 4.16
6.3 编程题
1.答:
#include "stdio.h" #include "math.h"
#define F(a) a*a+ sqrt(3*a*a+2*a+1) main()
{ float x, f
scanf("%f", &x )
f=4.5/F(exp(x))+F(cos(x))+F(sqrt(x))/F(x*x) printf("%f\n", f) }
习 题 7
7.1 单选题
BCADA CCCDA BCBDB
7.2 填空题
1.(1)2 3 4 5 (2)10010 (3)QuickC
(4)10000 01000 00100 00010 00001 (5)Language
(6)Language Programming 2.(1)j+=2 (2)a[i]>a[j] 3.(1)i=1 (2)x[i-1]
7.3 改错题(略) 7.4 编程题
1.答:
#define N 10
#include "stdio.h" main()
{ int a[N]={1,2,3,4,5,6,7,8,9,10,osum=0, qsum=0,j for(j=0j<10j++)
if( j%2) qsum+=a[j]
else osum+=a[j]
printf("osum=%d,qsum=%d\n", osum,qsum) }
2.答:
#define N 10
#include "stdio.h" main()
{ int a[N]={10,20,30,40,50,60,70,80,90}, j, k, x scanf("%d",&x) for(j=0j<Nj++)
if (x<a[j]) break if(j==N) a[N-1]=x else
{for(k=N-1 k>j k--) a[k]=a[k-1] a[j]=x}
for(j=0j<Nj++)
printf("%d ",a[j]) }
3.答:
#define M 3
#include "stdio.h" main()
{ int a[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1 for( j=0j<Mj++)
for(k=0k<Mk++) if (a[j][k]!=a[k][j]) { flag=0 break} if (flag) printf("ok") else printf("NO") }
4.答:
#include "stdio.h" #include "string.h" main()
{ char c1[10],c2[10],j gets(c1) gets(c2)
for(j=0 (c1[j]==c2[j]) && c1[j] && c2[j] j++) if (c1[j]>c2[j]) printf("%d\n",1) if (c1[j]<c2[j]) printf("%d\n",-1) if (c1[j]==c2[j]) printf("%d\n",0) }
5.答:
#include "stdio.h" #include "string.h" #define M 3 #define N 80 main()
{ char a[M][N],j,k,n[5]={0} for(j=0j<Mj++) gets(a[j])
for(j=0j<Mj++)
for(k=0a[j][k]k++)
if( a[j][k]>='A' && a[j][k]<='Z') n[0]++
else if (a[j][k]>='a' && a[j][k]<='z') n[1]++ else if (a[j][k]>='0' && a[j][k]<='9') n[2]++ else if (a[j][k]==' ' ) n[3]++ else n[4]++
for(j=0j<5j++) printf("%4d", n[j]) }
习 题 8
8.1 单选题
DBDAC BACCC
8.2 填空题
1.(1)2, 1 (2)10#30# (3)FOUR, P (4)60
2.(1)49
(2)2
(3)2
(4)
(5)
8.3 改错题(略) 8.4 编程题
1.答:
#include "stdio.h"
main()
{ int n1,n2,n3,t int *p1,*p2,*p3
printf("please input 3 number:n1,n2,n3:") scanf("%d,%d,%d",&n1,&n2,&n3) p1=&n1
p2=&n2 p3=&n3
if(*p1>* p2) { t=*p1*p1=*p2*p2=t}
if(*p1>*p3) { t=*p1*p1=*p3*p3=t} if(*p2>*p3) { t=*p2*p2=*p3*p3=t}
printf("the sorted numbers are:%d,%d,%d\n",n1,n2,n3) }
2.答:
#include "stdio.h" #define N 3 main()
{ int a[N],*p=a for(p-a<N p++) scanf("%d",p) p=a+N-1
for(p-a>=0 p--) printf("%d ",*p) }
3.答:
#include "stdio.h" main()
{ int a[10]
int j,minl=0,maxl=0 for(j=0j<10j++)
scanf("%d", a+j) for(j=0j<10j++)
{ if(a[maxl]<*(a+j)) maxl=j if(a[minl]>*(a+j)) minl=j }
j=a[0] a[0]=a[minl]a[minl]=j j=a[9]a[9]=a[maxl]a[maxl]=j for(j=0j<10j++) printf("%d ", *(a+j)) }
4.答:
输入阵列如下: 1 2 3 4 5 6 7 8 9 10 11 12 输出阵列如下:
12 11 10 9 8 7 6 5 4 3 2 1
#define M 3
#define N 4
#include "stdio.h" main()
{ int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},k,j,*p=&a[0][0],t for(k=0,j=M*N-1k<jk++,j--)
{ t=*(p+k) *(p+k)=*(p+j) *(p+j)=t} for (k=0 k<M k++) { for(j=0 j<N j++)
printf("%4d ",a[k][j]) printf("\n")
} }
5.答:
#include "stdio.h" main() {
int len
char str[20],*p=str
printf("please input a string:\n") scanf("%s",str) len=0
while(*p!='\0') {
len++ p++ }
printf("the string has %d characters.\n",len) }
6.答:
#include "string.h" #include "stdio.h" main() {
char *str1[5],ch[5][20],k,t,j,*c void sort(char **) for(k=0k<5k++) {str1[k]=ch[k] gets(str1[k])} for(k=0k<7k++)
{ t=k
for(j=k+1j<5j++) if(strcmp(*(str1+t),*(str1+j))>0) t=j c=*(str1+t)
*(str1+t)=*(str1+k) *(str1+k)=c }
for(k=0k<5k++) puts(str1[k]) }
习 题 9
9.1 单选题
CBBAD DBCCD DCABC BCCBA DCDAB
9.2 填空题
1.120 2.x 3.3,2,2,3 4.fac /i 5.8,17 6.9 7.1.0/(i*i) 8.
fun-in:30,20,10 fun-end:1015,35,1050 10,20,30 9.012345 10.93636 11.(1)r+b[k] (2)*x
12.7 5 3 1 9 13.15
14.(1)*x (2)t 15.(1)'\0' (2)n++ 16.024
9.3 改错题(略) 9.4 编程题
1.答:
void zhuan( )
{ char ch
while((ch=getchar())!='\n')
{ if(ch>='a' && ch<='z') ch=ch-32 putchar(ch) } }
2.答:
double expp(int n) { int k, fac=1 double sum=1
for(k=1 k<=n k++) { fac*=k
sum+=1.0/fac }
return(sum) }
3.答:
int xy3( int x, int y)
{ int k, num=1
for(k=1k<=y k++) num*=x
num=num%1000 return num }
4.答:
int age( int n) { int c
if(n==1) c=10
else c=age(n-1)+2 return c }
5.答:
#include "stdio.h"
main()
{ int a,b,c,d
void fun(int a,int b,int *c, int *d) scanf("%d%d",&a,&b) fun(a,b,&c,&d)
printf("%d %d",c,d)
}
void fun(int a,int b,int *c, int *d) { if (b)
{ *c=a/b *d=a%b} }
6.答:
#include "stdio.h"
main(int argc,char *argv[]) { int k
printf("argc=%d\n",argc) for (k=1k<argc k++) printf("%s\n",argv[k]) }
习 题 10
10.1 单选题
CDBBB BBBAD CCBDC
10.2 填空题
1.所有结构体成员所占存储空间的总和 2.与占用存储空间最大的那个成员相等
附录F 课后题参考答案
285
3.(1)struct satype (2)3 (3)sa.a (4)9 (5)psa=&sa 4.80 5.struct node 6.0
10.3 编程题
1.答:
#include "stdio.h"
struct student {
long num;
char name[20]; char sex; float score; }; main()
{ struct student s[20], temp; int j,k, man=0, woman=0
float summan=0,sumwoman=0, aveman, avewoman; for(k=0 k<20 k++)
{ scanf("%ld %s %c%f",&s[k].num,s[k].name,&s[k].sex,&s[k].score); if(s[k].sex=='m')
{ summan+=s[k].score man++} else
{ sumwoman+=s[k].score;woman++ } }
aveman=summan/man;
avewoman=sumwoman/woman
printf("%d\t%f\t%d\t%f\n",man,aveman,woman,avewoman); for(k=0 k<19 k++)
for(j=0;j<20-k;j++)
if(s[j].score<s[j+1].score)
{ temp=s[j];s[j]=s[j+1];s[j+1]=temp;} printf("the sorted numbers:\n") for(k=0;k<20;k++)
printf("%ld\t%s\t%c\t%5.1f\n",s[k].num,s[k].name,s[k].sex,s[k].score); }
习 题 11
11.1 单选题
BADD
11.2 填空题
1.3d3d330 2.(1)28
(2)20 (3)0 (4)--9
3.(1)251
(2)42
(3)209
(4)–295 (5)848
习 题 12
12.1 单选题
BCDCA ADA
12.2 填空题
1.rewind(文件指针) 2."d1.dat","rb" 3.stdin
4.文本文件;二进制文件 5.(1)"w"
(2)str[i]--32
(3)"r"
6.fopen 7.Hello 8.(1)"r"
(2)fgetc(fp)
(3)time++
C语言程序设计实验与习题指导课后程序设计答案
P18
(1)
#include<stdio.h> int main(void) { intcelsius,fahr fahr=150 celsius=5*fahr/9-5*32/9 printf("fahr=%d,celsius=%d\n",fahr,celsius) return 0 }
(2)
#include<stdio.h> int main(void) { intcelsius,fahr celsius=26 fahr=9*celsius/5+32 printf("celsius=%d,fahr=%d\n",celsius,fahr) return 0 }
(3)
#include<stdio.h> int main(void) { intaverage,math,eng,comp math=87 eng=72 comp=93 average=(math+eng+comp)/3 printf("math=%d,eng=%d,comp=%d,average=%d\n",math,eng,comp,average) return 0 }
(4)
#include<stdio.h> int main(void) { intn,a,b,c n=152
c=n%10
b=(n/10)%10 a=n/100
printf("整数%d的个位数字是%d,十位数字是%d,百位数字是%d\n",n,c,b,a) return 0
}
P27
(1)
#include<stdio.h> #include<math.h> int main(void) { intcelsius,fahr printf("Enter celsius:") scanf("%d",&celsius) fahr=9*celsius/5+32 printf("fahr%d\n",fahr) return 0 }
(2)
#include<stdio.h> #include<math.h> int main(void) { intmoney,year doublerate,interest printf("Enter money,year,rate:") scanf("%d%d%lf",&money,&year,&rate) interest=money*pow(1+rate,year)-money printf("interest=%.2f\n",interest) return 0 }
(3)
#include<stdio.h> #include<math.h> int main(void) { doublex,y printf("Enter x:") scanf("%lf",&x)
if(x<0){ y=pow(x+1,2)+2*x+1/x } else{ y=sqrt(x) }
printf("y=f(%f)=%.2f\n",x,y) return 0
}
(4)
#include<stdio.h> int main(void) { intx,y printf("Enter num1:") scanf("%d",&x) printf("Enter num2:") scanf("%d",&y) printf("%d+%d=%d\n",x,y,x+y) printf("%d-%d=%d\n",x,y,x-y) printf("%d*%d=%d\n",x,y,x*y) printf("%d/%d=%d\n",x,y,x/y) printf("%d%%%d=%d\n",x,y,x%y) return 0 }
10的阶乘
#include<stdio.h> int main(void) { inti,n,product printf("Enter n:") scanf("%d",&n) product=1 for(i=1i<=ni++){ product=product*i } printf("product=%d\n",product) return 0 }
1.5请参照本章例题,编写一个C程序,输出以下信息:************
Very Goodj!
************
解:
main()
{
printf(" ************ \n")
printf("\n")
printf(" Very Good! \n")
printf("\n")
printf(" ************\n")
}
1.6编写一个程序,输入a b c三个值,输出其中最大者。
解:main()
{int a,b,c,max
printf("请输入三个数a,b,c:\n")
scanf("%d,%d,%d",&a,&b,&c)
max=a
if(max<b)
max=b
if(max<c)
max=c
printf("最大数为:%d",max)
}
这个答案完整版在答案家论坛可以找到,在大学答案的计算机栏目下面有
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)