当前位置:首页 » 编程语言 » 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,所以它不在那些假设的素数集合中。

热点内容
安卓手机之王是哪个手机 发布:2025-07-07 21:44:30 浏览:612
安卓照片存储位置 发布:2025-07-07 21:31:58 浏览:962
kingcmsphp 发布:2025-07-07 21:31:49 浏览:391
微信的锁屏密码是什么 发布:2025-07-07 21:28:52 浏览:755
树莓派自带ftp开启 发布:2025-07-07 21:11:41 浏览:50
智慧树用脚本会怎么样 发布:2025-07-07 21:05:48 浏览:516
随机启动脚本 发布:2025-07-05 16:10:30 浏览:536
微博数据库设计 发布:2025-07-05 15:30:55 浏览:32
linux485 发布:2025-07-05 14:38:28 浏览:310
php用的软件 发布:2025-07-05 14:06:22 浏览:760