c语言函数中yp c语言函数中要求输出的为什么比实际输出的少

利用C语言实现二维图形的变换

你先看看吧,思路大概就是这样,不懂的问我。

曹县网站建设公司创新互联公司,曹县网站设计制作,有大型网站制作公司丰富经验。已为曹县千余家提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的曹县做网站的公司定做!

#includestdio.h

#includemath.h

#includeiostream

using namespace std;

struct point

{

float x;

float y;

};

void translation(point*pt, float xp,float yp,int num)//num代表点的个数

{

for(int i=0;inum;i++)

{

(pt+i)-x+=xp;

(pt+i)-y+=yp;

}

}

void scale(point *pt,float xs,float ys,int num)

{

for(int i=0;inum;i++)

{

(pt+i)-x*=xs;

(pt+i)-y*=ys;

}

}

void rotation(point *pt,float angle,int num)

{

int a[2][2];

angle=angle/180*3.141592657;

a[0][0]=cos(angle);

a[0][1]=-sin(angle);

a[1][0]=sin(angle);

a[1][1]=cos(angle);

point* temp;

for(int i=0;inum;i++)

{

temp-x=(pt+i)-x;

temp-y=(pt+i)-y;

(pt+i)-x=temp-x*a[0][0]+a[0][1]*temp-y;

(pt+i)-y*=temp-x*a[1][0]+a[1][1]*temp-y;

}

}

int main()

{

int i=0,N,mode,angle,xp,yp,xk,yk,num;

cout"please input the number of point "endl;

scanf("%d",N);

num=N;

point pt[10];

while(N--)

{

printf("please input points(x,y):\n");

scanf("%f%f",pt[i].x,pt[i].y);

i++;

}

printf("please input motions\n");

printf("0 stand for translation:\n");

printf("1 stand for scale:\n");

printf("2 stand for rotation:\n");

scanf("%d",mode);

switch(mode)

{

case 0:

printf("please input the translation in x and y direction respectivly:\n");

cinxpyp;

translation(pt, xp,yp,num);

break;

case 1:

printf("please input the scale in x and y direction respectivly:\n");

scanf("%f%f",xk,yk);

scale(pt, xk,yk,num);

break;

case 2:

printf("please input the angle:\n");

scanf("%f",angle);

rotation(pt, angle,num);

break;

}

printf("after translatiton or scale or rotation:\n");

for(int i=0;inum;i++)

printf("%f %f\n",pt[i].x,pt[i].y);

}

c语言中用函数交换两个变量的值?

c语言中用函数交换两个变量的值方法是先将变量赋值给中间变量,然后中间变量再赋值给另外一个变量,程序如下:

#include "Stdio.h"

#include "Conio.h"

void swap(int x,int y)

{

int t,m;

t=x;  //变量x赋值给中间变量t

m=y;    //变量y赋值给中间变量m

x=m;    //中间变量m赋值给变量x,将y的值赋值给了x。

y=t;      //中间变量t赋值给变量y,将x的值赋值给了y。

}

main()

{

int a,b;

a=1,b=2;

swap(a,b); //调用交换函数

printf("%d,%d",a,b);

getch();

}

扩展资料:

C语言的语法结构:

1、顺序结构

顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。

例如:a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子里面的水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为:c = a; a = b; b = c;执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b =c;则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。

顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三步曲的程序就是顺序结构。

2、选择结构

对于要先做判断再选择的问题就要使用选择结构。选择结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。选择结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的选择语句。

选择结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。

3、循环结构

循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do while循环和for循环。

四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误。

参考资料来源:百度百科-C语言

c语言 请问这个PPT的意思是不是说这样用函数交换最终数组还是不会变的,为什么不变?

是的。这个PPT就是为了说明用void swap2(int x, int y)交换不了通过形参传入的元素。

为什么交换不了?

因为void swap2(int x, int y)的形式参数是传值模式。

C/C++语言规定:以传值模式调用函数,在调用过程中,函数需先将形参做一个拷贝,然后基于新的拷贝进行计算。

如上例,执行调用swap2(a[0],a[1]),swap2会先将a[0]的值拷贝给x,将a[1]的值拷贝给y,然后在函数体内交换x、y的值,这样对a[0]、a[1]毫无影响。

怎样通过函数调用交换a[0]、a[1]的值?

答案是:通过传引用调用,即将函数声明为void swap2(int x, int y)。

C++语言规定:引用可以看作是变量的别名。别名类似于人的小名之类,一个人大名、小名虽不同,但都指的是这个人。

同样如上例,执行调用swap2(a[0],a[1]),swap2将x视作a[0]的别名、将y视作a[1]的别名,这样在函数体内交换x、y的值,实际上交换的是a[0]、a[1]的值。

引用是C++语言引入的特性,C语言中没有引用。若要用C语言实现通过函数交换a[0]、a[1]的值,怎么办?

答案是:模拟传引用调用,即将函数声明为void swap2(int* xp, int* yp)。

模拟传引用调用本质上仍是传值调用,只不过传入函数的是原始参数的地址。

同样如上例,执行调用swap2(a+0,a+1),a+0是a[0]的地址,a+1是a[1]的地址。相应地,swap将a[0]的地址值拷贝一份给xp,将a[1]的地址值拷贝一份给yp。函数体内,swap2通过xp、yp即a[0]、a[1]的地址的新拷贝,操纵a[0]、a[1]的值。

这种方式除了需要改造swap2的声明,还需改造swap2的函数体,即其实现。

C语言中可以清空输出窗口的内容吗?

就用系统自带的清屏函数即可,

如果是在turboc 中 用函数clrscr(),并且调用头文件conio.h。

如果是在visual c++中用函数system(“CLS”),并且调用头文件stdlib.h。


网站栏目:c语言函数中yp c语言函数中要求输出的为什么比实际输出的少
URL地址:http://ybzwz.com/article/dohgocp.html