回 帖 发 新 帖 刷新版面

主题:[讨论]检验高手的存在:一个初级指针问题

问题1:输入一系列正整数,按升序排列输出(要用链表);
      样例输入:5 4 3 2 1
      样例输出:1 2 3 4 5
程序:rogram p10_2;
  type  point=^node;
        node=record
               data:integer;
               next:point;
             end;
  var head,q,g:point;
      x:integer;
begin
  head:=nil;
  readln(x);new(head);new(q);
  head^.data:=x;head^.next:=nil;q:=head;
  read(x);
  while x>0 do
  begin
    if q^.data>x then begin
                        new(g);
                        g:=q;
                        q^.data:=x;
                        q^.next:=g;
                        q:=g;
                        q^.next:=nil;
                      end
    else begin
           new(g);
           g^.data:=x;
           q^.next:=g;
           q:=g;
           q^.next:=nil;
         end;
    read(x);
  end;
  q:=head;
  while q^.next<>nil do
  begin
    write(q^.data,' ');
    q:=q^.next;
  end;
  writeln(q^.data);
end.
问题2:不知大家注意到没有,不仅这个程序有问题,思路也与题目要求不同.
      问题于是出现了两个--1:上面的程序怎样改正才能完成题目要求?
                          2:如何解决输入问题(就是仅仅输入n个数,按回车键表示
                                             结束,上面程序是以判断是否输入非正整数判定的)
求览贴的朋友帮帮忙
非灌水贴都有分

回复列表 (共3个回复)

沙发

我说,如果真是高手这题根本看也不会看的。。。。。。
问题2:可以用eoln来判断是否换行,布尔值函数。
1:这个程序确实很奇怪,我又编了一个,你看看吧
type
  pp=^ll;
  ll=record
       data:integer;
       next:pp;
     end;
var
  head,q,p:pp;
  i,j,k,l,m,n,x:longint;
begin
  read(x);
  new(head);head^.data:=x;head^.next:=nil;
  while not eoln do
    begin
      read(x);
      p:=head;
      if p^.data<=x then
      while p^.next<>nil do
        begin
          if (p^.data<=x)and(p^.next^.data>=x) then break;
          p:=p^.next;
        end;
      if(p=head)and(p^.data>x) then begin
                                      new(q);
                                      q^.data:=x;
                                      q^.next:=p;
                                      head:=q;
                                      continue;
                                    end;
      if(p^.next=nil)and(p^.data<=x) then begin
                                            new(q);
                                            q^.data:=x;
                                            p^.next:=q;
                                            q^.next:=nil;
                                            continue;
                                          end;
      new(q);q^.data:=x;
      q^.next:=p^.next;
      p^.next:=q;
    end;
  while head<>nil do
    begin
      write(head^.data,' ');
      head:=head^.next;
    end;
end.

板凳

你真是一个大好人!我简直太感谢了!
可是我只有一本pascal初级学本,从来未见过continue.break等等.
我不知道他们是什么意思,但我既然见到了,我就知道他们的存在,我会搞清楚他们的用法的.还是感谢,兼想交个朋友.

3 楼

break,直接退出当前循环,如for,while,repeat,注意,不是退if什么的哦
continue,和break相近,就是退出当前循环(当前的,break是全部),做下一轮的,比如
j:=1;
for i:=1 to 2 do
  begin
    if i=1 then continue;
    j:=0;
  end;
那么j是0
还有exit,退出当前过程(procedure,function),在主程序中调用的话,和halt功能一样
halt,全部结束(强)
我不觉得自己RP很好,你又不了解我
交朋友的话,qq136308584
但是有问题论坛上提好了,加了qq也几乎不说话的,我有经验

我来回复

您尚未登录,请登录后再回复。点此登录或注册