当前位置:首页 >> 电子/电路 >>

C语言程序设计实训教程习题和实验解答1


C 语言程序设计实训教程习题和实验解答
C 语言概述
1.【习题解答】 1结构化程序有三大基本结构:顺序、分支和循环. 2..算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成 按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。 。 有穷性:一个算法应包含有限的操作步骤而不能是无限的。 确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的,有零个或多个输入 输出,有一个或多个输出。 有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。 对于程序设计人员,必须会设计算法,并根据算法写出程序。可以用自然语言、流程 图、伪代码和计算机语言表示算法。 3.C 语言的主要特点有:语言简洁、紧凑,使用方便、灵活。ANSI C 一共只有32个关 键字;控制语句丰富,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分; 运算符丰富,共有34种;数据结构类型丰富;具有结构化的控制语句;语法限制不太严格, 程序设计自由度大;C 语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语 言的大部分功能,可以直接对硬件进行操作。因此有人把它称为中级语言;生成目标代码 质量高,程序执行效率高;与汇编语言相比,用 C 语言写的程序可移植性好。 4.用传统流程图表达如下:

数据类型与表达式
1.【习题解答】 一、选择题 1.C 2.B 二、填空题 1.整型、实型、字符型、枚举类型 2.3.000000 3.逗号运算符 4.三,自右向左 5.1,0 6.32767 三、编程题 1.已知球的半径为1.5cm,计算球的体积。 #include <stdio.h> void main() { float r=1.5,volume; volume=4.0/3*r*r*r; printf(“%f\n”,volume); } 2.输入两个数 a 和 b,求 a 除以 b 的商和余数? #include <stdio.h> void main() { int a,b,c,d; scanf(“%d,%d”,&a,&b); c=a/b; d=a%b; printf(“%d,%d”,c,d); } 3.A 4.B 5.A 6.B 7.D 8.B 9.D 10.C

3.输入三个学生的成绩,求这三个学生的总成绩和平均成绩。 #include <stdio.h> void main() { int a,b,c,sum; float average; printf(“please input students’ score:”); scanf(“%d,%d,%d”,&a,&b,&c); sum=a+b+c; average=sum/3.0; printf(“sum=%d,average=%f\n”,sum,average); } 2.【实验解答】 1.c=10 2. ①程序功能为输入两个数,求两数的差 ②c=10 3. #include<stdio.h> void main() { int a,b ,c; a=b=5 ; c=a+b ; printf(“a+b=%d”,c) ; } 4.运行结果 i=8,j=10,m=9,n=10,u=9,v=-10(回车) 5.x=16,y=24,z=24 6. ①100 ②100 d ③100 d ④120 x ⑤出错 ⑥304 0 D 68 D 112 p 321 A 68 68

7.编写一个 C 程序,输入 a,b,c 三个整数,求这三个数之和。 具体要求: 1) 在 Turbo C 环境或其他编译环境下编辑该程序,然后进行编译连接。 2) 运行该程序,检查你所编写的程序是否正确。 #include <stdio.h> void main() { int a,b,c,sum; scanf(“%d,%d,%d”,&a,&b,&c); sum=a+b+c; printf(“sum is : %d\n”,sum); }

顺序结构程序设计
1.【习题解答】 一、选择题 1. B 6.B 二、填空题 1. y=2 2.□□6□□6□6.00□6.00 (□表示空格) 3. k=11,k8=13,k16=b。 4. ahpu.edu.cn! □□□ahpu.edu.cn! □□□□□□□□□□ahpu ahpu□□□□□□□□□□□ 5. 5,4,c=3 6. i=56,j=789.000000,x=12345.000000,y=a,c=72 三、编程题 1.已知 x=3.2,y=7,z=2,计算 y/3*x-2的值。 #include<stdio.h> void main() { float x=3.2; int y=7,z=2; printf(“%f”, y/3*x-2); } 2.输入一个华氏温度,要求输出摄氏温度(结果保留2位)。公式为 c=5/9*(f-32)。 #include <stdio.h> void main() { float f,c; scanf(“%f”,&f); c=5.0/9*(f-32); printf(“c=%.2f”,c); } 2. C 3. A 4.A 5.D

3.从键盘输入一个小写字母,用大写形式输出该字母。 #include <stdio.h> void main() { char a,b; printf(“please input a little letter:”); scanf("%c",&a); b=a-32; printf("%c",b); } 4.把16进制数12a 以10进制形式输出。 #include <stdio.h> void main() { int a=0x12a; printf("%d",a); } 5.输入两个整数,将其值交换。 #include <stdio.h> void main() { int a,b,t; scanf("a=%d,b=%d",&a,&b); t=a; a=b; b=t; printf("a=%d,b=%d",a,b); } 2.【实验解答】 实验名称 顺序结构程序设计 1. ② 结果为0,因为 a,b 被定义为实型,而却以整型输入,类型不匹配。 2. 错误之处: 3. 运行结果 s=3 /(a+b)*(a+b); 应改为:s=3.0/((a+b)*(a+b)); -1,177777,ffff,65535 b=-2

4.编程并上机调试运行 1) 设圆半径为 r=1.5,求圆周长、面积。要求用 scanf 函数输入数据,输出时取小数点 后两位。 #include <stdio.h> void main() { float r,l,s,v; scanf("%f",&r); l=2*3.14*r; s=3.14*r*r; printf("l=%.2f,s=%.2f,v=%.2f",l,s); } 2) 输入一个3位十进制整数,分别输出百位、十位以及个位上的数。 #include <stdio.h> void main() { int a,b,c,d; scanf("%d",&a); b=a/100; c=a/10%10; d=a%10; printf("%d %d %d",b,c,d); } 3) 从键盘输入一个带2位的实数,将其整数部分和小数部分分离后输出。例如:输入 321.54,输出321.54=321+0.54。 #include <stdio.h> void main() { int a; float b,c; scanf("%f",&b); a=(int)b; c=b-a; printf("%.2f=%d+%.2f",b,a,c); }

4) 用 getchar 函数读入两个字符,然后分别用 putchar 和 printf 函数输出这两字符。 #include <stdio.h> void main() { char a,b; a=getchar(); b=getchar(); putchar(a); putchar(b); printf("\n%c%c",a,b); }

选择结构程序设计
1.【习题解答】 一、选择题 1. A。 二、填空题 1. (x>20&&x<30)||x<-100。 2. 1,0,0。 3. 585858。 4. 20,0。 5. 2。 6.a=3,b=2。 三、编程题 1.要求输入三个数,输出其中最大值。 #include<stdio.h> void main() { int a,b,c,max; scanf("%d%d%d",&a,&b,&c); max=a; if(max<b) max=b; if(max<c) max=c; printf("max is:%d\n",max); } 2.由键盘输入3个数,若输入的这3个数可以构成三角形,则计算以这3个数为边长的三 角形周长;如果不能,则输出提示错误信息。 #include <stdio.h> void main() { float a,b,c,l; printf("please input a,b,c\n"); scanf("%f,%f,%f",&a,&b,&c); if((a+b)>c&&(a+c)>b&&(b+c)>a) { 2. D。 3. A。 4. B。 5. C。 6. A。

l=a+b+c; printf("l=%f\n",l); } else printf("It is not triangle!\n"); } 3.从键盘上输入一个整数判断其奇偶以及正负。 #include "stdio.h" void main() { int a; scanf("%d",&a); if(a>0) { if(a%2==0) printf("It is PLUS even number"); else printf("It is PLUS odd number"); } else if(a<0) { if(a%2==0) printf("It is MINUS even number"); else printf("It is MINUS odd number"); } else printf("It is ZERO"); } 4.判断方程 ax2+bx+c=0的根的个数。 #include "stdio.h" void main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); if(b*b-4*a*c>0) printf("2"); else if(b*b-4*a*c==0) printf("1"); else printf("0"); }

5.从键盘输入表示年份的整数,判断是否为闰年。 #include "stdio.h" void main() { int year; scanf("%d",&year); if((year%400==0)||(year%4==0&&year%100!=0)) printf("It is runnian"); else printf("It is not runnian"); } 2.【实验解答】 实验名称 选择结构程序设计 1. if(‘0’<=c&&c<=’9’) if((‘A’<=c&&c<=’Z’)||(’a’<=c&&c<=’z’)) else 2.编程并上机调试运行 1) 给出一个不多于4位的正整数,求它是几位数? #include<stdio.h> void main() { int n; printf("Input a num(0<num<10000)"); scanf("%d",&n); if(n<10) printf("1\n"); else if(n<100) printf("2\n"); else if(n<1000) printf("3\n"); else printf("4\n"); } 2) 给出一个百分制成绩, 要求输出成绩等级’A’、 ’B’、 ’C’、 ’D’、 ’E’。 90分及以上为’A’, 80~89为’B’,70~79为’C’,60~69为’D’,60以下为’E’。用 switch 语句来实现。 #include<stdio.h> void main() {

int score; scanf("%d",&score); if(score<0||score>100) printf("Error!"); else { score=score/10; switch(score) { case 10: case 9:printf("A\n");break; case 8:printf("B\n");break; case 7:printf("C\n");break; case 6:printf("D\n");break; default:printf("E\n"); } } } 3) 输入四个数,要求按从大到小顺序输出。 #include<stdio.h> void main() { int a,b,c,d,t; scanf("%d%d%d%d",&a,&b,&c,&d); if(a<b){t=a;a=b;b=t;} if(a<c){t=a;a=c;c=t;} if(a<d){t=a;a=d;d=t;} if(b<c){t=b;b=c;c=t;} if(b<d){t=b;b=d;d=t;} if(c<d){t=c;c=d;d=t;} printf("%d,%d,%d,%d\n",a,b,c,d); } 4) 输入3个整数,将最大数与最小数输出。 #include <stdio.h> void main() { int a,b,c,t; int max,min;

