当前位置:首页 > C语言程序设计习题参考答案!(第二版 杜友福)
{ char string[81],c;
printf(\ gets(string);
printf(\ c=getchar();
printf(\}
6. 编写函数实现,判断一个子字符串是否在某个给定的字符串中出现。
#include
int IsSubstring(char *str,char *substr) { int i,j,k,num=0;
for(i=0;str[i]!='\\0' && num==0 ;i++)
{ for(j=i ,k=0;substr[k]==str[j];k++,j++) if(substr[ k+1 ]=='\\0') { num=1; break; } }
return num; }
void main()
{ char string[81],sub[81]; printf(\ gets(string);
printf(\ gets(sub);
printf(\ if(!IsSubstring(string,sub)) printf(\
printf(\}
7. 有n个人围成一圈,顺序排号。由用户从键盘输入报数的起始位置,从该人开始报数(计数从0开始),凡报数为3的倍数出圈。问最后剩下的是几号? 见导学例10.25
8. 由一个整型二维数组,大小为m×n,要求找出其中最大值所在的行和列,以及该最大值。请编一个函数max,数组元素在main函数中输入,结果在函数max中输出。 见导学例10.26
9. 由n个学生,每个学生考m门课程,要求编一函数,能检查n个学生有无不及格的课程,如果由某一学生有一门或一门以上课程不及格,就输出该学生的号码(学号从0开始)和其全部课程成绩。 见导学例10.27
习题十一 结构体、共用体和用户定义类型
一、选择题
1—10: AABDD BDDDC 11-20: CBBCC
二、填空题
1.若有下面的定义:
struct
{int x;int y;}s[2]={{1,2},{3,4}},*p=s;
33
则表达式 ++p->x 的值为_____2______; 表达式(++p)->x的值为____3_____。 2.为了建立如图11.12所示的链表,结点的正确描述形式是:
data next data next
图11.12 链表的结点
struct node { int data; struct node *next; };
3.已知head 指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。下面的sum函数是求出链表中所有结点数据域值的和,作为函数值返回。请填空完善程序。
struct link { int data; struct link *next;} main() { struct link *head; int s; ┆
s=sum(head); ┆ }
int sum( struct link *head ) { struct link *p; int s=0; p=head->next; while(p)
{ s+= p->data ; p= p->next ; } return(s); }
4.设有共用体类型和共用体变量定义如下:
union Utype { char ch; int n; long m; float x; double y; };
union Utype un;
并假定un的地址为ffca。
则un.n的地址是__ffca_, un.y的地址是__ffca__。执行赋值语句:un.n=321; 后,再执行语句:printf(\其输出值是__A_。(提示:321D=101000001B)
(进一步提示:0100 0001B=65D,char与int的比特位分布关系参见课本P30。) 三、编程题
1.编写程序,进行两个复数的相减。
#include
double m_r,m_i; };
struct Complex sub(struct Complex c1,struct Complex c2) { struct Complex c;
c.m_r=c1.m_r-c2.m_r; c.m_i=c1.m_i-c2.m_i; return c; }
void main()
{ struct Complex c1 ={1.2,2.3},c2={0.2,0.3}; struct Complex c; c=sub(c1,c2);
printf(“c=%g+i%g\\n”,c.m_r,c.m_i); }
34
2.定义一个包括年、月、日的结构体。输入一个日期,计算该日在本年中是第几天?注意闰年问题。
#include
int day; int month; int year; };
int dayof[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int days(struct ymd *p) {
int i,d;
if(p->year%4==0&&p->year0!=0||p->year@0==0) dayof[2]=29; d=p->day;
for(i=1;i
void main() {
struct ymd date; int d; for (;;) { printf(\ scanf(\ if(date.year==0) break; d=days(&date); printf(\ } }
3.有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。从键盘输入10个学生的数据,要求输出3门课程的总平均成绩,以及最高分的学生的学号、姓名、3门课程成绩、平均分数。
#include
void main() { int i,j,maxi;
float sum,max,average;
35
for(i=0;i { printf(\ printf(\ scanf(\ printf(\ scanf(\ for(j=0;j<3;j++) { printf(\ scanf(\ } } average=0; max=0; maxi=0; for(i=0;i average/=N; printf(\ No. name scorel score2 score3 average\\n\ for(i=0;i printf(\ printf(\ printf(\ stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr); } 4.设单向链表head1和head2已建立。编写将单向链表head2连接到单向链表head1之后的函数,以head1返回,如图11.13所示。 /* 结点结构 Node */ struct Node { int data; struct Node *next; }; 36
共分享92篇相关文档