日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

那几个题(没懂的地方留言)

發布時間:2024/9/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 那几个题(没懂的地方留言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 001

  • 說明

    假定表中數據為:

    姓名學號
    E5
    A1
    C3
    E5
    B2
    C3
    D4
    A1

    index on 學號 tag xh 執行此條命令過后,根據建立的索引里的邏輯順序,表中數據如下顯示(沒有選擇排序方式,所以默認為升序):

    索引是和表之間是映射關系~ ,并沒改變表的記錄,但是因為我們剛剛建立了索引,建立時索引會被默認打開,所以我們接下來的操作就可以按照索引里的邏輯順序關系,我也不知道你會不會弄混~,要是混了就干脆理解為變了,嗯~ ,就醬,這段話先選擇性忽略吧,如果你看到這里腦袋不太清,,清醒~

    姓名學號
    A1
    A1
    B2
    C3
    C3
    D4
    E5
    E5

    程序從第1條記錄開始遍歷,比較第 n 和 n+1(n=1,2,3,...) 條記錄學號是否相等,相等則對n+1記錄添加刪除標記;然后重復此操作直到文件末尾;

    姓名學號
    A1
    * A1
    B2
    C3
    * C3
    D4
    E5
    * E5

    遍歷結束過后使用pack命令物理刪除添加標記內容;

  • 代碼

&& 關閉程序運算的顯示過程,一般大型程序的運算過程很多,為了方便,就大小程序都關閉顯示; set talk off clear && 清屏,清除屏幕上之前的內容,只顯示現在程序的運行結果; use xs && 打開xs 表&& 根據學號字段建立索引,使表中記錄處于有序狀態; index on 學號 tag xh && 對表中記錄進行遍歷;若記錄指針已處于文件末尾,eof()為邏輯真(.t.),否則為邏輯假(.f.); do while !eof() xh = 學號 && 將此時指針指向記錄的學號賦給變量 xh;skip && 記錄指針跳轉到下一條記錄;if 學號 = xh && 判斷現在指針指向記錄的學號是否和上條記錄相等,相等則為重復記錄;delete && 對該重復記錄添加刪除標記;endif enddo pack && 對標記的記錄進行理刪除; use && 關閉當前打開的表; set talk on && 恢復到系統默認狀態(打開狀態),這兩句命令可有可無,屬于固定格式; 復制代碼> 注釋好像寫的有點啰里啰嗦,將就看啦~ -.- 復制代碼
  • 002

  • 說明

    這個題就是遍歷表中數據,然后把記錄依次打印在屏幕上~;你應該是str(入學分,5,1)這個不知道意思(如果那兩個也不知道為什么的話就該挨捶了,呵);

    str()函數的用法,str(a,b,c),將 a 代表的值轉換為總長度為 b ,小數位數為 c 的字符串,轉換過后函數的值為c,字符型;題里面意思,將入學分代表的記錄轉換成總長為5個字節,小數位1位的字符串;

  • 代碼(注釋的標志我換掉了,那個好丑哎~,現在這個注釋不是VFP的標準,所以別弄混了,嗯,就醬)

set talk off clear use xsda /*對誰操作就打開誰;*/ do while !eof()?姓名+性別+str(N,5,1)/* 這里的"+"是字符串的連接符,之前給你說過的","也是連接符,他可以進行不同類型的連接,比如*?"計算結果=",sum*,從題目里可以看到 姓名和性別都是C,字符型數據,學分是N,數值型,加號只是字符型數據的連接符,所以通過str()函數將數值型轉為字符型;*/skip enddo use set talk on 復制代碼
  • 003

  • 說明

    S = 1! + 2! +3! + 4! + 5! + ... + n! ,現在眼熟了吧,咸魚~

    題目中把頭部和尾部換成 KM ,將用戶輸入的數據作為計算邊界;

    之前說的遇到這種樣子的就先寫一個計算單個階乘的通用程序,然后再使用這個程序去計算不同的值得階乘,最后將他們的結果加起來(從1加到100的那個模板);

    現在看題,題里有提到用了一個過程,就理解為這是一個獨立的小程序好了,他的代碼把剛剛提到的計算單個階乘的通用程序放到了過程里,使用的時候每次調用這個小程序來計算不同的值得階乘;

  • 代碼

    在VFP里大小寫不影響代碼的執行;

set talk off clear input "輸入k值:" to k input "輸入m值:" to m stor 0 to s,p /* 下面的代碼里使用了S和P,但是沒有發現他們的定義,所以這一行要對變量進行定義,因為這里只有空了一行,所以只能用store命令同時定義s,p并一起賦初值0;*/ for n = k to mdo sub with n,p /*過程的固定調用格式,do <過程名> with <參數1>,<參數2>這里參數的格式要按照下面定義過程時形參的格式,參數個數與形參相等;*/s = s + p /*固定模板,下次不注釋這句了;*/ endfor ?"s的值為:",s /*輸出計算的結果;*/ return proc sub /*過程的固定使用方法,proc后面跟過程名*/para x,y /*這里個單詞后面是形參,那天給你說過的~ (單詞太長,只寫了前四個字母)不影響結果;*/y = 1 /*定義一個變量y來接收結果,并給y賦值1;(因為這里是求階乘,所以初值不能賦0)*/for t = 1 to x y = y * t /*固定模板下次不注釋這句了;*/endforreturn /*返回到調用函數的下一條語句;和自定義函數有區別,上次的那個題是自定義函數,可以附帶返回值;(見程序改錯1-2,好像是那里,有空翻一眼咯~)*/ endproc /*固定格式,嗯!*/ set talk on 復制代碼
  • 004 (這個程序有問題,先不管了)

set talk off clear use ghxx index on 單位編號 tag dwbh total to xb on 單位編號 fields 數量,單價 all asce use xb select 0 use dwxx do while !eof() select dwxx replace 商品總量 with xb.數量 for 單位編號 = xb.單位編號 replace 貨款總額 with xb.單價 for 單位編號 = xb.單位編號 skip enddo close all set talk on return 復制代碼
  • 005(吃饃)

set talk off clear /*找遍所有可能的組合*/ for i = 1 to 34 /*大和尚*/for j = 1 to 50 /*中和尚*/k = 100-i-j /*小和尚*/if i*3+j*2+k/3=100 ?"大和尚數量=",str(i,2),"中和尚數量=",str(j,2),"小河上數量=",str(k,2) endif endfor endfor set talk on return 復制代碼
  • 006 (統計字符)

set talk off clear acce "please input:" to ch stor 0 to a,b,c,d s = "" for i = 1 to len(ch) /*len(),這個函數功能統計輸入的字符串長度*/s = substr(ch,i,1) /*取第i個字符出來進行判斷*/ do case /*'a'~'z'和'A'~'Z'是所有字母的取值范圍*/ case (s >= 'a' and s <= 'z ') or (s >= 'A' and s <= 'Z ')a = a+1case s >= '0' and s <= '9 ' /*因為輸入是字符類型,所以就算是數字,也不能用來加減乘除,所以這里要加引號*/b = b+1case s = " "c = c+1otherd = d+1endcase /*中午記成enddo了,難怪一直錯*/ endfor ?"字母個數=",str(a,2),"數字個數=",str(b,2),"空格個數=",str(c,2),"特殊字符個數=",str(d,2) set talk on return 復制代碼
  • 007(水仙花)

set talk off clear sum = 0 for i = 100 to 999 /*水仙花數都是位數,所以在100~999范圍里找*/x1 = i%10 /*把每個位取出來*/x2 = int(i/10)%10x3 = int(i/100)if x1^3 + x2^3 +x3^3 = isum = sum +i /*固定模板*/endif endfor ?sum set talk on return 復制代碼
  • 008(末尾為3的素數)

set talk off clear f = .t. /*定義一個找到素數的標志,賦值為0*/ for i = 2 to 100 /*素數的定義是大于1的自然數,所有從2開始找*/for j = 2 to sqrt(i) if i % j = 0 /*每個數除以2~自己平方根范圍內的數,能除盡就不是素數*/f = .f. /*能除盡的時候,f重新賦值.f.,假*/exitendifendforif f = .t. and i%10=3 /*如果f和最開始不一樣,那么代表這個時候的i在他的范圍內*/?i /*被除盡了,所以此時i不是素數,反之,若f沒有變化,則是素數*/endif /*取出此時i的個位上的數字判斷是不是3,輸出結果*/ f = .t. /*使用了f之后需要對標志f的值清零,也就是恢復原樣*/ endfor set talk on return 復制代碼
  • 009(房子面積這個題,字太多懶得看,立即放棄)

  • 010(打印很丑的圖形的題)

set talk off clear dime a(6,6) /*定義一個二位數組a*/ a= 0 /*初始化數組的值,因為之后要用到加法運算*/ x=0 y=0 /*這兩個東西出現的原因是vfp糟糕的用戶體驗,這樣寫a(i,j)=a(i-1,j-1)就會報錯,所以添加一個中間變量過渡一下*/ for i = 1 to 6 /*把需要打印的圖形的值按位置填到二維數組里*/for j = 1 to iif j=1 or i=j /*如果是第一列,或者行數等于列數就給這些格子里填1*/a(i,j)=1else /*否則,(也就是剩下的所有格子)按照下面的規則賦值,(舉個栗子:a32 = a21 + a22)*/x = i-1y = j-1a(i,j) = a(x,y) + a(x,j)endifendfor endfor for i = 1 to 6 /*將剛剛填到數組里面的數值打印在屏幕上*/for j = 1 to i??str(a(i,j),2) /*兩個問號意思是不換行輸出,str()是為了讓輸出結果的樣子好看點*/endfor ? /*單獨的一個問號的作用是換行*/ endfor set talk on return 復制代碼

總結

以上是生活随笔為你收集整理的那几个题(没懂的地方留言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。