scanf("%d%d%d",&a,&b,&c); max=min=a; if(max<b) max=b; else min=b; if(max<c) max=c; else min=c; printf("max=%d,min=%d",max,min); } 5) 输入一个字符,如果是数字字符,把它转换成相对应的数字并输出;如果不是,则 以带符号的十进制整数形式输出。 #include "stdio.h" void main() { char a; scanf("%c",&a); if(a>='0'&&a<='9') { a=a-'0'; printf("%d",a); } else printf("%d",a); }

循环结构程序设计
1.【习题解答】 一、选择题 1.A 二、填空题 1. 18或19 2. 0 3. 8921 4. 3,4 5. 35 6. 4 三、编程题 2. A 3. C 4. B 5. C 6. C

1.设计程序计算并输出1+ #include <stdio.h> void main() { int i; float s=0; for(i=1;i<=99;i+=2) s=s+1.0/i; printf(“s=%f\n”,s); } 2.编写程序输出下面图形

+

+……+

1 21 321 4321 54321 #include <stdio.h> void main() { { for(i=1;i<=j-1;i++) printf(“%d”,5-i+1); printf(“\n”);

int i,j; printf(“ “); }}

for(j=5;j>=1;j--) for(;i<=5;i++)

3.一球从100m 高度自由落下,每次落地后又反跳原高度的一半,再下落。求在第10次 落地时,共经多少米?第10次反弹高度? #include <stdio.h> void main() { float s=100,m=100,i; for(i=2;i<=10;i++) { m=m/2; s=s+m*2; } printf(“No.10 drop’s all distance is=%f\n”,s); printf(“No.10 up’s distance is=%f”,m/2); } 4.输入两个整数求其最大公约数。 #include <stdio.h> void main() { int m,n,i,t; scanf("%d %d",&m,&n); if (m<n) { t=n; n=m; m=t; } i=n; while((m%i!=0)||(n%i!=0)) i=i-1; printf("%d\n",i); } 5.输入一个正整数,将其逆序输出。 #include "stdio.h" void main() { int m,n; scanf("%d",&n); while(n!=0) {

m=n%10; n=n/10; printf("%d",m); } } 2.【实验解答】 实验名称 循环结构程序设计 1. 1) %1d 2)s=0 ld 3)s=0,n,i=1 s=0 i+=2

i<=2*n-1 i+=2 i+=2 while(i<=2*n-1);

2. 编程并上机调试运行 1) 编程求1!+2!+3!+…+10! #include <stdio.h> void main() { long s=1,i,t=1; for(i=2;i<=10;i++) { t=t*i; s=s+t; } printf("%ld",s); } 2) 打印以下图案 #include <stdio.h> void main() { int i,j; for(i=1;i<=4;i++) { for(j=1;j<4+i;j++) { if(i+j<5) printf(" "); else printf("*"); }

printf("\n"); } for(i=1;i<=3;i++) { for(j=1;j<=7-i;j++) { if(i>=j) printf(" "); else printf("*"); } printf("\n"); } } 3) 猴子吃桃。猴子第一天摘若干桃子,当即吃了一半,又加一个。第二天吃了剩下桃 子一半又多一个。以后每天早上都吃前一天剩下的一半多一个。第十天,只剩一个。问第 一天共摘多少个桃子。 #include <stdio.h> void main() { int s=1,i; for(i=2;i<=10;i++) s=(s+1)*2; printf("%d",s); } 4) 打印九九乘法表 #include <stdio.h> void main() { int i,j; for(i=1;i<=9;i++) for(j=1;j<=i;j++) { printf("%d*%d=%d ",i,j,i*j); if(i==j) printf("\n"); } }

5) 输出10-100之间的全部素数。 #include<stdio.h> void main() { int i,j; for(i=10;i<=100;i++) { for(j=2;j<=i;j++) { if(i%j==0) { if(i==j) printf("%d ",i); break; } } } } 实验名称 综合运用三种基本结构进行程序设计 1.百马百担。100匹马,驮100担,大马3担,中马2担,2个小马驮1担。问大、中、小马各 多少? #include <stdio.h> void main() { int i,j,k; for(i=0;i<=33;i++) for(j=0;j<=50;j++) { k=100-i-j; if(3*i+2*j+k/2.0==100) printf(“Da=%d,Zhong=%d,Xiao=%d\n”,i,j,k); } } 2.输入一行字符,分别统计其中英文字母、空格、数字和其它字符个数。 #include <stdio.h> void main() {

char c; int letter=0,space=0,digtal=0,other=0; while((c=getchar())!=‘\n’) { if((c>=‘A’&&c<=‘Z’)||(c>=‘a’&&c<=‘z’)) letter++; else if(c==‘ ‘) space++; else if(c>=‘0’&&c<=‘9’) digtal++; else other++; } printf(“letter=%d,space=%d,digtal=%d,other=%d”,letter,space,digtal,other); } 3.打印输出”水仙花数”。”水仙花数”是指一个3位,其各位数字的立方和等于该数本身。例 如:153。 #include <stdio.h> void main() { int i,j,k; for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) { if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) printf(“%d\n”,i*100+j*10+k); } }

4.将一个正整数分解成质因数的乘积。例如:输入90,打印90=2*3*3*5。 #include <stdio.h> void main() { int n,i=2; scanf(“%d”,&n); printf(“%d=“,n);

while(n>1) { if(n%i==0) { printf(“%d*”,i); n=n/i; } else i++; } printf(“\b “); } 5.利用循环语句编写程序:对一个正整数,将各位数字反序后的数组成一个整数输出。 例如:输入12345,输出54321。 #include <stdio.h> void main() { long m,n,sum=0; scanf(“%ld”,&m); while(m>0) { n=m%10; m=m/10; sum=sum*10+n; } printf(“%ld”,sum); } 6.一个素数加上1000以后是37的倍数,求满足这个条件的最小素数。 #include <stdio.h> void main() { int n=1,i; while(1) { n++; for(i=2;i<=n/2;i++) if(n%i==0) break; if((i>n/2)&&(n+1000)%37==0) {

printf(“%d”,n); break; } } } 7.”完数”。找1000以内的所有完数。一个数如果恰好等于它的因子之和,这个数就称为”完 数 ”。 #include <stdio.h> void main() { int i,j,sum,m; for(i=2;i<1000;i++) { sum=0; for(j=1;j<i;j++) if(i%j==0) sum+=j; if(sum==i) { printf("%d its factors are 1",i); for(m=2;m<i;m++) if(i%m==0) printf(",%d",m); printf("\n"); } } }

2.12.6 数组
【习题解答】 一、选择题 1. A 2. D 3. A 4. D 5. B 6. B 7. C 8. D 9. C 10. D 11. A 12. D

二、填空题 1. 2 2. r 3. 7 4. !dlrowolleh

三、编程题 1.从键盘输入 n 个整数,统计所有下标为奇数且数组元素的值为偶数的个数。 #include<stdio.h> void main() { int a[100]; int i,j,n,t,num=0; scanf(“%d”,&n); for(i=0;i<n;i++) scanf(“%d”,&a[i]); for(i=0;i<n;i++) if(i%2= =1&&a[i]%2= =0) num++; for(i=0;i<n;i++) printf(“%5d”,a[i]); printf(“\n%d”,num); } 2.将字符数组中的字母变换为其字母表顺序两位后的字母,如果是’z’或’Z’,则分别变为’b’ 或’B’,非字母字符不变。 即’a’ → ‘c’ ‘b’ →’d’ #include<stdio.h> #include<string.h> void main() { char a[50]; int i,j,n,t,num=0; gets(a); n=strlen(a); for(i=0;i<n;i++)

scanf(“%d”,&a[i]); for(i=0;i<n-1;i++) if(a[i]>=‘a’&&a[i]<=‘x’||a[i]>=“A”&&a[i]<=‘X’) a[i]=a[i]+2; else if(a[i]= =‘y’|| a[i]= =‘z’|| a[i]= =‘Y’|| a[i]= =‘Z’) a[i]=a[i]-24; puts(a); } 3. 判断任意整数 n 是否为回文数。 (回文数指正读反读都一样的数,如:2112,121等) #include<stdio.h> void main() { long n; int i,j,m,d[20]; scanf(“%ld”,&n); m=0; while(n!=0) { n=n/10; m++; } for(i=0,j=m-1;i<j;i++,j--) if(d[i]!=d[j]) break; if(i<j) printf(“NOT”); else printf(“YES”); } 4.从键盘输入10个整数,检查整数5是否包含在这些数据中,若是的话,找出它是第几个被 输入的。 #include<stdio.h> void main() { int a[10],i; for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(i=0;i<10;i++) if(n[i]==5) { printf(“5 is input the position %d\n.”,i+1);

break; } if(i>=10) printf(“5 is not in data.\n”); } 5.任意输入20个正整数,找出其中的素数,将这些素数由小到大排序并输出。 #include<stdio.h> void main() { int a[20],b[20],i,j,k,m; for(i=0;i<20;i++) scanf(“%d”,&a[i]); k=0; for(i=0;i<20;i++) { for(j=2;j<a[i]-1;j++) if(a[i]%j==0) break; if(j>=a[i]-1) { b[k]=a[i]; k++; } } for(i=0;i<k-1;i++) for(j=i+1;j<k;j++) if(b[j]<b[i]) { m=b[i]; b[i]=b[j]; b[j]=m; } for(i=0;i<k;i++) printf(“%5d”,b[i]); printf(“\n”); } 6.将4*5矩阵每一行按由大到小排序。 #include<stdio.h> void main() {

