當前位置:首頁 » 編程語言 » c語言pn

c語言pn

發布時間: 2023-01-07 12:08:20

① 在c語言中,如何輸出一組數的排列組合

#include <stdio.h>

#include <stdlib.h>

int n = 0;

void swap(int *a, int *b)

{

int m;

m = *a;

*a = *b;

*b = m;

}

void perm(int list[], int k, int m)

{

int i;

if(k > m)

{

for(i = 0; i <= m; i++)

printf("%d ", list[i]);

printf(" ");

n++;

}

else

{

for(i = k; i <= m; i++)

{

swap(&list[k], &list[i]);

perm(list, k + 1, m);

swap(&list[k], &list[i]);

}

}

}

int main()

{

int k;//輸入自然數的個數

printf("請輸入連續自然數的個數:");

scanf("%d",&k);

int *list = (int *)malloc(k);

for (int i = 0; i < k; i ++)

{

list[i] = i + 1;

}

// int list[] = {1, 2, 3, 4, 5};

perm(list, 0, k-1);

printf("total:%d ", n);

return 0;

}

該程序的輸入為一個任意自然數n,將輸出從1到n的全排列。

(1)c語言pn擴展閱讀:

C語言的基本數的排列法

1、冒泡排序:每次相鄰兩個數比較,若升序,則將大的數放到後面,一次循環過後,就會將最大的數放在最後。

#include <stdio.h>

int main(void)

