當前位置:首頁 » 編程語言 » c語言的問題

c語言的問題

發布時間: 2022-01-10 23:55:00

1. c語言中問題

輸出結果為:
1 9

原因如下:
i的初始值為1,

對於while(i<=4)printf("%d\t",POWER(i++));
第1次循環判斷:i<=4成立,
執行POWER(i++),進行宏展開,得到((i++)*(i++)),
對於i++處理來說,是先將i的值帶入表達式,表達式計算完畢後再進行++處理,
所以((i++)*(i++))的值=1*1=1,
表達式計算完畢後,i進行兩次++處理,i的值等於3
此次循環輸出: 1

第2次循環判斷:i<=4成立,
執行POWER(i++),進行宏展開,得到((i++)*(i++)),
對於i++處理來說,是先將i的值帶入表達式,表達式計算完畢後再進行++處理,
所以((i++)*(i++))的值=3*3=9,
表達式計算完畢後,i進行兩次++處理,i的值等於11
此次循環輸出: 9

第3次循環判斷:i<=4不成立,循環結束

所以最後輸出:
1 9

2. 關於c語言問題

是數組越界了。
空格字元' '的數值是32,當你把ch初始化為0,然後又讀取了一串字元,然後 j 循環超過字元串長度後,所有ch[j]都是0,用0減32當數組下標,嘿嘿。。。
不知道你ch[j]-' ' 這是干什麼?是要小寫字母轉大寫?為什麼坐標位置用它來定而不是直接用j?
估計一定要改的是循環中的j<100,改成j<strlen(ch)

3. 關於C語言的問題

(1) rand()函數:
原型: int rand(void)
功能: 產生從0到RAND_MAX(0x7fff)之間的隨機數。
頭文件: stdlib.h
例:
#include <stdio.h>
#include <stdlib.h>

int main()
{
int k;
k = rand();
printf("%d\n", k);
return 0;
}
編譯運行,發現他的確產生隨機數了,但是,每次運行程序產生的隨機數都是一樣的,為什麼呢?因為隨機數取在C語言中採用的是固定序列,所以每次執行所取的是同一個數。那麼如何寫一個程序,讓它每次運行時產生的隨機數都不一樣呢?往下看:

(2)srand()函數:
原型: void srand(unsigned seed)
功能: 產生隨機數的起始發生數據,和rand函數配合使用
頭文件: stdlib.h time.h
例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
int i;
time_t t;
srand((unsigned) time(&t));
printf("Ten random numbers from 0 to 99\n\n");
for (i=0; i<10; i++)
printf("%d\n", rand()%100);
return 0;
}

這時運行程序,會發現每次產生的隨機數都不一樣。這是因為這里採用了時間作為種子,而時間在每時每刻都不相同,所以就產生了"隨機"的隨機數了。所以,要想產生不同的隨機數,在使用rand之前需要先調用srand。這樣做相當麻煩,有沒一個更簡單的函數呢?往下看:

(3)randomize()函數:
原型: int randomize(void)
功能: 通過time函數來得到一個隨機數
頭文件: stdlib.h time.h

該函數就相當於srand((unsign)(time(NULL)) 不過應注意的是randomize()的功能要通過time來實現所以在調用它時頭文件要包含time.h。

(4)產生一個X到Y的隨機數:
由於rand產生的隨機數從0到rand_max,而rand_max是一個很大的數,那麼如何產生從X~Y的數呢?
只要這樣寫:
k=rand()%(Y-X+1)+X;
這樣,就可以產生你想要的任何范圍內的隨機數了。

沒有roll這個吧

4. 有關C語言的問題

把你的程序寫下來

(本文的許多命令或方法同樣適用於TC3)
在開始看本文以前,我先說明一下C語言的安裝和使用中最應該注意的地方:許多網友在下載Turbo C 2.0和Turbo C++ 3.0後,向我問得最多的是在使用過程中碰到如下問題:

1)出現找不到 stdio.h conio.h等include文件;