int a[4][5],i,j,k,m; for(i=0;i<4;i++) for(j=0;j<5;j++) scanf(“%d”,&a[i][j]); for(i=0;i<4;i++) for(j=0;j<5;j++) for(k=j+1;k<5;k++) if(a[i][k]>a[i][j]) { m=a[i][k]; a[i][k]=a[i][j]; a[i][j]=m; } for(i=0;i<4;i++) { for(j=0;j<5;j++) printf(“%5d”,a[i][j]); printf(“\n”); } } 【实验解答】 实验名称 数组的定义及使用 I 1.&a[i] a[i] n-1 i+1 min=j a[i] a[min]

2.编程并上机调试运行 1) 将一个数组中的值逆序存储,然后按顺序输出数组。如:原来数组存储为1,2,3,4,5 的,按要求重新存为5,4,3,2,1。 #include<stdio.h> void main() { int i,j,t,n,a[100]; scanf(“%d”,&n); for(i=0;i<n;i++) scanf(“%d”,&a[i]); for(i=0,j=n-1;i<j;i++,j--) { t=a[i]; a[i]=a[j];

a[j]=t; } for(i=0;i<n;i++) printf(“%5d”,a[i]); } 2) 打印出以下杨辉三角(要求打印8行) 。 1 1 1 3 3 1 1 4 6 4 1 5 10 10 …… #include<stdio.h> void main() { int i,j,a[8][8]; for(i=0;i<8;i++) for(j=0;j<8;j++) if(i= =j||j= =0) a[i][j]=1; else a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<8;i++) { for(j=0;j<8;j++) printf(“%5d”,a[i][j]); printf(“\n”); } } 3) 求4*4方阵两对角线元素之和及其转置矩阵。 #include<stdio.h> void main() { int i,j,a[4][4],b[4][4],s=0; for(i=0;i<4;i++) for(j=0;j<4;j++) 1 1 1 2

1 5 1

scanf(“%d”,&a[i][j]); for(i=0;i<4;i++) for(j=0;j<4;j++) { b[i][j]=a[i][j]; if(i= =j||i+j==3) s=s+a[i][j]; } for(i=0;i<4;i++) { for(j=0;j<4;j++) printf(“%5d”,b[i][j]); printf(“\n”); } printf(“%5d”,s); } 4) 输出 Fibonacci 数列的前20项。 #include<stdio.h> void main() { long a[20]={1,1}; int i; for(i=2;i<20;i++) a[i]=a[i-1]+a[i-2]; for(i=0;i<20;i++) printf(“%ld\t”,a[i]); } 5) 按公式计算,求 A20的值。 A1=1,A2=1; A3=3*A1+A2; A4=3*A2+A3; …… #include<stdio.h> void main() { long a[20]={1,1}; int i; for(i=2;i<20;i++)

a[i]=a[i-1]+3*a[i-2]; printf(“%ld”,a[19]); } 实验名称 数组的定义及使用 II 1. i=1 s[i]!=‘\0’ s[n]=‘\0’

2.编程并上机调试运行 1) 用冒泡法对10个整数排序。10个整数用 scanf 函数输入。 #include<stdio.h> void main() { int a[10]; int i,j,t; for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++) if(a[j]<a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} for(i=0;i<10;i++) printf(“%5d”,a[i]); } 2) 将两个字符串连接起来,不要用 strcat 函数。 #include<stdio.h> #include<string.h> void main() { char a[100],b[50]; int i,j,t; gets(a); gets(b); t=strlen(a); for(i=0;b[i]!=‘\0’;i++,t++) a[t]=‘\0’; puts(a); }

a[t]=b[i];

3) 输入一行字符串,统计其中的单词个数,单词之间用空格隔开。如:输入 I am boy !其中单词的个数为4个(不考虑大写字母) 。

a

#include<stdio.h> #include<string.h> void main() { char a[100]; int i,t; gets(a); t=0; for(i=0;a[i]!=‘\0’;i++) if(a[i]>=‘a’&&a[i]<=‘z’&&a[i-1]= =‘ ‘||i= =0) printf(“t=%d\n”,t); }

t++;

4) 找出一个二维数组的”鞍点”,即该位置上的元素在该行上最大,在该列上最小。也 可能没有鞍点。 #include<stdio.h> void main() { int a[10][10],i,j,k,ani,anj,max,flag; scanf(“%d,%d”,&m,&n); for(i=0;i<m;i++) for(j=0;j<n;j++) scanf(“%d”,&a[i][j]); for(i=0;i<m;i++) { max=a[i][0]; anj=0; if(a[i][j]>max) { max=a[i][j]; anj=j; } for(k=0,flag=1;k<m&&flag;k++) if(max>a[k][anj]) flag=0; if(flag) { ani=i; printf(“a[%d][%d]=%d\n”,ani,anj,max);

break; } } if(!flag) } 5) 已有一个排序好的数组(从小到大排序) ,现输入一个数,要求按原来排序的规律 将它插入数组中。 #include<stdio.h> void main() { int a[50],n,x; int i; scanf(“%d”,&n); for(i=0;i<n;i++) scanf(“%d”,&a[i]); printf(“input x:”); scanf(“%d”,&x); for(i=0;i<n;i++) if(a[i]>x) break; if(i= =n) a[i]=x; else for(j=n-1;j>=i;j--) a[j+1]=a[j]; a[i]=x; for(i=0;i<=n;i++) printf(“%5d”,a[i]); } 6) 比较用户输入的字符串是否为表示同意的 yes(用户可以用大写或小写) 。 #include "string.h" #include "stdio.h" void main() { int k; char s1[5],s2[]="yes"; printf("input a string:\n"); gets(s1); printf(“没有鞍点”);

k=0; while(s1[k]!=’\0’) { if(s1[k]>=’a’ && s1[k]<=’z’) s1=s1-32; k++; } k=0; while(s2[k]!=’\0’) { if(s2[k]>=’a’ && s2[k]<=’z’) s2=s2-32; k++; } if(strcmp(s1,s2)!=0) printf("st1!=st2\n"); else printf("st1=st2\n"); }

函数与预处理
1.【习题解答】 一、选择题 1.B 10.D 二、填空题 1. main 函数 2. main 函数 3. extern 4. return 5. void 6. #undef 7. #include 8. 34 9. 9 10. 15,23,5,24 11. double pow(float x,int n) pow(x,i) i<=n 12. t=1.0 break t*=x/i 13. n[10] !=‘\n’ n[ch-’0’]++ 三、编程题 1.写一个函数,求三个数的最大值。 #include <stdio.h> int max(int x,int y) { return x>y?x:y;} int max3(int x,int y,int z) { int t; 2.C 11.C 3.C 4.A 5.C 6.B 7.D 12.C 13.A 14.B 15.C 8.A 9.B

t=max(x,y); return z>t?z:t;} void main() { int a,b,c,t; printf(“input three numbers:”); scanf(“%d%d%d,&a,&b,&c); t=max3(a,b,c); printf(“The max number is %d”,t); } 2.写一个函数,对数列 s=1*2*3+3*4*5+…+n(n+1)(n+2)求和。 #include <stdio.h> int sum(int n) { int i,s; s=0; for(i=1;i<=n;i+=2) s=s+i*(i+1)*(i+2) return s; } void main() { int n; printf(“input n:”); scanf(“%d”,&n); printf(“1*2*3+3*4*5+…+%d*(%d)*(%d)=%d”,n,n+1,n+2,sum(n)); } 3.写一个函数,当输入整数 n,输出高度为 n 的等边三角形,当 n=5时的等边三角形如 下: * *** ***** ******* ********* #include <stdio.h> void triangle(int n) { int i,j;

for(i=0;i<n;i++) { for(j=0;j<=n-i;j++) putchar(‘ ‘); for(j=0;j<=2*i;j++) putchar(‘*’); putchar(‘\n’); } } void main() { int n; printf(“enter n:”); scanf(“%d”,&n); printf(“\n”); triangle(n); } 4.使用数组作为函数参数,实现数组中元素的逆序。 #include <stdio.h> #include <string.h> void change(int b[],int n) { int len,i,j; int t; for(i=0,j=n-1;i<n/2;i++,j--) { t=b[i]; b[i]=b[j]; b[j]=t;} } void main() { int i,arr[10]={1,2,3,4,5,6,7,8,9,10}; printf(“Before:”); for(i=0;i<10;i++) printf(“%d “,arr[i]); printf(“\n”); change(arr,10);

printf(“After:”); for(i=0;i<10;i++) printf(“%d “,arr[i]); printf(“\n”); } 5.递归法求解1+2+3+…+n。 #include <stdio.h> #define N 100 int sum(int a[],int n) { int s; if(n==1) s=a[n-1]; else s=sum(a,n-1)+a[n-1]; return s; } void main() { int a[N],n,i,k; scanf(“%d”,&n); for(i=0;i<n;i++) a[i]=i+1; k=sum(a,n); printf(“%d\n”,k); } 6.写一函数,输入4个数字字符,要求输出这4个数字字符时每两个数字间空一个空格。 例如:输入2012,应输入“2 0 1 2”。 #include "stdio.h" #include "string.h" void input(char b[10]); void main() { char a[10]; int i; for(i=0;i<4;i++) scanf("%c",&a[i]); input(a);

for(i=0;i<7;i++) printf("%c",a[i]); } void input(char b[10]) { int i,j; for(i=0;i<6;i+=2) { j=i; while(b[j]!='\0') j++; while(j>i+1) { b[j]=b[j-1]; j--; } b[j]=' '; } }

7.编写一个函数,计算 #include <stdio.h> long fact(int x); void main() { int m,n; long cmn; printf(“Input m,n:”); scanf(“%d,%d”,&m,&n); cmn=fact(m)/(fact(n)*fact(m-n)); printf(“The combination is %ld\n”,cmn); } long fact(int x) { long y; for(y=1;x>0;--x) y*=x;



return(y); } 2.【实验解答】 实验名称 函数程序设计 I 1. n*f(n-1) x=f(i) 2. power*=i m<=n sum+=f1(m,k) 3. 1) 运行结果: x1=5 /*此处 x 为全局变量*/ x2=3 /*此处 x 为局部变量*/ 2) 运行结果: x1=5 /*此处 x 为全局变量*/ x2=3 /*此处 x 为局部变量*/ x3=5 /*此处 x 为引用外部变量*/ 3) 此程序中 x 为静态变量,并且两个变量 x 所处的域不同 运行结果: HELLO i=1 x=10 y=5 C PROGRAM 1=18 x=20 HELLO 1=1 x=10 y=5 4. 编程并上机调试运行 1) 求方程 的根,用三个函数分别求当 大于0,等于0和小于0

时的根,并输出结果。从主函数输入 a、b、c 的值。 #include <stdio.h> #include <math.h> double x1,x2,p,q,disc; void greater_than_zero(double a,double b) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); } void equal_to_zero(double a,double b) { x1=x2=-b/(2*a); } void smaller_than_zero(double a,double b) { p=-b/(2*a);

q=sqrt(-disc)/(2*a); } void main() { double a,b,c; printf(“Please input a,b,c:”); scanf(“%lf,%lf,%lf”,&a,&b,&c); disc=b*b-4*a*c; printf(“root:\n”); if(disc>0) { greater_than_zero(a,b); printf(“x1=%f,x2=%f\n”,x1,x2); } else if(disc==0) { equal_to_zero(a,b); printf(“x1=x2=%f\n”,x1); } else { smaller_than_zero(a,b); printf(“x1=%f+%fi,x2=%f-%fi\n”,p,q,p,q); } } 2) 写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。 #include <stdio.h> int prime(int n) { int i; for(i=2;i<n;i++) if(n%i==0)break; if(i>=n) return 1; else return 0; } void main() {

int n; printf(“Input a integer:”); scanf(“%d”,&n); if(prime(n)) printf(“%d is a prime\n”,n); else printf(“%d is not a prime\n”,n); } 3) 用递归法求 n 阶勒让德多项式的值,递归公式为:

#include<stdio.h> double p(int n,double x) { if(n==0) return 1; else if(n==1) return x; else return ((2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x))/n; } void main() { int n; double x; printf(“Input n and x:\n”); scanf(“%d,%lf”,&n,&x); printf(“%f”,p(n,x)); }

实验名称 函数程序设计 II 1.此程序功能是将数组中元素按从大到小排序,本题运行结果是 10 7 5 3 -7 。

2.此程序考查的是带参数的宏展开,代入宏,展开得 a/=k+m*k+m/k+m*k+m。代入值 得程序运行结果是3。 3.编程并上机调试运行 1) 编写一函数,由实参传递一个字符串,统计此字符串中字母、数字、空格和其他字 符的个数,在主函数中输入字符串以及输出上述结果。 #include <stdio.h> #include <string.h> int letter=0,digit=0,space=0,other=0; void count(char s[]) { int i=0; while(s[i]!=‘\0’) { if(s[i]>=‘A’&&s[i]<=‘Z’||s[i]>=‘a’&&s[i]<=‘z’) letter++; else if(s[i]>=‘0’&&s[i]<=‘9’) digit++; else if(s[i]==‘ ‘) space++; else other++; i++; } } void main() { char s[20]; printf(“Plese input a string:”); gets(s); count(s); printf(“letter=%d,digit=%d,space=%d,other=%d\n”,letter,digit,space,other); } 2) 写一函数,输入一个十六进制数,输出相应的十进制数。

#include<stdio.h> #include <string.h> #include <math.h> void convert(char s[]) { int lenght,i; double num=0; lenght=strlen(s); for(i=0;i<lenght;i++) { if(s[i]>=‘0’&&s[i]<=‘9’) num+=(s[i]-’0’)*pow(16,lenght-i-1); else if(s[i]>=‘A’&&s[i]<=‘F’) num+=(s[i]-55)*pow(16,lenght-i-1); } printf(“%f”,num); } void main() { char s[10]; gets(s); convert(s); } 3) 定义一个带参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏 时的实参。输出已交换后的两个值。 #include <stdio.h> #define swap(a,b) t=a;a=b;b=t; void main() { int a,b,t; scanf(“%d%d”,&a,&b); swap(a,b); printf(“%d,%d”,a,b); } 4) 编写函数, 实现两个字符串连接, 在主函数中输入两个字符串以及输出连接后的结果 (不 要用库函数是 strcat) #include <stdio.h>

#include <string.h> void main() { void connect(char s1[],char s2[]); char s1[20],s2[20]; printf(“Please input string1:”); gets(s1); printf(“Please input string2:”); gets(s2); connect(s1,s2); printf(“The connected string is:”); puts(s1); } void connect(char s1[],char s2[]) { int length1,i,j; length1=strlen(s1); for(i=length1,j=0;s2[j]!=‘\0’;i++,j++) s1[i]=s2[j]; s1[i]=‘\0’; } 5) 编写函数 fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组 中的值在主函数中赋予。 例如,二维数组如下,则函数值为77。

#include <conio.h> #include <stdio.h> #define M 4 #define N 5 int fun(int a[M][N]) { int i,j,s=0; for(i=0;i<M;i++) for(j=0;j<N;j++)

if(i==0||i==M-1||j==0||j==N-1) s+=a[i][j]; return s; } void main() { int aa[M][N]={{1,3,5,7,9},{2,4,6,8,10},{3,4,5,6,7},{4,5,6,7,8}}; int i,j,y; clrscr(); printf(“The original data is :\n”); for(i=0;i<M;i++) { for(j=0;j<N;j++) printf(“%5d”,aa[i][j]); printf(“\n”); } y=fun(aa); printf(“\nThe sum is:%d\n”,y); printf(“\n”); }

指针
1.【习题解答】 一、选择题 1.A 4.B 6.C 5.B 7.A 8.A 2.D 3.B

9.B 11.B 14.B 二、填空题

10.C 12.A 15.B 13.C

1.abcdeedcba 2._11_13_15_17_19(下划线表示空一格) 3. 11,9 7,11 4.6_3(下划线表示空一格) 5.6385 三、编程题 1.将10个整数存入一维数组中,编程实现逆序存放并输出。 #include<stdio.h> void main( ) { int a[10],*p,*head,*end,temp; printf("please input 10 numbers:\n"); for(p=a;p<=a+9;p++) scanf("%d",p); printf("The original array:\n"); for(p=a;p<=a+9;p++) printf("%d ",*p); head=a; end=a+9; while(head<end) { temp=*head; *head=*end; *end=temp; head++; end--; } printf("The array has been inverted:\n"); for(p=a;p<=a+9;p++) printf("%d ",*p); } 2.将3行3列的二维矩阵转置输出。 #include<stdio.h>

void main( ) { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int b[3][3], i, j,*p=a; printf(“array a:\n”); for ( i = 0; i <= 1; i++) { for(j =0; j <= 2; j++) { printf(“%5d”,*p); b[j][i]=a[i][j]; } printf(“\n”); } printf(“array b:\n”); for ( i = 0; i <= 2; i++) { for( j = 0; j <= 2; j++) printf(“%5d”, *p); printf(“\n”); } } 3.对输入的6个字符串按从小到大的顺序排序,用指针方法输出已排好序的字符串。 #include<stdio.h> void main() {char *alpha[6]={“a”,”bc”,”def”,”1”,”23”,“qq”},**p; int i; p=alpha; for(i=0;i<6;i++,p++) printf(“%s”,*p); printf(“\t”); p=p-3; for(i=0;i<6;i++,p++) printf(%c\t,**p); printf(“\n”) ;} 4.编程实现两个字符串的比较,不用系统函数 strcmp。 #include <stdio.h> void main() { int strcmp(char *p1,char *p2);

int i; char str1[10],str2[10]; puts("请输入两个字符串:"); puts("字符串1:"); gets(str1); puts("字符串2:"); gets(str2); printf("比较结果为: %d\n",strcmp(str1,str2)); } int strcmp(char *p1,char *p2) { int i=0; while(*(p1+i)==*(p2+i) && *(p1+i)!=0) i++; return(*(p1+i)-*(p2+i)); } 5.编程实现对两个字符串进行交叉连接。例如:有两个字符串“abcd”、”1234”,交叉 连接后结果为“a1b2c3d4“。 #include<stdio.h> void mystrcat(char *s,char *ct) { while(*(s++)); s--; while(*ct) *(s++) = *(ct++); *s = '\0'; } int main() { char na[100],nb[100]; gets(na); gets(nb); mystrcat(na,nb); printf("%s\n",na); return 0;
}

2.【实验解答】 实验一

1) ① a 或 a[0] ④a[j][k]=0 2) ① &a 2.

②j==k ② &b

③a[j][k]=1

