C语言程序设计教程答案(北邮版)杨路明 郭浩志

更新时间:2024-06-20 02:04:01 阅读量: 综合文库 文档下载

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

第一章

1、算法描述主要是用两种基本方法:第一是自然语言描述,第二是使用专用工具进行算法描述

2、c语言程序的结构如下:

1、c语言程序由函数组成,每个程序必须具有一个main函数作为程序的主控函数。 2、\与\之间的内容构成c语言程序的注释部分。 3、用预处理命令#include可以包含有关文件的信息。 4、大小写字母在c语言中是有区别的。

5、除main函数和标准库函数以外,用户可以自己编写函数,程序一般由多个函数组成,这些函数制定实际所需要做的工作。 例如:

void main() {

int a,b,c,s; a=8;b=12;c=6; s=a+b*c;

printf(\ }

3、c语言的特点:

1、c语言具有结构语言的特点,程序之间很容易实现段的共享;

2、c语言的主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译成代码,以实现程序的模块化。

3、c语言运算符丰富,运算包含的范围很广; 4、c语言数据类型丰富。

5、c语言允许直接访问物理地址,即可直接对硬件进行操作,实现汇编语言的大部分功能; 6、c语言语法限制不太严格,程序设计自由度大,这样是c语言能够减少对程序员的束缚; 7、用c语言编程,生成的目标代码质量高,程序执行效率高,可移植性好;

4、合法标识符:AB12、leed_3、EF3_3、_762、PAS、XYZ43K2 不合法标识符:a*b2、8stu、D.K.Jon、if、ave#xy、#_DT5、C.D 5、F2:将当前编辑器中文件存盘 F10:调用主菜单

F4:程序运行到光标所在行

Ctrl+F9:当前编辑环境下,进行编译、连接且运行程序; Alt+F5:将窗口切换到DOS下,查看程序运行结果 6、 (1):

******************** welcome you very good

1

******************** (2):

please input three number;5,7,8 max number is:8

7、main

8、User screen、Alt+F5

9、标识符必须是字母或下划线开头,大小写字母含义不同。由数字、字母和下划线组成;

关键字是一种语言中规定具有特定含义的标识符。关键字不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。

10、选择主菜单File项下拉子菜单中Save项或直接按F2键存盘。

第二章

1、符合C语法规定的常数为:0x1e、\、1.e5 2、(1):

错误如下:int x,y=5,z=5,aver; x=7;

aver = (x+y+x)/3; 结果如下:AVER=5 (2):

错误如下:char c1='a',c2='b',c3='c';

printf(\ 结果如下:a=3b='A'\ aabcc abc

3、略

4、(1):9,11,9,10 (2):3,0,0,0 (3):11,19,31,1 5、(1):0 (2):0

(3):9.500000 (4):90 (5):10 (6):10 (7):65 (8):2

(9):4.500000 (10):1 (11):0 (12):20 (13):0

2

6、(5)

7、求x的绝对值

8、c>(max=a>b?a:b)?c:max; 9、B 10、D

第三章

1、输入函数scanf的参数错误,应该为:scanf(\2、|1234 1234 | 3、ff10 4、1,3,1 5、原字符串

左边加空格再加字符串本省,字符个数总和为5个 6、scanf(\7、printf(\ printf(\ printf(\ printf(\

printf(\ printf(\8、void main() {

float r; float s,c;

printf(\ scanf(\ if(r>=0) {

s = 3.14*r*r; c = 2*3.14*r;

printf(\ } else printf(\ }

9、void main() {

int n;

printf(\ scanf(\

if(n>=100 && n <= 999)

printf(\

3

else printf(\}

10、void main() {

int i,j,k;

scanf(\

((i%2 != 0?1:0) + (j%2 != 0?1:0)+(k%2 != 0?1:0)) == 2?printf(\}

11、void main() {

char a;

scanf(\

printf(\ printf(\}

12、void main() {

float a,b,c,s,Area;

scanf(\ if(a+b > c || a+c > b || b+c >a) {

s = (a+b+c)/2;

Area = sqrt(s*(s-a)*(s-b)*(s-c)); printf(\ } else

printf(\}

第四章

1: 0

2: 20

3: (x<30&&x>20)||(x<-100)

4: ***a=25,b=14,c=16***

5: 37

4

6: if(a<=b) printf(\ else printf(\ 7、

#include void main()

{ char a,b,t1,t2; scanf(\ t1=a>b?a:b; t2=a

#include void main()

{ int temp1=0,temp2=0,x,y,i=1; printf(\ \ scanf(\ while((i*y)<=x) { if(x==(i*y)) {temp1=1;break;} temp2=i; i++; } if(temp1) printf(\ else printf(\ getch(); } 9、

#include void main()

{ float x,y,m=0,n=0; scanf(\ n=(x-2)*(x-2); m=(y-2)*(y-2); if((m+n)<=1) printf(\ else printf(\ getch(); }

5

j=n/10-i*10; k=n;

if(i*i*i+j*j*j+k*k*k==n) printf(\ } } 9、 main()

{ float i,j,temp,n,sum; int t;

i=2;j=1;sum=0; scanf(\ for(n=1;n<=t;n++) {sum=sum+i/j;

temp=i;i=i+j;j=temp; }

printf(\} 10、

void main() {

int nWidth,a,b;

scanf(\

for(a=(nWidth%2);a<=nWidth;a+=2) {

for(b=0;b

char chOut =' ';

int nleft =(nWidth -a)/2; int nright = (nWidth+a)/2; if(b>=nleft&&b

chOut ='*'; }

printf(\ }

printf(\ } } 11、

void main() {

int i=1,j=1;

for(i=1;i<=9;i++) {

11

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

printf(\ printf(\ } } 12、

#include \void main() {

char c;

//count1是正数的个数 //count2是负数的个数 int count1=0,count2=0; //sum1是正数之和 //sum2是负数之和 int sum1=0,sum2=0; int flage = 0; c=getchar(); while(c != '*') {

if(c == '-')flage = 1; if(flage == 0)

{sum1+=(c-48);count1++;} else

{if(c != '-'){sum2-=(c-48);flage=0;count2++;}} c = getchar(); }

printf(\

printf(\} 13、

void main() {

int i,j; int s = 0;

for(i = 100 ; i <= 999; i++) { s = 0; for(j=1; j < i-1 ; j++) { if( i%j == 0 ) s = s + j; } if(s == i)printf(\ }

12

} 14、

#include #include void main() { int n; long k = 1; float e = 1; n = 1; clrscr(); while ( fabs(1.0/k) >= 0.000001) { n++; e = e+ 1.0/k; k = k * n; } printf(\} 15、

#include \main()

{float x0,x1,x2,f0,f1,f2; x1=-10;

f1=2*x1*x1*x1-4*x1*x1+3*x1; x2=10;

f2=2*x2*x2*x2-4*x2*x2+3*x2; do

{ x0=(x1+x2)/2;

f0=2*x0*x0*x0-4*x0*x0+3*x0; if((f0*f1)<0) {x2=x0; f2=f0;} else {x1=x0; f1=f0;} }

while(fabs(f0)>1e-6);

printf(\ printf(\}

13

第六章

1、

#include int divisor(int a,int b) { int r; while((r=a%b)!=0) { a=b; b=r; } return b; }

int multiple(int a,int b) { int d; d=divisor(a,b); return a*b/d; }

void main() { int a,b,c,d; printf(\ \ scanf(\ c=divisor(a,b); d=multiple(a,b); printf(\ } 2、

#include void tongji(char a[])

{ int b[3]={0,0,0},i=0; while(a[i]!='\\0') { if((a[i]<=90&&a[i]>=65)||(a[i]<=122&&a[i]>=97)) b[0]++; else if(a[i]<=57&&a[i]>=48) b[1]++; else b[2]++; i++; } printf(\ getch(); }

void main()

{ char a[100];

14

printf(\ \ gets(a); tongji(a); } 3、

#include int flower(int n) { int x=0,i,j,k; i=(n); j= (n/10); k=(n/100); x=i*i*i+j*j*j+k*k*k; if(x==n) return 1; else return 0; }

void main() { int i,n; printf(\ \ scanf(\ if(n>999||n<100)printf(\ else { for(i=100;i

#include

#define SWAP(a,b) t=b;b=a;a=t; main()

{ float x,y,t; printf(\ \ scanf(\ SWAP(x,y); printf(\ getch(); } 5、

#include int fib(int n) { int p; if(n==0) p=0; else if(n==1) p=1; else p=fib(n-1)+fib(n-2); return p;

15

}

void main() { int n; printf(\ \ scanf(\ printf(\} 6、

#include long fac(int n) { long f; if(n==0) f=1; else f=n*fac(n-1); return f; }

void main() { int m,n; long f; printf(\ \ scanf(\ f=fac(n+m)+fac(n); printf(\ } 7、

#include void list() { int i,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf(\ printf(\ } }

void main() { list(); } 8、

#include int he(int n) { int i,s=0; for(i=1;i

16

void main() { int i,j; for(i=1;i<30000;i++) {for(j=1;j<30000;j++) if((he(i)==j)&&(he(j)==i)&&(i!=j)) printf(\ \ } } 9、

#include #define max 100 struct work { long sid; char name[15]; }worker[max]; int size=0;

struct work *set_list() { do { printf(\ \ scanf(\ size++; }while(worker[size-1].sid!=0); return worker; }

void paixu(struct work a[]) { int i,j,k;long t;char v[15]; for(i=0;ia[j].sid)k=j; if(k!=i) { t=a[i].sid; a[i].sid=a[j].sid; a[j].sid=t; strcpy(v,a[i].name);strcpy(a[i].name,a[j].name);strcpy(a[j].name,v); } } for(i=0;i<=size-2;i++) printf(\ getch(); }

void select(struct work a[]) { int i=0,found=1;long num; printf(\ \ scanf(\ for(i=0;i<=size-2;i++)

17

{ if(a[i].sid==num) { found=0; printf(\ %s\ break; } } if(found)printf(\ getch(); }

void main()

{ struct work *p; p=set_list(); paixu(p); select(p); } 10、

#include float jiecheng(int n) { long s=1;int i; for(i=1;i<=n;i++) s=s*i; return s; }

float chengfang(float x,int n) { float s=1;int i; for(i=1;i<=n;i++) s=s*x; return s; }

float f(float x,int n)

{ float s=1,t=0;int i=1,j=-1; for(i=1;i<=n;i++) { t=j*chengfang(x,2*i)/jiecheng(2*i); s+=t; j=j*j; } return s; }

main()

{ float s1=0,s2=0,s3=0,s4=0,x=5.6;int n=7; s1=f(x,n); s2=f(x+2.3,n); s3=f(x-3.2,n+3); s4=s1/(s2+s3);

18

}

printf(\getch();

第七章

1: (1) D (2) A (3) D (4) B (5) D

2: (1) 1 5 4 4 6 7 8 2 3 4

(2) 6333

3: (1)a[8]=data; k>=0 a[k]=temp break k<=8

(2) \ str[i]<='Z' c[str[i]+26-'a']++ i+'a'

4、/*题目:求一组成绩的平均分数以及高于平均分的成绩。*/ #include #define max 100 void main() { float a[max],s=0,average=0; int i,n; printf(\ \ /*输入要处理元素的个数*/ scanf(\ printf(\ \ /*输入90,85,92,77,80,62*/ for(i=0;iaverage)

19

printf(\ \ /*输出90.00 ,85.00 ,92.00*/ } 5、

/*题目:编写程序,输入一组整数,将他们排序后由小到大输出。*/ #include #define max 100 void main() { int a[max],j,i,k=0,t=0,n=0; printf(\ \ /*输入要处理元素的个数*/ scanf(\ for(i=0;ia[j]) k=j;

if(k!=i) /*元素排序前下标与排序后下标不符,则交换其值*/ { t=a[i]; a[i]=a[k]; a[k]=t; } } printf(\ for(i=0;i

/*题目:从键盘输入一个4x4的整数矩阵,以主对角线(\\)为对称轴*/ /*将左下角元素中较大者替换右上角元素,并将右上角含对称轴输出。*/ #include #include void main() { int d[4][4]={{0,0,0,0}},i,j; clrscr(); printf(\ \ for(i=0;i<4;i++) for(j=0;j<4;j++) scanf(\ for(i=0;i<4;i++) for(j=0;j<4;j++) if(d[i][j]>d[j][i]) /*左下角元素大于右上角元素则交换*/

20

d[j][i]=d[i][j]; for(i=0;i<4;i++) { printf(\为了保持每行的间隔与每列的相同*/ for(j=0;j<4;j++) if(j>=i) printf(\为了使位数不同的数输出依然保持三角型*/ else printf(\ } } 7、

*题目:输入一个3x4的二维数组,然后分别按行和按列输出。*/ #include #include void main() { int d[3][4]={{0,0,0,0}},i,j; printf(\ \ for(i=0;i<3;i++) for(j=0;j<4;j++) scanf(\ printf(\ for(i=0;i<3;i++) for(j=0;j<4;j++) printf(\ \ printf(\ lie: \ for(i=0;i<4;i++) for(j=0;j<3;j++) printf(\ \} 8、

/*题目:编写程序,将两个字符串连接起来,不用strcat函数。*/ #include #include void main()

{ char s1[50],s2[50]; int i=0,j=0,t=0; printf(\ \ gets(s1); while(s1[i]!='\\0') i++; /*统计s1中字符个数*/ printf(\ \ gets(s2); while(s2[j]!='\\0') j++; /*统计s2中字符个数*/

21

for(t=0;t<=j;t++) /*把s2中字符连接到s1后面*/ { s1[i]=s2[t]; i++;} printf(\ \ puts(s1); } 9、

/*输入一行字符串,统计字符对ab的个数。*/ #include #include #define MAX 100 void main() { char str[MAX]; int i=0,flage=0; int count=0; printf(\ \ gets(str); while(str[i]) { if(str[i]=='a') flage=1; else if(str[i]=='b') { if(flage==1) { count++;flage=0;} } else flage=0; i++; } printf(\} 10、

#include /*相对于第一种方法,这种方法能把同为最大的字符串全部打印出来。*/ #include

int paixu(int a[],int n) /*构造对长度为n的数组排序的函数*/ { int i,j,t,k,temp;

for(i=0;ia[j]) k=j;

if(k!=i) { t=a[i]; a[i]=a[k];

22

a[k]=t; } } temp=a[n-1]; return temp; /*返回最大字符串的长度的值*/ }

void main() { char str1[50],str2[50],str3[50],str4[50],str5[50],str6[50]; char str7[50],str8[50],str9[50],str10[50]; int count[10]={0},temp[10]={0},i,j; int paixu(int a[],int n); for(i=1;i<=10;i++) /*输入10个字符串*/ { printf(\ \ if(i==1) { gets(str1);while(str1[count[0]]){count[0]++;temp[0]++; }} if(i==2) { gets(str2);while(str2[count[1]]){count[1]++;temp[1]++;}} if(i==3) { gets(str3);while(str3[count[2]]){count[2]++;temp[2]++; }} if(i==4) { gets(str4);while(str4[count[3]]){count[3]++; temp[3]++;}} if(i==5) { gets(str5);while(str5[count[4]]){count[4]++; temp[4]++;}} if(i==6) { gets(str6);while(str6[count[5]]){count[5]++; temp[5]++;}} if(i==7) { gets(str7);while(str7[count[6]]){count[6]++; temp[6]++;}} if(i==8) { gets(str8);while(str8[count[7]]){count[7]++; temp[7]++;}} if(i==9) { gets(str9);while(str9[count[8]]){count[8]++; temp[8]++;}} if(i==10) { gets(str10);while(str10[count[9]]){count[9]++;temp[9]++;}} } j=paixu(temp,10); for(i=1;i<=10;i++) { if(count[i-1]==j) { /*只要字符串长度与最大长度相等就打印出来*/ switch(i) { case 1:puts(str1); printf(\ case 2:puts(str2); printf(\

23

case 3:puts(str3); printf(\ case 4:puts(str4); printf(\ case 5:puts(str5); printf(\ case 6:puts(str6); printf(\ case 7:puts(str7); printf(\ case 8:puts(str8); printf(\ case 9:puts(str9); printf(\ case 10:puts(str10); printf(\ } } } } 11、

/*给数组a输入m个按升序排列的数,给数组b输入n个按降序排列的数*/ /*将a与b中的元素按降序排列存在数组c中。*/ #include void main() {

int a[100],b[100],c[100],i,m,n,j,k,temp=0,s;

printf(\ \ /*确定M的个数*/ printf(\ \ /*确定N的个数*/ printf(\ \ for(s=0;s

scanf(\

printf(\ \ for(s=0;s

scanf(\

i=m-1;j=0;k=0; /*i,j,分别标记a[]与b[]且都是从最大元素开始做标记*/ for(;;)

{ if(i==0) /*a[]中只有一个数或者a[]处理到了最后一个元素*/

{ if(a[i]<=b[j]) /*如果a[]的最后一个元素<=b[]中当前元素*/ { c[k]=b[j]; k++; j++; } else

{ c[k]=a[i]; k++;

for(;;) /*把b[]数组接到c[]后面*/ { c[k]=b[j]; j++; k++; if(j==n) /*如果b[]处理完,结束。并做标记temp=1*/ { temp=1;break; } } }

}if(temp==1)break; /*标记temp=1,全部处理结束*/

24

if((a[i]<=b[j])&&(i!=0)&&(j!=n)) { c[k]=b[j]; j++; k++; } if((a[i]>b[j])&&(i!=0)&&(j!=n)) { c[k]=a[i]; i--; k++; } if(j==n) /*b[]处理到完*/

{ for(;;) /*把b[]数组接到c[]后面*/

{ if(i==0) /*如果a[]处理完,结束。并做标记temp=1*/ { c[k]=a[i];temp=1;break; } c[k]=a[i]; i--; k++; }

}if(temp==1) break;/*标记temp=1,全部处理结束*/ }

for(s=0;s

第八章

1: (1) A (2) B (3) D

2: (1) 10||10||10 (2) pogam

3: (1) *p!=0&&*q!=0 *p>=*q; q++ (2) i<11 &a[i] {i--;if(i==0)break;} i!=0 4、

/*题目:输入一个字符串,再删除指定的字符*/ /*如果字符串中没有指定字符,则输出原字符串。*/ #include

void fun(char *str,char c) { char *p;

for(p=str;*p!='\\0';p++) if(*p!=c) *str++=*p; *str='\\0'; }

void main()

25

{ char str[80],c;

printf(\ \ gets(str);

printf(\ \ scanf(\ fun(str,c); puts(str); getch(); } 5、

/*从键盘输入单词,每个单词之间用空格隔开,“.”号结束输入,*/ /*将每个单词的第一个字母转化成大写字母。*/ #include #include

char zhuanhua(char c) /*定义将小写字母转化为大写字母的函数*/ { char C;

if(c>='a'&&c<='z') /*是小写字母就转化,不是则原样返回*/ C=c-32; else C=c; return C;

} /*此函数防止有标点符号或者第一个字母本身是大写字母*/ void main()

{ char a[100],*p=a; int i=1,j;

a[0]=' ';p++; /*为方便下面的if语句,初始化a[0]为空格*/ printf(\ \ for(;;)

{ scanf(\ if(*p=='.') break; p++;i++; }

a[i]='\\0';

for(j=1;j

{ if(a[j-1]==' '&&a[j]!=' ')/* 第一个字母前面可能有很多空格*/ a[j]=zhuanhua(a[j]); /*调用转化函数,使其变为大写字母*/ } p=a;

while(*p)

{printf(\ getch(); } 6、

/*输入8个数,排序后输出。*/

26

#include #include void main()

{ int data[8],i,*p1,*p2,temp; p1=data;

printf(\ number: \ for(i=0;i<8;i++)

{ scanf(\ p1++; } for(p1=data;p1

{ temp=*p1;*p1=*p2;*p2=temp;} for(i=0,p1=data;i<8;i++,p1++) printf(\ \ getch(); } 7、

/*题目:输入一个字符串,将此字符串的m个字符开始的第n个字符复制到另一个字符串。*/ #include void main() { int m,n,i;

char a[100],b[100],*p,*q;

printf(\ \ gets(a); p=a;q=b;

printf(\ \ scanf(\

if( (strlen(a)>=m) && ((strlen(a)-m+1)>=n) )/*复制的位置要符合要求*/ { p+=m-1; /*指针指向第一个要复制的字符*/ for(i=0;i

{ *q=*p; p++; q++; } *q='\\0';

printf(\ %s\\n\ printf(\ %s\\n\ }

else printf(\ /*复制的位置不符合要求,打印错误*/ getch(); } 8、

/*输入8个数,将最大的数与第一个数对换。*/ /*将最小的数与最后一个数对换*/ #include void main() {

27

int a[100],temp1=0,temp2=0,max=0,min=0,k; printf(\ \ for(k=0;k<8;k++)

{ scanf(\

if(a[k]a[max])max=k; /*用标记max最大值的下标*/ }

if(min==0)

{ if(max==7)

{ temp1=a[0]; a[0]=a[7];a[7]=temp1; } else

{ temp2=a[7];a[7]=a[min]; a[0]=a[max];a[max]=temp2; } }

else if(max==0) { if(min!=7)

{ temp2=a[7]; a[7]=a[min];a[min]=temp2;} } else

{ if(min==7) { temp1=a[0];a[0]=a[max];a[max]=temp1;} else if(max==7) { temp2=a[7];a[7]=a[min];

a[min]=a[0];a[0]=temp2; } else { temp1=a[0];temp2=a[7]; a[0]=a[max];a[7]=a[min]; a[min]=temp2;a[max]=temp1; } }

for(k=0;k<8;k++) printf(\ \ getch(); } 9、

/*输入n个数,并排序后输出。*/ #include #include

int *paixu(int data[],int n) { int i,*p1,*p2,temp; p1=data;

for(p1=data;p1

28

for(p2=p1+1;p2

{ temp=*p1;*p1=*p2;*p2=temp;} p1=data; return p1; }

void main()

{ int n,a[100],i,*p=a;

printf(\ \ scanf(\

printf(\ \ for(i=0;i

{ scanf(\ p++; } p=paixu(a,n);

for(i=0;i

#include\#define max 1042 main() { float j,a[max];int t,i=0; char b[max],*p=b; clrscr(); printf(\ gets(b); while(*p!='\\0') { a[i]=0; while(((*p)<='9'&&(*p)>='0')&&((*p)!='\\0')) { t=(int)(*p-48); a[i]=a[i]*10+t; p++; if((*p)>'9'||(*p)<'0') i++; } p++; } for(j=0;j

29

}

第九章

1、 li 45 300.0 chang 30 200.0 chang 2、

#include struct students {

char sid[100]; char name[100]; float score[3]; }student; void main()

{ int i; float j;

printf(\ \ scanf(\

printf(\ \ scanf(\

printf(\ \输入逗号隔开*/

scanf(\ printf(\ printf(\

j=(student.score[0]+student.score[1]+student.score[2])/3.0; printf(\ getch(); } 3、

#include #include

#define F sizeof(student) #define NULL 0 typedef struct scores { int english; int math; int c_language; int all; }TP;

typedef struct students

30

{ char sid[15]; char name[15]; TP score; struct students *next; }student;

student *input()

{ student *head,*p1,*p2; int n=0; char ch; clrscr(); head=(student *)malloc(F);head->next=NULL; do { n++; printf(\ \\n\\n\ printf(\ \ p1=(student *)malloc(F);p1->next=NULL; scanf(\ printf(\ \ scanf(\ printf(\ \ scanf(\ p1->score.all=p1->score.english+p1->score.math+p1->score.c_language; if(n==1) { head->next=p1;p2=p1; } else { p2->next=p1; p2=p1; } printf(\ \ ch=getch();

}while(ch=='y'||ch=='Y'); return head; }

void average1(student *head) { student *p; int j; clrscr(); p=head->next; while(p) { j=p->score.all/3; printf(\ %s\\taverage: %d\ p=p->next; } printf(\ getch(); }

31

void average2(student *head) { student *p;int n=0,temp1=0,temp2=0,temp3=0; p=head->next; while(p) { temp1+=p->score.english; temp2+=p->score.math; temp3+=p->score.c_language; p=p->next;n++; } printf(\english is : %d\\naverage math is : %d\\t\}

student *sort(student *head)

{ student *head1,*p,*q,*r; int temp1=0,temp2=0,temp3=0,temp4; head1=head; for(p=head1->next;p->next!=NULL;p=p->next) { r=p; for(q=p->next;q;q=q->next) if(q->score.all>r->score.all) r=q; if(r!=p) { strcpy(s,p->sid);strcpy(n,p->name); temp1=p->score.english; temp2=p->score.math; temp3=p->score.c_language; temp4=p->score.all; strcpy(p->sid,r->sid);strcpy(p->name,r->name); p->score.english=r->score.english; p->score.math=r->score.math; p->score.c_language=r->score.c_language; p->score.all=r->score.all; strcpy(r->sid,s);strcpy(r->name,n); r->score.english=temp1; r->score.math=temp2; r->score.c_language=temp3; r->score.all=temp4; } } return head1; }

void output(student *head) { student *head2,*p;int i=1; clrscr();

32

is : %d\\naverage char s[15],n[15]; c_language

head2=sort(head); for(p=head2->next;p!=NULL;p=p->next)

printf(\->sid,p->score.english,p->score.math,p->score.c_language,p->score.all/3,i++); average2(head);

printf(\ getch(); }

void main()

{ student *head,*p1,*p2; int i=0,j=1; head=input(); do { clrscr(); printf(\ average1.\\n\\n(2): average2.\\n\\n(3): sort.\\n\\n(4): output.\\n\\n\\n choose: \ scanf(\ switch(i) { case 1: average1(head); break; case 2: clrscr();average2(head); printf(\ case 3: clrscr();p1=sort(head); for(p2=p1->next;p2!=NULL;p2=p2->next)

printf(\ case 4: output(head); break; default: printf(\ } }while(i!=-1); } 4、

#include #include #define NULL 0

#define F sizeof(worker) typedef struct work { char sid[15]; char name[15]; int money; struct work *next; }worker;

int min=0,max=0; char a[15],b[15]; worker *input()

{ worker *head,*p,*q;int n=0; char ch;

33

Please

head=(worker *)malloc(F); head->next=0; do { n++; p=(worker *)malloc(F); p->next=0; printf(\ \ printf(\ \ printf(\ \ printf(\ \ if(n==1) { head->next=p; q=p; max=p->money;strcpy(a,p->name); min=p->money;strcpy(b,p->name); } else { q->next=p; if(p->money>max) {max=p->money;strcpy(a,p->name);} if(p->moneymoney;strcpy(b,p->name);} q=p; } printf(\ }while(ch=='y'||ch=='Y'); return head; }

void output() { clrscr(); printf(\ %d\\t\\tname is: %s\\n\\n\ printf(\ %d\\t\\tname is: %s\}

void main() { input(); output(); getch(); }

5、6、

#include\#define F sizeof(stu) #define NULL 0 typedef struct student { int sid; int average; struct student *next; }stu;stu *head;

34

stu *create() { stu *p1,*p2; int n=0; char ch; head=(stu *)malloc(F);head->next=NULL; do { n++; printf(\ \\n\\n\ printf(\ \ p1=(stu *)malloc(F);p1->next=NULL; scanf(\ printf(\ \ scanf(\ if(n==1) { head->next=p1;p2=p1; } else { p2->next=p1; p2=p1; } printf(\ \ ch=getch();

}while(ch=='y'||ch=='Y'); return head; }

stu *select(stu *head,int x) { stu *s; s=head->next; while(s) { if(s->sid==x) break; s=s->next; } return s; }

stu *insert(stu *head,int x,int y) { stu *p,*r,*q; clrscr(); p=head->next; r=(stu *)malloc(sizeof(stu)); r->sid=x; r->average=y;

35

if(p==NULL)/*如果插入空表*/ { p=r; r->next=NULL; printf(\ }

else

{ while(x>p->sid) /*找到插入的位置,按学号大小。(找到位置或者到了表尾都会跳出循环)*/ { if(p->next==NULL)break; p=p->next; } if(xsid) /*插到中间位置*/ { r->sid=p->sid; r->average=p->average; p->sid=x; p->average=y; r->next=p->next; p->next=r; printf(\ } else if(x==p->sid) /*学号不能相同*/

printf(\ else /*插到末尾*/ { p->next=r; r->next=NULL; printf(\ } }

return head; }

stu *get(stu *head,int n) /*得到位置为n的结点的指针*/ { stu *p;int i; p=head->next; if(n==0) return head; else { for(i=1;inext; return p; } }

stu *delete(stu *head,int sid) { stu *p,*q;int temp=0,i=0; p=head->next; if(!p)

36

{ printf(\ press eny key back.\表空*/ else { while(p) /*查找学号为sid的结点的指针*/ {i++; /*标记学号为sid的结点的位置*/ if(p->sid==sid) {temp=1;break;} /*temp=1标记找到了*/ p=p->next; } if(temp==1) /*如果有学号为sid的结点*/ { q=get(head,i-1);/*得到sid的前一个结点的指针*/ q->next=p->next; free(p); printf(\ return head; } else /*没有找到*/ { printf(\ return head; } } }

void print(stu *head) { stu *p; p=head->next; if(!p){printf(\ press eny key back.\ while(p) { printf(\ p=p->next; } }

main() { stu *p1,*p2; char ch1; int n,i=0,j=0; head=create(); do {clrscr(); printf(\ \ printf(\ printf(\ printf(\ \

37

printf(\ \ printf(\ ............choice (1-5).............\ ch1=getch(); switch(ch1) { case '1': { clrscr(); printf(\ scanf(\ head=insert(head,i,j); printf(\ break; } case '2': { clrscr(); printf(\ \ scanf(\ p1=select(head,n); { if(p1) printf(\ else printf(\ } printf(\ break; } case '3': { clrscr();printf(\ \ scanf(\ head=delete(head,n); printf(\ break; } case '4': { clrscr(); printf(\ print(head); printf(\ break; } case '5': return; default: printf(\ press eny key back.\ }

}while(n); }

38

7、

#include #define F sizeof(L) typedef struct list { char data;

struct list *next; }L;

L *set_list()

{ L *head,*p1,*p2; char c; int n=0;

head=(L *)malloc(F); head->next=0; /*建立链表*/ p1=p2=head;

printf(\ scanf(\ while(c!='*') { n++; if(n==1) p1->data=c; else

{ p1=(L *)malloc(F); p1->data=c; p2->next = p1; p2 = p1;

p1->next = 0; }

scanf(\ }

p1=head; while(p1)

{ printf(\ \ } printf(\ return head; }

void change_list(L *head1) /*算法:p2指向最后一个元素,p1指向第一个元素。交换他们的值,p1,p2同时往中间靠拢。*/ { L *p1,*p2,*p3; int i,j,k,n=1; char temp;

p1=head1;p2=head1;p3=head1; while(p3->next)

{ p3=p3->next;n++; }/*求链长*/

for(i=n;i>(n/2);i--) /*外循环使p1后移,p2前移。*/ { p2=head1;

39

for(j=1;jnext; /*p2指向最后一个元素*/ temp=p1->data;p1->data=p2->data;p2->data=temp;/*交换他们的值*/ p1=p1->next;/*p1向后移*/ }

while(head1)

{ printf(\ \ } }

void main() { L *head; head=set_list(); change_list(head); getch(); }

第十章

1: 答: 共用体使几种不同类型的值存放在同一内存区域中。 例如, 把一个整型值和字符值放在同一个存储区域, 既能以整型存储, 又能以字符存储。共用体类型的定义形式与结构体的定义形式相同, 只是其类型关键字不同,共用体的关键字为union.一般 形式为:

union 共用体类型名 { 成员列表

};

例如: union data { int i; char ch; float f;

};

2: 答: 共用体不同与结构体,某一时刻,存与共用体的只有一种数据,而结构体是所有成分都存储着的。即共用体是几种数据值的覆盖存储,几种不同类型的数据值从同一地址开始存储,但是任一时刻只能存储其中一种数据,而不是同时存储多种数据。分配给共用体的存储区域大小至少要有存储其中最大的一种数据所需要的存储空间量。

3: 答: 在实际应用中,有的变量只有几种可能的取值。如表示颜色的名称,表示月份的名称等。为了提高程序描叙问题的直观性,ANSI C引入允许程序员定义枚举类型的机制。程序用枚举方法

40

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

Top