2)出現cos.obj無法連接之類的錯誤
這些問題是由於沒有設置好路徑引起的,目前下載的TC2,TC3按安裝分類大概有兩種版本:一是通過install安裝,這類應該已經設置好了路徑;二是直接解壓後建立TC.EXE的快捷方式,在WINDOWS下雙擊即可運行(DOS下直接運行TC.EXE),目前國內大多為這種,因此下載使用前請注意
路徑設置:
設置方法為:
OPTION->DIRECTORIES:
INCLUDE: [TC2/3所在目錄]/include
LIB: [TC2/3所在目錄]/lib
output輸出目錄請自己設置一個工作目錄,以免混在一起。最後還提醒一點:FILES中的Change dir(改變當前目錄)中應設置為當前程序所在目錄。

一、 Turbo C 2.0的安裝和啟動

Turbo C 2.0的安裝非常簡單, 只要將1#盤插入A驅動器中, 在DOS的"A>" 下鍵入: A>INSTALL 即可, 此時屏幕上顯示三種選擇:
1. 在硬碟上創造一個新目錄來安裝整個Turbo C 2.0系統。

2. 對Turbo C 1.5更新版本。這樣的安裝將保留原來對選擇項、顏色和編輯功能鍵的設置。

3. 為只有兩個軟盤而無硬碟的系統安裝Turbo C 2.0。

這里假定按第一種選擇進行安裝, 只要在安裝過程中按對盤號的提示, 順序插入各個軟盤, 就可以順利地進行安裝, 安裝完畢將在C盤根目錄下建立一個TC 子目錄, TC下還建立了兩個了目錄LIB和INCLUDE, LIB子目錄中存放庫文件, INCLUDE子目錄中存放所有頭文件。運行Turbo C2.0時, 只要在TC 子目錄下鍵入TC並回車即可進入Turbo C 2. 0 集成開發環境。

二、 Turbo C 2.0集成開發環境的使用

進入Turbo C 2.0集成開發環境中後, 屏幕上顯示:
——————————————————————————————
File Edit Run Compile Project Options Debug Break/watch
┌————————————Ed i t——————————————┐
│ Line 1 Col 1 Insert Indent Tab File Unindent c:NONAME.C │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│—————————Message——————————————— │
│ │
│ │
└————————————————————————————┘
F1-Help F5-Zoom F6-Switch F7-Trace F8-Step F9-Make F10-Menu
———————————————————————————————
其中頂上一行為Turbo C 2.0 主菜單, 中間窗口為編輯區, 接下來是信息窗口, 最底下一行為參考行。這四個窗口構成了Turbo C 2.0的主屏幕, 以後的編程、編譯、調試以及運行都將在這個主屏幕中進行。下面詳細介紹主菜單的內容。

1.主菜單

主菜單在Turbo C 2.0主屏幕頂上一行, 顯示下列內容:File Edit Run Compile Project Options Debug Break/watch

除Edit外, 其它各項均有子菜單, 只要用Alt加上某項中第一個字母(即大寫字母), 就可進入該項的子菜單中。

File (文件)菜單 ----按Alt+F可進入File菜單, 該菜單包括以下內容:

.Load (載入)
裝入一個文件, 可用類似DOS的通配符(如*.C)來進行列表選擇。也可裝入其它擴展名的文件, 只要給出文件名(或只給路徑)即可。該項的熱鍵為F3, 即只要在主菜單中按F3即可進入該項, 而不需要先進入File菜單再選此項。

.Pick (選擇)
將最近裝入編輯窗口的8個文件列成一個表讓用戶選擇, 選擇後將該程序裝入編輯區, 並將游標置在上次修改過的地方。其熱健為Alt-F3。

.New (新文件)
說明文件是新的, 預設文件名為NONAME.C, 存檔時可改名。

.Save (存檔)
將編輯區中的文件存檔, 若文件名是NONAME.C時, 將詢問是否更改文件名, 其熱鍵為F2。

.Write to (存檔)
可由用戶給出文件名將編輯區中的文件存檔, 若該文件已存在, 則詢問要不要覆蓋。

.Directory (目錄)
顯示目錄及目錄中的文件, 並可由用戶選擇。

.Change dir (改變目錄)
顯示當前目錄, 用戶可以改變顯示的目錄。

.Os shell (暫時退出)
暫時退出Turbo C 2.0到DOS提示符下, 此時可以運行DOS 命令, 若想回到Turbo C 2.0中, 只要在DOS狀態下鍵入EXIT即可。

.Quit (退出)
退出Turbo C 2.0, 返回到DOS操作系統中, 其熱鍵為Alt+X。

說明: 以上各項可用游標鍵移動色棒進行選擇, 回車則執行。也可用每一項的第一個大寫字母直接選擇。若要退到主菜單或從它的下一級菜單列表框退回均可用Esc鍵,Turbo C 2.0所有菜單均採用這種方法進行操作, 以下不再說明。

Edit (編輯)菜單---按Alt+E可進入編輯菜單, 若再回車, 則游標出現在編輯窗口, 此時用戶可以進行文本編輯。編輯方法基本與wordstar相同,

可用F1鍵獲得有關編輯方法的幫助信息。與編輯有關的功能鍵如下:
F1 獲得Turbo C 2.0編輯命令的幫助信息
F5 擴大編輯窗口到整個屏幕
F6 在編輯窗口與信息窗口之間進行切換
F10 從編輯窗口轉到主菜單

編輯命令簡介:
PageUp 向前翻頁
PageDn 向後翻頁
Home 將游標移到所在行的開始
End 將游標移到所在行的結尾
Ctrl+Y 刪除游標所在的一行
Ctrl+T 刪除游標所在處的一個詞
Ctrl+KB 設置塊開始
Ctrl+KK 設置塊結尾
Ctrl+KV 塊移動
Ctrl+KC 塊拷貝
Ctrl+KY 塊刪除
Ctrl+KR 讀文件
Ctrl+KW 存文件
Ctrl+KP 塊文件列印
Ctrl+F1 如果游標所在處為Turbo C 2.0庫函數, 則獲得有關該函數的幫助信息
Ctrl+Q[ 查找Turbo C 2.0雙界符的後匹配符
Ctrl+Q] 查找Turbo C 2.0雙界符的前匹配符
說明:
a. Turbo C 2.0的雙界符包括以下幾種符號:
花括符 { }
尖括符 < >
圓括符 ( )
方括符 [ ]
注釋符 /* */
雙引號 "
單引號 ''
Turbo C 2.0在編輯文件時還有一種功能, 就是能夠自動縮進, 即游標定位和上一個非空字元對齊。在編輯窗口中, Ctrl+OL為自動縮進開關的控制鍵。

Run (運行)菜單---按Alt+R可進入Run菜單, 該菜單有以下各項:

.Run (運行程序)
運行由Project/Project name項指定的文件名或當前編輯區的文件。如果對上次編譯後的源代碼未做過修改, 則直接運行到下一個斷點(沒有斷點則運行到結束)。否則先進行編譯、連接後才運行, 其熱鍵為Ctrl+F9。

.Program reset (程序重啟)
中止當前的調試, 釋放分給程序的空間, 其熱鍵為Ctrl+F2。

.Go to cursor (運行到游標處)
調試程序時使用, 選擇該項可使程序運行到游標所在行。游標所在行必須為一條可執行語句, 否則提示錯誤。其熱鍵為F4。

.Trace into (跟蹤進入)
在執行一條調用其它用戶定義的子函數時, 若用Trace into項, 則執行長條將跟蹤到該子函數內部去執行, 其熱鍵為F7。

.Step over (單步執行)
執行當前函數的下一條語句, 即使用戶函數調用, 執行長條也不會跟蹤進函數內部, 其熱鍵為F8。

.User screen (用戶屏幕)
顯示程序運行時在屏幕上顯示的結果。其熱鍵為Alt+F5。

Compile (編譯)菜單---按Alt+C可進入Compile菜單, 該菜單有以下幾個內容:

.Compile to OBJ (編譯生成目標碼)
將一個C源文件編譯生成.OBJ目標文件, 同時顯示生成的文件名。其熱鍵為Alt+F9。

.Make EXE file (生成執行文件)
此命令生成一個.EXE的文件, 並顯示生成的.EXE文件名。其中.EXE文件名是下面幾項之一。
a. 由Project/Project name說明的項目文件名。
b. 若沒有項目文件名, 則由Primary C file說明的源文件。
c. 若以上兩項都沒有文件名, 則為當前窗口的文件名。