{

int a[1001];

int n,i,j,t;

scanf("%d",&n);//n為要排序的數的個數

//輸入要排序的數

for(i=0;i<n;++i)

scanf("%d",a+i);

//接下來進行排序

for(i=0;i<n-1;++i)//n個數,總共需要進行n-1次

{ //n-1個數排完,第一個數一定已經歸位

//每次會將最大(升序)或最小(降序)放到最後面

for(j=0;j<n-i-1;++j)

{

if(a[j]>a[j+1])//每次冒泡,進行交換

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

for(j=0;j<n;++j)

printf("%-5d ",a[j]);

printf(" ");

}

return 0;

}

2、選擇排序:從第一個數開始,每次和後面剩餘的數進行比較,若升序,則如果後邊的數比當前數字小,進行交換,和後面的所有的數比較、交換後,就會將當前的最小值放在當前的位置。

#include <stdio.h>

int main(void)

{

int a[1001];

int n,i,j,t;

scanf("%d",&n);//n為要排序的數的個數

//輸入需要排序的數

for(i=0;i<n;++i)

scanf("%d",a+i);

//接下來進行排序

for(i=0;i<n-1;++i)//因為每次需要和a[i]後面的數進行比較,所以到a[n-2](倒數第2個元素)就行

{

for(j=i+1;j<n;++j)//j從i後一個開始,a[i]與a[j]進行比較

{

if(a[i]>a[j])//a[i]為當前值,若是比後面的a[j]大,進行交換

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}//每排序一次,就會將a[i](包括a[i])之後的最小值放在a[i]的位置

for(j=0;j<n;++j)

printf("%-5d",a[j]);

printf(" ");

}

return 0;

}

② 在c語言中int **p,如果想取它的值,用*p來表達嗎

不是。
語句int **p;定義的p是二級指針,也就是,「指向指針的指針」,所以,用*p取出來的,仍然是一個地址。要想取出存放的用戶數據,必須要用**p,才可以。
另外,你題目中的敘述有點問題,就是那個「它」指的是誰,是p嗎?
現在分析一下:
當你用int **p;聲明一個變數時,系統會給變數p分配一個儲存空間,分配完後,可以用&p查看這個變數的位置。但是,它是一個空指針,不管用*p還是**p都只會得到亂碼,沒有實際作用。
但是你可以使用它,比如你有定義兩個變數:
int a=5,*b;
並且再給b和p賦值:
b=&a;
p=&b;
那麼,你就可以用:
p得到p的值(裡面存的b的地址)
*p得到b的值(裡面存的a的地址)
**p得到a的值(5)
所以,你確定是要p的值嗎?直接用p就可以。要想a的值,就要用**p了。
不知說明白沒有,如果有什麼問題請留言。

③ C語言結構體問題

朋友 你碰上的是經典錯誤
首先第一個錯 pn->b/n.a*++pn->b 翻譯之後變成 b/a*(++b) = 3/1*4 = 12

第二個錯 即使按照你所描述的想法 估計按照你寫的程序 你會這樣改 :
pn->b/n.a*(++pn)->b
你肯定認為 (++pn)->b 是指向 c (也就是5.0)的吧 你試著運行 同樣錯 結果為0

根本原因:知識點理解---指針類型(此處為結構體指針)
struct x *pn 代表了pn是一個指向 struct x 類型的指針,所以,當 執行 (++pn)時,pn指針指向的地址增加的數量 等於 struct x 的位元組數 也就是 int + int + float 的位元組數 所以指向一個未知的空間 (此處的值默認為0)------------------所以並非樓主認為的變成指向 c
知識點類比:int *p = &n,當執行(++p) ,p指向的地址增加 int 的位元組數
float *p = &n 當執行(++p) ,p指向的地址增加 float 的位元組數
餘下同理......

④ 用C語言求多項式Pn(x)=anx^n+...+a1x+a0


#defineN5

doublePn(double*an,intn,doublex)
{
doublepn=0;
for(inti=0;i<n;++i)
{
pn*=x;
pn+=an[i];
}

returnpn;
}

intmain()
{
//Pn=1*X^4+2*X^3+3*X^2+4*X+5
doublean[N]={1,2,3,4,5};

//Pn(2)=2^4+2*2^3+3*2^2+4*2+5=57
doublepn=Pn(an,N,2);

printf("pn=%lf ",pn);

return0;
}

⑤ C語言問題,球高手解答

請問:
//用間接存取方式修改六個變數的值:char型大寫變小寫,int型減5,double型加10.0
*pch_1 += 32; *pch_2 += 32;
*pn_1 -= 5; *pn_2 -= 5;
*pd_1 += 10.0; *pd_2 += 10.0;這里
為什麼不可以用 *pch_1=*pch_1+32;
——可以,兩者是等效的
或者 *pch_1=『*pch_1』+32;
——不可以,語法錯誤了,單引號只能表示某個字元,比如'A『
或者 *pch_1=」*pch_1「+32;
——不可以,雙引號表示字元串

還有為什麼
//定義兩個指針變數pd_1、pd_2分別指向d1、d2
double *pd_1=&d1;double *pd_2=&d2;
把double 改成float就輸不出來數據呢?
——double和float的位元組長度不一樣,雖然在內存里的數據是一樣的,但機器存取內存和解釋的時候不一樣,所以輸出的數據不一致的話會亂掉。

⑥ 高手看看我這C語言程序為什麼不能運行,編譯沒問題啊 請編寫演算法,求一元多項式Pn(x) = 的值Pn(x0)。 本題

具體怎麼計算我就沒去看了··你的那個float f()這個函數的聲明不應該放到main函數里,應該放到主函數的外面,在主函數里應該是直接調用,還有
float f(float x,int i)
{
float f=1.0;
while(i>0)
{ f*=x; i--;}
return f;
}
你這個函數名字是f,變數名也是f應該也有問題,太不規范了,函數名字最好能直接看出他的功能
比如函數strcat一看就知道是連接字元串的,只是建議哈··對你以後從事這行有好處

⑦ c語言 鏈表

n是結構體num的一個實例(一個對象),對應的a b c 分別為1 3 5.0 pn是一個指向n的指針,
pn->b相當於n.b 即為3
n.a 的值為1
++pn->b 也就是 把n.b看做一個整體,一個變數,那麼++n.b就是先使變數值自增1在參與運算,那就是4參與運算
表達式就是3/1*4=12
*pn 也就是n
(*pn).a+pn->f就是n.a+n.f 即1+5.0=6.0

⑧ 請教C語言高手為小弟解答的疑惑

1,int* pN=&N;

pN是一個指針,這個指針指向N,指針的值是存放數據N的內存的首地址;

2,int* pN=N;
pN也是一個指針,指針的值是就是N;

這種用法是不合適的,因為你一般不知道這個指針指向的內存內容是什麼。如果真要用的話,可以寫成這樣:int* pN=(int*)N。

3,int* pIndex=nArray;
這種寫法很正常,表示pIndex指向nArray所指的那個數組首地址。

4,int* pIndex=&nArray;
如果這么寫的話,邏輯上是錯的,&nArray表示一個二級指針,而pIndex是一個一級指針。

⑨ C語言求100以內素數的問題

#include<stdio.h>

int main()

{

int i=0;

int count=0;

for(i=0;i<=100;i++)

{

int j=0;

for(j=2;j<=i;j++)

{

if(i%j==0)

{

break;

}

}

if(i==j)

{

count++;

printf("%d ",i);

}

}

printf(" count=%d ",count);

return 0;

}

解題思路:

素數,就是除了1和他本身,不能被其他數整除的數字。答案就是用100到200之間的每個數字,除以2到其本身前面的那一個數字,如果此過程中出現整除的現象,則該數不是素數。如果沒有整除的現象,則該數為素數輸出。

(9)c語言pn擴展閱讀:

質數又稱素數。一個大於1的自然數,除了1和它自身外,不能整除其他自然數的數叫做質數;否則稱為合數。

質數的個數是無窮的。歐幾里得的《幾何原本》中有一個經典的證明。它使用了證明常用的方法:反證法。具體證明如下:假設質數只有有限的n個,從小到大依次排列為p1,p2,……,pn,設N=p1×p2×……×pn,那麼,要大於p1,p2,……,pn,所以它不在那些假設的素數集合中。

熱點內容
樹莓派自帶ftp開啟 發布:2025-07-07 21:11:41 瀏覽:50
智慧樹用腳本會怎麼樣 發布:2025-07-07 21:05:48 瀏覽:515
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:535
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:32
linux485 發布:2025-07-05 14:38:28 瀏覽:310
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:760
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:437
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:736
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:249
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:696