计算机网络应用作业代做案例
短学期实验2 指针与链表
1. 用冒泡排序法求出由21个整数组成的数组的中间值,并输出所有大于中间值的偶数。
添加微信好友, 获取更多信息
复制微信号
保存文件为sy2-1.c。
【程序2.1】
#0 #include <stdio.h>
#1 void main()
#2 {
#3 int i,j,temp;
#4 int array[21];
#5 for (i=0;i<21;i++) scanf("%d", array[i]);
#6 for (i=0;i<21;i++)
#7 for(j=0;j<20;j++)
#8 if (array[j]>array[j+1])
#9 {
#10 temp=array[j];
#11 array[j]=array[j+1];
#12 array[j+1]=temp;
#13 }
#14 printf ("%d", array[10]);
#15 for (i=0;i<10;i++)
#16 if (array[i]/2==0) printf(" %d ",array[i]);
#17 }
2.下列程序有3处错误,请按题中的功能要求,在不改变程序结构(不增加、删除语句,不调整语句顺序)的情况下调试并修改该程序,使其运行能得到正确的结果。
功能说明:以下函数length返回字符串中字母A到字母Z所包含字符的长度。主程序输入一行字符串,调用length函数输出该字符串中大写字母A到Z的子串长度。保存文件为sy2-2.c。
如输入:Z2009-AShanghaiZ
则输出:Length=8
例示说明:从A到Z的子串为Shanghai,其长度为8
#include <stdio.h>
int length( char *p )
{
char *q, *r;
for ( q=p; *q!='\0' || *q!='A'; q++ )
;
for ( r=q; *r!='\0' && *r!='Z'; r++ )
;
return r-q;
}
void main()
{
char str[81];
int n;
gets( str[0] );
n = length( str );
printf( "Length=%d\n", n );
}
3.【问题描述】以下程序输入10行字符串,要求按字典顺序从小到大排序。保存文件为sy2-3.c。
#include <stdio.h>
#define N 10
int biggerthan( char *str1, char *str2 )
/*若字符串str1大于 str2时,则返回1*/
{ for ( ; *str1 || *str2; (1) )
{ if ( *str1 > *str2 )
return (2) ;
else if (*str1<*str2)
return 0 ;
}
return 0; /* 两个字符串相等 */
}
void main()
{ char ls[N][100];
char *ps[N], *t;
int i, j;
for ( i = 0; i < N; i++ )
{ gets( ls[i] );
ps[i] = ls[i];
}
for ( i = 0; i < N-1; i++ ) /* 冒泡法排序 */
for ( j = 0; j < N-i-1; j++ )
if ( biggerthan( (3) ) )
{ t = ps[j];
(4) ;
(5) ;
}
for ( i = 0; i < N; i++ )
printf( " %s \n",ps[i] );
}
4.【问题描述】 保存文件为sy2-4.c。
以下程序的功能是:读入一行字符(例如charlist),以EOF告结束(EOF在键盘输入中被定义为CTRL+Z)。按输入时的相反顺序建立一个链表式的结点序列(即先输入的数据位于链表尾,如下图),然后再输出链表(即按输入的相反顺序)并释放全部结点。
#include <stdio.h>
void main() {
struct node {
char info;
struct node *link;
}*top,*p;
char c;
top=NULL;
while((c=getchar()) (1) ){
p= (2) ; /* 为新建链表结点申请内存空间 */
p->info= (3) ; /* 输入结点信息 */
p->link=top;
top=p;
}
while(top){
p= (4) ; /* 获取当前结点 */
putchar(p->info);
top=top->link;
(5) ; /* 释放结点 */
}
5.【问题描述】
保存文件为sy2-5.c。
本程序运行时,从键盘不断接收用户输入的字符串并进行处理,直到用户输入的字符串为“end”时终止。对用户输入的每个字符串的处理是:将字符串内的每一个十进制数字字符置换成下列表格中右边所对应的一个字符串(所有其他字符不变),然后将转换的结果显示在屏幕上;并分别计算每个数字的置换次数。
十进制数字字符 | 置换成 |
0 | (Zero) |
1 | (One) |
2 | (Two) |
3 | (Three) |
4 | (Four) |
5 | (Five) |
6 | (Six) |
7 | (Seven) |
8 | (Eight) |
9 | (Nine) |
例如,若用户输入的字符串为
Page112-Line3,
则程序5的输出是:
Page(One) (One) (Two)-Line(Three)
数字0到9的置换次数分别是 0 2 1 1 0 0 0 0 0 0
【程序5】
#include <stdio.h>
void main()
{ char *table[]={"(Zero)"," (One)"," (Two)"," (Three)"," (Four)",
" (Five)"," (Six)"," (Seven)"," (Eight)"," (Nine)" };
char str1[64],str2[255],*p;
int j,k,n,no[10];
for (;;) {
printf("Input:");
gets( (1) ); /*读入字符串*/
for(k=0;k<10;k++) no[k]=0;
if(strcmp(str1,"end")==0) (2) _ ; /* 输入end时程序运行终止 */
for(j=k=0;str1[j]!='\0';++j) /* 对输入字符串进行扫描 */
{
if ( (3) ) /*当前字符不是数字字符*/
{ str2[k++]=str1[j];
continue;
}
/*当前字符是数字字符*/
n=str1[j]-'0';
no[n]++;
for(p=table[n];*p!='\0';++p)
str2[k++] = (4) ; /* 把要置换的字符串逐个连接到str2上 */
}
str2[k] = (5) ; /* 置字符串结束符于str2末尾 */
printf("%s\n",str2);
for(k=0;k<10;k++) printf("no[%d]=%d\t",k,no[k]);
}
}
6.【问题描述】
建立一个带有头结点的单向链表,并将存储在字符串s中的字符依次转存到链表的各个结点中。然后,按相反顺序输出链表内容。
保存文件为sy2-6.c。
【程序5】
#include <stdlib.h>
struct node {
char data;
struct node *next;
};
(1) create_list(char *s) { /*函数定义首部,确定函数值的返回类型*/
struct node *head,*p,*q;
head=(struct node *) malloc(sizeof(struct node));
p=q=head;
while(*s!='\0')
{ p=(struct node *) malloc(sizeof(struct node)) ;
p->data= (2) ; /*字符串中的字符存到链表中*/
q->next=p;
q= (3) ; /*工作指针q相应后移,为下一个字符转存作准备*/
s++;
}
p->next = NULL ;
return (4) ; /*返回所建立的链表*/
}
void pr_in_reverse_order(struct node *p) /*采用递归算法定义*/
{
if(p!=NULL)
{ pr_in_reverse_order(p->next); /*先按相反顺序输出除去第一个节点后的链表内容*/
printf ("%2c", (5) ); /*输出第一个节点内容*/
}
}
void main()
{
char str[] = "link list";
struct node *head;
head = create_list(str);
pr_in_reverse_order(head->next);
}
本文链接:https://daizuozuoye8.com/?id=267
转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!
请发表您的评论