.Link EXE file (連接生成執行文件)
把當前.OBJ文件及庫文件連接在一起生成.EXE文件。

.Build all (建立所有文件)
重新編譯項目里的所有文件, 並進行裝配生成.EXE文件。該命令不作過時檢查(上面的幾條命令要作過時檢查, 即如果目前項目里源文件的日期和時間與目標文件相同或更早, 則拒絕對源文件進行編譯)。

.Primary C file (主C文件)
當在該項中指定了主文件後, 在以後的編譯中, 如沒有項目文件名則編譯此項中規定的主C文件, 如果編譯中有錯誤, 則將此文件調入編輯窗口, 不管目前窗口中是不是主C文件。

.Get info
獲得有關當前路徑、源文件名、源文件位元組大小、編譯中的錯誤數目、可用空間等信息。

Project (項目)菜單---按Alt+P可進入Project菜單, 該菜單包括以下內容:

.Project name (項目名)
項目名具有.PRJ的擴展名, 其中包括將要編譯、連接的文件名。例如有一個程序由file1.c, file2.c, file3.c組成, 要將這3個文件編譯裝配成一個file.exe的執行文件, 可以先建立一個file.prj的項目文件, 其內容如下:
file1.c file2.c file3.c
此時將file.prj放入Project name項中, 以後進行編譯時將自動對項目文件中規定的三個源文件分別進行編譯。然後連接成file.exe文件。如果其中有些文件已經編譯成.OBJ文件, 而又沒有修改過, 可直接寫上.OBJ擴 展名。此時將不再編譯而只進行連接。例如: file1.obj file2.c file3.c 將不對file1.c進行編譯, 而直接連接。 說明: 當項目文件中的每個文件無擴展名時, 均按源文件對待, 另外, 其中的文件也可以是庫文件, 但必須寫上擴展名.LIB。

.Break make on (中止編譯)
由用戶選擇是否在有Warining(警告)、Errors(錯誤)、Fatal Errors( 致命錯誤)時或Link(連接)之前退出Make編譯。

.Auto dependencies (自動依賴)
當開關置為on, 編譯時將檢查源文件與對應的.OBJ文件日期和時間, 否則不進行檢查。

.Clear project (清除項目文件)
清除Project/Project name中的項目文件名。

.Remove messages (刪除信息)
把錯誤信息從信息窗口中清除掉。

Options (選擇菜單) ---按Alt+O可進入Options菜單, 該菜單對初學者來說要謹慎使用。

.Compiler (編譯器)
本項選擇又有許多子菜單, 可以讓用戶選擇硬體配置、存儲模型、調試技術、代碼優化、對話信息控制和宏定義。這些子菜單如下: Model 共有Tiny, small, medium, compact, large, huge 六種不同模式可由同戶選擇。
Define 打開一個宏定義框, 同戶可輸入宏定義。多重定義可同分號, 賦值可用等號。
Code generation 它又有許多任選項, 這些任選項告訴編譯器產生什麼樣的目標代碼。
Calling convention 可選擇C或Pascal方式傳遞參數。
Instruction set 可選擇8088/8086或80186/80286指令系列。
Floating point 可選擇模擬浮點、數學協處理器浮點或無浮點運算。
Default char type 規定char的類型。
Alignonent 規定地址對准原則。
Merge plicate strings 作優化用, 將重復的字元串合並在一起。
Standard stack frame 產生一個標準的棧結構。
Test stack overflow 產生一段程序運行時檢測堆棧溢出的代碼。
Line number 在.OBJ文件中放進行號以供調試時用。
OBJ debug information 在.OBJ文件中產生調試信息。
Optimization
Optimize for 選擇是對程序小型化還是對程序速度進行優化處理。
Use register variable 用來選擇是否允許使用寄存器變數。
Register optimization 盡可能使用寄存器變數以減少過多的取數操作。
Jump optimization 通過去除多餘的跳轉和調整循環與開關語句的辦法, 壓縮代碼。
Source
Indentifier length 說明標識符有效字元的個數, 默認為32個。
Nested comments 是否允許嵌套注釋。
ANSI keywords only 是只允許ANSI關鍵字還是也允許Turbo C 2.0關鍵字
Error
Error stop after 多少個錯誤時停止編譯, 默認為25個。
Warning stop after 多少個警告錯誤時停止編譯, 默認為100個。
Display warning
Portability warning 移植性警告錯誤。
ANSI Violations 侵犯了ANSI關鍵字的警告錯誤。
Common error 常見的警告錯誤。
Less common error 少見的警告錯誤。
Names 用於改變段(segment)、 組( group) 和類(class)的名字, 默認值為CODE,DATA,BSS。

.Linker (連接器)
本菜單設置有關連接的選擇項, 它有以下內容:
Map file menu 選擇是否產生.MAP文件。
Initialize segments 是否在連接時初始化沒有初始化的段。
Devault libraries 是否在連接其它編譯程序產生的目標文件時去尋找其預設庫。
Graphics library 是否連接graphics庫中的函數。
Warn plicate symbols 當有重復符號時產生警告信息。
Stack warinig 是否讓連接程序產生No stack的警告信息。
Case-sensitive link 是否區分大、小寫字。

.Environment (環境)
本菜單規定是否對某些文件自動存檔及製表鍵和屏幕大小的設置
Message tracking

Current file 跟蹤在編輯窗口中的文件錯誤。

All files 跟蹤所有文件錯誤。

Off 不跟蹤。

Keep message 編譯前是否清除Message窗口中的信息。

Config auto save 選on時, 在Run, Shell或退出集成開發環境之前,如果Turbo C 2.0的配置被改過, 則所做 的改動將存入配置文件中。選off時不存。

Edit auto save 是否在Run或Shell之前, 自動存儲編輯的源文件。

Backup file 是否在源文件存檔時產生後備文件(.BAK文件)。

Tab size 設置製表鍵大小, 默認為8。

Zoomed windows 將現行活動窗口放大到整個屏幕, 其熱鍵為F5。

Screen size 設置屏幕文本大小。

.Directories (路徑)
規定編譯、連接所需文件的路徑, 有下列各項:
Include directories 包含文件的路徑, 多個子目錄用";"分開。
Library directories 庫文件路徑, 多個子目錄用";"分開。
Output directoried 輸出文件(.OBJ, .EXE, .MAP文件)的目錄。
Turbo C directoried Turbo C 所在的目錄。
Pick file name 定義載入的pick文件名, 如不定義則從current pick file中取。

.Arguments (命令行參數)
允許用戶使用命令行參數。

.Save options (存儲配置)
保存所有選擇的編譯、連接、調試和項目到配置文件中, 預設的配置文件為TCCONFIG.TC。

.Retrive options 裝入一個配置文件到TC中, TC將使用該文件的選擇項。

Debug (調試)菜單

---按Alt+D可選擇Debug菜單, 該菜單主要用於查錯, 它包括以下內容:

.Evaluate

.Expression 要計算結果的表達式。

.Result 顯示表達式的計算結果。

.New value 賦給新值。

.Call stack 該項不可接觸。而在Turbo C debuger 時用於檢查堆棧情況。

.Find function 在運行Turbo C debugger時用於顯示規定的函數。

.Refresh display 如果編輯窗口偶然被用戶窗口重寫了可用此恢復編輯窗口的內容。

Break/watch (斷點及監視表達式)

---按Alt+B可進入Break/watch菜單, 該菜單有以下內容:

. Add watch 向監視窗口插入一監視表達式。

.Delete watch 從監視窗口中刪除當前的監視表達式。

.Edit watch 在監視窗口中編輯一個監視表達式。

.Remove all watches 從監視窗口中刪除所有的監視表達式。

.Toggle breakpoint 對游標所在的行設置或清除斷點。

. Clear all breakpoints 清除所有斷點。

. View next breakpoint 將游標移動到下一個斷點處。

三、Turbo C 2.0的配置文件

所謂配置文件是包含Turbo C 2.0有關信息的文件, 其中存有編譯、連接的選擇和路徑等信息。可以用下述方法建立Turbo C 2.0的配置:

1. 建立用戶自命名的配置文件
可以從Options菜單中選擇Options/Save options命令, 將當前集成開發環境的所有配置存入一個由用戶命名的配置文件中。下次啟動TC時只要在DOS下鍵入: tc/c <用戶命名的配置文件就會按這個配置文件中的內容作為Turbo C 2.0的選擇。

2. 若設置Options/Environment/Config auto save 為on, 則退出集成開發環境時, 當前的設置會自動存放到Turbo C 2.0配置文件TCCONFIG.TC中。Turbo C 在啟動時會自動尋找這個配置文件。

3. 用TCINST設置Turbo C的有關配置, 並將結果存入TC.EXE中。Turbo C 在啟動時, 若沒有找到配置文件, 則取TC.EXE中的預設值。

5. C語言簡單問題

int的變數裝不下15位那麼大的,無法scanf("%d")輸入,要表示這種超過計算機long大小的數據,最簡單的就是使用字元串,例如要表示1000位的整數,可以定義的變數為:
char big1[1000], big2[1000],big3[1000];
用scanf("%s")或者gets讀入數據,按照按右對齊進行加運算結果存入big3,最簡單的辦法是逆向big1、big2然後按位加結果保存到big3,最後逆向big後就是結果,形象點舉例:
如果輸入的big1是:123456789999999999
程序逆向排序為:999999999987654321
對big2同樣的處理,然後就可以按位計算合計存入big3
整個程序,關鍵的就是兩個函數,第一個是計算求和的:
void big_sum(char a[], char b[], char c[]);
函數的功能是計算超大整數的加法:c=a+b
第二個是逆向字元串的函數:
void str_rev(char s[]);
功能是把字元串s收尾顛倒,下面以C語言的語法描述兩個函數演算法,如果看不懂就代碼就看注釋。
void str_rev(char s[]){
int n=0,i=0;
char t;
while(s[n]) n++;/*使得指針移動到字元串末尾的結束符*/
n--;
while(i>n){t=s[i];s[i]=s[n];s[n]=t;i++;n--;}/*首尾交換*/
}
加法函數的演算法邏輯如下:
void big_sum(char a[], char b[], char c[]){
int ia=0,ib=0,ic=0,s=0;
str_rev(a);/*逆向a*/
str_rev(b);/*逆向b*/
while(a[ia] && b[ib]){
if (a[ia]) {s+=a[ia]-'0'; ia++;}/*如果a沒有完,那麼取出一位累加到s,移動到下一位*/

if (b[ib]) {s+=b[ib]-'0'; ib++;}/*如果b沒有完,那麼取出一位累加到s,移動到下一位*/
c[ic]='0' + s%10;/*一位結果,轉換為字元*/
s/=10;/*保留進位*/
ic++;
}
c[ic]='\0';/*給結果添加結束符*/
str_rev(a);/*還原a*/
str_rev(b);/*還原b*/
str_rev(c);/*還原c*/
}

最後就是主程序了:
main(){
char a[1000],b[1000],c[1000];
printf("a=");gets(a);
printf("b=");gets(b);
big_sum(a,b,c);
printf("c=");pets(c);
}

6. C語言問題###

\xhh 表示一個ASCII碼用16進表示,
其中hh是1到2個16進制數
\ddd 表示一個ASCII碼用8進表示,
其中dd是1到3個8進制數

示常式序:
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char* argv[] )
{
/*A的ascii碼是65,轉成十六進制是41,轉成8進制是101*/
printf("\x41\n"); /*輸出A*/
printf("\101\n"); /*輸出A*/

system("pause");

return 0;
}

7. C語言問題

1
答案應該是B,這個沒什麼好解釋的(就是指針變數指向變數的地址)
2
答案應該是D 如果直接用字元串對字元數組初始化的話字元數組的長度要比實際字元串長度大1的
因為字元串在字元數組中是以'\0'結束的,這個你也可以用sizeof() 分別測試一下
我已經測試過了A比B大1的
3
答案應該是D,這個沒的說,括弧的作用就是避免二義
4
答案應該是C,不要把 int *ptr();搞混了,題上的是返回一個整形數據的指針函數,後者是一個
返回指針的函數
5
答案是A,呵呵,這個你好好想一下就明白了
6
答案是A 4
7
答案是23 這個你要好好看一看,特別是(&Arr+1)它和(Arr+1)區別很大,前者在地址上加了
1而後者在地址上加了1*sizeof(int);
8.
這道題你是不是搞錯了,你仔細看看有很多錯誤的。
9.
答案是 B 為了幫助你理解,對此程序我寫了段代碼
#include<stdio.h>
void main()
{
void func(char str[100]);
char str[100];
printf("%d\n",sizeof(str));//答案是100
func(str);

}
void func(char str[100])
{
printf("%d\n",sizeof(str));//答案是4

}
為什麼會出現這種情況呢,原因是因為兩者有著本質性的區別,第一個sizeof(str)中的str是一個
地址常量,它索引著一段大小為100的內存堆,而第二個sizeof(str)中的str是一個字元指針變數
sizeof(str)的結果就是一個字元指針變數所具有的內存,它的內存應該是為4的
10
答案是D
二:
1.
錯,應該放在靜態存儲區(或全局數據區的)
2

