当前位置:首页 >> 工学 >>

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


C 语言程序设计实训教程习题和实验解答 2.1 C 语言概述 【习题解答】 1 结构化程序有三大基本结构:顺序、分支和循环. 2..算法可以理解为有基本运算及规定的运算顺序所构成的完整 的解题步骤。或者看成按照要求设计好的有限的确切的计算序列, 并且这样的步骤和序列可以解决一类问题。 。 有穷性:一个算法应包含有限的操作步骤而不能是无限的。 确定性:算法中每一个步骤应当是确定的,而不能应当是含糊 的,有零个或多个输入输出,有一个或多个输出。 有效性:算法中每一个步骤应当能有效地执行,并得到确定的 结果。 对于程序设计人员,必须会设计算法,并根据算法写出程序。 可以用自然语言、流程图、伪代码和计算机语言表示算法。 3.C 语言的主要特点有:语言简洁、紧凑,使用方便、灵活。 ANSI C 一共只有 32 个关键字;控制语句丰富,程序书写自由,主 要用小写字母表示,压缩了一切不必要的成分;运算符丰富,共有 34 种;数据结构类型丰富;具有结构化的控制语句;语法限制不太

严格,程序设计自由度大;C 语言允许直接访问物理地址,能进行 位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进 行操作。因此有人把它称为中级语言;生成目标代码质量高,程序 执行效率高;与汇编语言相比,用 C 语言写的程序可移植性好。 4.用传统流程图表达如下:

2.2 数据类型与表达式 【习题解答】 一、选择题 1.C 2.B 3.A 4.B 5.A 6.B 7.D 8.B 9.D 10.C 二、填空题 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.输入三个学生的成绩,求这三个学生的总成绩和平均成绩。 #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); } 【实验解答】 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 321 A D 68 D 112 p 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); }

2.3 顺序结构程序设计 【习题解答】 一、选择题 1. 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> (□表示空格) 2. C 3. A 4.A 5.D 6.B

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

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

【实验解答】 实验 顺序结构程序设计 1. ② 结果为 0,因为 a,b 被定义为实型,而却以整型输入, 类型不匹配。 2. 错误之处: s=3 /(a+b)*(a+b); 应改为:s=3.0/((a+b)*(a+b));

3. 运行结果 -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); }

2.4 选择结构程序设计 【习题解答】 一、选择题 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; 2. D。 3. A。 4. B。 5. C。 6. A。

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) { 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"); } 【实验解答】 实验名称 选择结构程序设计 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); }

2.5 循环结构程序设计 【习题解答】 一、选择题 1.A C 二、填空题 1. 18 或 19 2. 0 3. 8921 4. 3,4 5. 35 6. 4 三、编程题 1.设计程序计算并输出 1+ + +……+ #include <stdio.h> void main() {
1 3 1 5 1 99

2. A

3. C

4. B

5. C

6.

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() { int i,j; for(j=5;j>=1;j--) { for(i=1;i<=j-1;i++)

printf(“ “); for(;i<=5;i++) printf(“%d”,5-i+1); printf(“\n”); } } 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); } } 【实验解答】 实验一 循环结构程序设计 1. 1) %1d 2)s=0 ld s=0 i+=2 i<=2*n-1 i+=2 i+=2

3)s=0,n,i=1

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,oth er); } 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. 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]) if(i<j) else } 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); printf(“NOT”); printf(“YES”); break;

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 1 2 1 3 1 4 1 5 …… #include<stdio.h> void main() { int i,j,a[8][8]; for(i=0;i<8;i++) 6 10 1 3 4 1 1 10 5 1

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++)

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); } 3) 输入一行字符串, 统计其中的单词个数, 单词之间用空格隔开。 如:输入 I am a boy !其中单词的个数为 4 个(不考虑大写字 母) 。 a[t]=b[i];

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

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) printf(“没有鞍点”);

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); 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");

}

2.7 函数与预处理 【习题解答】 一、选择题 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) 2.C 11.C 3.C 4.A 5.C 6.B 7.D 8.A 9.B

12.C 13.A 14.B 15.C

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; 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.编写一个函数,计算 c(m, n) ?
m! 。 n !(m ? n)!

#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); } 【实验解答】

实验一 函数程序设计 I 1. n*f(n-1) x=f(i) 2. power*=i m<=n 3. 1) 运行结果: x1=5 x2=3 2) 运行结果: x1=5 x2=3 x3=5 /*此处 x 为全局变量*/ /*此处 x 为局部变量*/ /*此处 x 为全局变量*/ /*此处 x 为局部变量*/ /*此处 x 为引用外部变量*/ sum+=f1(m,k)

3) 此程序中 x 为静态变量,并且两个变量 x 所处的域不同 运行结果: HELLO i=1 x=10 y=5 C PROGRAM 1=18 x=20 HELLO 1=1 x=10 y=5 4. 编程并上机调试运行
2 2 1) 求方程 ax ? bx ? c ? 0 的根,用三个函数分别求当 b ? 4ac 大于

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 阶勒让德多项式的值,递归公式为:
1 (n ? 0) ? ? x (n ? 1) ? ?((2n ? 1)?x ? p ( x) ? (n ? 1)?p ( x)) / n (n ? 1) n ?1 n?2 ?

#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,sp ace,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。
1 3 5 7 9 2 4 6 8 10 3 4 5 6 7 4 5 6 7 8

#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(“\n”); } y=fun(aa); printf(“\nThe sum is:%d\n”,y); printf(“\n”); } printf(“%5d”,aa[i][j]);

2.8 指针 【习题解答】 一、选择题 1.A 6.C 11.B 二、填空题 1.abcdeedcba 2._11_13_15_17_19(下划线表示空一格) 3. 11,9 7,11 4.6_3(下划线表示空一格) 5.6385 三、编程题 2.D 7.A 12.A 3.B 8.A 13.C 4.B 9.B 5.B 10.C 14.B 15.B

1.将 10 个整数存入一维数组中,编程实现逆序存放并输出。 #include<stdio.h> void { 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--; main( )

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

【实验解答】 实验一 指针的定义及使用 I 1) ① a 或 a[0] 2) ① &a 2. 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); ②j==k ② &b ③a[j][k]=1 ④a[j][k]=0

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 ; min = *p ;

else if( *p < min ) } void { int i, number[7] ; printf ( “ enter for( i=0; i<7; i++ ) main( )

7 data \n ”) ;

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; } 实验二 指针的定义及使用 II 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)) } if(j == len2) { l = 0; while(l<len3) *(buf+k++) = *(s2+l++); i += len2; continue; } break;

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

2.9 结构体和共用体 【习题解答】 一、选择题 1. B 10.D 二、填空题 1. struct node ,p=person ,p<q ,high= p->high 2. 3341 三、编程题 1.定义描述日期(年、月、日)的结构体类型。编写函数,以参 数方式带入某日期,计算相应日起在相应年是第几天,并以函数值 形式带回。 #include<stdio.h> 3.0 2.B 3.C 4.A 5.A 6.D 7.C 8.D 9.B

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 { 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); } 【实验解答】 实验一 结构体的定义使用 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].engli sh); 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].ch

inese, 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: ; printf(“w2: ; w=w1; w1=w2; w2=w; printf(“w1: ; printf(“w2: ; }

%ld

%s

%.2f\n”,w1.num,w1.name,w1.rwage)

%ld

%s

%.2f\n”,w2.num,w2.name,w2.rwage)

%ld

%s

%.2f\n”,w1.num,w1.name,w1.rwage)

%ld

%s

%.2f\n”,w2.num,w2.name,w2.rwage)

实验二 共用体与链表的使用 1. union un 2. 编程并上机调试运行 1) 口袋中有黑、白、红、黄、绿 5 种颜色的球若干个,每次从口 袋中取四个球,求得到四种不同颜色的球的可能取法,打印出每

种取法的 4 种颜色。 #include<stdio.h> void { 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); main()

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

2.10 位运算和文件 【习题解答】 一、选择题 1. A(提示:短整型分配两个字节,%o 为八进制输出格式控制 符) 。 2. D(提示:见课本附录,优先级) 。 3. D(提示:见课本附录,优先级) 。 4. B(提示:0x 开头表示该数为十六进制数) 。 5. D 6. A 7. D(提示:?\\?表示一个?\?,参考转义字符) 8. C 9. A 10.A 二、填空题 1.1 2.feof() 3. r 4. 10L 5. 640

三、编程题 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) { 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); } 【实验解答】 实验名称 位运算和文件

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

2.11 C++程序设计基础 【习题解答】 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 流类就是用来与这些扩充文件进行交互,实现数据的输入与输出。 【实验解答】 实验 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 is:”<<A.balance+B.balance+C.balance<<endl;} int main() { CBank X(100); BBank Y; saving

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 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(){} len,float

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


相关文章:
《C语言程序设计教程》实验及习题解答
三、教材习题解答(第 1 章—第 11 章) 1 第一部分 Turbo C 集成开发环境简介 Turbo C 是一个集程序编辑、编译、连接、调试为一体的 C 语言程序开发环境,...
TP-5884.0101C语言程序设计实训教程习题和实验解答
TP-5884.0101C语言程序设计实训教程习题和实验解答_工学_高等教育_教育专区。C 语言程序设计实训教程习题和实验解答 2.1 C 语言概述【习题解答】 1 结构化程序有...
C语言程序设计实验指导书课后答案
C语言程序设计实验指导书课后答案_教育学_高等教育_教育专区。C语言程序设计实验指导书实验内容答案答案实验一(1) 编程求 37+29 的值,实习 VC 环境。 #include<...
C语言程序设计实验指导及习题解答(最新)(1)资料
C 语言程序的开发过程 和调试方法的介绍;C 语言程序设计相关章节实验项目; 《C 语言程序设计教程》一书中各章 节习题的参考解答;配合全国计算机等级考试二级 C ...
java6 程序设计实验指导+课后习题答案
C语言程序设计实验习题... 7页 1下载券j​a​v​a​6​ ​程...Java6 程序设计实践教程实验指导+课后答案 阅读人数:207 人页数:8 页第 1 章...
C语言程序设计实验教程2014学生版
C语言程序设计实验教程2014学生版_教育学_高等教育_教育专区。C 语言程序设计实验...8 1.4 习题 ......
C语言程序设计实验指导(课后习题)参考答案(包括勘误)
课后习题》参考答案 实验 1: 1.主函数 2-4:DDC 5.stdio.h 6-9:CCCC 实验 2: 1.double 2-4:ABB 5.2 6-12:CDDDADC 13.! 14.8 15-17:ACC ...
C语言程序设计实验与习题答案
C语言程序设计实验与习题答案_其它_高等教育_教育专区。重庆大学出版社 ...C语言程序设计实训教程习... 82页 免费 《C语言程序设计实验指导... 5页 ...
c语言程序设计实验指导课后答案
c语言程序设计实验指导课后答案 隐藏>> 链表取奇数 #include <stdio.h> #include <stdlib.h> struct node { int data; struct node *next; }; int main(vo...
C语言程序设计实验教程2014教师版
C语言程序设计实验教程2014教师版_电脑基础知识_IT/计算机_专业资料。C 语言程序...8 1.4 习题 ......
更多相关标签: