附录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 }
《C语言程序设计》作业与思考题解答
说明:习题中P119:2.7 表示《C/C++上机实践及习题选解》中第119页的2.7题,其它以此类推,书后有解答。非《C/C++上机实践及习题选解》中的习题提供习题参考答案。
习题解答
作业一
1.合法的标识符: a12 A21 sum2 _fun C_program
不合法的标识符:f(x) $a21 21a while tan@sohu.com
2.
main( )
{ int i, j, s
i=2j=3
s=i*j
printf(“ %d %d=%d”,i,j,s)
}
作业二
1.指出下列哪些为C语言正确的整型(int)常量、实型(float)常量、字符型(char)常量?
正确的整型(int)常量:0 -325 128 03456
正确的实型(float)常量: 0.0 2. 1.2e-3 5e2
正确的字符型(char)常量: ‘b’ ‘104’ ‘108’ ‘ ’ ‘8’
2.表达式的结果 (1) 1
(2) 0
(4) 0
(5) 9.5
(9) ‘A’
(11) 2
(12) 4.5
3. Y=sin(2*x)+(a+b)/(a*b)/(1+a/b)+*a*a/2
4.设m为整数,用逻辑表达式表示:能同时被3与7整除或者被5除余2且小于100的整数。
m%3= =0 &&m%7= =0 || m%5= =2 &&m<100
作业三
1.华氏温度通过公式C=5/9(f-32)转换成摄氏温度。试编程并上机调试运行:从键盘上输入华氏温度,利用公式计算后输出摄氏温度(要求:保留一位小数;记录调试过程中遇到的问题及解决方法)。
#include
main( )
{ float f,c
scanf(“%f”,&f)
c=5.0/9*(f-32)
printf(“c=%.1f”,c)
}
2.
用IF语句:
#include
#include
main( )
{ float x,y
scanf(“%f”,&x)
if (x<0) y=fabs(x)
else if (x<10) y=x
else if (x<20) y=3-x/5
else if (x<40) y=3*x-10
else y=0
printf(“y=%f’,y)
}
用switch 语句:
#include
#include
main( )
{ float x,y
scanf(“%f”,&x)
if (x<0) y=fabs(x)
else switch ( int(x/10) )
{ case 0: y=xbreak
case 1: y=3-x/5break
case 2,3: y=3*x-10break
defaut y=0
}
printf(“y=%f’,y)
}
3. 解答见P151
4.程序如下:
#include
#include
main()
{
int i=0
char ch
ch=getchar()
while (ch!=' ')
{ if (ch=='(') i++
if (ch==')') i--
if (i<0) break
ch=getchar()
}
if (i==0) printf("(与)匹配")
else if (i<0) printf(" 缺) ")
else printf("缺少)")
}
5. 程序如下:
#include
main()
{
int i,j,k,m=0
for (i=1i<10i++)
for (j=1j<20j++)
{ k=100-i*10-j*5
if (k>0) { printf(" i=%-3dj=%-3dk=%-3d",i,j,k)
m++
if (m%4==0) putchar(' ')
}
}
printf(" m=%d ",m)
}
6. 在横线上填写合适语句,完善程序,使之完成如下功能:从键盘上输入一个不多于7位的正整数,统计其中2的个数,并求各位数字中的最小数。
#include
main( )
{int count,min,temp
long n
min=9count=0
scanf( “%ld” ,&n)
do
{ temp= n % 10
if (temp= =2) count++
if (min>temp) min=temp
n=n/10
}while ( n )
printf(“count=%d,min=%d”,count,min)
}
作业四
1.p128: 4.6 解答见p156
2. p128: 4.11 解答见p158
3.编写一递归函数计算mn ,并从键盘输入m,n的值(如4,3),求mn 的值(上机调试)。
funm_n(int m,int n)
{
int y
if (n==1) y=m
else y=m*funm_n(m,--n)
return y
}
main()
{int m,n,y
printf("Input integer(m,n):")
scanf("%d,%d",&m,&n)
y=funm_n(m,n)
printf(" %d^%-d=%-d",m,n,y)
}
4.P128: 4.12 (3)答案:12345678
5.求3-100中的素数,要求编写一函数来判断某数是否为素数。
main()
{
int prime,i,n=0
for (i=3i<=100i++)
{ prime=prime_num(i)
if (prime) { if (n%10==0) printf(" ")printf("%4d",prime)n++}
}
}
prime_num(int m)
{ int k=2,r
do {
r=m % k
if (r==0) break
k++
}while(k<m)p=""></m)>
if (r!=0) return m
else return 0
}
6. 结果如下:
main0:x=12,y=2
fun: x=6,y=25
main:x=12,y=2
fun:x=7,y=26
main:x=12,y=2
作业五
1.从键盘上输入一串英文字符(不含空格与其他字符),统计每个字符的数目,并输出字母及相应的数目。
#include
#include
main()
{
int i=0,c[52]={0},m=0
char str[80]
printf("Input a string:")
scanf("%s",str)
while (str[i])
{ if (str[i]>='A' &&str[i] <='Z') c[str[i]-'A']++
if (str[i]>='a' &&str[i] <='z') c[str[i]-'a'+26]++
i++
}
for (i=0i<26i++)
if (c[i]){ if (m%8==0) putchar(' ')m++
printf("%c:%-d ",i+'A',c[i])
}
for (i=0i<26i++)
if (c[i+26]){if (m%8==0) putchar(' ')m++
printf("%c:%-d ",i+'a',c[i+26])
}
}
2. P132: 5.15 程序见p167
3.从键盘上输入8个数,用选择法按由大到小的顺序排列并输出,要求用指针实现。
#include
#include
main()
{
int data[8],i,*p1,*p2,temp
p1=data
printf("Input 8 numbers:")
for (i=0i<8i++)
{ scanf("%d",p1)/* 或 &(*p1) */
p1++
}
for (p1=datap1<data+8-1p1++) p=""></data+8-1p1++)>
for (p2=p1+1p2<data+8p2++) p=""></data+8p2++)>
if (*p1<*p2){ temp=*p1*p1=*p2*p2=temp}
for (i=0,p1=datai<8i++,p1++)
printf("%6d",*p1 )
}
4.从键盘上输入一个4 4整数矩阵,以主对角线()为对称轴,将左下角元素中较大元素代替右上角对应元素,并将右上角元素(含对角线元素)输出。
#include
#include
main()
{
int d[4][4],i,j,temp
printf("Input 16 numbers:")
for (i=0i<4i++)
for (j=0j<4j++)
scanf("%d",&d[i][j])
for (i=0i<4i++)
for (j=0j<ij++) p=""></ij++)>
if (d[i][j]>d[j][i]) d[j][i]=d[i][j]
for (i=0i<4i++)
{ printf(" ")
for (j=0j<4j++)
if (j>=i) printf("%6d",d[i][j] )
else printf("%6c",' ')
}
}
5.盘上输入两个字符串a,b,下面程序将a,b的对应字符中的较大者存放在数组c的对应位置上,填空完善之。
#include
#include
main( )
{int k=0
char a[80],b[80],c[80]={‘’},*p,*q
p=aq=b
gets(a)gets(b)
while (*p!=0 || * q!=0 )
{ if ( *p!=0 ) c[k]=*p
else c[k]=*q
p++q++k++
if ( *p !=0 ) strcat(c,p)
else strcat(c,q)
puts(c)
}
作业六
1.P134:6.5 程序见p178
2.P135:6.7 程序见p181
3.P134:6.18 程序见p196
2分,共60分)下列各题A、B、C、D四个选项中,只有一个选项是正确的。请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。1.微型计算机的运算器、控制器及内存储器组合在一起,称之为()(本题分值:1分)
D
A.ALU
B.CPU
C.MPU
D.主机
2.下列存储器中,存取速度最快的是()(本题分值:1分)
D
A.软盘
B.硬盘
C.光盘
D.内存
3.系统软件中最重要的是()(本题分值:1分)
A
A. *** 作系统
B.语言处理程序
C.工具软件
D.数据库管理系统
4、CPU处理的数据基本单位为字,一个字的字长()(本题分值:1分)
D
A.为8个二进制位
B.为16个二进制位
C.为32个二进制位
D.与CPU芯片的型号有关
5.打印当前屏幕内容应使用的控制键是()(本题分值:1分)
D
A.Scroll-Lock
B.Num-Lock
C.PgDn
D.PrtSc(Print Screen)
6.能将高级语言源程序转换成目标程序的是()(本题分值:1分)
C
A.调试程序
B.解释程序
C.编译程序
D.编辑程序
7.二进制数1110111.11转换成十进制数是()(本题分值:1分)
B
A.119.375
B.119.75
C.119.125
D.119.3
8.十六进制数FF.1转换成十进制数是()(本题分值:1分)
A
A.255.0625
B.255.125
C.127.0625
D.127.125
9.中国国家计算机网络设施是()(本题分值:1分)
A
A.NCFC
B.CERNET
C.ISDN
D.Internet
10.控制键^C的功能为()(本题分值:1分)
A
A.终止当前 *** 作
B.系统复位
C.暂停标准输出设备的输出
D.结束命令行
11.COMMAND.COM为命令处理程序,DOS系统启动后,它()(本题分值:1分)
B
A.驻留在外存,需要时装入内存
B.常驻内存,包含所有内部命令
C.不能处理外部命令
D.不能处理后缀为.EXE的可执行文件
12.为了将所有扩展名为.PAS的文件改成扩展名为.P,应使用命令()(本题分值:1分)
C
A.REN *.PAS .?AS
B.REN PAS P
C.REN *.PAS *.P
D.REN *.PAS *.P??
13.设当前盘中文件XY.C的路径为\A\B\XU,当前目录为\A\B。为了查看文件XY.C的内容,应使用命令()(本题分值:1分)
A
A.TYPE XU\XY.C
B.TYPE \XU\XY.C
C.DIR XU\XY.C
D.DIR \A\B\XU\XY.C
14.要将提示符改成当前盘当前目录后加一个大于号“>”,应使用命令()(本题分值:1分)
B
A.PROMPT
B.PROMPT $ p $ g
C.PROMPT $ $
D.PROMPT C\>
15.在多媒体计算机系统中,CD-ROM属于()(本题分值:1分)
D
A.感觉媒体
B.表示媒体
C.表现媒体
D.存储媒体
16.设当前盘为C盘,将A盘根目录下的文件目录信息存放到当前盘当前目录下的文件AB中,应使用命令()(本题分值:1分)
C
A.TYPE A:\>AB
B.DIR >AB
C.DIR A:\>AB
D.DIR \>AB
17.在位运算中, *** 作数每右移一位,其结果相当于()(本题分值:1分)
B
A. *** 作数乘以2
B. *** 作数除以2
C. *** 作数除以16
D. *** 作数乘以16
18.在当前盘当前目录下有一个文件A.BAT,其内容为
CD \
MD \XYZ\AB\B\C
CD XYZ\AB\B
在正确执行上述文件后,接着执行下列命令时,不会发生错误的是()(本题分值:1分)
C
A.MD C
B.RD \XYZ
C.RD C
D.RD B
19.下列命令组中两个DOS命令互相等价的是()(本题分值:1分)
D
A.TYPE AB.TXT与DIR AB.TXT
B.DISKCOMP A:B:与COMP A:.* B:*.
C.TYPE AB.TXT>>XY.TXT与COPY AB.TXT XY.TXT
D.TYPE AB.TXT>XY.TXT与COPY AB.TXT XY.TXT
20.设A盘为启动盘,其目录结构为
根目录
DOS子目录COMAND.COM
USER子目录 AUTOEXEC.BAT
其文件AUTOEXEC.BAT的内容如下:
MD \XYZ
CD \DOS\USER
则由A盘启动成功后,A盘的当前目录是()(本题分值:2分)
C
A.\DOS\USER
B.\XYZ
C.根目录
D.\DOS
21.C语言提供的合法关键字是()(本题分值:1分)
C
A.switch
B.cher
C.case
D.default
22.在C语言中,合法的字符常量是()(本题分值:1分)
B
A.′\084′
B.′\x43′
C.′ab′
D.′\0′
23.若已定义x和y为double类型,则表达式: x=1,y=x+3/2的值是()(本题分值:1分)
C
A.1
B.2
C.2.0
D.2.5
24.合法的数组定义是()(本题分值:1分)
D
A.int a[]=〃string〃
B.int a[5]=
C.char a=〃string〃
D.char a[]=
25.设a为整型变量,不能正确表达数学关系10<a<15的C语言表达式是()(本题分值:1分)
A
A.10<a<15
B.a==11||a==12||a==13||a==14
C.a>10&&a<15
D.!(a<=10)&&!(a>=15)
26.若t为double类型,表达式t=1,t+5,t++的值是()(本题分值:1分)
C
A.1
B.6.0
C.2.0
D.1.0
27.若有定义和语句:
char s[10]s=〃abcd〃printf(〃%s\n〃,s)
则结果是(以下μ代表空格)()(本题分值:1分)
D
A.输出abcd
B.输出a
C.输出abcdμμμμμ
D.编译不通过
28.若有定义和语句:
int **pp,*p,a=10,b=20
pp=&pp=&ap=&bprintf(〃%d,%d\n〃,*p,**pp)
则输出结果是()(本题分值:1分)
D
A.10,10
B.10,20
C.20,10
D.20,20
29.若有以下定义和语句:
int u=010,v=0x10,w=10
printf(〃%d,%d,%d\n〃,u,v,w)
则输出结果是()(本题分值:1分)
A
A.8,16,10
B.10,10,10
C.8,8,10
D.8,10,10
30.若有以下定义和语句:
char c1=′b′,c2=′e′
printf(〃%d,%c\n〃,c2-c1,c2-′a′+′A′)
则输出结果是()(本题分值:1分)
B
A.2,M
B.3,E
C.2,E
D.输出项与对应的格式控制不一致,输出结果不确定
31.若有定义:int a[3][4];,()不能表示数组元素a[1][1]。(本题分值:1分)
D
A.*(a[1]+1)
B.*(&a[1][1])
C.(*(a+1))[1]
D.*(a+5)
32.若i、j已定义为int型,则以下程序段中内循环体的总的执行次数是()(本题分值:1分)
for(i=5i>0i--)
for(j=0j<4j++)
A
A.20
B.24
C.25
D.30
33.若有以下定义和语句:
char *s1=〃12345〃,*s2=〃1234〃
printf(〃%d\n〃,strlen(strcpy(s1,s2)))
则输出结果是()(本题分值:1分)
A
A.4
B.5
C.9
D.10
34.若有以下定义和语句:
int a[10]=,*p=a
则不能表示a数组元素的表达式是()(本题分值:1分)
B
A.*p
B.a[10]
C.*a
D.a[p-a]
35.下面程序的输出结果是()(本题分值:2分)
C
A.k=3 a=2 b=3
B.k=3 a=3 b=2
C.k=2 a=3 b=2
D.k=2 a=2 b=3
36.下面程序的输出结果是()(本题分值:1分)
main()
{unsigned a=32768
printf(〃a=%d\n〃,a)}
C
A.a=32768
B.a=32767
C.a=-32768
D.a=-1
37.执行下面语句后的输出结果为()(本题分值:1分)
int i=-1
if(i<=0) printf(〃****\n〃)
else printf(〃%%%%\n〃)
D
A.****
B.%%%%
C.%%%%c
D.有语法错误,不能正确执行
38.对于条件表达式(M)?(a++):(a--),其中的表达式M等价于()(本题分值:1分)
C
A.M==0
B.M==1
C.M!=0
D.M!=1
39.下述程序段的输出结果是()(本题分值:1分)
int x=10
int7nbspy=x++
printf(〃%d,%d〃,(x++,y),y++)
A
A.11,10
B.11,11
C.10,10
D.10,11
40.若有以下的定义:
int a[]=,*p=a
则值为3的表达式是()(本题分值:1分)
A
A.p+=2,*(p++)
B.p+=2,*++p
C.p+=3,*p++
D.p+=2,++*p
41.假定所有变量均已正确说明,下列是程序段运行后x的值是()(本题分值:2分)
a=b=c=0x=35
if(!a) x--
else if(b)
if(c) x=3
else x=4
B
A.34
B.4
C.35
D.3
42.在以下一组运算中,优先级最高的运算符是()(本题分值:2分)
C
A.<=
B.=
C.%
D.&&
43.若有以下定义和语句:
int w[2][3],(*pw)[3]pw=w
则对w数组元素的非法引用是()(本题分值:2分)
A
A.*(w[0]+2)
B.*(pw+1)[2]
C.pw[0][0]
D.*(pw[1]+2)
44.若有以下程序片段: char str[ ]=〃ab\n\012\\\\〃printf(〃%d〃,strlen(str))
上面程序片段的输出结果是()(本题分值:2分)
C
A.3
B.4
C.6
D.12
45.函数调用:strcat(strcpy(str1,str2),str3)的功能是()(本题分值:2分)
C
A.将串str1复制到串str2中后再连接到串str3之后
B.将串str1连接到串str2之后再复制到串str3之后
C.将串str2复制到串str1中后再将串str3连接到串str1之后
D.将串str2连接到串str1之后再将串str1复制到串str3中
46.以下对C语言函数的有关描述中,正确的是()(本题分值:2分)
A
A.在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B.C函数既可以嵌套定义又可以递归调用
C.函数必须有返回值,否则不能使用函数
D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
47.以下叙述中不正确的是()(本题分值:2分)
C
A.在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值
B.在C中,在调用函数时,实参和对应形参在类型上只需赋值兼容
C.在C中,外部变量的隐含类别是自动存储类别
D.在C中,函数形参可以说明为register变量
48.设有以下定义或语句,则输出的结果是(用small模式编译,指针变量占2个字节)()(本题分值:2分)
struct date
{long *cat
struct date *next
double dog
}too;
printf(〃%d〃,sizeof(too))
D
A.20
B.16
C.14
D.12
49.设有定义:struct sk
data,*p
若有p=&data,则对data中的a域的正确引用是()(本题分值:2分)
B
A.(*p).data.a
B.(*p).a
C.p->data.a
D.p.data.a
50.以下对枚举类型名的定义中正确的是()(本题分值:2分)
B
A.enum a=
B.enum a
C.enum a=
D.enum a
二、填空题(每空2分,共40分)请将答案分别写在答题卡中序号至的横线上,答在试卷上不得分。
1、与十进制数101等值的二进制数为。(本题分值:2分)
1100101
2、DOS命令分为内部命令与外部命令,XCOPY命令属于命令。(本题分值:2分)
外部
3、设当前盘为A盘,当前系统提示符为“>”,在不改变当前盘的情况下,显示C盘的当前目录路径,应使用命令。 (本题分值:2分)
CD C:
4、自动批处理文件名必须是。(本题分值:2分)
AUTOEXEC.BAT
5、设在当前盘当前目录下有两个文件W.TXT与P.TXT,现要将文件P.TXT连接到文件W.TXT的后面,若使用COPY命令,则完整的命令为。(本题分值:2分)
COPY W.TXT+P.TXT W.TXT
6、表示条件10<x<100或x<0的C语言表达式是。(本题分值:2分)
(x>10&&x<100)||x<0
或(10<x&&x<100)||x<0
或x<0 ||(x>10&&x<100)
或0>x ||(10<x&&x<100)
7、以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最笾怠G胩羁铡?br>#define N 3
#define M 4
void LineMax(int x[N][M])
{ int i,j,p
for(i=0i<Ni++)
{p=0
for(j=1j<Mj++)
if(x[i][p]<x[i][j])
printf(〃The max value in line is %d\n〃,)
}
}
main()
}
(本题分值:6分)
p=j
x[i][p]
LineMax(x)
8、以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空。
main()
{float x[1000],sum=0.0,ave,a
int n=0,i
printf(〃Enter mark:\n〃)scanf(〃%f〃,&a)
while(a>= 0.0 &&n<1000)
{sum+=x[n]=
n++scanf(〃%f〃,&a)
}
ave=
printf(〃Output:\n〃)
printf(〃ave=%f\n〃,ave)
for(i=0i<ni++)
if() printf(〃%f\n〃,x[i])
}
(本题分值:8分)
a
a
sum/n或sum/(float)n或sum/(double)n
x[i]<ave或!(x[i]>=ave)或ave>x[i]
9、执行以下程序,输入-10的结果是,输入5的结果是,输入10的结果是,输入30的结果是。
(本题分值:8分)
0
5
10
5
10、以下程序的功能是。
main()
;
int sum=0,i
for(i=0i<10i++)
if(num[i]>0)
sum=num[i]+sum;
printf(〃sum=%6d〃,sum)
}
(本题分值:2分)
计算数组num中大于零的数据之和
11、以下程序可以把从键盘上输入十进制数(long型)以二到十六进制数的形式输出,请填空。
#include
main()
{char
b[16]=
int c[64],d,i=0,base
long n
printf(〃Enter a number:\n〃)scanf(〃%1d〃,&n)
printf(〃Enter new base:\n〃)scanf(〃%1d〃,&base)
do
{c[i]=
i++
n=n/base
}while(n!=0)
printf(〃The result is:\n〃)
for(--ii>=0--i)
{?d=c[i]
printf(〃%c〃,b)
}
}
(本题分值:4分)
n%base
[d]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)