3.

4.
錯,不可能是float 型的
5.


1. int main(void)
{
Unsigned char index = 0;//這個地方應該是unsigned int index=0;注意第一個u不能大寫
While(index < 256)
{
index +=index;
index++;
}
Printf(「index value %d\n」,index);
Return 0;
}
2.
char*f()
{ //應該是static char s[4]={'0','1','2','3','\0'};
Char s[4]={『1』,』2』,』3』,』0』};//關鍵字的開頭是不能大寫的,還有就是符號『也不對
Return s;//ruturn 第一個字母也不能大寫,
}

Void main()
{
Char *s;//應該是char 第一個字母不能大寫
s=f();
printf(「%s」,s);
}
//你這道題的本意是想通過函數調用來獲得一個字元串的首地址從而在主函數中輸出,
//但是,有一點這個程序沒有考慮到那就是當被調函數結束後那個char s[4] 所佔內存將自動
//操作系統回收,因為它只是個動態局部變數,所以要想達到目的應該是聲明成靜態變數的
//static char s[4],還有一點錯誤就是字元串都要'\0'結尾否則輸出的字元串的將不會是你想要的那樣

3.
這道題沒什麼錯誤,能達到預期的效果,除了有幾處拼寫錯誤,例如你第一個是GetmMnory而第二個是
GetMemory這一點你注意一下就可以了
void GetMenory(char**p)
{
*p = (char*)malloc(100);
}
Void Test(void)
{
char*str = NULL;
GetMemory(&str);
strcpy(str,」hello morld」);
printf(str);
}
4.
這道題沒什麼語法錯誤,除了單引號格式不對,還有就就違反了字元串都要以'\0'結尾這一約定
5.
這道題沒有什麼語法錯誤,就是有個字元串函數寫錯了str,應該寫成 strcpy的
四:
你這道題具體是讓做什麼的,我不是太明白,是讓建一個動態鏈表啊還是靜態鏈表啊,
請你把問題寫詳細點
五。

int judgment(int a[],int length )//這個函數是判斷是否對稱的

{
for(int i=0;i<=length/2;i++)
if(a[i]!=a[length-i])

break;
if(i==length/2+1)
return 1;
else
return 0;

}
void main(void)
{
int a[10];
int num;
printf("請輸入你要檢測的數\n") ;
scanf("%d",&num);
int length=0;

//這個循環是為了把整數拆開放到一個整形數組中,拆開以後放進數組裡面的剛好是和正常的數
//反序的,不過這個不會影響結果的,因為只要數對稱反序後一樣對稱,如果數不對稱反序後依然不對稱
do
{
int temp=num%10;
a[length]=temp;
num=num/10;
length++;
} while(num>=10);
a[length]=num;
if( judgment(a,length))
printf("是\n");
}
如果這個程序有什麼不懂得話,可以提出來,隨時幫你解析

希望我的答案對你有點幫助……
希望對你能有所幫助。

8. C語言的問題

#include <stdio.h>
#include <stdlib.h>

void main()
{

int x;
printf("input a positive integer data\n");
scanf("%d",&x);
if (x %7 == 0 && x % 5 ==0 && x % 3 ==0) {printf("by 3,5,7\n"); exit(0);};
if (x %5 == 0 && x % 7 ==0 ) {printf("by 5,7\n"); exit(0);};
if (x %3 == 0 && x % 5 ==0 ) {printf("by 3,5\n"); exit(0);};
if (x %3 == 0 && x % 7 ==0 ) {printf("by 3,7\n"); exit(0);};
if (x %3 == 0 ) {printf("by 3\n"); exit(0);};
if (x %5 == 0 ) {printf("by 5\n"); exit(0);};
if (x %7 == 0 ) {printf("by 7\n"); exit(0);};
printf("No");
exit(0);
}

9. 關於c語言的問題

當然是2個。不過實際上比較復雜。
原則上來說,對象的定義語句會對該對象分配這個對象所需的存儲。然而對數組來說,主要有兩個問題:
第一,C語言中對數組的支持相當不完整,它只不過是對一組連續存儲的對象進行訪問的語法簡化。就是說,如下語法形式是等價的。
arr[i] == i[arr] == *(arr+i);
數組名就是數組首地址,而不會進行任何下標訪問限制,並且作為函數參數傳遞的必然是這個地址。
scanf函數獲得了這個地址,並試圖向這個地址上寫入數據,它並不知道這個地址上的數組到底有多大,你輸入多少都會被寫進去,用%s所寫的字元串還要加上一個'\0'字元。
所以你寫3個字元實際上是4個字元,而7個字元實際上是8個字元。
第二,自動變數是在運行棧上分配空間的,如果你向超過數組下標范圍的地方寫入數據,幾乎可以肯定會造成在該運行棧上分配的其他自動變數的改動甚至是破壞整個運行棧結構。數據輸入多了自然會造成程序崩潰。這是非常常見的C語言「緩沖區溢出」安全問題的主要原理。
第三,內存中分配變數有時不是緊挨著放置的,這其中有關於「對齊」的要求。
所謂對齊問題,簡單的說就是按2的指數倍的內存位置進行放置。由於CPU在讀寫內存時要通過數據匯流排,而數據匯流排是4位元組或8位元組等,而每個讀寫指令肯定最自然的方式就是一次讀寫4個位元組或8個位元組。為了提高CPU訪問內存的效率,防止對一個變數需要進行兩次讀取或寫入才能完成訪問,通常在分配其內存位置時都把它放在按2、4或8個位元組對齊的位置。這種情況下,
char a[2];
會在運行棧上分配2個位元組,而按32位機器的對其要求還有2個位元組的填充空餘,總共是4個位元組,而
char a[5];
的填充就會是3個位元組。由此可以推斷你可以輸入3個獲7個數字是因為額外的字元和'\0'被放在這些填充位置上。再多就會破壞棧結構了。

10. c語言問題

#include #include void main() { int i=0; int j=0; char countryname[5][20]; //5X20的數組,用於保存國家名稱 char temp[20]; //交換時使用 printf("Please input five country's name\n"); //輸入5個國家的名字 for(i=0;i<5;i++) { printf("please input name for country %d\n",i); scanf("%s",countryname[i]); } //冒泡排序按英語詞典規律排序 for(i=1;i<5;i++) { for(j=0;j0) { strcpy(temp,countryname[j]); strcpy(countryname[j],countryname[j+1]); strcpy(countryname[j+1],temp); } } } printf("The country's after sort is:\n"); //排序後的國家名稱 for(i=0;i<5;i++) { printf("%s\n",countryname[i]); } } //這段代碼經過調試沒有問題,明天有面試,寫個練練手,祝福我吧!!

熱點內容
存儲上市龍頭 發布:2024-11-15 14:52:14 瀏覽:37
我的世界伺服器怎麼重置教學 發布:2024-11-15 14:52:13 瀏覽:122
C語言tf 發布:2024-11-15 14:36:22 瀏覽:810
違反密碼法是什麼意思 發布:2024-11-15 14:36:20 瀏覽:920
androidmp3錄音 發布:2024-11-15 14:32:50 瀏覽:493
英朗自動擋哪個配置最好 發布:2024-11-15 14:27:44 瀏覽:253
編譯原理斷言有哪幾種 發布:2024-11-15 14:25:29 瀏覽:200
資料庫數據重復 發布:2024-11-15 14:23:17 瀏覽:781
安卓端開發用什麼IDE 發布:2024-11-15 14:13:51 瀏覽:554
阿里雲查看訪問ip 發布:2024-11-15 14:08:58 瀏覽:544