❶ C程序怎樣才能讓它回到第一步
只能是給個循環
do {
}while(1);
❷ c語言問題
輾轉相除法
輾轉相除法, 又名歐幾里德演算法(Euclidean algorithm)乃求兩個正整數之最大公因子的演算法。它是已知最古老的演算法, 其可追溯至前300年。它首次出現於歐幾里德的《幾何原本》(第VII卷,命題i和ii)中,而在中國則可以追溯至東漢出現的《九章算術》。它並不需要把二數作質因子分解。
輾轉相除法是利用以下性質來確定兩個正整數 a 和 b 的最大公因子的:
1. 若 r 是 a ÷ b 的余數, 則
gcd(a,b) = gcd(b,r)
2. a 和其倍數之最大公因子為 a。
另一種寫法是:
1. a ÷ b,令r為所得余數(0≤r<b)
若 r = 0,演算法結束;b 即為答案。
2. 互換:置 a←b,b←r,並返回第一步。
[編輯] 虛擬碼
這個演算法可以用遞歸寫成如下:
function gcd(a, b) {
if (a 不整除 b)
return gcd(b, a mod b);
else
return a;
}
或純使用循環:
function gcd(a, b) {
define r as integer;
while b ≠ 0 {
r := a mod b;
a := b;
b := r;
}
return a;
}
其中「a mod b」是指取 a ÷ b 的余數。
例如,123456 和 7890 的最大公因子是 6, 這可由下列步驟看出:
a---------------b--------------a mod b
123456----------7890-----------5106
7890------------5106-----------2784
5106------------2784-----------2322
2784------------2322-----------462
2322------------462------------12
462-------------12-------------6
12--------------6--------------0
只要可計算余數都可用輾轉相除法來求最大公因子。這包括多項式、復整數及所有歐幾里德定義域(Euclidean domain)。
輾轉相除法的運算速度為 O(n2),其中 n 為輸入數值的位數。
❸ C語言中返回上一層怎樣用代碼實現
for
for 嗎?
用
break;
❹ C++怎樣執行完子函數之後返回主函數某一步繼續進行
1、執行完子函數之後回到調用該成員函數處的下一執行點。如果是主函數中調用類的成員函數,那麼回到調用該成員函數的下一執行點。
2、C語言調用函數就是先定義並聲明函數,之後再根據定義函數的格式調用。
下面舉例來說明函數調用方法:
#include<stdio.h>
intfun(intx,inty);//函數聲明,如果函數寫在被調用處之前,可以不用聲明
voidmain()
{
inta=1,b=2,c;
c=fun(a,b);//函數的調用,調用自定義函數fun,其中a,b為實際參數,傳遞給被調用函數的輸入值
}
//自定義函數fun
intfun(intx,inty)//函數首部
{//{}中的語言為函數體
returnx>y?x:y;//返回x和y中較大的一個數
}
❺ c語言演算法問題
C語言中三個常見演算法問題
1.輾轉相除法
2.整數求逆
3.二分搜索
1.輾轉相除法
求最大公約數
// 代碼如下
int u,v;
scanf("%d %d",&u,&v);
while(v!=0)
{
int temp=u%v;
u=v;
v=temp;
}
printf("%d",u);
1
2
3
4
5
6
7
8
9
分析
(1)如果v=0,計算結束,u就是最大公約數
(2)如果v不等於0,那麼計算u除以v的余數,讓u=v,而v等於那個余數
(3)返回第一步
2.整數求逆
若要求原數每位都要輸出
// 例:700輸出007
int x;
scanf("%d",&x);
int digit;
while(x>0)
{
digit=x%10;
printf("%d",digit);
x/=10;
}
1
2
3
4
5
6
7
8
9
原數每位不必輸出
//例:700輸出7
int x;
scanf("%d",&x);
int digit;
int ret=0;
while(x>0)
{
digit=x%10;
ret=ret*10+digit;
x/=10;
}
printf("%d",ret);
1
2
3
4
5
6
7
8
9
10
11
分析
(1)對x變數做%10操作,得到它的個位數
(2)再對x變數做/10操作,去掉它的個位數
(3)做一個while循環對前兩步進行循環,循環條件在x變數大於零的情況下進行
3.二分搜索
用於已排好序的多個數字
//這里數組已知
int arr[]={1,3,5,7,8,9};
int k;
scanf("%d",&k);
int left=0;
int right=len-1;
int ret;
while(right>left)
{
int mid=(left+right)/2;
if(arr[mid]==k)
{
ret=mid;
break;
}else if(arr[mid]>k)
{
right=mid-1;
}else{
left=mid+1;
}
}
printf("%d",arr[ret]);
❻ C語言中函數返回指向棧內存的指針的問題
p是指向局部變數的指針,當函數退出時,局部變數會被釋放,這時,p所指向的位置就不一樣是原來的數。
因為fun()函數返回的值被計算機的臨時變數存放,當賦值給p的時候,p是指向臨時變數的地址,所以還可以讀取出100。
*p = "hello"這是常量字元串,從靜態存儲區分配,第一步字元串"hello"從靜態存儲區獲取一塊內存,指針變數p才指向這塊靜態內存,這塊內存的特點是從程序開始到結束一直從在,所以可以返回。
(6)c語言反回第一步擴展閱讀:
函數的返回值類型是在定義函數時指定的。return 語句中表達式的類型應與定義函數時指定的返回值類型一致。如果不一致,則以函數定義時的返回值類型為准,對 return 語句中表達式的類型自動進行轉換,然後再將它返回給主調函數使用。
在調用函數時,如果需要從被調函數返回一個值供主調函數使用,那麼返回值類型必須定義成非 void 型。此時被調函數中必須包含 return 語句,而且 return 後面必須要有返回值,否則就是語法錯誤。
❼ c語言函數的return誰能仔細給我解釋一下
事實上 無論是return ; 還是return X;
在匯編上都只有一條指令:ret(retn)
只不過對於return X; 會在 執行ret指令之前對eax寄存器賦值:
如果是return 0 ; 可能編譯器會這樣做:
xor eax,eax
ret
其他情況類似
然後從C語言角度講
對於返回類型為void的函數
函數體內可以出現return;語句來表示結束本函數的執行
這個時候eax還是有值的,因為 函數返回類型是void,因此在調用該函數的地方不可能會去用該函數的返回值,也就意味著該返回值是毫無意義的
樓主想問的 單獨的return;語句,對於這行代碼,一般只用在返回類型為void的函數體內
若出現在非void返回類型的函數體內,那麼返回值是隱含在寄存器eax中的
然後對於有返回值的函數來說
return後面是肯定需要跟一個值的
這個值是被送入寄存器eax帶出來的~
我說再多 也許還是會有人不信(本人玩逆向的,這一切信不信那是你們的事,我只能把事實告訴你們,我也只能做到這樣了)
下面直接上代碼上圖:
(微軟任何C/C++編譯器、VC/VS這些、都支持編譯此代碼,沒有警告,沒有錯誤)
註:主函數不主函數的return都是沒有區別的
但是main函數很特別,特別在它有好多種寫法,標准C真正的主函數返回類型是int
有2個參數,一個是命令行參數個數,一個是命令行參數
windows下面的主函數可以有三個參數,前兩個參數跟標准C一樣,第三個參數是環境變數
這些參數都是由mainCRTStartup函數傳進來的,而mainCRTStartup再往上你還要研究的話那。。。。那。。。那。。。我只能告訴你這些參數都是要操作系統傳進來的吧~~~
我們編程的時候,也許有些菜鳥會把main寫成如下形式:void main()
其實這種寫法在編譯之後都是會被轉化成標准寫法的底樓說的 不帶返回值系統默認返回0這完全是不靠譜的,因為事實當中返回值都是被寄存器eax帶出去的,而對於main是必須要返回值的,菜鳥寫了沒返回值的main在編譯之前就被編譯器替換掉了,哪來的默認返回0的說法?何來默認?系統會把你寫的main換成 標准main形式!標准main會在底下返回0
主函數return的值只有你在其他進程中創建子進程,子進程的返回狀態被父進程接收的值就是main的返回值,所以,在你寫的程序不需要被其他進程創建的話,main的返回值是無關緊要的
❽ 想學c語言,但不知如何開頭,學習c語言的第一步是什麼
c語言是很多人都想學習的內容,但是很多人都不知道如何開頭。
總結
c言語作為一門編程言語,應該是每個軟體開發人員都應該控制的,而對計算機專業的學生來說更是根底。假如你依照我上面說的步驟,把這些學問都控制的話,置信你的c言語可以到達一個較好的程度。
❾ c語言 如何返回上一步驟
1、可以用while循環,一個菜單一個while循環,while循環里在套一個while循環;
2、例如:
cout<<"請選擇:";cin>>choice;
switch(choice)
{
case'1':
{
while(run1)
{
cout<<"請選擇:";cin>>x;
switch(x)
{
case'1':
{
}
break;
case'2':
{
}
break;
case'0'://選擇0是級可返回主菜單
{
run1=0;
}
break;
}
}
break;
case'2':
{
}
break;
case'3':
{
}
break;
}
❿ c語言如何跳回前面的某一個點重新從那裡開始運行
用goto語句。
#include<stdio.h>
voidmain()
{
inta;
begin:scanf("%d",&a);//goto語句的標號begin
if(a<0||a>9)
gotobegin;//如果用戶輸入的數不在0~9之間,則重新輸入
eles
printf("%d ",a);//如果用戶輸入的數在0~9之間,則輸出該數
}
(10)c語言反回第一步擴展閱讀:
goto的基本語法
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 1;
while(1)
{
printf("在while(1)里 ");
while(i++)
{
printf("i = %d ",i);
if(i > 3)
{
goto TiaoChu;
}
}
}
TiaoChu:
printf("程序結束 ");
return 0;
}
運行結果:
標號位置
在while(1)里
2
3
4
程序結束