首先你这程序写的就错了好多,我懒得一一指出,我懂你的意思,你的意思是要算出 s 和p的值
或者s - p 两个指正变量的差,指针变量相减是得出这两个指针变量相隔几个位置。
我收箱帮你修改下程序
#include <stdioh>
int main(void)
{
int c[6]={ 10,20,30,40,50,60};
int p;
int s;
p=c;
s=&c[5];
printf("%d\n",s - p);
printf("%d\n",s - p);
return 0;
}
解题步骤:
p = c; 等价于 p = &c[0];
s = &c[5]
3 p = c[0] = 10;s = c[5] = 60;
4 s - p 是两个指针变量相减,得到的是这两个指针变量的相隔的距离,以十进制输出是 5
5 s - p 是c[5] 和 c[0]的值相减,得到的是 50。
这样写你看不懂的话,就去继续把指针基础的东西看看。
本题的一个完整的c程序如下,在win-tc和Dev-c++下调试通过。需要说明的是这里的m,n表示x的幂分别是m-1次和n-1次,同时p[]和q[]的各系数是从x^(m-1)和x^(n-1)到x^0前的系数,和你上面的写法正好相反,所以输入时要注意:
/多项式乘法程序/
#include <stdioh>
#include <stdlibh>
#include <conioh>
#include <mathh>
#define MAX 50
void npmul(p,m,q,n,s)
int m,n;
double p[],q[],s[];
{
int i,j;
for (i=0; i<=m-1; i++)
for (j=0; j<=n-1; j++)
s[i+j]=s[i+j]+p[i]q[j]; /迭代计算各项系数/
return;
}
double compute(s,k,x) /计算所给多项式的值/
double s[];
int k;
float x;
{
int i;
float multip = 1;
double sum = 0;
for (i=0;i<k-1;i++)
multip = multip x; /先求出x的最高次项的值/
for (i=0;i<=k-1;i++)
{
sum = sum + s[i] multip; /依次从高到低求出相对应次项的值/
if (x!=0)
multip = multip / x;
}
return sum;
}
void main()
{
int i,j,m,n;
double px[MAX],qx[MAX],rx[MAX];
float x;
clrscr();
for(i=0;i<MAX;i++)
rx[i]=0;
puts(" This is a polynomial multiplication program");
puts("It calculate the product of two polynomials: P(x) and Q(x)");
puts(" P(x)=Pm-1x^(m-1)+Pm-2x^(m-2)++P1x+P0");
puts(" Q(x)=Qn-1x^(n-1)+Qn-2x^(n-2)++Q1x+Q0");
printf("\n >> Please input m (>=1): ");
scanf("%d",&m);
printf(" >> Please input P%d, P0 one by one:\n",m-1);
for(i=0;i<m;i++)
scanf("%lf",&px[i]);
printf("\n >> Please input n (>=1): ");
scanf("%d",&n);
printf(" >> Please input Q%d, Q0 one by one:\n",n-1);
for(i=0;i<n;i++)
scanf("%lf",&qx[i]);
npmul(px,m,qx,n,rx);
printf("\nThe product of two polynomials R(x) is :\n");
for (i=m+n-1,j=0;i>=1;i--) /逐行逐项打印出结果多项式/
{
printf(" (%fx^%d) ",rx[m+n-1-i],i-1);
if(i-1>0)
printf(" + ");
else
printf(" ");
if(j==2)
{
printf("\n");
j=0;
}
else
j++;
}
printf("\n");
printf("Input the value of x: ");
scanf("%f",&x);
printf("\nThe value of the R(%f) is: %137f",x,compute(rx,m+n-1,x));
puts("\n Press any key to quit");
getch();
}
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
int i=1,j;
j=i++j++;printf("%d",j);
i=1;printf("%d",i++i++);
i=1;printf("%d",j=i++i++);
i=1;printf("%d",i+++i+++i++);
i=1;printf("%d"\n",j=i+++i+++i++);
i=1;j=i+++i+++i++;printf("%d",j);
结果是 1 2 2 6 6 3
这么多一变什么都不会了,希望能结识的详细一些
解析:
这个题 是无法运行的...你的第二行中 j没有初值,你怎么来个 j++?
我认为 j=i++j++;这句话中的 的优先级大于 = 的优先级,所以应该先做 i++j++;在这里做 j++的时候,j没有初值,j就会发生错误~!
所以我认为这个题第一行应该写成 int i=1,j=1;
请楼猪检查 这个程序,编译一下看能不能通过
#include<stdioh>
void main(){
int a,b;
printf("请输入两个数字");
scanf("%d",&a);
scanf("%d",&b);
printf("%d %d %d",(a+b),(a-b),(ab));
if(b==0)
printf(" NONE NONE\n");
else
printf(" %d %d\n",(a/b),(a%b));
}
具体如下:
1、简介C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
2、基本介绍
C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。最近25年是使用最为广泛的编程语言。
3、运算
C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,对此合理进行分类,找出它们与数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。
[x=1,y=0,a=0,b=0]
switch ( x ) 会运行case 1:分支
switch ( y ) 会运行case 0:分支
a++;[a=1]
由于switch ( x ) 的case 1:分支最后没有break;会继续运行后面的语句直到遇到break;
a++; b++; break;[a=2,b=1]
输出:a=2,b=1
输出的结果是(□为空格):□□□6□□□8
static定义变量使其只会被定义一次,所以在结束函数后不会被清除,结果还是保留当前的数据。
for循环调用了两次fun函数,所以输出了两次(%4d的4是让输出的数字至少保留4个空位,不足补空格)
具体运行情况简要说明一下,
程序开始->定义了k,a,为a赋值1->进入for循环(k=0,k<2成立)->先调用fun函数(传值a,int x=a)->静态定义z=3,y=0(使其在fun函数结束时不会被清除数据->y,z自加一,并返回x+y+z的值->跳回main函数,格式化输出返回值(□□□6)->k自加一->判断k<2,成立->再执行fun函数->z和y被定义了(静态),所以z和y保持上次的值4和1->返回x+y+z的值->返回main函数,格式化输出fun的返回值(□□□8)->k自加一->k<2,不成立->跳出fir循环->结束
过程如下:
1, 这个题目的陷阱在于while的循环条件:a<b<c,a<b即1<2=1,1<c即1<2=1,所以执行循环体:t=a; a=b; b=t; c--; ;执行完后,a和b的值交换,c的值减1,得到:a=1,b=2,c=1,进入下次循环条件判断
2第二次循环条件判断:a<b即2<1=0,0<c即0<1=1,继续执行循环体:t=a; a=b; b=t; c--; ;循环完成后,得到:a=1,b=2,c=0,进入下次循环条件判断
3第三次循环条件判断:a<b<c,a<b即1<2=1,1<c即1<0=0,循环条件不成立,跳过循环体,执行printf ( " %d,%d,%d, " ,a,b,c );,输出结果为:1,2,0,
答案是4
首先c语言中;数组名a可以表示数组首元素的地址即:数组名a可表示a[0][0]地址,a相当于指针并指向a[0][0]
二维数组中还有个行指针(首先你要知道数组这个数组可以看做3行3列,虽然在内存中实际不是这样存放的)如:a[0]可以表示此二维数组第一行首元素a[0][0]的地址,a[0]+1的话就是a[0][1]的地址
a[1]表示次二维数组第二行首元素a[1][0]的地址,以此类推,,
然后就是计算的问题了:a [i] [j]=i+j-(i-j);表示每一行的的三个数都是对应j值的两倍,即每行元素都是 0 2 4这三个数;
fun (a);表示调用前面定义的函数,并把该二维数组的首元素地址a传递给函数fun所定义的二维数组a[M][N]的首元素
a[1]+2 表示第二行第三个数的地址,前面加个 号表示指针运算,即取出指针a[1]+2所指向的元素即第二行第三个数a[1][2]=4,然后输出。
以上就是关于c语言计算全部的内容,包括:c语言计算、C语言程序运算、C语言的计算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)