1) 程序功能:使用指针变量求解2个整数的升序输出 2) 程序结果:26 3.编程并上机调试运行(用指针编写程序并上机验证) 1) 使用变量的指针作函数调用的实参,降序输出3个整数。 void exchange(int *pointer1, int *pointer2) { int temp; temp=*pointer1, *pointer1=*pointer2, *pointer2=temp; } /*主函数 main()*/ void main() { int num1,num2,num3; /*从键盘上输入3个整数*/ printf("Input the first number: "); scanf("%d", &num1); printf("Input the second number: "); scanf("%d", &num2); printf("Input the third number: "); scanf("%d", &num3); printf("num1=%d, num2=%d, num3=%d\n", num1, num2, num3); /*输出3个变量的初值*/ /*排序*/ if( num1 < num2 ) /*num1<num2*/ exchange( &num1, &num2 ); /*指针作实参调用函数 exchange(),互换 num1和 num2的值*/ if( num1 < num3 ) exchange( &num1, &num3 ); if( num2 < num3 ) exchange( &num2, &num3 ); /*输出排序结果*/ printf("排序结果: %d, %d, %d\n",num1,num2,num3); } 2) 将数组 a 中的 n 个整数按相反顺序存放。 void inv(int *x,int n) /*形参 x 为指针变量*/ { int *p,temp,*i,*j,m=(n-1)/2; i=x;j=x+n-1;p=x+m; for(;i<=p;i++,j--)

{ temp=*i;*i=*j;*j=temp;} return; } void main() { int i,a[10]={3,7,9,11,0,6,7,5,4,2}; printf("The original array:\n"); for(i=0;i<10;i++) printf("%d,",a[i]); printf("\n"); inv(a,10); printf("The array has benn inverted:\n"); for(i=0;i<10;i++) printf("%d,",a[i]); printf("\n"); } 3) 从 7 个数中找出其中最大值和最小值(用指针实现) int max , min ; void max_min_value (int array[ ] , int n ) { int *p , *array_end ; array_end = array + n ; max = min = *array ; for ( p=array+1; p<array_end ; p + + ) if (*p>max ) max = *p ; else if( *p < min ) min = *p ; } void main( ) { int i, number[7] ; printf ( “ enter 7 data \n ”) ; for( i=0; i<7; i++ ) scanf ( “ %d ”, &number[i] ) ; max_min_value( number, 7 ) ; printf ( “ \n max = %d , min = %d \n ”, }

max , min ) ;

4) 编写函数实现在字符数组 w 中插入字符 x。函数原型是:void fun(char *w,char *x,int *n);。说明: (1) 假设 w 数组中的数已按由小到大顺序存放;

(2) n 指向存储单元中数组元素的个数; (3) 插入后数组中的数仍有序。 void fun (char *w,char x,int *n) { int i,p; p=0; w[*n]=x; while (x>w[p]) p++ ; for(i=*n;i>p;i--) w[i]= *(w+i-1); w[p]=x; ++ *n; } 实验二 1. 运行结果为:book ① 处填 * ②处填 ps+10 ③处填 ps

2. 程序功能:在输入的字符串中查找有无‘k’字符。 3.编程并上机调试运行 1) 输入5个国名并按字母顺序排列后输出 #include"string.h" void main() { void sort(char *name[],int n); void print(char *name[],int n); static char *name[]={ "CHINA","AMERICA","AUSTRALIA", "FRANCE","GERMANY"}; int n=5; sort(name,n); print(name,n); } void sort(char *name[],int n) { char *pt; int i,j,k; for(i=0;i<n-1;i++) { k=i;

for(j=i+1;j<n;j++) if(strcmp(name[k],name[j])>0) k=j; if(k!=i) { pt=name[i]; name[i]=name[k]; name[k]=pt; } } } void print(char *name[],int n) { int i; for (i=0;i<n;i++) printf("%s\n",name[i]); } 2) 编写函数实现求某字符串的长度,运行时输入字符串。 #include <stdio.h> int len(char* str) { int i=0; while(*str++) i++; return i; } void main() { char s[80]; int num; gets(s); num=len(s); printf(“%d”,num); } 3) 用函数调用方式,实现字符串的复制。 void string_copy(char *str_from, char *str_to) { int i=0; for(; (*(str_to+i)=*(str_from+i))!='\0'; i++) ; } void main() { static char array_str1[20]="I am a teacher.";

/*循环体为空语句*/

char array_str2[20]; string_copy(array_str1, array_str2); printf("array_str2=%s\n", array_str2);

/*数组名作实参*/

} /*string_copy()函数:复制一个字符串*/ /*形参:字符指针 str_from 接收源串,字符指针 str_to 存储目标串 */ 4) 编写函数将字符串 s 中的子字符串 s1全部替换为子字符串 s2.用指针、函数实现。 #include<stdio.h> #include<string.h> #define MAXLENGTH 100 void replace(char *s, char *s1, char *s2) { int len1 = strlen(s), len2=strlen(s1), len3 = strlen(s2); char buf[MAXLENGTH]; int i, j, k, l; for(i=0, k=0; i<len1-len2+1) { for(j=0; j<len2; j++) { if(*(s+i+j) != *(s1+j)) break; } if(j == len2) { l = 0; while(l<len3) *(buf+k++) = *(s2+l++); i += len2; continue; } else { *(buf+k++) = *(s+i++); } } while(i<len1) *(buf+k++) = *(s+i++); *(buf+k) = '\0'; strcpy(s, buf); } void main()

{ char str[MAXLENGTH] = {NULL}; char str1[MAXLENGTH] = {NULL}; char str2[MAXLENGTH] = {NULL}; printf("请输入字符串 s: \n"); gets(str); fflush(stdin); printf("请输入字符串 s1: \n"); gets(str1); fflush(stdin); printf("请输入字符串 s2: \n"); gets(str2); replace(str, str1, str2); printf("替换后的字符串: %s\n", str); return 0; } 5) 将输入的字符串逆序输出。 #include<stdio.h> #include<string.h> int fun (char *); int main() { char a[256]; printf("请输入字符串:\n"); gets(a); fun(a); printf("逆序转换后的字符串是:\n"); puts(a); } int fun(char *s) { int n,i;char c; n=strlen(s); printf("%d",n); for(i=0;i<=(n/2-1);i++) { c=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=c; } return 0;

} 6) 将一个指针所指向字符串中的大写字母复制到另一个指针所指向的字符数组中。 #include <stdio.h> #define N 100 void fun(char *strA, char *strB); void main(void) { char strA[N]; char strB[N]; printf("请输入字符串:\n"); gets(strA); fun(strA, strB); printf("复制后的字符串:\n"); puts(strB); } void fun(char *strA, char *strB) { int i; int k = 0; for (i=0; strA[i] != '\0'; i++) { if ((strA[i] >= 'A') && (strA[i] <= 'Z')) { strB[k++] = strA[i]; } } strB[k] = '\0'; }

结构体和共用体
1.【习题解答】 一、选择题

1. B

2.B

3.C

4.A

5.A

6.D

7.C

8.D

9.B

10.D

二、填空题

1. struct node ,p=person ,p<q ,high= p->high
2. 3341 三、编程题 1.定义描述日期(年、月、日)的结构体类型。编写函数,以参数方式带入某日期, 计算相应日起在相应年是第几天,并以函数值形式带回。 #include<stdio.h> struct dat { int year,month,day; }; void calculate(struct dat*); void main () { int n; struct dat date; printf(“please input year:”); scanf(“%d”,date.year); printf(“please input year:”); scanf(“%d”,date.month); printf(“please input year:”); scanf(“%d”,date.day); calculate(&date); } void calculate(struct dat*date) { int a,b,c,i; int sum=0; a=date->year; b=date->month; c=date->day; if((a%4==0)&&(a%100!=0)||(a%400==0)) { for(i=0;i<b;i++) { if(i==1&&i==3&&i==5&&i==7&&i==8&&i==10) sum+=31; else 3.0

{ if(i==2) sum+=29; else sum+=30; } sum+=c; } if((a%4!=0)||(a%100==0)&&(a%400!=0)) { for(i=0;i<b;i++) { if(i==1&&i==3&&i==5&&i==7&&i==8&&i==10) sum+=31; else { if(i==2) sum+=28; else sum+=30; } sum=sum+c; } } printf(“%d\n”,sum); } } 2.建立简单的同学通讯录,输入并存放10个同学的通讯信息,通讯录信息包括姓名、 电话号码、电子邮箱。 #include<stdio.h> #define NUM 20 struct mem { char name[20]; char phone[10]; char addr[100]; }; void main()

{ struct mem man[NUM] int i; for(i=0;i<NUM;i++) { printf(“input name:\n”); gets(man[i].name); printf(“input phone:\n”); gets(man[i].phone); printf(“input address:\n”); gets(man[i].addr); } printf(“name\t\tphone\n\n”); for(i=0;i<NUM;i++) printf(“%s\t\t%s\t\t%s\n”,man[i].name,man[i].phone, man[i].addr); } 3.有10个选举人,3个候选人,每人只能投一个候选人的票,统计每个候选人的总票数。 #include<stdio.h> #include<string.h> struct person { char name[10]; int count; }leader[3]={“zhang”,0,”wang”,0,”li”,0}; void main() { int i,j; char leader_name[10]; for(i=1;i<=10;i++) { scanf(“%s”,lead_name); for(j=0;j<3;j++) if(strcmp(lead_name,leader[j].name)==0) leader[j].count++; } for(j=0;j<3;j++) printf(“%8s:%d\n”,leader[j].name,leader[j].count); }

4.利用共用体的特点,分别取出 int 变量中高字节和低字节中两个数据。 #include<stdio.h> union word { char ch[2]; int n; }; void main() { union word w; w.n=0x1234; printf(“the low is =%x\n”,w.ch[0]); printf(“the high is =%x\n”,w.ch[1]); w.ch[0]=‘a’; printf(“the number is %x\n”,w.n); } 5. 动态分配一块内存区域,输入并存放一个学生的数据,学生数据包括学号、姓名、 性别和一门课的成绩。 #include<malloc.h> void main() { struct stu { int num; char *name; char sex; float score; }*ps; ps=(struct stu *)malloc(sizeof(struct stu)); ps->num=101; ps->name=“zhang ming”; ps->sex=‘M’; ps->score=85.5; printf(“Number=%d\nName=%s\nSex=%c\nScore=%.1f\n”,ps->num,ps->name, ps->sex,ps->score); free(ps); } 6. 求两个链表中相同元素的集合。

#include<malloc.h> #include<stdio.h> typedef struct node { int info; struct node *next; }HeadLink; HeadLink *jj(HeadLink *h1,HeadLink *h2) { HeadLink *pa,*pb,*pc,*u; pa=h1->next; pb=h2->next; pc=h1; while(pa&&pb) if(pa->info==pb->info) { pc->next=pa; pc=pa; pa=pa->next; u=pb; pb=pb->next; free(u); } else if(pa->info<pb->info) { u=pa; pa=pa->next; free(u); } else { u=pb; pb=pb->next; free(u); } while(pa) { u=pa; pa=pa->next;

free(u); } while(pb) { u=pb; pb=pb->next; free(u); } pc->next=NULL; return (h1); } HeakLink *headcreat() { HeadLink *head,*p; int c; head=(struct node *)malloc(sizeof(struct node)); head->next=NULL; scanf(“%d”,&c); while(c!=0) { p=(struct node *)malloc(sizeof(struct node)); p->info=c; p->next=head->next; head->next=p; scanf(“%d”,&c); } return head; } void print(HeadLink *head) { HeadLink *p; p=head->next; printf(“\n”); while(p) { printf(“%3d”,p->info); p=p->next; } }

void main() { HeadLink *h1,*h2; clrscr(); h1=headcreat(); h2=headcreat(); printf(“find the same list :\n”); h1=jj(h1,h2); print(h1); } 2.【实验解答】 实验名称 结构体与共用体 1.略 2. i=0 if(stud[i].score<60) n++

3.编程并上机调试运行 1) 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入每个学生 的数据,要求打印出3门课总平均成绩,以及最高分的学生数据(包括学号、姓名、3 门课的成绩、平均分数) ,在主函数中输出结果。 要求:分别用 ave()函数求总平均分,max()函数求出最高分学生数据。 #include<stdio.h> struct student { long num; char name[20]; float chinese; float math; float english;

}; void main() { void ave(struct student stu[],float a[]); struct student stu[5]; float a [3],b[5]; int num,i; for(i=0;i<5;i++) scanf(“%ld,%s,%f,%f,%f”,&stu[i].num,stu[i].name,&stu[i].chinese, &stu[i].math,&stu[i].english); ave(stu,a); num=max(stu); for(i=0;i<3;i++)

printf(“%10.1f”,a[i]); printf(“\n”); printf(“%ld,%s,%f,%f,%f,%f”,stu[num].num,stu[num].name,stu[num].chinese, stu[num].math,stu[num].english,b[num]); } void ave(struct student stu[],float a[]) { int i; float score[3]={0,0,0}; for(i=0;i<5;i++) { score[0]+=stu[i].chinese; score[1]+=stu[i].math; score[2]+=stu[i].english; } for(i=0;i<3;i++) a[i]=score[i]/5; } int max(struct student stu[]) { int i,num; float score[5]; for(i=0;i<5;i++) score[i]=stu[i].chinese+stu[i].math+stu[i].english; num=0; for(i=1;i<5;i++) if(score[num]<score[i]) num=i; return num ; } 2) 利用两个结构体变量,求解复数的积。 (5+3i)*(2+6i) #include<stdio.h> struct number { int p1;int p2;}; void main() { struct number a,b; int x,y; scanf(“%d,%d,%d,%d”,&a.p1,&a.p2,&b.p1,&b.p2); printf(“(%d+%di)*(%d+%di)\n”,a.p1,a.p2,b.p1,b.p2);

x=a.p1*b.p1-a.p2*b.p2; y=a.p1*b.p2+a.p2*b.p1; printf(“resutl : %d+%di”,x,y); } 3) 工资管理系统中,有结构类型描述员工的编号、姓名、实际工资的表单,称之为表 单1,由于操作失误,导致两个工人的数据颠倒,编写程序改正过来。 #include<stdio.h> struct employeel { long num; char name[20]; float rwage; }; void main() { struct employeel w1,w2,w; w1.num=1001; strcpy(w1.name,”zhang pin”); w1.rwage=1200; w2.num=1003; strcpy(w2.name,”wang hong”); w2.rwage=1400; printf(“w1: %ld %s %.2f\n”,w1.num,w1.name,w1.rwage); printf(“w2: %ld %s %.2f\n”,w2.num,w2.name,w2.rwage); w=w1; w1=w2; w2=w; printf(“w1: %ld %s %.2f\n”,w1.num,w1.name,w1.rwage); printf(“w2: %ld %s %.2f\n”,w2.num,w2.name,w2.rwage); }

实验二 结构体与共用体 1. union un 2. 编程并上机调试运行 1) 口袋中有黑、白、红、黄、绿5种颜色的球若干个,每次从口袋中取四个球,求得 到四种不同颜色的球的可能取法,打印出每种取法的4种颜色。 #include<stdio.h> void main()

{ enum color{ black,white,red,yellow,green}; enum color a,b,c,d,t; int count=0,i; for(a=black;a<=green;a++) for(b=black;b<=green;b++) if(a!=b) { for(c=black;c<=green;c++) if(c!=a&&c!=b) { for(d=black;d<=green;d++) if(d!=a&&d!=b&&d!=c) { count++; printf(“No%d : “,count); for(i=1;i<=4;i++) { switch(i) { case 1:t=a;break; case 2:t=b;break; case 3:t=c;break; case 4:t=d;break; } switch(t) { case black:printf(“%-10s”,” black”);break; case white:printf(“%-10s”,” white”);break; case red:printf(“%-10s”,”red”);break; case yellow:printf(“%-10s”,” yellow”);break; case green:printf(“%-10s”,” green”);break; } } printf(“\n”); } } printf(“\n total:%5d\n”,count); }

2) 设有一描述零件加工的数据结构为: 零件号 pname;工序号 wnum;指针 next 建立一个包含5个零件加工数据的单向链表。 #include<stdlib.h> #include<stdio.h> struct node { int pname; int wnum; struct node *next; }; void main() { struct node *create(); void print(); struct node *head; head=NULL; head=create(head); print(head); } struct node *create(struct node *head) { struct node *p1,*p2; int i=0; p1=p2=(struct node *)malloc(sizeof(struct node)); scanf(“%d”,&p1->pname); scanf(“%d”,&p1->wnum); p1->next=NULL; i++; while(i<5) { if(head= =NULL) head=p1; else p2->next=p1; p2=p1; p1=(struct node *)malloc(sizeof(struct node)); scanf(“%d”,&p1->pname); scanf(“%d”,&p1->wnum); i++; p1->next=NULL; } return head; }

void print(struct node *head) { struct node *temp; temp=head; while(temp!=NULL) { printf(“%6d%6d”,temp->pname,temp->wnum); temp=temp->next; } } 3) listA 和 listB 是两个按学号升序排列的有序链表,每个链表中的结点包括学号和总 成绩。要求把两个链表合并,并使链表仍有序。 #include<stdlib.h> #include<stdio.h> struct node { int num; float score; struct node *next; }; void main() { struct node *create(); struct node *listC; void print(); struct node *link(); struct node *head; head=NULL; listA=create(head); listB=create(head); listC=(struct node *)malloc(sizeof(struct node)); listC->next=NULL; head=link(listA,listB,listC); print(head); } struct node *create(struct node *head) { struct node *p1,*p2; p1=p2=(struct node *)malloc(sizeof(struct node)); scanf(“%d”,&p1->num); scanf(“%f”,&p1->score); p1->next=NULL; while(p1->num!=0) { if(head= =NULL)

head=p1; else p2->next=p1; p2=p1; p1=(struct node *)malloc(sizeof(struct node)); scanf(“%d”,&p1->num); scanf(“%f”,&p1->score); p1->next=NULL; } return head; } void print(struct node *head) { struct node *temp; temp=head; while(temp!=NULL) { printf(“%6d%f”,temp->num,temp->score); temp=temp->next; } } struct node *link(struct node *listA, struct node *listB,struct node *listC) { struct node *p1,*p2,*p3; p1=listA->next; p2=listB->next; p3=listC; while(p1&&p2) if(p1->num<p2->num) { p3->next=p1; p3=p1; p1=p1->next; } else { p3->next=p2; p3=p2; p2=p2->next; } if(p1!=NULL) { p3->next=p1; p3=p1; p1=p1->next;

} else if(p2!=NULL) { p3->next=p2; p3=p2; p2=p2->next; } } 4) 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中 的结点所包含的年龄等于此年龄,则将此结点删去。 #include<stdlib.h> #include<stdio.h> struct node{ int num; char name[20]; char sex; int age; struct node *next; }; void main() { struct node *create(); struct node *delete(); void print(); struct node *head; int age; head=NULL; head=create(head); print(head); scanf(“%d”,&age); head=delete(head,age); print(head); } struct node *create(struct node *head) { struct node *p1,*p2; p1=p2=(struct node *)malloc(sizeof(struct node)); scanf(“%d”,&p1->num); gets(p1->name); scanf(“%c,%d”,&p->sex,&p->age); p1->next=NULL; while(p->num!=0)

