c語言fz
『壹』 斐波那契數列c語言編程
題目很簡單,先自己寫,寫不出來的時候,我們幫你改改
『貳』 請教C語言
函數調用
1)注意在函數調用時實參和形參的個數、類型應一一對應。對實參表求值的順序是不確定的,有的系統按自左至右,有的系統則按自右至左的順序。這一點要注意。
2)函數調用的方式:函數語句,函數表達式,函數參數
3)如果主調函數和被調函數在同一文件中,並且主調函數在前,那麼一般要在主調函數中對被調函數進行說明。除非:(1)被調函數的返回值類型為整型或字元型(2)被調函數出現在主調函數之前。
4)對函數的說明和定義是不同的,定義是指對函數功能的確立,包括指定函數名,函數值類型,形參及其類型、函數體等。說明則只是對已定義的函數返回值類型進行說明,只包括函數名、函數類型以及一個空的括弧,不包括形參和函數體。
5)c語言允許函數的遞歸調用(在調用一個函數的過程中又出現直接或間接的調用該函數本身)。
變數的指針和指向變數的指針變數
讀起來很拗口,說白了就是變數的地址和用來存放變數地址的地址變數。因為一個變數在編譯的時候系統要為它分配一個地址,假如再用一個變數來存放這個地址,那麼這個變數就叫做指向變數的指針變數,也就是用來存放變數地址的這么一個變數。所謂"指向"就是指存放××的地址,如指向變數的指針變數,"指向"就是指用來存放變數的地址,再如指向數組的指針變數,"指向"就是指存放數組的地址。只要理解了這個,指針也就不難了。另外,還有指向字元串的指針變數,指向函數的指針變數,指向指針的指針變數等。
1) 指針變數的定義
形式:類型標識符 *標識符 如:int *pointer;
要注意兩點:*表示pointer是個指針變數,在用這個變數的時候不能寫成*pointer, *pointer是pointer指向的變數。一個指針變數只能指向同一個類型的變數。如上面
pointer只能指向int型變數。
2)指針變數的引用
兩個有關的運算符:
& 取地址運算符 &a 就代表變數a的地址
* 指針運算符 *a 就代表變數a的值
2. 數組的指針和指向數組的指針變數
數組的指針指數組的起始地址,數組元素的指針指數組元素的地址。
1)指向數組元素的指針變數的定義與賦值
定義和指向變數的指針變數定義相同,c規定數組名代表數組的首地址,即第一個數組元素地址。
2)通過指針引用數組元素
我們通常引用數組元素的形式是a[i],如果用指針可以這樣引用,*(a+i),或定義一個指針變數p,將數組a的首地址賦給p,p=a;然後用*(p+i)引用。
注意:指針變數p指向數組a首地址,則p++指向數組a的下一元素地址,即a[1]的地址。
3)數組名作函數參數
形參數組和實參數組之間並不是值傳遞,而是共用同一段地址,所以在函數調用過程中如果形參的值發生變化,則實參的值也跟著變化。
4)指向多維數組的指針和指針變數
以二維數組為居多。假設定義了一個二維數組a[3][4],那麼
a代表整個二維數組的首地址,也代表第0行的首地址,同時也是第0行第0列的元素的首地址。a +0和a[0]代表第0行首地址,a+1和a[1]代表第一行的首地址。
假設a是一個數組的首地址,那麼如果a是一維的,a+I代表第I個元素的地址,如果a是二維的,則a+I代表第I行的首地址。
那麼第一行第二列的元素地址如何表示呢?a[1]+2或&a[1][2]或*(a+1)+2。
我們只要記住:在二維數組中a代表整個數組的首地址,a[I]代表第I行的首地址,a[I]與*(a+I)等價就行了。只要運用熟練了就沒什麼復雜的了。
5)指向由m個整數組成的一維數組的指針變數
如:int (*p)[4],p是一個指向包含4個元素的一維數組,如果p先指向a[0],則p+1指向a[1],即p的增值是以一維數組的長度為單位的,這里是4,舉個例子:
假設a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},p先指向a[0]也就是數組a的首地址,那麼p+1就是a[1]的首地址即元素9的地址,因為在定義p時int (*p)[4],定義一維數組長度為4,所以p+1就等於加了一個一維數組的長度4。
3. 字元串的指針和指向字元串的指針變數
1)字元串的表示形式
c中字元串有兩種表示形式:一種是數組,一種是字元指針
char string[]="I love c!";
char *str="I love c!";
其實指針形式也是在內存中開辟了一個數組,只不過數組的首地址存放在字元指針變數str中,千萬不要認為str是一個字元串變數。
2)字元串指針作函數參數
實際上字元串指針就是數組的首地址。
3)字元指針變數與字元數組的區別
① 字元數組由若干元素組成,每個元素存放一個字元,而字元指針變數只存放字元串的首地址,不是整個字元串
② 對數組初始化要用static,對指針變數不用。
③ 對字元數組賦值,只能對各個元素賦值,不能象下面這樣:
char str[14];
str="I love c!";
對指針變數可以,
char *str;
str="I love c!";
注意:此時賦給str的不是字元,而是字元串首地址。
④ 數組在定義和編譯時分配內存單元,而指針變數定義後最好將其初始化,否則指針變數的值會指向一個不確定的內存段,將會破壞程序。如:
char *a;
scanf( "%s", a );這種方法是很危險的,應該這樣:
char *a, str[10];
a = str;
scanf( "%s", a );這樣字元指針就指向了一個確定的內存段。
⑤ 指針變數的值是可以改變的,而字元數組名所代表的字元串首地址卻是不能改變的。
4. 函數的指針和指向函數的指針變數
一個函數在編譯時被分配一個入口地址,這個入口地址就稱為函數的指針。函數名代表函數的入口地址,這一點和數組一樣。我們可以用一個指針變數來存放這個入口地址,然後通過該指針變數調用函數。如:假設有一個求兩者較大的函數如下:int max( int x, int y );
當我們調用這個函數時可以這樣:
int c;
c=max( a, b );這是通常調用方法,其實我們可以定義一個函數指針,通過指針來調用,如:
int (*p)(); //注意指向函數指針變數的定義形式
p=max; //此句就是將函數的入口地址賦給函數指針變數p
c=(*p)( a, b );
有些朋友可能對(*p)()不大理解,其實它的意思就是定義一個指向函數的指針變數p,p不是固定指向哪個函數的,而是專門用來存放函數入口地址的變數。在程序中把哪個函數的入口地址賦給它,它就指向哪個函數。但要注意,p不能象指向變數的指針變數一樣進行p++,p-等無意義的操作。
既然p是一個指針變數,那麼就可以作為函數的參數進行傳遞。其實函數的指針變數最常用的用途之一就是作為函數參數傳遞到其它函數。這也是c語言中應用的比較深入的部分了。
變數的指針和指向變數的指針變數
讀起來很拗口,說白了就是變數的地址和用來存放變數地址的地址變數。因為一個變數在編譯的時候系統要為它分配一個地址,假如再用一個變數來存放這個地址,那麼這個變數就叫做指向變數的指針變數,也就是用來存放變數地址的這么一個變數。所謂"指向"就是指存放××的地址,如指向變數的指針變數,"指向"就是指用來存放變數的地址,再如指向數組的指針變數,"指向"就是指存放數組的地址。只要理解了這個,指針也就不難了。另外,還有指向字元串的指針變數,指向函數的指針變數,指向指針的指針變數等。
1) 指針變數的定義
形式:類型標識符 *標識符 如:int *pointer;
要注意兩點:*表示pointer是個指針變數,在用這個變數的時候不能寫成*pointer, *pointer是pointer指向的變數。一個指針變數只能指向同一個類型的變數。如上面
pointer只能指向int型變數。
2)指針變數的引用
兩個有關的運算符:
& 取地址運算符 &a 就代表變數a的地址
* 指針運算符 *a 就代表變數a的值
2. 數組的指針和指向數組的指針變數
數組的指針指數組的起始地址,數組元素的指針指數組元素的地址。
1)指向數組元素的指針變數的定義與賦值
定義和指向變數的指針變數定義相同,c規定數組名代表數組的首地址,即第一個數組元素地址。
2)通過指針引用數組元素
我們通常引用數組元素的形式是a[i],如果用指針可以這樣引用,*(a+i),或定義一個指針變數p,將數組a的首地址賦給p,p=a;然後用*(p+i)引用。
注意:指針變數p指向數組a首地址,則p++指向數組a的下一元素地址,即a[1]的地址。
3)數組名作函數參數
形參數組和實參數組之間並不是值傳遞,而是共用同一段地址,所以在函數調用過程中如果形參的值發生變化,則實參的值也跟著變化。
4)指向多維數組的指針和指針變數
以二維數組為居多。假設定義了一個二維數組a[3][4],那麼
a代表整個二維數組的首地址,也代表第0行的首地址,同時也是第0行第0列的元素的首地址。a +0和a[0]代表第0行首地址,a+1和a[1]代表第一行的首地址。
假設a是一個數組的首地址,那麼如果a是一維的,a+I代表第I個元素的地址,如果a是二維的,則a+I代表第I行的首地址。
那麼第一行第二列的元素地址如何表示呢?a[1]+2或&a[1][2]或*(a+1)+2。
我們只要記住:在二維數組中a代表整個數組的首地址,a[I]代表第I行的首地址,a[I]與*(a+I)等價就行了。只要運用熟練了就沒什麼復雜的了。
5)指向由m個整數組成的一維數組的指針變數
如:int (*p)[4],p是一個指向包含4個元素的一維數組,如果p先指向a[0],則p+1指向a[1],即p的增值是以一維數組的長度為單位的,這里是4,舉個例子:
假設a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},p先指向a[0]也就是數組a的首地址,那麼p+1就是a[1]的首地址即元素9的地址,因為在定義p時int (*p)[4],定義一維數組長度為4,所以p+1就等於加了一個一維數組的長度4。
3. 字元串的指針和指向字元串的指針變數
1)字元串的表示形式
c中字元串有兩種表示形式:一種是數組,一種是字元指針
char string[]="I love c!";
char *str="I love c!";
其實指針形式也是在內存中開辟了一個數組,只不過數組的首地址存放在字元指針變數str中,千萬不要認為str是一個字元串變數。
2)字元串指針作函數參數
實際上字元串指針就是數組的首地址。
3)字元指針變數與字元數組的區別
① 字元數組由若干元素組成,每個元素存放一個字元,而字元指針變數只存放字元串的首地址,不是整個字元串
② 對數組初始化要用static,對指針變數不用。
③ 對字元數組賦值,只能對各個元素賦值,不能象下面這樣:
char str[14];
str="I love c!";
對指針變數可以,
char *str;
str="I love c!";
注意:此時賦給str的不是字元,而是字元串首地址。
④ 數組在定義和編譯時分配內存單元,而指針變數定義後最好將其初始化,否則指針變數的值會指向一個不確定的內存段,將會破壞程序。如:
char *a;
scanf( "%s", a );這種方法是很危險的,應該這樣:
char *a, str[10];
a = str;
scanf( "%s", a );這樣字元指針就指向了一個確定的內存段。
⑤ 指針變數的值是可以改變的,而字元數組名所代表的字元串首地址卻是不能改變的。
4. 函數的指針和指向函數的指針變數
一個函數在編譯時被分配一個入口地址,這個入口地址就稱為函數的指針。函數名代表函數的入口地址,這一點和數組一樣。我們可以用一個指針變數來存放這個入口地址,然後通過該指針變數調用函數。如:假設有一個求兩者較大的函數如下:int max( int x, int y );
當我們調用這個函數時可以這樣:
int c;
c=max( a, b );這是通常調用方法,其實我們可以定義一個函數指針,通過指針來調用,如:
int (*p)(); //注意指向函數指針變數的定義形式
p=max; //此句就是將函數的入口地址賦給函數指針變數p
c=(*p)( a, b );
有些朋友可能對(*p)()不大理解,其實它的意思就是定義一個指向函數的指針變數p,p不是固定指向哪個函數的,而是專門用來存放函數入口地址的變數。在程序中把哪個函數的入口地址賦給它,它就指向哪個函數。但要注意,p不能象指向變數的指針變數一樣進行p++,p-等無意義的操作。
既然p是一個指針變數,那麼就可以作為函數的參數進行傳遞。其實函數的指針變數最常用的用途之一就是作為函數參數傳遞到其它函數。這也是c語言中應用的比較深入的部分了。
『叄』 c語言程序設計輸出菱形圖!!!!
此題解法,我將這個菱形放在了一個二維數組中,因為用二維數組可以界定X的邊界,比較方便一點。循環輸出的時候,特別注意循環跳出的條件,你畫個二維數組,體會一下裡面的數學關系,多上機改改代碼,呵呵。要特別注意q的用途哦。
#include<stdio.h>
voidmain()
{
#defineN7//定義二維數組的行和列
inti,j;
chara[N][N];
intq=N/2;//找到數組的中間列
chart,p;//定義輸出字元,t代表X,p代表Y
printf("qingshuruX,Y: ");
scanf("%c,%c",&t,&p);//注意此處輸入的時候,不要忘記「,」了哦
for(i=0;i<N;i++)//將二維數組的值全部先賦值為「空格」
for(j=0;j<N;j++)
a[i][j]='';
for(i=0;i<q;i++)//將菱形一分兩半,這個是上半部分的輸出,以中間列
{
//為開始,向兩邊擴展,為了輸出X,注意i循環到q-1
a[i][q-i]=t;
a[i][q+i]=t;
for(j=(q-i+1);j<(q+i);j++)//以兩邊的X列為邊界,輸出Y
a[i][j]=p;
}
for(i=q;i<N;i++)//這個是下半部分的輸出,i從q開始循環到最後
{
a[i][q-(N-1-i)]=t;//仍然是從中間列開始向兩邊擴散,輸出X
a[i][q+(N-1-i)]=t;
for(j=(q-(N-1-i)+1);j<(q+(N-1-i));j++)//從X邊界開始從做到右輸出Y
a[i][j]=p;
}
for(i=0;i<N;i++)
{
{for(j=0;j<N;j++)
printf("%c",a[i][j]);}
printf(" ");
}
}
我這里輸出的是標準的菱形,中間的Y的個數和你給的不一樣,如果你想要你的那種結果,只需要在輸出Y的時候,將循環的邊界再減一個,就可以了,不過圖形是會變形,不會是菱形了。
上機運行的時候,把這些漢字清理了吧,要不可能編譯出問題,好運~
『肆』 C語言編程問題:分數計算器
#include<stdio.h>
int fm,f;
int tf(int a,int b,int m,int n)
{
int i,s;
for(i=b>n?b:n;;i++)
{
if(i%b==0&&i%n==0)
break;
}
fm=i;
if(f)
s=(i/b*a+i/n*m);
else
s=(i/b*a-i/n*m);
return s;
}
int hj(int t,int s)
{
int i;
for(i=t<s?t:s;i>=1;i--)
{
if(t%i==0&&s%i==0)
{
t/=i;
s/=i;
}
}
fm=s;
return t;
}
main()
{
int a,b,m,n,t,s,fz,r,c,ff=0;
char k;
printf("------------------------------------------\n");
printf(" [1] 加法 [2] 減法\n");
printf(" [3] 乘法 [4] 除法\n");
printf(" [0] 退出\n");
printf("------------------------------------------\n");
do{
printf("請輸入你選擇的菜單(0--4):");
k1:
scanf("%d",&c);
if(c<0||c>4)
{ printf("菜單中沒有本選項,請重新輸入!");
fflush(stdin);
goto k1;
getchar();
}
printf("請輸入第一個分數的分子和分母:");
scanf("%d %d",&a,&b);
printf("請輸入第二個分數的分子和分母:");
scanf("%d %d",&m,&n);
switch(c)
{
case 0:return 0;break;
case 1:f=1;t=tf(a,b,m,n);s=fm;k='+';break;
case 2:f=0;t=tf(a,b,m,n);s=fm;k='-';break;
case 3:t=a*m;s=b*n;k='*';break;
case 4:t=a*n;s=b*m;k='/';break;
}
fz=hj(t,s);
printf("%d/%d%c%d/%d=%d/%d\n",a,b,k,m,n,fz,fm);
}while(1);
}
『伍』 大佬們求教,這道c語言題目怎麼寫啊
累加變數:觀察式子,這是一個求累加和的問題,因此需要用到累加和循環配合,假設使用變數s作為累加變數,由於其中包含分數,因此s可以採用double類型,看後面每項計算,第1項的1比較另類,因此設置累加變數初始值為1,然後從第2項開始累加計算
循環:循環一次向s上累加一次當前項,由於多項式項數無法預測而只關心循環條件(或者說關心循環結束條件),因此採用while循環,用一個變數i跟蹤循環次數,初始值1每次循環i自加1,這樣i的取值為:1,2,3,... 這個值將用於計算每項內容,後面需要總結每項具體取值與i取值之間的關系,因此循環大致是這樣:while ( fabs(t)>=0.00001 ) { ... s+=t; i++; }其中變數t是每項取值,累加語句前面的省略號部分計算當前對應i取值的t為多少
項:由於包含分數,因此設t為浮點數double類型變數,每項規律為,分子是前一項乘以x得到,分母是前一項乘以i得到,涉及到累乘計算,因此用累乘變數fz和fm來計算,它們可以設置為double類型(設置成int型擔心溢出)方便分數計算,它們起始值均為1(這是累乘變數通常使用的起始值)
題目要求用函數做,如果不用函數編程為:
#include<stdio.h>
void main() { int i,x; double s,t,fz,fm,w;
s=1; fz=fm=1; i=1; scanf("%d",&x);
while ( 1 ) { //由於不知道循環次數,因此這里設置死循環,然後循環中用if語句退出循環
fz=fz*x; fm=fm*i; t=fz/fm; if ( t<0 ) w=-t; else w=t; //分子計算x累乘(冪),分母計算階乘
if ( w<0.00001 ) break; //不滿足循環條件則退出循環
s+=t; i=i+1; //如果將條件寫到while位置需要後算t先累加
}
printf("%lf\n",s);
}
『陸』 C語言編程題目:編程計算z的值。 根據x、y的值,計算:
根據題目的提示來編寫函數就可以了。以下是在手機上用易歷知食軟體里的微C程序回設計來編寫的一個示例,答供參考。手機上的代碼如下圖:
#include<stdio.h>
#include<math.h>
doublefZ(doublex,doubley);
voidmain(){
doublex,y,z;
printf("請輸入xy(空格相隔)
");
scanf("%lf%lf",&x,&y);
z=fZ(x,y);
printf("z=%lf
",z);
}
doublefZ(doublex,doubley){
doublez=0;
if((x>0)&&(y>0)){
z=log(x)+log(y);
}elseif((x<0)&&(y>0)){
z=sin(x)+cos(y);
}elseif((x<0)&&(y<0)){
z=exp(2*x)+exp(3*y);
}elseif((x>0)&&(y<0)){
z=tan(x+y);
}
returnz;
}
『柒』 C語言題目,見下圖!
#include <stdio.h>
int main(){
float s=0,fz=2.0,fm=1.0,t;
int i;
for(i=1; i<=20; i++){
s+=fz/fm;
t=fz;
fz=fz+fm;
fm=t;
}
printf("s=%.2f\n",s);
return 0;
}
『捌』 C語言,關於分數數列求和
#include<stdio.h>
int main()
{
int n;
float t,r=0,fm=2,fz=1;
scanf("%d",&n);
while(n--)
{
r+=fm/fz;
t=fm;
fm+=fz;
fz=t;
}
printf("%.6f",r);
return 0;
}
『玖』 C語言中 min = fz>fmfm:fz; 什麼意思 在線求解
fz是否大於fm,大於則fm的值賦值給min,小於則fz賦值給min,這是三元運算符,建議鞏固基礎
『拾』 哪位大俠幫忙解釋一下這個C語言的每個步驟
sbit Key_UP=P3^2; //正轉按鍵
sbit Key_DOWN=P3^3; //反轉按鍵
sbit Key_STOP=P3^4; //停止按鍵
sbit ZZ=P1^0; //控制端,用單片機的P1.0口
sbit FZ=P1^1; //控制端,用單片機的P1.1口
sbit FMQ=P3^6;
//這5行定義了單片機管腳對外連接的功能,p3^2,表p3.2口其他的類似;
void delaynms(uint aa)
//延時函數,單片機執行命令是需要時間的,一條空指令需要一個指令周期
FMQ=1;
//此類語句是對對應的管腳電平設置,1為高電平,0為低電平,對於不同外接設備高低電平使用是不同的