您的当前位置:首页正文

c语言课后习题答案

2024-05-03 来源:易榕旅网
c语言程序设计教程(第2版)课后题及模拟题参考答案

习题1 .................................................................................................................................................................... 3

1-1 填空题.................................................................................................................................................... 3 1-2 思考题.................................................................................................................................................... 3 1-3 编程题.................................................................................................................................................... 3 习题2 .................................................................................................................................................................... 4 2-1 单选题.................................................................................................................................................... 4 2-2 思考题.................................................................................................................................................... 4

习题3.................................................................................................................................................................... 5 3-1 选择题 ..................................................................................................................................................... 5 3-2 填空题 ..................................................................................................................................................... 5 3-3 编程题 ..................................................................................................................................................... 5 习题4.................................................................................................................................................................... 7

4-1单选题 ..................................................................................................................................................... 7 4-2填空题 ..................................................................................................................................................... 7 4-3 编程题.................................................................................................................................................... 7

习题5.................................................................................................................................................................. 10

5-1单选题 ................................................................................................................................................... 10 5-2填空题 ................................................................................................................................................... 10 5-3 编程题.................................................................................................................................................. 10 习题6.................................................................................................................................................................. 13 6-1单选题 ................................................................................................................................................... 13 6-2填空题 ................................................................................................................................................... 13 6-3 编程题.................................................................................................................................................. 13

习题7.................................................................................................................................................................. 15

7-1单选题 ................................................................................................................................................... 15 7-2填空题 ................................................................................................................................................... 15 7-3 编程题.................................................................................................................................................. 15

习题8.................................................................................................................................................................. 16

8-1单选题 ................................................................................................................................................... 16 8-2填空题 ................................................................................................................................................... 16 8-3 编程题.................................................................................................................................................. 16

习题9.................................................................................................................................................................. 18

9-1单选题 ................................................................................................................................................... 18 9-2填空题 ................................................................................................................................................... 18 9-3 编程题.................................................................................................................................................. 18

习题10 ............................................................................................................................................................... 22

10-1单选题 ................................................................................................................................................ 22 10-2填空题 ................................................................................................................................................ 22 10-3 编程题 ............................................................................................................................................... 22 习题11 ............................................................................................................................................................... 24 11-1单选题 ................................................................................................................................................ 24 11-2填空题 ................................................................................................................................................ 24

习题12 ............................................................................................................................................................... 25

12-1单选题 ................................................................................................................................................ 25

12-2 填空题 ............................................................................................................................................... 25 实验篇 ................................................................................................................................................................. 26 实验1 熟悉Visual C++6.0可视化集成开发环境 ...................................................................... 26 实验2 顺序结构程序设计 ...................................................................................................................... 26 实验3 选择结构程序设计 ...................................................................................................................... 26 实验4 循环结构程序设计 ...................................................................................................................... 26 实验5 函数 ................................................................................................................................................. 28 实验6 数组 ................................................................................................................................................. 32 实验7 指针 ................................................................................................................................................. 33 实验8 结构体和共用体........................................................................................................................... 35 实验9 文件 ................................................................................................................................................. 36 实验10 综合编程 ..................................................................................................................................... 36

模拟试卷(一)参考答案.............................................................................................................................. 37 模拟试卷(二)参考答案.............................................................................................................................. 38

习题1

1-1 填空题

1. 函数

2. 主函数main(),主函数main() 3. 主函数main() 4. 函数首部,函数体

5. {, } 6. /*, */

7. 顺序结构,选择结构,循环结构 8. .c, .obj, .exe

1-2 思考题

1. 结构化程序设计是指:为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。其基本结构包括顺序结构、选择结构和循环结构三种。

2. 算法是对具体问题求解步骤的一种描述。计算机算法的表达工具通常采用以下几种方法:(1)用自然语言表示算(2)用流程图表示算法(3)用伪代码表示算法(4)用程序设计语言表示算法

3. 语言简洁、紧凑,使用方便、灵活; 支持结构化程序设计;运算符丰富;数据类型丰富;较强的编译预处理功能;C语言的可移植性好;C语言本身既有一般高级语言的优点,又有低级(汇编)语言的特点;语法限制不太严格,程序设计自由度大。

1-3 编程题

1. 试参照本章例题编写计算梯形面积的C语言程序,梯形的上底、下底和高分别用a,b,h表示,并用a=10,b=20,h=5测试所编写的程序。 #include \"stdio.h\" main() { float a, b, h, s;

a=10; b=20;