{

if(head= =NULL) head=p1; else p2->next; p2=p1; p1=(struct node *)malloc(sizeof(struct node)); scanf(“%d”,&p1->num); gets(p1->name); scanf(“%c,%d”,&p->sex,&p->age); p1->next=NULL;

} } struct node *delete(struct node *head, int age) { struct node *temp,*p; temp=head; if(head= =NULL) printf(“\n List is null!\n”); else { temp=head; while(temp->next!=NULL) if(temp->age!=age) { p=temp; temp=emp->next; } else { if(temp= =head) { head=head->next; free(head); } else { p->next=temp->next; free(temp); } } } } void print(struct node *head) { struct node *temp; temp=head;

while(temp!=NULL) { printf(“\n%d---%s---%c---%d”,temp->num,temp->name,temp->sex,temp->age); temp=temp->next; } } 5) 编写程序寻找单链表中最小值的结点,将链表中数据域值最小的结点移到链表的最 前面。 #include<malloc.h> #include<stdio.h> typedef struct node { int info; struct node *next; }HeadLink; HeadLink *delinsert(HeadLink *h) { HeadLink *p,*pre,*q; p=h->next; pre=h; q=p; while(p->next) { if(p->next->info<q->info) { pre=p; q=p->next; } p=p->next; } if(q!=h->next) { pre->next=q->next; q->next=h->next; h->next=q; } return h; } HeakLink *headcreat() { HeadLink *head,*p; int c; head=(struct node *)malloc(sizeof(struct node)); head->next=NULL; scanf(“%d”,&c);

while(c!=0) { p=(struct node *)malloc(sizeof(struct node)); p->info=c; p->next=head->next; head->next=p; scanf(“%d”,&c); } return head; } void print(HeadLink *head) { HeadLink *p; p=head->next; printf(“\n”); while(p) { printf(“%3d”,p->info); p=p->next; } } void main() { HeadLink *h; clrscr(); h=headcreat(); printf(“\n output list before:”); print(h); h=delinsert(h); printf(“\n output list after:”); print(h); }

位运算和文件
1.【习题解答】 一、选择题 1. A(提示:短整型分配两个字节,%o 为八进制输出格式控制符) 。 2. D(提示:见课本附录,优先级) 。 3. D(提示:见课本附录,优先级) 。 4. B(提示:0x 开头表示该数为十六进制数) 。 5. D 6. A 7. D(提示:’\\’表示一个’\’,参考转义字符) 8. C 9. A 10.A 二、填空题 1.1 三、编程题 1.编程求满足下列条件的最小的正整数。 1) 大于400; 2) 加上2是6的倍数; 3) 加上3是7的倍数。 将计算结果输出并存储到 C:\RESULT.DAT 文件中。 #include <stdio.h> void PRINT(int n) { FILE *out; printf(“n=%d\n”,n); if((out=fopen(“C:\\RESULT.DAT”,”w+”))!=NULL) fprintf(out,”n=%d”,n); fclose(out); } void main() { int n=401; while(1) { 2.feof() 3. r 4. 10L 5. 640

if((n+2)%6==0) if((n+3)%7==0) { PRINT(n); break; } else n++; else n++; } } 2.有两个磁盘文件”A”和”B”,各存放一行字母,要求把这两个文件中的信息合并(按 字母顺序排列) ,输出到一个新文件”C”中。 #include<stdio.h> #include<stdlib.h> void main() { FIFE *fp; int i,j,n,i1; char c[100],t,ch; if((fp=fopen(“A”,”r”))==NULL) { printf(“\ncan not open file\n”); exit(0); } printf(“file A:\n”); for(i=0;(ch=fgetc(fp))!=EOF;i++) { c[i]=ch; putchar(c[i]); } fclose(fp); i1=i; if((fp=fopen(“B”,”r”))==NULL) { printf(“\ncan not open file\n”); exit(0); } printf(“file B:\n”);

for(i=i1;(ch=fgetc(fp))!=EOF;i++) { c[i]=ch; putchar(c[i]); } fclose(fp); n=i; for(i=0;i<n;i++) for(j=i+1;j<n;j++) if(c[i]>c[j]) {t=c[i];c[i]=c[j];c[j]=t;} printf(“\nfile C:\n”); fp=fopen(“C”,”W”); for(i=0;i<n;i++) {putc(c[i],fp);putchar(c[i]);} printf(“\n”); fclose(fp); } 2.【实验解答】 实验名称 位运算和文件 3.1)”file1.txt” 2)!=# 3)fp 4.从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个 磁盘文件”test.txt”中保存。输入的字符串以”!”结束。 #include<stdio.h> #include<string.h> void main() { FILE *fp; char string[30]; int i=0; printf(“please input a string:\n “); gets(string); while(string[i]!=‘!’) { if(string[i]>=‘a’&& string[i]<=‘z’) string[i]= string[i]-32; i++; } fp=fopen(“test.txt”,”w”);

if(fp==NULL) printf(“Cannot open this file\n”); fwrite(string,sizeof(char),strlen(string),fp); fclose(fp); } 5.从键盘输入若干文本(每行不超过80个字符) ,写到文件 myfile.txt 中,用-1作为字符 串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数 ReadText 和 WriteText 实现。 #include<stdio.h> #include<string.h> #include<stdlib.h> void WriteText(FILE *); void ReadText(FILE *); void main() { FILE *fp; if((fp=fopen(“myfile.txt”,”w”))=NULL) { printf(“open fail!!\n”); exit(0); } WriteText(fp); fclose(fp); if((fp=fopen(“myfile.txt”,”r”))=NULL) { printf(“open fail!!\n”); exit(0); } ReadText (fp); fclose(fp); } void WriteText(FILE *fw) { char str[81]; printf(“Enter string with -1 to end:\n”); gets(str); while(strcmp(str,”-1”)!=0) {

fputs(str,fw); fputs(“\n”,fw); gets(str); } } void ReadText(FILE *fr) { char str[81]; printf(“\nRead file and output to screen:\n”); fgets(str,81,fr); while(!feof(fr)) { printf(“%s”,str); fgets(str,81,fr); } } 6.在磁盘文件上存有10个学生的数据。要求将第1、3、5、7、9个学生数据输入计算机, 并在屏幕上显示出来。 #include<stdio.h> #include<stdlib.h> struct student_type { char name[10]; int num; int age; char sex; }stud[10]; void main() { int i; FILE *fp; if((fp=fopen(“stud.dat”,”rb”))==NULL) { printf(“can not open file\n”);exit(0); } for(i=0;i<10;i+=2) { fseek(fp,i*sizeof(struct student_type),0); fread(&stud[i],sizeof(struct student_type),1,fp); printf(“%s %d %d %c\n”,stud[i].name,stud[i].num,stud[i].age,stud[i].sex);

} fclose(fp); } 7.有一个磁盘文件,将它的内容显示在屏幕上,并把其内容复制到另一文件上。 #include<stdio.h> void main() { FILE *fp1,*fp2; fp1=fopen(“file1.c”,”r”); fp2=fopen(“file2.c”,”w”); while(!feof(fp1))putchar(getc(fp1)); rewind(fp1); while(!feof(fp1))putchar(getc(fp1),fp2); fclose(fp1);fclose(fp2); }

C++
1.【习题解答】 1.运行结果为: before swap,x:5,y:6 after swap,x:6,y:5 2. 6 3 3 3。 3. 不同的继承方式,导致不同访问属性的基类成员在派生类中的访问属性也有所不 同。 公有继承, 使得基类 public 和 protected 成员的访问属性在派生类中不变, 而基类 private 成员不可访问。私有继承,使得基类 public 和 protected 成员都以 private 成员身份出现在派 生类中, 而基类 private 成员不可访问。 保护继承中, 基类 public 和 protected 成员都以 protected 成员身份出现在派生类中,而基类 private 成员不可访问。 4.派生类构造函数执行的一般次序为:调用基类构造函数;调用成员对象的构造函数; 派生类的构造函数体中的内容。 5.多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定 函数的再抽象。C++支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函 数是其中主要的方式。 6.带有纯虚函数的类是抽象类。抽象类的主要作用是通过它为一个类族建立一个公共 的接口,使它们能够更有效地发挥多态特性。抽象类声明了一组派生类共同操作接口的通 用语义,而接口的完整实现,即纯虚函数的函数体,要由派生类自己给出。但抽象类的派 生类并非一定要给出纯虚函数的实现,如果派生类没有给出纯虚函数的实现,这个派生类 仍然是一个抽象类。 7. 流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据 的流动,一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向 流中)插入。操作系统是将键盘、屏幕、打印机和通信端口作为扩充文件来处理的,I/O 流类就是用来与这些扩充文件进行交互,实现数据的输入与输出。 2.【实验解答】 实验名称 C++程序设计 1.电子日历 编写一个程序,设计一个电子日历类 CDate 的界面。满足如下要求: 1) 用日/月/年格式输出日期。 2) 可运行日期加一天的操作。 3) 设置日期 #include<iostream> #include<cstdlib> using namespace std; class CDate

