




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、习 题 9一.选择题1. A 2. A 3. A 4. A 5.B 6.C二 编程题9.2 编写一函数,判断NN矩阵是否为上三角阵。上三角阵是指不含主对角线,下半三角都是0的矩阵。#include int fun(int x3,int n)int flag=1,i,j;for(i=1;in;i+)for(j=0;ji;j+)if(xij!=0)flag=0;break;return flag;void main()int a33=1,4,5,0,2,6,0,0,3;int result=fun(a,3);if(result=1)printf(此矩阵是上三角矩阵!n);elseprintf(此矩
2、阵不是上三角矩阵!n);9.3 有一个字符串,包含n个字符,将字符串从第i个字符到第j个字符间的字符逆置。程序代码:#include #include void invertsub(char *str,int i,int j)char *p,*q,c;int n=0;p=q=str;if(str=NULL)printf(str is NULL!n);else if(istrlen(str)printf(i and j value error!n);else while(*p!=0&n!=i-1)p+;n+; q=p;while(*q!=0&n!=j-1)q+;n+;while(pq)c=*p;
3、*p+=*q;*q-=c;void main()char str=abcdefg;printf(%sn,str);invertsub(str,2,5);printf(%sn,str);9.4 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数.程序源代码:main()int number20,n,m,i;printf(the total numbers is:);scanf(%d,&n);printf(back m:);scanf(%d,&m);for(i=0;in-1;i+)scanf(%d,&numberi);scanf(%d,&numbern-1);move(
4、number,n,m);for(i=0;iarray;p-)*p=*(p-1);*array=array_end;m-;if(m0) move(array,n,m);95 输入n个整数,将最小数与第一个数对换,把最大数与最后一个数对换程序源代码:main()int number10;input(number);max_min(number);output(number);input(number)int number10;int i;for(i=0;i9;i+)scanf(%d,&numberi);scanf(%d,&number9);max_min(array)int array10;int
5、 *max,*min,k,l;int *p,*arr_end;arr_end=array+10;max=min=array;for(p=array+1;p*max) max=p;else if(*p*min) min=p;k=*max;l=*min;*p=array0;array0=l;l=*p;*p=array9;array9=k;k=*p;return;output(array)int array10; int *p;for(p=array;p0) swap(str1,str2);if(strcmp(str1,str3)0) swap(str1,str3);if(strcmp(str2,s
6、tr3)0) swap(str2,str3);printf(after being sortedn);printf(%sn%sn%sn,str1,str2,str3);char swap(p1,p2)char *p1,*p2;char *p20;strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);9.7 写一函数,功能是交换两个实数变量的值。void swap(float * x, float * y); main() float a, b, *p1, *p2; a=10; b=20; p1=&a; p2=&b; printf(a=%f, b=%fn, a, b);
7、 swap(p1, p2); printf(a=%f, b=%fn, a, b); /* 或printf(%d %d, *p1, *p2) */ void swap(float *pa, float *pb) float temp; temp=*pa; *pa=*pb; *pb=temp; 9. 10 写一个函数,求一个字符串的长度。程序源代码:main()int len;char *str20;printf(please input a string:n);scanf(%s,str);len=length(str);printf(the string has %d characters.,l
8、en);length(p)char *p;int n;n=0;while(*p!=0)n+;p+;return n;9.11 约瑟夫环问题:n个人围成一圈,从第一个人开始报数,凡报到的人退出,问最后剩下的是第几号。程序代码:#define nmax 50main()int i,k,m,n,numnmax,*p;printf(please input the total of numbers:);scanf(%d,&n);p=num;for(i=0;in;i+)*(p+i)=i+1;i=0;k=0;m=0;while(mnum,p-score); /*输出学号和成绩*/p=p-next; /*指
9、针前进*/while(p!=NULL);struct student *insert(ah,bh) /*定义插入函数*/struct student *ah,*bh;struct student *pa1,*pa2,*pb1,*pb2; /*这四个指针皆为student结构体类型*/pa2=pa1=ah; /*两个指针指向第一链表的表头*/pb2=pb1=bh; /*两个指针指向第二链表的表头*/do while(pb1-numpa1-num)&(pa1-next!=NULL) /*注意是按学号链接.当第二个链表的学号大于第一个链表的学号而且未到第一个链表结尾时*/ pa2=pa1;pa1=p
10、a1-next; /*用pa2记下第一个链表的当前位置,pa1前进到下一个结点.到此已经脱离循环*/if (pb1-numnum) /*如果某一步第二个链表的学号小于第一个链表的学号了*/ if(ah=pa1)ah=pb1; /*如果现在ah指向第一个链表的某结点, 则让ah指向第二个链表的当前结点,乃因第二个链表 的学号比第一个链表的学号小.注意ah为目标链表*/else pa2-next=pb1; /*否则,第二个链表pa2指针指向第二个链表的当前位置*/pb1=pb1-next;pb2-next=pa1; /*做完上面的事情,两指针同时前进到下一个结点*/pa2=pb2;pb2=pb1;
11、 /*pa2指向第二个链表的当前位置,pb2 指向第二个链表的当前位置*/while (pa1-next!=NULL)|(pa1=NULL&pb1!=NULL); /*当第一个链表未到末尾或者第一个链表结束而第二个链表未结束 时,便重复做上面的事情*/if(pb1-numpa1-num)&(pa1-next=NULL) /*脱离循环时如果是第一个链表结束而且第二个链表之序号大于第一个 链表之序号则把pa1之next 域指向第二个链表的当前位置*/pa1-next=pb1;return(ah); /*返回目标链表的头地址*/struct student *creat() /*定义建立链表函数*/
12、 struct student *p1,*p2,*head; /*此三个指针皆为student结构体类型*/n=0; /*计数器n赋初值为0*/p1=p2=(struct student *)malloc(LEN); /*为结构体分配地址,p1,p2都指向这个地址*/printf(input sno score:n);printf( input 0 end.);scanf(%ld,%d,&p1-num,&p1-score); /*输入学号和成绩*/head=NULL; /*表头先置为空指针*/while (p1-num!=0) /*当输入的学号不为0时*/ n=n+1; /*计数器增值1*/i
13、f(n=1)head=p1; /*如果是第生个结点,head指向第一个结点*/else p2-next=p1; /*如果不是第一个结点,链结到p2中,p2是建立的链表*/p2=p1; /*指针p2前进*/p1=(struct student *)malloc(LEN); /*再分配地址*/scanf(%ld,%d,&p1-num,&p1-score); /*再输入学号及成绩*/p2-next=NULL; /*当脱离循环时,链表已经建立完毕.勿忘给表尾一个空指针*/return(head); /*返回表头地址*/main() struct student *ahead,*bhead,*abh;
14、/*三个变量皆为结构体student类型*/ahead=creat(); print(ahead); /*调用建立链表函数建立链表llistA,把返回地址赋给指针ahead*/sum=n; /*n为链表结点数*/bhead=creat(); print(bhead); /*调用建立链表函数建立链表llistB,把返回地址赋给指针bhead*/sum=sum+n; /*sum为两个链表的结点总数*/abh=insert(ahead,bhead); /*调用插入函数连结两个链表,把表头地址赋给abh*/print(abh); /*打印连接的结果*/9.1 写一个函数,将一个行列矩阵转置。main(
15、)/*将一个3行3列矩阵转置*/ int a33,*p,i;printf(input 3*3 ju zhen:n);for (i=0;i3;i+)/*一行一行的输入*/scanf(%d %d %d,&ai0,&ai1,&ai2);p=&a00;/*p指向二维数组首地址*/move(p);/*调用转置函数进行转置*/printf(zhuan zhi hou juzhen wei:n);for (i=0;i3;i+)/*一行一行的输出*/printf(%d %d %dn,ai0,ai1,ai2);move(pointer)/*自己定义矩阵转置函数*/int *pointer;int i,j,t;f
16、or(i=0;i3;i+)for (j=i;jnum=-1; head-next=NULL;while (p1-num!=0)/*当输入的不是0时*/ p1=(struct line *)malloc(sizeof(struct line);/*再分配地址*/printf(p-num?:);scanf(%d,&p1-num);/*再输入结点值*/p1-next=head;head-next=p1;len+;/*结点数自增值*/p1=head-next;/*指针指向表头,准备输出*/printf( output link n );do printf(%4d,p1-num);/*输出结点值*/if
17、(p1-next!=NULL)p1=p1-next;/*如果未到表尾指针前进到下一个结点*/while(p1!=NULL); /*循环终止条件*/9.17 有一个班个学生,门课,求: 第一门课的平均分; 找出有两科以上不及格的学生; 找出平均成绩在分以上者或全部课程成绩在85分以上者。有个学生,每个学生包括学号、姓名和三门课的成绩,要求打印出三门课崐总平均成绩以及最高分的学生数据。/*输入10个学生数据,计算平均分*/struct student char num6;char name8;int score4;float avr;stu10;/*定义stu10为student型结构体数组*/m
18、ain() int i,j,max,maxi,sum;float average;/*输入*/for (i=0;i10;i+) printf(n请输入第%d个学生的成绩:n,i+1);printf(学号: );scanf(%s,stui.num);printf(姓名: );scanf(%s,);for(j=0;j3;j+) printf(成绩 %d.,j+1);scanf(%d,&stui.scorej);/*输入数据*/*计算*/average=0;max=0;maxi=0;for(i=0;i10;i+) sum=0;for(j=0;jmax)max=sum;maxi=i;
19、/* 如果这个人的总成绩大于当前最高成绩则此成绩替换掉当前最高成绩*/average/=10;/*总平均分被10除得平均分*/*打印*/printf( 学号 姓名 成绩1 成绩2 成绩3 平均分n);for(i=0;i10;i+) printf(%8s%10s,stui.num,);/*先输出学号,姓名*/for(j=0;j3;j+)/*再输出三科成绩*/printf(%7d,stui.scorej);printf( %6.2fn,stui.avr);/*输出每个人平均分*/printf(平均成绩是%5.2fn,average);/*输出总平均成绩*/printf(最好成绩是
20、学生 %s,总分是 %d.,,max);/*输出最高分及相应学生姓名*/9.19 实现两个字符串的比较。程序代码如下:int compare(char *s1, char *s2)int c;while (*s1!=0|*s2!=0)if (*s1*s2) c=1;return c; else s1+;s2+; if(*s1=0) if(*s2=0) c=0; else c=-1;else if(*s2=0) c=1;return c;main()char *s1,*s2;int c;printf(ninput string s1,s2n);scanf(%s,s1);s
21、canf(%s,s2);c=compare(s1,s2);printf(result is );if (c0)printf(s1s2);else if (c=0)printf(s1=s2); else printf(s1s2);9.20 输入一个月份号,输出该月的英文名。程序代码如下:#include main()enum month jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec; enum month i,; int * j;printf(input month ?n);scanf(%d,j);switch (j-1)case jan:pri
22、ntf(%-10s,jan); break;case feb: printf(%-10s,feb); break;case mar: printf(%-10s,mar); break;case apr: printf(%-10s,apr); break;case may: printf(%-10s,may); break;case jun: printf(%-10s,jun); break;case jul: printf(%-10s,jul); break;case aug: printf(%-10s,aug); break;case sep: printf(%-10s,sep); brea
23、k;case oct: printf(%-10s,oct); break;case nov: printf(%-10s,nov); break;case dec: printf(%-10s,dec); break;default :break;printf(n);9.21 将空格分开的字符串称为单词。输入多行字符串,直到输入stop单词时才停止。最后输出单词的数量程序代码如下:#include stdio.hmain()char string81,*p;int i,num=0,word=0;char c;gets(string);puts(string);for(p=string;!(p0=s
24、&p1=t&p2=o&p3=p);p+)if (*p= )word=0;elseif(word=0)word=1;num+;printf(nthere are %d words n,num);9.24 指针编写比较两个字符串s和t的函数strcmp(s,t)。要求st时返回+1。程序代码如下:int compare(char *s, char *t)int c;while (*s!=0|*t!=0)if (*s*r) c=1;return c; else s+;t+; if(*s=0) if(*t=0) c=0; else c=-1;else if(*t=0) c=1;return c;mai
25、n()char *s,*t;int c;printf(ninput string s,stn);scanf(%s,s);scanf(%s,t);c=compare(s,t);printf(result is );if (c0)printf(st);else if (c=0)printf(s=t); else printf(st);9.28 一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它为对称数。求不超过1993的最大的二进制的对称数。程序代码如下:main()/*将n个数按逆序排列*/int i,n;int *p,num20;printf(input n=?n)
26、;scanf(%d,&n);printf(shu ru %d ge shu n,n);for (i=0;in;i+)scanf(%d,&numi);/*输入n个数*/p=&num0;/*指针p指向数组首地址*/sort(p,n);/*调用逆序函数逆序*/printf(ni zi shu chun);for (i=0;in-1;i+)printf(%d,numi);printf(%d,numn-1);/*输出逆序结果*/sort(p,m)/*逆序排列函数*/int *p, m;int i;int change,*p1,*p2;for(i=0;im/2;i+)/*以中间元素为界*/p1=p+i;p
27、2=p+m-1-i;/*指针定位*/change=*p1;/*交换数据*/*p1=*p2;*p2=change;9.29 找到一个二维数组中的鞍点,即该位置上的元素在该行上最大,该列上最小。也可能没有鞍点。程序代码如下:# include stdio.h# define m 10# define n 10/*鞍点是:该位置上的元素在该行最大,在该列上最小*/main() int i,j,k,flag1,flag2,anm,max,maxi,maxj;printf(input 10*10 ju zhen ?);for (i=0;in;i+) for (j=0;jm;j+) scanf(%d,&a
28、ij);/*输入原始矩阵*/for (i=0;in;i+) for (j=0;jm;j+) printf(%5d,aij); printf(n);/*输出原始矩阵*/flag2=0;/*有无鞍点的标志*/for (i=0;in;i+)max=ai0;/*对于第i行,先令最大数是ai0,即是第一有数*/for (j=1;jmax) max=aij;maxj=j;/*逐个和其以后的数(包括自身)比较,如果某一个数比它大,则将这个数赋与装最大数的变量max,同时标记这个数所在的列为maxj=*/for (k=0,flag1=1;kakmaxj) flag1=0;/*如果这个最大数和它所在列的所有其它
29、元素比较有某一个元素比max小,则flag1置为0,说明不是鞍点*/if (flag1) printf(%d,%d,%dn,i,maxj,max);/*当flag为1时,说明在位置(i,maxj)是鞍点,输出鞍点及其元素*/flag2=1;if (!flag2) printf(non);/*如果flag2为0,说明没有鞍点,输出no*/习 题10 解答1、D 2、B 3、C 4、B 5、26、1)struct node int data ; struct node *next ; *p,*q,*w;2)w = (struct node *)malloc(sizeof(struct node);
30、3) wnext=q; pnext=w; 【10.7】编写一个程序,定义一个结构体变量存放日期,输入今天的日期,输出明天的日期。分析:构造一个表示日期的结构体类型;设计一个函数fundays( )用于计算指定的日期所在月份的天数,若判断指定的日期是闰年,则2月份天数改为29天;在计算明天日期时,要考虑的情况是:今天日期是否有错;今天日期不是月底(计算方法:年数和月数不变,日数加1),今天日期是年底(计算方法:年数加1,月数和日数分别赋值为1),今天日期不是年底但是月底(计算方法:年数不变,月数加1,日数赋值为1)。程序如下:#includestruct sdate int year; int
31、month; int day;int fundays(struct sdate today) int days; static int tab=31,28,31,30,31,30,31,31,30,31,30,31; if(today.year%4=0 & today.year%100!=0)|( today.year%400=0)tab1=29; days=tabtoday.month-1; return days;main( ) struct sdate today, tomorrow; printf(输入今天的日期(格式是:2008,8,10):); scanf(%d, %d, %d,
32、&today.year, &today.month, &today.day); if(today.dayfundays(today)|today.month12) printf(输入的日期有错!nn); else if(today.dayfundays(today) tomorrow.year= today.year;tomorrow. month= today.month;tomorrow.day= today.day+1;else if(today.month=12) tomorrow.year= today.year+1;tomorrow. month=1;tomorrow.day=1;
33、else tomorrow.year= today.year; tomorrow.month= today.month+1;tomorrow.day=1;printf(明天的日期是:%d,%d,%dnn, tomorrow.year, tomorrow. month, tomorrow.day);程序运行结果为:【10.8】用结构体类型编写一个程序,输入n个学生的高等数学、英语、C语言三门课程的成绩,然后计算平均分数并输出。程序如下:#include#define N 5struct score char name12; float ma; float en; float cp; float
34、ave;main( ) int k; struct score stuN; printf(输入学生姓名和成绩:n); for(k=0; kN; k+) printf (第%d个学生姓名:, k+1);scanf (%s, );printf (高等数学,英语,C语言成绩:);scanf (%f,%f,%f, &stuk.ma, &stuk.en, &stuk.cp);stuk.ave= (stuk.ma+stuk.en+stuk.cp)/3;printf(输出学生成绩:n);printf(姓名 高等数学 英语 C语言 平均成绩n);for(k=0; kN; k+) printf
35、 (%-12s%-10.2f%-8.2f%-8.2f%-8.2fn, , stuk.ma, stuk.en, stuk.cp, stuk.ave);程序运行结果为:【10.9】用结构体类型编写一个程序,输入n个客户的姓名和电话号码,然后按姓名的字典顺序排列后顺序输出。分析:构造一个表示客户信息的结构体类型kh;设计一个函数sort()用于对客户的姓名按字典顺序排列程序如下:#include#includestruct kh char name16; char tele12;void sort(struct kh *p, int n) int i,j,k; struct kh
36、temp; for(i=0; in; i+) k=i; for(j=i+1; j0)k=j; temp=pk;pk=pi;pi=temp; main( ) struct kh per50; int m, i; char c2=y; printf(请输入:n); for(m=0; strcmp(c,y)=0; m+) printf (第%d个姓名和电话号码:, m+1);scanf (%s%s, , perm.tele);printf(n继续输入请按y:);scanf(%s,c); sort(per, m); printf(输出客户姓名 电话号码:n); for(i=0; im; i+) printf (%-16s%-12sn, , peri.tele);程序运行结果为:【10.10】编写一个程序,建立如下图所示的单链表,然后再将该链表逆序排列并输出。程序如下:#include #include #define LEN sizeof(struct node)struct node /*定义节点数据类型*/ int data; struct node * next;struct node * create(void); /* 创建链表函数 */struct n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国投影式全向激光条码扫描仪数据监测研究报告
- 商店专卖合同范本
- 家庭健康数据分析平台企业制定与实施新质生产力战略研究报告
- 塑料作面类似箱、包容器企业数字化转型与智慧升级战略研究报告
- 染发用品企业县域市场拓展与下沉战略研究报告
- 科技引领下的绿色包装创新设计
- 柳条筐企业ESG实践与创新战略研究报告
- 转让地皮合同范本
- 湘绣工艺品企业ESG实践与创新战略研究报告
- 五金货架企业县域市场拓展与下沉战略研究报告
- 文件袋、档案袋密封条模板
- 依图科技业务概述
- 支气管镜室工作制度
- 紫精丹_圣惠卷九十五_方剂加减变化汇总
- 船模制作教程(课堂PPT)课件(PPT 85页)
- 防腐检查培训教材ppt课件
- 天蓝色商务发展历程时间轴PPT模板课件
- 第5章液相传质步骤动力学
- GJB 国军标标准对应名称解析
- 肺炎链球菌肺炎医学PPT课件
- 小学英语微课ppt
评论
0/150
提交评论