h=5; s=(a+b)*h/2; printf(\"s=%f\\n\" , s ); }

2. 编写程序显示如图1.11所示信息。

图1.11 显示信息

#include \"stdio.h\" main()

{ printf(\"******************************\\n\");

printf(\"* hello world *\\n\");

printf(\"******************************\\n\"); }

习题2

2-1 单选题

1~5 DBDCA

6~10 DCABA

11~12 CA

2-2 思考题

1.2.000000

2.1,0.5 3.9,2 4.6

5.100,d

6.(1)20 (2)0 (3)60

7. (1)10,6,4 (2)6,9,15 8. 55

(3)3,60,83 习题3

3-1 选择题

1-5 BDABC 6-10 ADCAC 11-12 BB

3-2 填空题

1. 3 2. 0261 3. 0x10

4. 2, 1 互换a,b的值 5. 6.6 6. –003

8. 7

7. 5.0,4,c=3 8. i=10,j=20 9. (1) 65 (2) 65,A

(3) 56.123400,123.456001 (4) 3.141600 (5) 8765.432 (6) 5.864000e+002 (7) 3.141600e+000 (8) 3.1416 (9) 8765

(10) 3.1416,8765.43

10. a=2 b=5x=8.8 y=76.34c1=65 c2=97

3-3 编程题

1. 编写程序实现从键盘输入两个十进制整型数据10和8给变量x和y,并按下列格式输出。

 x y 十进制数 10 8 八进制数

12 10 十六进制数

a

8

#include \"stdio.h\" main() { int x, y ;

scanf(\"%d%d\" , &x, &y);

printf(\" x y\\n\"); printf(\"%4d%4d\\n\ printf(\"%4o%4o\\n\ printf(\"%4x%4x\\n\

}

2. 编写一个程序,输入一个大写英文字符('B'~'Y'),输出它的前导字符、该字符本身及其后续字符。 #include \"stdio.h\" main() { char c;

scanf(“%c”, &c );

printf(“%c, %c, %c\\n”, c-1, c, c+1 ); }

3. 编写一个程序,输入一个3位正整数,要求反向输出对应的整数,如输入123,则输出321。编写程序并给出相应的程序流程图。 #include \"stdio.h\" main()

{ int a, a1, a2, a3; scanf(“%d”, &a ); a1=a%10 ; a=a/10; a2=a%10; a=a/10; a3=a%10;

printf(“%d%d%d\\n”, a1, a2, a3); }

4. 编写程序,读入3个double型数据,求它们的平均值,保留此平均值小数点后1位数,对小数点后第2位数进行四舍五入,最后输出结果。 #include \"stdio.h\" main()

{ double a, b, c, ave;

scanf(“%lf%lf%lf”, &a, &b, &c ); ave=(a+b+c)/3 ;

printf(“%.1lf\\n”, ave); }

5. 编写程序,读入3个整数给变量a、b、c,然后交换它们的值,把a原来的值给b,把b原来的值给c,把c原来的值给a。 #include \"stdio.h\" main()

{ int a, b, c, t;

scanf(“%d%d%d”, &a, &b, &c ); t=a; a=c; c=b ; b=t ;

printf(“a=%d, b=%d, c=%d\\n”, a, b, c ); }

习题4

4-1单选题

1~5 AADAD 6~10 ACB BB

11~12BA

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(3)1

(4)0 (5)1

4. (max=a>b?a:b)>c?max:c 5.-4 6.1

7.5,0,3

8. (1) (a==0) (2) (b==0)

(3) (disc<0)

4-3 编程题

1.输入3个实型数值a、b、c,如果能用它们作为三角形的3条边形成一个三角形,则输出三角形的面积,并画出实现该算法的N-S流程图并编程实现。 #include \"stdio.h\" #include “math.h”

main()

{ float a,b,c,s,area;

scanf(“%f,%f,%f”,&a,&b,&c); if (a+b>c && a+c>b && b+c>a) { s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“%f”,area); } }

2222

2.输入整数x、y,若x+y>1000,则输出x+y百位以上的数字,否则输出两数之和。 #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. 输入一个整数,判断它能否同时被3、5、7整除,并输出“yes”或“no”字样。 #include \"stdio.h\" main()

{ int x,

scanf(“%d”,&x);

if(x%3==0 && x%5==0 && x%7==0) printf(“yes\\n”); else

printf(“no\\n”);

}

4.对任意输入的x,用下式计算并输出y的值。

x2sin(x),xy2x,2xx1,x22≤x≤2 x2#include \"stdio.h\"

#include “math.h” main()

{ float x,y;

scanf(“%f”,&x);

if(x<-2) y=x*x-sin(x);

else if (x<=2) y=pow(2,x)+1;

else y=sqrt(x*x+x+1); printf(“%f\\n”,y); }

5. 编写程序输入一个5位整数,判断它是不是回文数。回文数是指一个数从右到左和从左到右的对应数码相同,如12321是回文数,个位与万位相同,十位与千位相同。 #include \"stdio.h\" main( )

{long ge,shi,qian,wan,x; scanf(\"%ld\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\");

}

6. 编写程序用于计算某运输公司的运费。设每公里每吨货物的基本运费为p,货物重量为w,路程为s(单位为km),折扣为d,总费用计算公式为:f=p*w*s*(1d)

运费计算标准见表4.5。

表4.5 某运输公司运费计算标准

s<250 250<=s<500 500<=s<1000 1000<=s<2000 2000<=s<3000 s>3000 #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); }

不 打 折 折扣2% 折扣5% 折扣8% 折扣10% 折扣15% 习题5

5-1单选题

1~5 CDABA

6~10 ABDDB

11~14 DBCB

5-2填空题

1.20

2.333

3.(1) i<10 (2) j%3!=0

4. (1) flag*(float)k/(k+1) (2) flag=-flag

5.(1) max=x (2) x!=-1 (3) scanf(\"%d\

5-3 编程题

1. 用3种循环语句编写程序实现下列算式: (1)1+22+33+„+100100 (2)e=

11!12!13!… 1n!… ,当最后一项的值小于106时为止。

(1)

#include \"stdio.h\" main()

{ int i; lont s=0; for(i=1;i<=100;i++) s+=i*i; printf(“%ld”,s); } (2)

#include \"stdio.h\" main()

{ int i=1; lont p=1;float s=0; do{

s+=1.0/p; p*=++i; }while(1.0/p>1e-6) printf(“%f”,s);

}

2. 编写程序求两个正整数的最大公约数。 #include \"stdio.h\" main() {int m,n,t,a,b;

scanf(“%d,%d” ,&m,&n) ; if (mwhile(t)

{ m=n ; n=t ;t=m%n;} printf(”%d,%d”,n,a*b/n); }

3. 编写程序求一个整数的任意次方的最后3位数,即求xy的最后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. 百鸡问题。用100元钱买100只鸡,其中,公鸡每只5元,母鸡每只3元,小鸡每3只1元。编写程序输出各种买法。 #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>=0 && (5*x+3*y+z/3)-100<1e-5) printf(”x=%d,y=%d,z=%d\\n”,x,y,z) ;

}

}

5. 编写程序分别打印如下图形:

* * * * * * * *

* * * * * * * *

(a) (a) #include \"stdio.h\" main() {int j,k ;

for( j=1 ;j<=4 ;j++) {for(k=1;k<=4-j;k++)printf(\" \"); printf(\"****\") ; printf(\"\\n\") ; } }

* *** *****

******** (b)

(b) #include \"stdio.h\" main()

{int j,k ;

for( j=1 ;j<=4 ;j++) }

6. 请编写程序求100~999之间所有的水仙花数。水仙花数的含义是指这样的一个3位数,其各位数字的立方和等于该数本身。例如,371=3+7+1,所以371是一个水仙花数。 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 #include \"stdio.h\" main() {

int i,j,k,n;

printf(\"'water flower'number is:\"); for(n=100;n<1000;n++) {

i=n/100;/*分解出百位*/ j=n/10%10;/*分解出十位*/ k=n%10;/*分解出个位*/

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) {

printf(\"%-5d\ }

3

3

3

{for(k=1;k<=4-j;k++)printf(\" \"); for(k=1 ;k<=2*j-1 ;k++) printf(\"*\") ; }

printf(\"\\n\") ;

} printf(\"\\n\"); }

习题6

6-1单选题

1-5 CBBAD 6-10 DBCCD 11-15 DCABC

6-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

6-3 编程题

1. 编写一函数把字符串中的小写字母转换成大写字母,其他字符不变。 void zhuan( ) { char ch;

while((ch=getchar())!=’\\n’)

{ if(ch>=’a’ && ch<=’z’) ch=ch-32;

putchar(ch); } }

2. 编写一函数求e=float expp(int n) { int k, fac=1; float sum=0; for(k=1; k<=n; k++)

{ fac*=k; sum+=1.0/fac ; }

return(sum); }

11!12!13!… 1n!…

3. 编写一函数求一个整数的任意次方的最后3位数,即求x的最后3位数。 int xy3( int x, int y) { int k, num=1;

for(k=1;k<=y ; k++) num*=x ;

num=num%1000 ; return num ; }

4. 有5个人坐在一起,第5个人说他比第4个人大2岁,第4个人说他比第3个人大2岁,第3个人说他比第2个人大2岁,第2个人说他比第1个人大2岁,第1个人说他10岁,请问第5个人多大? int age( int n) { int c;

if(n==1) c=10 ; else c=age(n-1)+2 ; return c ; }

y

习题7

7-1单选题

1-5 DBCCB 6-8 BDC

7-2填空题

1. 2. 3. 4.

c 60

1000 10 16

7-3 编程题

1. 编写程序计算下列公式中的f值,使用带参数的宏来实现。 #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); }

习题8

8-1单选题

1~15 CADAC

6~10 CCDAB

11~15 CBBCD

8-2填空题

10000 01000

1 (1) 2 3 4 5 (2) 10010 (3) QuickC (4) 00100 2. (1) j+=2 (2) a[i]>a[j] 00010 3. (1) r+b[k] (2) *x 00001

8-3 编程题

1.设数组a中的元素都为正整数,编程求其中偶数的个数和偶数的平均值。 #include \"stdio.h\" #define N 10 main()

{ int a[N]={1,2,3,4,5,6,7,8,9,0},osum=0, ocount=0, j; for(j=0;j<10;j++) if(!( j%2)){ ocount++; osum+=a[j];}

printf(“ocount =%d, osum =%d\\n”, ocount, osum);

}

2. 有一个已排好序的数组,输入一个数,要求按原来排序的规律将它插入数组中,插入后数组仍然有序,请编程实现。 #include \"stdio.h\" #define N 10

main()

{ int a[N]={10,20,30,40,50,60,70,80,90}, j, k, x; scanf(“%d”,&x); for(j=0;jif (xfor(k=N-1; k>j; k--) a[k]=a[k-1]; a[j]=x;

for(j=0;j}

3.编程求一个矩阵对角元素之和,其中矩阵元素值由数组初始化时给定。 #include \"stdio.h\"

#define M 3 main()

{int a[M][M]={{1,2,3},{4,5,6},{7,8,9}},j,sum1=0,sum2=0; for( j=0;j{sum1+=a[j][j];

sum2+=a[j][M-(j+1)]; }

printf(“%d,%d\\n”,sum1,sum2); }

4. 编一个程序检查二维数组是否对称(即对所有的i和j,都有a[i][j]=a[j][i])。 #include \"stdio.h\" #define M 3 main()

{int a[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1;; for( j=0;j}

5.编程比较两个字符串的大小(不用strcmp( )函数)。 #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++);

printf(“%d\\n”,c1[j]-c2[j]); }

6. 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格及其他字符的个数。 #include \"stdio.h\"

#include ”string.h” #define M 3 #define N 80

main()

{ char a[M][N],j,k,n[5]={0}; for( j=0;jfor(k=0;a[j][k];k++)

if( a[j][k]>=’A’ && a[j][k]<=’Z’) n[1]++; else if (a[j][k]>=’a’ && a[j][k]<=’z’) n[2]++; else if (a[j][k]>=’0’ && a[j][k]<=’9’) n[3]++; else if (a[j][k]=’ ’ ) n[4]++;

else n[5]++; for(j=0;j<5;j++) }

printf(“%4d”, n[j]);

习题9

9-1单选题

1~5 DDACB

6~10 ACBAD

11~15CDB CC

9-2填空题

1 . (1) 2,1 (2) 10#30# (3) FOUR,O (4) 60

2. (1) 49 (2) 2 (3)2 (4) 7 5 3 1 9 (5)15

(6)

1,1,1, 1,1

3,3,3, 3,3

(7)

1 0 0 0 1

0 1 0 1 0

0 0 1 0 0

0 1 0 1 0

1 0 0 0 1

3. (1) *x (2) t

4. (1) '\\0'或0 (2) n++或n+=1或n=n+1 5. 024

9-3 编程题

1. 按以下要求编写一个程序。定义三个变量用于存放输入的三个整数;另定义三个指向整型变量的指针变量,并利用它们实现将输入的三个整数按由小到大的顺序输出。 #include \"stdio.h\" main() {

int n1,n2,n3;

int *pointer1,*pointer2,*pointer3; printf(\"please input 3 number:n1,n2,n3:\"); scanf(\"%d,%d,%d\pointer1=&n1; pointer2=&n2; pointer3=&n3;

if(n1>n2) swap(pointer1,pointer2); if(n1>n3) swap(pointer1,pointer3);

if(n2>n3) swap(pointer2,pointer3);

printf(\"the sorted numbers are:%d,%d,%d\\n\}

swap(p1,p2)

int *p1,*p2; {int p;

p=*p1;*p1=*p2;*p2=p; }

2. 编写函数,得到两个整数相除的商和余数。要求通过指针在函数间传递商和余数这两个数据。

#include \"stdio.h\" main()

{ int a,b,d ;double c;

void fun(int a,int b,float *c, int *d); scanf(\"%d,%d\ fun(a,b,&c,&d); printf(\"%lf,%d\\n\}

void fun(int a,int b,double *c, int *d) { if (b) { *c=(double)a/b; *d=a%b;}}

3. 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。编写三个函数:①输入10个数;②进行处理;③输出10个数。 #include \"stdio.h\" main()

{void input (int *); void output (int *); void chuli (int *); int a[10];

input(a); chuli(a); output(a); }

void input(int *a) { int j;

for(j=0;j<10;j++) scanf(\"%d\ }

void chuli(int *a)

{int j,minl=0,maxl=0;

for(j=0;j<10;j++)

{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; }

void output(int *a) {int j;

for(j=0;j<10;j++) printf(\"%4d\ printf(\"\\n\"); }

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

main()

{ int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},k,j,*p=a,t; for(k=0,j=M*N-1;k{ t=*(p+k); *(p+k)=*(p+j); *(p+j)=t;} for (k=0 ;k5.. 编写一个函数,求一个字符串的长度。在main( )函数中输入字符串,并输出其长度。 #include \"stdio.h\" main()

{

int len,length(p); char *str[20];

printf(\"please input a string:\\n\"); scanf(\"%s\

len=length(str);

printf(\"the string has %d characters.\\n\}

int length(p) char *p; {

int n=0;

while(*p!='\\0') { n++; p++; }

return n;

}

6. 请编写一个程序,运行时输出命令行参数的个数及参数名。 #include “stdio.h”

main(int argc,char *argv[]) { int k;

printf(“argc=%d”,argc); for (k=1;kprintf(“%s”,argv[k]); }

7。用指针数组操作将输入的5个字符串按由小到大的顺序。 #include \"stdio.h\" #include \"string.h\"

main() {

char *str1[5],ch[5][20],k; void sort(char **); for(k=0;k<5;k++) {str1[k]=ch[k]; gets(str1[k]);} sort(str1); for(k=0;k<5;k++) puts(str1[k]); }

void sort(char **str1) { int k,j,t;char *c; for(k=0;k<4;k++) { t=k;

for(j=k+1;j<5;j++) if(strcmp(*(str1+t),*(str1+j))>0) t=j; c=*(str1+t);

*(str1+t)=*(str1+k) ; *(str1+k)=c ; } }

习题10

10-1单选题

1-5 CDBBB

6-10 BBBAD

11-15 CCBDA

10-2填空题

1. 所有结构体成员所占存储空间的总和

2. 与占用存储空间最大的那个成员相等

3. (1) 结构体 (2) 3 (3) sa.a (4) 9 (5) psa=&sa 4. 80 5. struct node 6. 0

10-3 编程题

1. 定义一个包含20个学生基本情况(包括学号、姓名、性别、C语言成绩)的结构体数组,编程实现下列功能:

(1)输入20个学生的学号、姓名、性别、C语言成绩; (2)分别统计男女生的人数,求出男、女生的平均成绩; (3)按照学生的C语言成绩从高到底进行排序。 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\%f\%d\%f\\n",man,aveman,woman,avewoman); for(k=0; k<19; k++)

for(j=0;j<20-k;j++)

if(s[j].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\%s\%c\%5.1f\\n",s[k].num,s[k].name,s[k].sex,s[k].score); }

习题11

11-1单选题

1-4 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单选题

1-5 BCDCA

6-8 ADA

12-2 填空题

1. rewind(文件指针) 2. \"d1.dat\3. stdin

4. 文本文件 二进制文件 5. (1)\"w\" (2) str[i]-32 (3) \"r\" 6. fopen

7. Hell

8. (1) \"r\" (2) fgetc(fp) (3) time++

实验篇

实验1 熟悉Visual C++6.0可视化集成开发环境

实验2 顺序结构程序设计

实验3 选择结构程序设计

(1) 略 (2) 略

(3) #include \"stdio.h\"

main()

{

float a,b;

printf(\"Please input the data a and b:\\n\"); scanf(\"%f%f\if(a>10.0) a=a-10.0; else

{ a=a+10.0; if(b>a) ; else b=a-b;

}

printf(\"a=%f, b=%f\\n\}

实验4 循环结构程序设计

(1) 略 (2) 略

(3)编写一个程序,打印输出半径为1~10的圆的面积,若面积为40~90则予以打印,否则,不予打印。 #include \"stdio.h\" main()

{ float r=0, area=0; while(r<10 && area<90)

{ if (area>40) printf(\"r=%f, area=%f\\n\,area); r=r+1;

area=3.1415926*r*r;

} } (4)从键盘输入一批整数,统计其中不大于100的非负数数值的个数。(用while循环实现。) #include \"stdio.h\" main() { int x,i=0; scanf(\"%d\ while(x>=0) { if(x<=100) i++;

scanf(\"%d\

}

printf(\"the number is:%d\\n\

}

(5)用/4=11/4+1/51/7+1/9„公式求的近似值,直到最后一项的绝对值小于104为止。 #include \"math.h\"

main()

{ double k=1.0,n=1.0,pi=0,t=1.0; while (fabs(t)>=1e-4) { pi=pi+t; n=n+2.0; k=-k; t=k/n; } pi=pi*4;

printf(\"pi=%lf\\n\}

(6)解决猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩一个桃子了。求第一天猴子共摘了多少个桃子。 #include main() { int i,m,n;

for (n=1,i=1;i<10;i++) { m=2*n+2; n=m; }

printf(\"total=%d\\n\

}

(7)取彩球问题。现有12个彩球——3个白球、3个红球、6个黑球,从中任意取n(2≤n≤12)个球,求所有不同的取法。 #include \"stdio.h\"

main() {

int n,white,red,yellow,count=0;

printf(\"Please input the number of ball took:\"); scanf(\"%d\

printf(\"white red yellow\\n\"); for(white=0;white<=3;white++) for(red=0;red<=3;red++) { yellow=n-white-red;

if(yellow>=0 && yellow<=6)

{ printf(\"%6d%6d%6d\\n\ count++; } }

printf(\"Total:%d\\n\}

实验5 函数

(1) 略

(2) 略

(3)求两个整数的最大公约数和最小公倍数,要求:用一个函数求最大公约数,用另一个函数求最小公倍数,分别采用用全局变量和不用全局变量两种方法做。 

使用全局变量: #include \"stdio.h\" int x,y; int hef()

{ int u=x,v=y,a,b;

if(u>v)

{ a=u; u=v; v=a; } while((b=u%v)!=0) { u=v; v=b; } return(v);

}

int led(int x,int y,int h) { return(x*y/h);} main() { int h,l;

scanf(\"%d%d\ h=hef(x,y);

printf(\"HCF=%d\\n\ l=led(x,y,h);

printf(\"LCD=%d\\n\}

 不用全局变量:

#include \"stdio.h\" int hef(int x,int y) {

int a,b; if(y>x)

{ a=x; x=y; y=a; } while((b=x%y)!=0) { x=y; y=b; } return(y);

}

int led(int x,int y,int h) { return(x*y/h);}

main()

{ int x,y,h,l;

scanf(\"%d%d\ h=hef(x,y);

printf(\"HCF=%d\\n\ l=led(x,y,h);

printf(\"LCD=%d\\n\

}

(4)计算s = 1/11/2+1/3„+1/99991/10000,分别采用下列各种方法,每种方法单独用一个函数实现,最后加以比较: ① 从左到右各项相加; ② 从右到左各项相加;

③ 从左到右各个正项和负项分别相加; ④ 从右到左各个正项和负项分别相加。

#include \"stdio.h\" void lsum(int n); void rsum(int n); void lsumc(int n); void rsumc(int n); main()

{ lsum(10000); rsum(10000); lsumc(10000); rsumc(10000); }

void lsum(int n) { int i,k=1;

double sum=0,t; for(i=1;i<=n;i++) { t=1.0*k/i;

sum+=t; k=-k;

}

printf(\"the lsum is:%lf\\n\}

void rsum(int n) { int i,k=-1; double sum=0,t; for(i=n;i>=1;i--) { t=1.0*k/i; sum+=t; k=-k; }

printf(\"the rsum is:%lf\\n\}

void lsumc(int n)

{ int i; double sum=0; for(i=1;i<=n-1;i++,i++) sum+=1.0/i; for(i=2;i<=n;i++,i++)

sum-=1.0/i;

printf(\"the lsumc is:%lf\\n\}

void rsumc(int n) { int i; double sum=0; for(i=n;i>=2;i--,i--) sum-=1.0/i;

for(i=n-1;i>=1;i--,i--) sum+=1.0/i;

printf(\"the rsumc is:%lf\\n\}

(5)猴子吃桃问题的函数化。把猴子吃桃问题写成一个函数,使它能够求得指定一天开始时的桃子数。 #include \"stdio.h\" int monkey(int k)

{ int i,m,n;

for(n=1,i=1;i<=10-k;i++) { m=2*n+2; n=m; } return(n); }

main()

{ int day;

printf(\"Please input the day(1<=day<=10):\\n\"); scanf(\"%d\

printf(\"day: %d, total:%d\ }

(6)菜单程序。编写一个菜单程序,运行后首先在屏幕显示如图所示的菜单,当输入数值1时,调用显示“@”图案的函数;当输入数值2时,调用显示“$”图案的函数;当输入数值3时,程序结束。 #include \"stdio.h\" void view1(); void view2(); main() { int op;

printf(\"\\n************************************\\n\"); printf(\" Menu section \\n\"); printf(\" 1.view(@) \\n\"); printf(\" 2.view($) \\n\"); printf(\" 3.exit \\n\"); printf(\"************************************\\n\"); printf(\"\\nPlease input selection:\\n\"); while(1)

{

scanf(\"%d\ if(op==1)

{ view1();

printf(\"\\nPlease input selection:\"); }

else if(op==2) }

}

void view1() { int i;

for(i=1;i<15;i++) putchar('@'); return; }

void view2() { int i,j;

for(i=1;i<5;i++)

{ for(j=1;jfor(j=1;j<10;j++) putchar('$'); printf(\"\\n\"); }

return;}

{ view2();

printf(\"\\nPlease input selection:\"); }

else return;

实验6 数组

(1) 略 (2) 略

(3)设有含10个元素的一维整型数组,其中偶数和奇数各占一半,将该数组变换为25的二维数组,且偶数和奇数各成一行。 #include \"stdio.h\"

main()

{ int a[10],b[2][5],i,j=0,k=0; printf(\"Please input the array a:\\n\"); for(i=0;i<10;i++) scanf(\"%d\ for(i=0;i<10;i++) { if(a[i]%2==0) {

b[0][j]=a[i]; j++; }

else

{ b[1][k]=a[i]; k++; } }

for(j=0;j<=1;j++)

for(k=0;k<=4;k++)

printf(\"b[%d][%d]=%d \}

(4)找出一个二维数组的鞍点,即该位置上的元素在所在行上最大,在所在列上最小,注意也可能没有鞍点。 #include \"stdio.h\" #define M 3 #define N 4 main()

{ int a[M][N],i,j,k;

printf(\"Please input the array a:\\n\"); for(i=0;ifor(j=1;jif(a[i][j]>a[i][k]) k=j; for(j=0;jif(a[j][k]printf(\"%d %d,%d\\n\ } }

(5)有n个人围成一圈,顺序编号。从第1个人开始报数(从1到m),凡报到m的人退出圈子,求最后一个圈中的人的编号。 #include \"stdio.h\" main() {

int i = 0; int quit_num = 0; int n; int m; int num[100]; int *p = num;

int k = 0;

//总人数

//报数的最大数

//保存所有人的编号 //初始化指针,使其指向num数组

printf(\"Please input number of person: n = \");

scanf(\"%d\

printf(\"Please input the number m = \"); scanf(\"%d\

/*给所有的人编号为1到n */ for (i = 0 ; i < n ; i ++ ) { *(p + i) = i + 1; }

i = 0;

/*当未退出人数大于1时 执行循环*/ while(quit_num < n - 1) { while (i{ k++;

if(k==m) {*(p+i)=0; quit_num++; k=0; } } i++; } i=0; }

}

while (*p == 0) p ++;

//查找留在圈中的人

printf(\"The last one’s number is : %d\\n\" , *p);

实验7 指针

(1) 略

(2) 略

(3) 用指针作函数参数求4个整数中的最大者。 #include \"stdio.h\" void max(int *,int *); main()

{ int a,b,c,d,*pa,*pb,*pc,*pd; pa=&a;pb=&b;pc=&c;pd=&d;

printf(\"Please input the data a,b,c,d:\\n\"); scanf(\"%d%d%d%d\ max(pa,pb);

max(pa,pc); max(pa,pd);

printf(\"the max number of the datas is:%d\\n\}

void max(int *p,int *q) { int t;

if(*p<*q)

{ t=*p; *p=*q; *q=t; }

}

(4)编写一个对含有n个元素的一维数组求和的函数sum( ),要求用指针作为此函数的参数,并在主函数中调用此函数,实现对含有任意多个元素的一维数组求和的功能。 #include \"stdio.h\" #define N 5 int sum(int *); main()

{ int a[N],s=0,*p=a,i;

printf(\"Please input the array a:\\n\"); for(i=0;iprintf(\"the sum of the array a is:%d\\n\}

int sum(int *p) { int s,i;

for(i=0;i(5)编写一个在一维有序数组中插入数据的函数insert( ),并在主函数中调用它实现数据的插入。有序数组在主函数中给出,可以通过初始化获得,也可以通过键盘输入任意数据。

#include \"stdio.h\"

void insert(int *,int,int); main()

{ int i, a[6],x;

printf(\"Please input the array a:\\n\"); for(i=0;i<5;i++) scanf(\"%d\

printf(\"Please input the insert data x:\\n\"); scanf(\"%d\

insert(a, 5,x);

printf(\"the new array a:\\n\"); for(i=0;i<6;i++)

printf(\"%d \}

void insert(int *p, int n, int x)

{ int i,j;

for(i=0;ix) break; for(j=n;j>i;j--)

*(p+j)=*(p+j-1); *(p+i)=x; }

实验8 结构体和共用体

(1) 略 (2) 略

(3)*建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。 #include \"stdio.h\" struct list { char xh[4]; char xm[10]; char xb; int nl;

struct list *next; };

typedef struct list SLIST; SLIST *creat_list() { SLIST *h,*s,*r; int i;

h=(SLIST *)malloc(sizeof(SLIST)); r=h;

for(i=0;i<3;i++)

{ s=(SLIST *)malloc(sizeof(SLIST));

scanf(\"%s%s%d%c\ r->next=s; r=s; }

r->next=NULL; return h; }

void dele_list(SLIST *p,int age) { SLIST *q=p->next; while(q)

if(q->nl!=age)

{ p=p->next; q=q->next; } else

{ p->next=q->next; break; } }

main()

{ SLIST *head,*p; int age;

head=creat_list();

printf(\"Please input the age:\\n\"); scanf(\"%d\ dele_list(head,age); p=head->next; while(p!=NULL)

{ printf(\"%s, %s, %c, %d\\n\ p=p->next; } }

实验9 文件

(1)略

(2)编写程序实现将一个文本文件复制到另一个文本文件中,源文件内容自己定义。 #include \"stdio.h\"

main(int argc, char *argv[]) { FILE *in,*out;

if(argc!=3){ printf(\"please enter the filename\");exit(0);} if((in=fopen(argv[1],\"r\"))==NULL)

{ printf(\"cannot open infile\\n\"); exit(0); }

if((out=fopen(argv[2],\"w\"))==NULL) { printf(\"cannot open outfile\\n\"); exit(0); } while(!feof(in)) fputc(fgetc(in),out); fclose(in); fclose(out); }

实验10 综合编程

模拟试卷(一)参考答案

一.选择题(1~30每题1分,31~50每题2分,共70分)

1 C 11 B 21 A 31 C 41 C

二.填空题(每空2分,共30分)

空序号 【1】 【2】 【3】 【4】 【5】 【6】 【7】 【8】

答案 main() 11 6 4 5 1 1 0 1 i<=9 或 i<10 k%3 0 b 空序号 【9】 【10】 【11】 【12】 【13】 【14】 【15】 答案 10 20 0 1 B 4 3 3 4 0 10 1 11 2 12 yes -f 1 3 7 15 2 B 12 B 22 B 32 D 42 C 3 D 13 D 23 B 33 D 43 D 4 C 14 C 24 B 34 C 44 C 5 D 15 A 25 B 35 B 45 C 6 D 16 B 26 C 36 B 46 B 7 B 17 C 27 D 37 B 47 C 8 A 18 C 28 D 38 A 48 C 9 C 19 A 29 A 39 B 49 D 10 A 20 C 30 C 40 A 50 C 模拟试卷(二)参考答案

一.选择题(共35道小题,70分,每题2分)

1 A 11 C 21 A 31 D 2 A 12 D 22 A 32 A 3 A 13 A 23 D 33 B 4 C 14 A 24 B 34 B 5 B 15 B 25 D 35 C 6 D 16 B 26 A 7 A 17 B 27 A 8 B 18 D 28 B 9 C 19 A 29 D 10 D 20 C 30 A

二.填空题(每空2分,共30分)

题空号 【1】 【3】 【5】 【7】 【9】 【11】 【13】 【15】

答 案 double 0 fun(10) 题空号 【2】 【4】 【6】 答 案 x==0 –f 或 f*-1 或 –1*f 或 f*(-1) 或 (-1)*f x -1 或 (-1) &a[i] row !(s[i]>='0' && s[i]<='9') 或 s[i]<'0' || s[i] > '9' a=1.0;b=1.0;s=1.0; 【8】 *sn 或 sn[0] a[i] 或 *(a+i) a[row][colum] '\\0' 或 0 【10】 【12】 【14】