{ int m_nDay;int m_nMonth;int m_nYear; public: CDate(){} CDate(int day,int month,int year) {SetDate(day,month,year);} void Display(); void AddDay(); void SetDate(int day,int month,int year) { m_nDay=day; m_nMonth=month; m_nYear=year;} ~ CDate(){}; private: bool IsLeapYear(); }; void CDater::Display() { char day[5],month[5],year[5]; _itoa(m_nDay,day,10); _itoa(m_nMonth,month,10); _itoa(m_nYear,year,10); cout<<day<<“/”<<month<<“/”<<year<<endl; } void CDater:: AddDay() { m_nDay++; if(IsLeapYear()) if(m_nMonth==2&&m_nDay==30) {m_nMonth++;m_nDay=1;return;} else if(m_nMonth==2&&m_nDay==29) {m_nMonth++;m_nDay=1;return;} if(m_nDay>31) if(m_nMonth==12) { m_nYear++;m_nMonth=1;m_nDay=1;} else { m_nMonth++;m_nDay=1;} }

bool CDate::IsLeapYear() { bool bLeap; if(m_nYear%4==0&& m_nYear%100!=0|| m_nYear%400==0) bleap=true; else bleap=false; return bleap; } void main() { CDate d(2004,9,25); cout<<“Current date:”; d.Display(); d.AddDay(); cout<<“Add 1 to Current date:”; d.Display(); d.SetDate(2004,10,1); cout<<“After reset Date,the date:”; d.Display(); } 2.统计银行存款问题 设计一个程序,其中有3个类,即 CBank,BBank 和 GBank,分别为中国银行类、工商 银行类和农业银行类。每个类都包含一个私有数据 balance,用于存放储户在该行的存款 数,另有一个友元函数 total 用于计算储户在这3家银行中的总存款数。 #include<iostream> using namespace std; class BBank; class GBank; class CBank; { int balance; public: CBank(){balance=0;} CBank(int b){balance=b;} void getbalance(){cout<<“Input the savings in China Bank:”;cin>>balance;} void disp(){cout<<“The savings in China Bank is:”<<balance<<endl;} friend void total(CBank ,BBank,GBank); };

class BBank { int balance; public: BBank(){balance=0;} BBank(int b){balance=b;} void getbalance(){cout<<“Input the savings in Business Bank:”;cin>>balance;} void disp(){cout<<“The savings in Business Bank is:”<<balance<<endl;} friend void total(CBank ,BBank,GBank); }; class GBank { int balance; public: GBank(){balance=0;} GBank(int b){balance=b;} void getbalance(){cout<<“Input the savings in Agriculture Bank:”;cin>>balance;} void disp(){cout<<“The savings in Agriculture Bank is:”<<balance<<endl;} friend void total(CBank ,BBank,GBank); }; void total(CBank A ,BBank B,GBank C) { cout<<“Total saving is:”<<A.balance+B.balance+C.balance<<endl;} int main() { CBank X(100); BBank Y; GBank Z; X.disp();Y.disp();Z.disp(); Y.getbalance();Z.getbalance(); total(X,Y,Z); return 0; } 3.编写一个哺乳动物类 Mammal,再由此派生出狗类 Dog,二者都声明 Speak()成员函 数,该函数在基类中被声明为虚函数,声明一个 Dog 类的对象,通过此对象调用 Speak 函 数,观察运行结果。 #include<iostream> using namespace std; class Mammal

{ public: Mammal():itsAge(1){cout<<“Mammal constructor…\n”;} ~ Mammal(){cout<<“Mammal destructor…\n”;} virtual void Speak() const{cout<<“Mammal speak!\n”;} }; class Dog:public Mammal { public: Dog(){cout<<“Dog constructor…\n”;} ~Dog(){cout<<“Dog destructor…\n”;} void Speak()const{cout<<“Woof!\n”;} }; int main() { Mammal *pDog=new Dog; pDog->Speak(); return 0; } 程序运行结果: Mammal constructor… Dog constructor… Woof! Dog destructor… Mammal destructor… 4.声明一个基类 shape,在此基础上派生出 Rectangle 和 Circle,二者都有 GetArea() 函数计算对象的面积。使用 Rectangle 类创建一个派生类 Square。 #include<iostream> using namespace std; class Shape { public: Shape(){} ~Shape(){} virtual float GetArea(){return -1;} }; class Circle:public Shape {

public: Circle(float radius):itsRadius(radius){} ~Circle(){} float GetArea(){return 3.14*itsRadius*itsRadius;} private: float itsRadius; }; class Rectangle:public shape { public: Rectangle(float len,float width):itsLength(len),itsWidth(width){} ~Rectangle(){} virtual float GetArea(){retirm itsLength*itsWidth;} virtual float GetLength(){return itsLength;} virtual float GetWidth(){return itsWidth;} private: float itsWidth; float itsLength; }; class Square:public Rectangle { public: Square(float len); ~Square(){} }; Square::Square(float len):Rectangle(len,len){} int main() { Shape *sp; sp=new Circle(5); cout<<“The area of the Circle is”<<sp->GetArea()<<endl; delete sp; sp=new Rectangle(4,6); cout<<“The area of the Rectangle is”<< sp->GetArea()<<endl; delete sp; sp=new Square(5); cout<<“The area of the Square is”<< sp->GetArea()<<endl; delete sp; }

【参考文献】
[1]谭浩强.C 程序设计[M].北京:清华大学出版社,2005. [2]周鸣争.C 语言程序设计教程[M].成都:电子科技大学出版社,2005. [3]全国计算机等级考试考题研究组.全国计算机等级考试历年真题必练——二级(C)[M]. 北 京:北京邮电大学出版社,2012 [4]全国计算机等级考试考题研究组. 4in1全国计算机等级考试四合一过关训练 二级 C 语言 (新大纲)[M].北京:机械工业出版社,2006 [5]李俊杰.C 语言复习指南与题解[M].北京:清华大学出版社,2003. [6]谢宝陵,骆健,史国川.C 语言知识点与典型例题解析[M].北京:清华大学出版社,2005. [7]赵海兰.C 语言程序设计精讲精练[M].成都:电子科技大学出版社,2005. [8]张基温.C 语言程序设计案例教程习题解析与实验指导[M].北京:清华大学出版社,2007. [9]顾治华,陈天煌,贾仰理等.C 语言程序设计学习辅导与等级考试精解[M].成都:四川大 学出版社,2005. [10]盛夕清,赵阳,林科学等.C 语言程序设计学习指导、实验指导与课程设计[M].北京:中 国水利水电出版社,2006. [11]谭浩强. C 语言程序设计题解与上机指导[M].北京:清华大学出版社,2005. [12]陈朔鹰.C 语言程序设计习题集 (第二版) [M]. 北京:人民邮电出版社, 2003年2月。 [13] 田淑清 .C 语言程序设计辅导与习题集》[M]. 北京:中国铁道出版社,2000年1月 [14] 钱 能.C++程序设计教程——设计思想与实现[M].北京:清华大学出版社,2009. [15]钱能.C++程序设计教程——习题及解答[M].北京:清华大学出版社,2009. [16]郑莉,董渊,张瑞丰.C++语言程序设计[M].北京:清华大学出版社,2004.


相关文章:
TP-5884.0101C语言程序设计实训教程习题和实验解答
TP-5884.0101C语言程序设计实训教程习题和实验解答_工学_高等教育_教育专区。C 语言程序设计实训教程习题和实验解答 2.1 C 语言概述【习题解答】 1 结构化程序有...
C语言程序设计实验指导书课后答案
C语言程序设计实验指导书课后答案_教育学_高等教育_教育专区。C语言程序设计实验指导书实验内容答案答案实验一(1) 编程求 37+29 的值,实习 VC 环境。 #include<...
《C语言程序设计教程》实验及习题解答
三、教材习题解答(第 1 章—第 11 章) 1部分 Turbo C 集成开发环境简介 Turbo C 是个集程序编辑、编译、连接、调试为一体的 C 语言程序开发环境,...
C语言程序设计实验指导及习题解答(最新)(1)资料
C 语言程序的开发过程 和调试方法的介绍;C 语言程序设计相关章节实验项目; 《C 语言程序设计教程》一书中各章 节习题的参考解答;配合全国计算机等级考试二级 C ...
C语言程序设计实训教程 课后题答案
C语言程序设计实训教程 课后题答案_工学_高等教育_教育专区。包含该书课后全部答案。。C 语言实训教程自测题答案、判断题 1 B 2 A 3 B 4 B 5...
java6 程序设计实验指导+课后习题答案
C语言程序设计实验习题... 7页 1下载券j​a​v​a​6​ ​程...Java6 程序设计实践教程实验指导+课后答案 阅读人数:207 人页数:8 页第 1 章...
C语言程序设计实验与习题答案
C语言程序设计实验与习题答案_其它_高等教育_教育专区。重庆大学出版社 2.程序填空 (1)以下程序的功能是计算 1~50 之间能被 7 整除的整数之和。 #include<...
C语言程序设计实验教程2014学生版
C语言程序设计实验教程2014学生版_教育学_高等教育_教育专区。C 语言程序设计实验...145 -2- 第 1 章 引论 1.1 本章导学、教学目标 1.了解程序和程序设计...
C语言程序设计实验教程2014教师版
C语言程序设计实验教程2014教师版_电脑基础知识_IT/计算机_专业资料。C 语言程序...146 -2- 第 1 章引论 1.1 本章导学、教学目标 1.了解程序和程序设计...
《C语言程序设计实践教程》答案-完整版
C语言程序设计实践教程答案-完整版_理学_高等教育_教育专区。4.2 练习题一...4.2 练习题一、选择题 1. 2. 3. 4. D B A B和D 5. C 6. A 7....
更多相关标签: