C语言课后习题答案(最终)

更新时间:2024-05-31 21:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第0章 习 题

1. 将下列十进制数分别转化为二进制数、八进制数和十六进制数: (1)128 (2)511 (3)1024 (4)65535 (5)1048575 答:

(1)10000000、200、80 (2)111111111、777、1FF (3)10000000000、2000、400

(4)1111111111111111、177777、FFFF (5)11111111111111111111、3777777、FFFFF

2. 将下列二进制数转化为十进制数和十六进制数: (1)1100110101B (2)101101.1011B 答:

(1)821、335 (2)45.6875、2D.B

3. 写出下列数的原码、反码、补码:15、-20、-27/32 答:

(1)00001111、00000000、00001111 (2)10010100、11101011、11101100 (3)1.1101100、1.0010011、1.0010100

4. 16位无符号定点整数的数值表示范围为多少?8位补码的表示范围是多少?16位补码的表示范围是多少? 答:

5.1968年Dijkstra提出结构化程序设计的思想的原因是什么?简要回答结构化程序设计的经典定义。 答:

结构化程序设计概念的提出主要是源于程序结构的层次性与模块化使得构造出来的软件具有良好的可理解性和可维护性,随着软件规模的扩大与复杂性的提高,程序的可维护性成为程序设计者们关注的重要问题之一。

如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。

6.C程序在内存中存储在哪儿?计算机的内存空间是如何分区的?分区存放不同类型的数据的目的是什么? 答:

0~65535、-128~127、-32768~32767

C语言程序属于应用程序,程序代码本身存放在应用程序区,程序运行时处理的数据存计算机的内存空间主要分为3个区:系统程序区、应用程序区和数据区,其中数据区

放在应用程序数据区。

又分为系统程序数据区和应用程序数据区两类。系统程序区主要存放操作系统程序,计算机开机启动时,主要从该区取出程序分析执行;应用程序区主要存放应用程序设计者编制的应用程序;数据区则作为上述两类程序运行时的变量和中间结果的存放空间。

程序运行时所需要的不同存储属性的变量将分别分配在这几个数据区和寄存器区。寄存器区在CPU内部,而不在存储器中,所以C语言寄存器型变量的运算速度最快,但是在CPU内部,寄存器非常有限,一般只有几个到几十个,所以C程序的寄存器型变量实际只有几个。

7.简要回答冯.诺依曼计算机的基本原理。 答:

计算机硬件系统的核心是由中央处理器(CPU)和可执行的主存组成的计算引擎。这里,主存存储程序(可执行的机器指令序列)和数据,是可以直接寻址单元的线性序列。除主存外,计算机系统还有辅存即辅助存储器,用来保存当前没有载入主存的、部分或临时载入的程序和数据(例如硬盘)。同时,计算机系统还需要从外界获取数据或者将处理后的数据通知外界,这就需要另外一个组件即一组通信设备(例如显示器、键盘等),使用它们可以在用户和计算机之间以及计算机和计算机之间进行数据和命令交换。

8.规范化编程的作用是什么?规范化编程主要包括哪几方面的内容?根据你的认识说一说什么样的程序才是具有规范化编码风格的程序。 答:

规范化编程的作用就是使代码容易阅读,无论是对程序员本人,还是对其他人。风格良规范化编程主要包括以下几方面的内容:

(1) 命名的问题 (2) 源程序的书写问题 (3) 算法设计的问题 (4) 程序注释 好的代码更容易阅读和理解,其中的错误也更少。

第1章 习 题

1.C语言的主要特点有哪些? 答:

一种语言之所以能存在和发展,并具有生命力,总是有其不同于其他语言的特点。C语言的主要特点如下。

(1) 语言简洁、紧凑,使用方便、灵活。(2) 运算符丰富。(3) 数据结构类型丰富,具有现代化的各种数据结构。(4) 具有结构化的控制语句。(5) 语法限制不太严格,程序设计自由度大。(6) C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。(7) 一般仍习惯将C语言称为高级语言,因为C程序也要通过编译、连接才能得到可执行的目标程序,这是和其他高级语言相同的。

2.简要叙述C语言程序的构成,并说明一个C程序要正确地运行,必须要有什么函数,该函数在程序中的地位如何? 答:

C语言是一种结构化程序设计语言,具体地说,C语言是一种函数模块式结构的程序设计语言,所有的C程序都是由一个或多个函数构成的。一个C程序可由一个主函数和若干个其它函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。这些函数是由编译系统提供的标准函数或用户自己定义的函数,其中有一个特别的函数“main”我们称之为主函数。一个C程序要正确地运行,都必须有且只能有一个主函数,主函数是程序运行的入口,C程序从主函数开始执行,并最终从主函数结束。

3.开发一个C程序的一般过程是什么? 答:

开发一个C程序,通常包括以下几个步骤:(1)编辑C语言源程序 (2)编译和链接(3)执行C程序。当我们用任一编辑软件(编辑器)编写好C源程序后,就以文本文件的形式保存在计算机的磁盘上,该文本文件即为C的源程序文件。当我们想运行一个C程序时,首先要进行程序编译和程序链接,从而生成机器代码即可执行文件。生成可执行文件后,就可以在操作系统控制下运行。

4.指出下面哪些是C语言的关键字?

A. char B. abc C. printf D. Int

E. float F. define G. include H. PI 答:

A E

5.下列说法正确的是( )。

A. 在书写C语言源程序时,每个语句以逗号结束 B. 注释时,“/”和“*”号间可以有空格

C. 无论注释内容的多少,在对程序编译时都被忽略 D. C程序每行只能写一个语句 答:

C

6.C语言源程序文件的后缀是( ),经过编译和链接后生成了可执行文件,该文件的后缀是( )。

A. .obj B. .exe C. .c D. .doc 答: C B 思考题

参照例题,编写一个C程序,输出以下信息:

*********************************************************** Welcome JiLin! Welcome ChangChun!

*********************************************************** 答:

#include

int main() {

printf(”******************************************\\n”); printf(” Welcome JiLin! Welcome ChangChun!\\n”);

printf(”******************************************\\n”); return 0; }

第2章 习 题

1.指出下面哪些是合法的标识符?

A. 1_x B. int C. ABC D. i_10

E. sum.a F. ?c G. _stu H. abc d 答:

C D G

2.C语言的数据类型有哪些? 答:

C语言规定的数据类型较多,通常我们可以将其分为五大类:简单类型、构造类型、指针类型、枚举类型和空类型,其中简单类型包括整型、实型和字符型,构造类型包括数组、结构体和共用体。C语言的数据类型分类如图所示。

3. 下面是一段程序: #define N 10 int main() {

}

在这段程序中,常量有哪些? 答:

20 30 N

4.下面哪些写法是正确的,而且是常量?

int iSum;

sum = (20 + 30) / N; printf(\printf(\return 0;

数据类型 构造类型 简单类型 整型 实型 字符型 数组 结构体 共用体 指针类型 枚举类型 空类型 单精度实型 双精度实型

s = s+a[i][j]; else if(i == 2-j) s = s+a[i][j]; }

printf(\return 0; }

7.将一个一维数组(含10 个整型数组元素)中的值按逆序重新存放。 答:

#include int main() {

int a[10] = {1,2,3,4,5,6,7,8,9,10}; int i,t;

for(i = 0;i < 5;i++) {

t = a[i]; a[i] = a[9-i]; a[9-i] = t; }

for(i = 0;i < 10;i++) printf(\return 0; }

8.打印出以下的杨辉三角形(要求打印出10行)。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 …………………… 答:

#include int main() {

int a[10][10],i,j; for(i = 0;i < 10;i++) {

a[i][i] = 1; a[i][0] = 1; }

for(i=2;i < 10;i++) for(j=1;j < i;j++)

a[i][j] = a[i-1][j-1]+a[i-1][j]; for(i = 0;i < 10;i++) {

for(j = 0;j < i+1;j++) printf(\printf(\}

return 0; }

9.若已定义:char ch[5] = {’e’,’f’,’\\0’,’g’,’\\0’};则printf(”%s”,c);的输出是()。

A. ’e’’f’ B. ef C. efg D. ef\\0g 答: B

10.以下程序运行后,输出结果是()。 #include

int main() { } 答:

18

11.从键盘输入一个字符串,将小写字母全部转换成大写字母。(不使用系统函数) 答:

#include int main() {

char str[80];

183

char ch[7] = {”83ek47”}; int i,s = 1;

for(i = 0;ch[i] >= ’0’&&ch[i] <= ’9’;i++)

s = 10*s+ch[i]-’0’; printf(”%d\\t”,s);

return 0;

int i = 0;

printf(\gets(str);

while(str[i] != '\\0') {

if(str[i] >= 'a'&&str[i] <= 'z') str[i] = str[i]-32; i++; }

printf(\}

12.为了判断两个字符串s1和s2是否相等,应当使用()。

A.if(s1 == s2) B.if(s1 = s2) C.if(strcmp(s1,s2)) D.if(strcmp(s1,s2) == 0) 答:

D

13.思考题:字符串模糊查询

程序提示用户输入名字,在已有字符串数据中进行查找,如果有相等的就输出。否则输出“找不到相关信息!”。 答:

#include

int strchk(char s1[],char s2[]); int main() {

int n,i,f = 0;

char s1[10][10] ={\ \char s2[10];

printf(\scanf(\for(i = 0;i < 10;i++) {

n = strchk(s1[i],s2); if(n == 0) {

printf(\f = 1;

} }

if(f == 0)

printf(\ }

int strchk(char s1[],char s2[]) {

int i; char c1,c2; for(i = 0; ;i++) {

c1 = s1[i]; c2 = s2[i];

if(c1 >= 'A'&&c1 <= 'Z')

c1 = c1-'A'+'a'; if(c2 >= 'A'&&c2 <= 'Z') c2 = c2-'A'+'a';

if(c1 != c2||c1 == '\\0'||c2 == '\\0')

break; }

if(c1 == '\\0'||c2 == '\\0') return 0; else if(c1>c2) return 1; else

return -1; }

第5章 习 题

1. 在下列关于C函数定义的叙述中,正确的是()

A.函数可以嵌套定义,但不可以嵌套调用 B.函数不可以嵌套定义,但可以嵌套调用 C.函数不可以嵌套定义,也不可以嵌套调用 D.函数可以嵌套定义,也可以嵌套调用 答:

B

2. 在C语言程序中,若对函数类型未加显示说明,则函数的隐含类型为()

A. void B. double C. char D. int 答:

D

3. 下列程序的输出结果是()

fun(int a,int b,int c) {

c = a*b; }

int main() {

int c; fun(2,3,c); printf(“%d\\n”,c); return 0; }

A. 0 B. 1 C. 6 D. 无法确定 答:

D

4. 以下程序运行后,输出结果是

int a = 3; void fun() {

static int a = 0; a += 2;

printf(“%d”,a); }

int main()

{

int i;

for(i = 1;i < 4;i ++ ) { }

printf(”\\n”); return 0; } 答:

246

5. 指出下列函数定义中的错误:

double sum(double x,y); {

return (x*x+y*y); } 答:

函数的第二个参数应改为:double y

6.问一个人的年龄多大,问第五个人他说比第四个人大2岁。问第四个人,他说比第三个人大2岁。问第三个人,他说比第二个人大2岁。问第二个人,他说比第一个人大2岁。问第一个人,他说是10岁。用递归调用实现。 答:

void age(int n)

{

int c;

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

int main() {

printf(\return 0; }

7.编写一个函数,将两个字符串连接。 答:

char *strcat(char *cTarget, const char *cSource) {

fun();

char *cOriginal = cTarget;

while(*cTarget) cTarget ++; // Find the end of the string while(*cTarget++ = *cSource ++); return(cOriginal); }

8.编写函数int fullNumber(int value),其功能是如果参数是完数则返回该数。所谓完数,即指该数等于其所有真因子(不包括其本身)之和,例如,6的因子有1、2、3,且6=1+2+3,故6为完数。 答:

int fullNumber(int iValue) {

int i = 1;iSum = 0; do {

if(value%i == 0) iSum = iSum+i; i++

}while(i <= iValue) if(iSum == iValue)

return iValue; else

}

9. 编写一函数,由实参传入一个字符串。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数,在主函数中输入字符串以及输出上述结果。 答:

stat(char cArticle[240])

{

int i;

int iUpper = 0,iLower = 0,num = 0,iSpace = 0,iOther = 0; for(i = 0;i < 240;i++) {

return -1;

if(cArticle[i] == ’ ’) iSpace++;

else if(cArticle[i] >= 'A'&& cArticle[i] <= 'Z') iUpper++; else if(cArticle[i] >= 'a'&& cArticle[i] <= 'z') iLower++; else if(cArticle[i] >= '0'&& cArticle[i] <= '9') num++; else iOther++; }

printf(\

are

%d

upper

letter

%dlower

letter } main() {

%dnumber %dother %dspace in this article\

iUpper,iLower,num,iOther,iSpace);

char cArticle[240]; scanf(\

stat(cArticle); }

10.给出年、月、日,计算该日是该年的第几天。 答:

int main() {

int day,month,year,sum,leap;

printf(”\\nplease input year,month,day\\n”); scanf(”%d,%d,%d”,&year,&month,&day); switch(month) {

case 1: sum = 0; break; case 2: sum = 31; break; case 3: sum = 59; break; case 4: sum = 90; break; case 5: sum = 120; break; case 6: sum = 151; break; case 7: sum = 181; break; case 8: sum = 212; break; case 9: sum = 243; break; case 10: sum = 273; break; case 11: sum = 304; break; case 12: sum = 334; break;

default: printf(”data error”); break; }

sum = sum + day;

if(year@0 == 0||(year%4 == 0&&year0 != 0))

leap = 1; leap = 0; else

if(leap == 1&&month > 2) sum ++;

printf(”It is the %dth day.”,sum);

} 思考题

1. 编写一个递归函数void palin (int n),其功能为将给定的n个字符逆序输出。例如,通过n输入字符 abc,输出cba。 答:

#include int main() {

int i=5;

}

void palin(int n) {

char cNext; if(n<=1) { } else {

}

2. 用C程序实现简单计算器。要求分别用子函数实现+、-、*、/的功能,且根据您的输入自动调用相应的子函数。 答:

float add(float x,float y) {

}

float sub(float x,float y) {

return (x+y); }

cNext=getchar(); palin(n-1); putchar(cNext); cNext=getchar(); printf(\putchar(cNext); void palin(int n); printf(\palin(i); printf(\

}

return (x-y);

float mul(float x,float y) {

}

float div(float x,float y) {

return (x/y); }

int main() {

float x,y,fResult; char c; if(c == '+')

fResult = add(x,y); fResult = sub(x,y); fResult = mul(x,y); fResult = -1; fResult = div(x,y); else if(c == '-')

else if(c == '*') else if(y == 0) else

if(fResult == -1)

printf(\

else

printf(\return 0; }

return (x*y);

scanf(\

第6章 习 题

1. 若已定义int a = 8,*p = &a;则下列说法中不正确的是( )。

A. *p = a = 8 答:

D

B. *p

C. p

D. *&p

2. 若变量已正确定义并且指针p已经指向变量x,则&*p相当于( )。 A. x 答:

C

3. 若已定义int a[8] = {2,4,6,8,10,12,14,16};*p = a;则数组第2个元素”4”不可以表示为( )。

A. a[1] B. p[1] C. *p+1 D.*(p+1) 答:

4. 指向一个包含3个整型元素的一维数组的指针变量的定义形式为( )。 A.int (*p)[] 答:

5. 请任意输入10个整数,使用冒泡法排序方式将它们按从大到小的顺序输出。 答:

#define N 10 #include int main() {

int i,j;

int a[N],iTemp,*p; p = a;

printf(”\\nInput %d numbers:\\n”,N); for(i = 0;i < N;i++)

scanf(”%d”,p+i); for(j = 0;j < N-i;j++)

if(*(p+j)<*(p+j+1))

{

iTemp = *(p+j);

*(p+j) = *(p+j+1);

for(i = 0;i < N-1;i++) D

B.int *p[] C.int (*p[])

D.int (*p)[3]

C

B. p = &a

C. *&a = *p

D. *&a = &*a

}

}

*(p+j+1) = iTemp;

printf(”the sorted numbers are:\\n”); printf(”]”,*(p+i));

for(i = 0;i < N;i++) return 0;

6. 有一个二维数组a[3][4],其第3行第4列元素a[2][3]的正确表示方法为( )。 A.&a[2][3] 答: D

7. 以下语句或语句组中,正确的操作是( )。

A. char s[4] = ”abcde”; 答:

8. 阅读下列程序,写出程序运行的结果。

char s[] = ”ABC”; int main() {

} 答:

AABCBBCCC

9. 利用指针完成两个字符串的比较函数strcompare(),模拟完成系统函数strcmp()的功能。 答:

int strcompare(s1,s2)

{

int i,j;

for(i=0;s1[i]||s2[i]);i++)

if(s1[i]!=s2[i]&&s1[i]>s2[i])

return 1; return -1;

else if(s1[i]!=s2[i]&&s1[i]

for(p = s;p

printf(”%c%s”,*p,p); return 0; B和C

B. char *s; gets(s);

D. char s[5]; scanf(”%s”,&s);

C. char *s; s = ”abcde”;

B.a[2]+3

C.*(a+2)+3

D.*(a[2]+3)

}

return 0;

10. 设计一个反转字符串的函数reverse:void reverse(char *s); 它能将字符串的字符顺序反向重新排列。 答:

void reverse(char *s) /*使用中间变量*/ {

int len; int i;

len = strlen(s)-1; char cTemp;

for(i = 0; i < len-i; i++) {

cTemp = s[i]; s[i] = s[len-i]; s[len-i] = cTemp; }

ch[len+1] = 0; }

11. 阅读下列程序,写出程序运行的结果。 int main() { } 答:

11

12. 使用指针数组编写一个通用的英文月份名显示函数void display(int month)。 答:

#include #include int main() {

char *p,str[12][6] ={”Jan”,”Feb”,”March”,”Apr”,”May”,”June”, ”July”,”Aug”,”Sep”,”Oct”,”Nov”,”Dec”};

int a[12] = {1,3,5,7,9,11,13,15,17,19,21,23},*p[4],i; for(i = 0;i<4;i++)

p[i] = &a[i*3]; printf(”%d\\n”,p[1][2]); return 0;

}

int month;

scanf(”%d”,&month); p = str[month-1];

if(month <= 12&&month>0)

printf(”The Month is:%s\\n”,p); printf(”Error!\\n”); else

13. 请利用指针数组设计一个菜单管理程序,当输入字符串“save”、“open”、“quit”时,分别调用其处理函数,完成不同的工作。各处理函数的具体工作可以自行设定,比如可以仅仅显示出不同操作的提示等。 答:

#include int main() {

char *p[3]={”save”,”open”,”quit”}; char *s; int i;

printf(”input a string:\\n”); gets(s);

for(i=0;i<3;i++) if(strcmp(s,p[i])==0) f(i); return 0; }

f(int n) {

switch(n) {

case 0: printf(”this is save function!\\n”);break; case 1: printf(”this is open function!\\n”);break; case 2: printf(”this is quit function!\\n”);break; } }

14. 程序中对fun()函数有如下说明: void *fun(); 此说明的含义是( )。 A.fun()函数无返回值

B.fun()函数的返回值可以是任意的数据类型

C.fun()函数的返回值是无值型的指针类型 D.指针fun()指向一个函数,该函数无返回值 答:

15. 若有以下定义,int **pp,*p,a = 10,b = 20; 则下列程序段的输出结果是( )。

pp = &p; p = &a; p = &b;

printf(”%d,%d\\n”,*p,**pp); A.10,20 答:

D

16. 编写一个程序,通过指向指针的指针输出5个字符串。 答:

#include int main() {

int i,n=5;

char *cName[]={”Pascal”,”BASIC”,”C”,”FORTRAN”,”Computer design”};

char **p= cName; for(i=0;i

printf(”%s\\n”,*(p+i)); return 0; } 思考题

有30个人围成一圈,顺序排号。从第一个人开始报数(从1到4报数),凡是报到4的人退出圈子,最后留下的是原来的第几号。 答:

#include int main() {

int i,k,m,n,num[30],*p; printf(”\\nInput number:\\n”); scanf(”%d”,&n); p = num;

for(i = 0;i

B.10,10

C.20,10

D.20,20

C

m = 0;

while(m < n-1) {

if(*(p+i) != 0) { } i++; if(i == n) }

while(*p == 0)

i = 0; *(p+i) = 0; k = 0; m++; k++; if(k == 4)

p++;

printf(”%d is number %d.\\n”,n,*p); return 0; }

第7章 习 题

1.设有以下说明语句, struct ex {

int x ; float y; char z ; }example;

则下面的叙述中不正确的是( )。

A.struct结构体类型的关键字 B. example是结构体类型名 C.x,y,z都是结构体成员名 D. struct ex是结构体类型 答:

2.下面正确的叙述是( )

A. 结构体一经定义,系统就给它分配了所需的内存单元。

B. 结构体变量和共用体变量所占内存长度是各成员所占内存长度之和。 C. 可以对结构类型和结构类型变量赋值、存取和运算。

D. 定义共用体变量后,不能引用共用体变量、只能引用共用体变量中的成员。 答:

3.结构体类型变量在程序执行期间( )。

A. 所有成员驻存在内存中 B. 只有一个成员驻留在内存中 C. 部分成员驻留在内存中 D. 没有成员驻留在内存中 答:

4.判断下面的有关结构体的定义或引用,正确的请在后边括弧中用T表示,错误的用F表示。

struct student {

int no; int score; }student1;

A. student.score = 99;( ) B. student1.score = 99;( ) A D B

C. struct LiMing; LiMing.score = 99;( )

D. struct student LiMing; LiMing.score = 99;( ) E. student LiMing; LiMing.score = 99;( ) 答:

5.若有以下说明和定义

typedef int INTEGER; INTEGER p,*q; 以下叙述正确的是( ) A. p是int型变量

B. p是基类型为int的指针变量 C. q是基类型为int的指针变量 D. 程序中可用INTEGER代替int类型名 答:

6. 对于下列定义的枚举型

7. 试分析下列源程序的功能,写出其运行结果。

#include

#define Person_1 struct person_1 struct person_1 {

char name[31]; int age;

char address[101]; };

typedef struct person_2

{

char name[31]; int age;

char address[101]; } Person_2; void main( ) {

enum color1{yellow,green,blue = 7,red,brown}; A.3,8 C

B.1,8

C.0,8

D.0,3

则枚举常量yellow和red的值分别是( ) 答:

ACD

F T F T F

} 答:

Person_1 a = {”zhao”,31,”east street 49”}; Person_1 b = a;

Person_2 c = {”Qian”,25,”west street 31”}; Person_2 d = c;

printf(”%s,%d,%s\\n”,b.name,b.age,b.address); printf(”%s,%d,%s\\n”,d.name,d.age,d.address);

zhao,31,east street 49 Qian,25,west street 31

8. 定义一个日期结构变量重新实现第五章第十题。 答:

#include struct {

int year; int month; int day; }date; int main() {

int i,days = 0;

int day_tab[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; printf(\

scanf(\for(i = 0;i < date.month;i++) days += day_tab[i]; days += date.day;

if((date.month >= 3)&&((date.year%4 == 0&&date.year0 != 0)||date.year@0 == 0)) days += 1;

printf(\date.month,date.day,days,date.year); return(0); }

9.建立一个职工情况统计表,它应包括职工的工作证号、姓名、年龄、工资等项内容。最后输出:

(1)该单位职工的平均年龄,平均工资; (2)各年龄段职工人数的分布情况; 答:

#include struct employee {

long num;/*工作证号*/ char name[20]; };

void input(struct employee employee1[],int n) {

int i,j; char temp[30]; for(i = 0;i < n;i++) {

printf(\the information of the employee!(num, name, age, iSalary)\\n\

scanf(\&employee1[i].age,&employee1[i].iSalary); } }

void average(struct employee employee1[],int n) {

int i,iAvage = 0,iAavsalary = 0; for(i = 0;i < n;i++) {

iAvage = iAvage +employee1[i].age;

iAavsalary = iAavsalary +employee1[i].salary; }

iAvage = iAvage/n;

iAavsalary = iAavsalary /n;

printf(\

printf(\}

void agenum(struct employee employee1[],int n) {

int i,a1 = 0,a2 = 0,a3 = 0,a4 = 0,a5 = 0; for(i = 0;i < n;i++) {

if(employee1[i].age < 20)

a1++;

else if(employee1[i].age >= 20&&employee1[i].age<30) int age; int iSalary;

}

a2++; a3++; a4++; a5++;

else if(employee1[i].age >= 30&&employee1[i].age < 40) else if(employee1[i].age >= 40&&employee1[i].age < 50) else if(employee1[i].age >= 50&&employee1[i].age <= 60)

printf(\printf(\printf(\printf(\printf(\}

int main( ) {

int m;

struct employee employee1[20];

printf(\scanf(\input(employee1,m); average(employee1,m); agenum(employee1,m); }

10.已有a,b两个链表,每个链表中的结点包括学号,成绩.要求把2个链表合并. 答:

#include

#define LEN sizeof(struct student) typedef struct student {

long num; float fScore;

struct student *next; }stu,*sp; sp creat();

sp insert(sp a,sp b); void print(sp head); int main() {

sp ahead,bhead,abh; int a,b,sum;

printf(\ ahead = creat(); printf(\ bhead = creat();

abh = insert(ahead,bhead); print(abh); system(\ return 0; }

sp creat() {

sp head = NULL,p1,p2; long num = 0; float fScore = 0; int input = 0; while(1) {

input = scanf(\ if(input != 2 || num == 0) break;

p1 = (sp)malloc(LEN); p1->num = num; p1->fScore = fScore; p1->next = NULL; if(head == NULL) head = p1; else

p2->next = p1; p2 = p1; }

return(head); }

sp insert(sp ah,sp bh) {

sp pa = ah,pb = bh,abh = NULL,pab; if(ah == NULL) return bh; if(bh == NULL) return ah;

while(pa != NULL && pb != NULL) {

if(abh == NULL)

if(pa->num < pb->num) {

pab = abh =pa; pa = pa->next; } else {

pab = abh = pb; pb = pb->next; } else

if(pa->num < pb->num) {

pab->next = pa; pab = pa; pa = pa->next; } else {

pab->next=pb; pab=pb; pb=pb->next; }

}

if(pa == NULL) pab->next = pb; else

pab->next = pa;

return(ah); }

void print(sp head) {

sp p; int sum;

for(sum = 0,p = head;p != NULL;p = p->next,sum++); printf(\ p = head;

while(p != NULL) {

printf(\

p=p->next; } }

11.建立一个链表,每个结点包括学号、姓名和年龄。输入一个学号,如果链表中的结点所包含的学号等于此学号,则将此结点删去。 答:

#include #define NULL 0

#define LEN sizeof(struct student) struct student {

int num; }; int n;

struct student *creat(void) {

}

struct student *del(struct student *head,int num) {

struct student *p1,*p2; if (head == NULL) {

struct student *head,*p1,*p2; n = 0;

p1 = p2 = (struct student *)malloc(LEN); scanf(\head = NULL; {

n = n+1; }

p2->next = NULL; return(head);

if(n == 1) head = p1; else p2->next = p1;

p1 = (struct student *)malloc(LEN);

scanf(\char name[20]; int age;

struct student *next;

while(p1->num != 0)

p2 = p1;

printf(\goto end;

}

for(p1 = head;p1->next != NULL;p1 = p1->next) { } end: }

int main() {

/*return(head); */ p2 = p1;

if(num == p1->num)

{ }

if (p1 == head)

head = p1->next; p2->next = p1->next; else

printf(\n = n-1;

else p2 = p1;

}

struct student *head; int num;

printf(\head = creat();

printf(\scanf(\head = del(head,num);

思考题

用结构类型编写一个程序,完成生命游戏的功能:在一个由方格组成的矩形阵列上,每个方格可包含一个机体。每个方格和8个方格相邻,我们用occ(k)表示与方格k相邻的包含机体的方格数。各机体生死的规则是:

如果2≤occ(k)≤3,那么在方格k中的机体继续活下去;否则该机体死亡。 如果occ(k)=3,那么在方格k中诞生一个新机体。

写一个程序,读入初始机体配置,按规则计算一系列生成过程,并打印出每一时间的配置情况。为处理方便,不考虑矩形阵列最外围方格中机体的生死问题,但它们对临近方格中机体的生成起作用。 答:

/*lifegame.c*/

本文来源:https://www.bwwdw.com/article/efs6.html

Top