❶ C程序怎样才能让它回到第一步
只能是给个循环
do {
}while(1);
❷ c语言问题
辗转相除法
辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法, 其可追溯至前300年。它首次出现于欧几里德的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。它并不需要把二数作质因子分解。
辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的:
1. 若 r 是 a ÷ b 的余数, 则
gcd(a,b) = gcd(b,r)
2. a 和其倍数之最大公因子为 a。
另一种写法是:
1. a ÷ b,令r为所得余数(0≤r<b)
若 r = 0,算法结束;b 即为答案。
2. 互换:置 a←b,b←r,并返回第一步。
[编辑] 虚拟码
这个算法可以用递归写成如下:
function gcd(a, b) {
if (a 不整除 b)
return gcd(b, a mod b);
else
return a;
}
或纯使用循环:
function gcd(a, b) {
define r as integer;
while b ≠ 0 {
r := a mod b;
a := b;
b := r;
}
return a;
}
其中“a mod b”是指取 a ÷ b 的余数。
例如,123456 和 7890 的最大公因子是 6, 这可由下列步骤看出:
a---------------b--------------a mod b
123456----------7890-----------5106
7890------------5106-----------2784
5106------------2784-----------2322
2784------------2322-----------462
2322------------462------------12
462-------------12-------------6
12--------------6--------------0
只要可计算余数都可用辗转相除法来求最大公因子。这包括多项式、复整数及所有欧几里德定义域(Euclidean domain)。
辗转相除法的运算速度为 O(n2),其中 n 为输入数值的位数。
❸ C语言中返回上一层怎样用代码实现
for
for 吗?
用
break;
❹ C++怎样执行完子函数之后返回主函数某一步继续进行
1、执行完子函数之后回到调用该成员函数处的下一执行点。如果是主函数中调用类的成员函数,那么回到调用该成员函数的下一执行点。
2、C语言调用函数就是先定义并声明函数,之后再根据定义函数的格式调用。
下面举例来说明函数调用方法:
#include<stdio.h>
intfun(intx,inty);//函数声明,如果函数写在被调用处之前,可以不用声明
voidmain()
{
inta=1,b=2,c;
c=fun(a,b);//函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值
}
//自定义函数fun
intfun(intx,inty)//函数首部
{//{}中的语言为函数体
returnx>y?x:y;//返回x和y中较大的一个数
}
❺ c语言算法问题
C语言中三个常见算法问题
1.辗转相除法
2.整数求逆
3.二分搜索
1.辗转相除法
求最大公约数
// 代码如下
int u,v;
scanf("%d %d",&u,&v);
while(v!=0)
{
int temp=u%v;
u=v;
v=temp;
}
printf("%d",u);
1
2
3
4
5
6
7
8
9
分析
(1)如果v=0,计算结束,u就是最大公约数
(2)如果v不等于0,那么计算u除以v的余数,让u=v,而v等于那个余数
(3)返回第一步
2.整数求逆
若要求原数每位都要输出
// 例:700输出007
int x;
scanf("%d",&x);
int digit;
while(x>0)
{
digit=x%10;
printf("%d",digit);
x/=10;
}
1
2
3
4
5
6
7
8
9
原数每位不必输出
//例:700输出7
int x;
scanf("%d",&x);
int digit;
int ret=0;
while(x>0)
{
digit=x%10;
ret=ret*10+digit;
x/=10;
}
printf("%d",ret);
1
2
3
4
5
6
7
8
9
10
11
分析
(1)对x变量做%10操作,得到它的个位数
(2)再对x变量做/10操作,去掉它的个位数
(3)做一个while循环对前两步进行循环,循环条件在x变量大于零的情况下进行
3.二分搜索
用于已排好序的多个数字
//这里数组已知
int arr[]={1,3,5,7,8,9};
int k;
scanf("%d",&k);
int left=0;
int right=len-1;
int ret;
while(right>left)
{
int mid=(left+right)/2;
if(arr[mid]==k)
{
ret=mid;
break;
}else if(arr[mid]>k)
{
right=mid-1;
}else{
left=mid+1;
}
}
printf("%d",arr[ret]);
❻ C语言中函数返回指向栈内存的指针的问题
p是指向局部变量的指针,当函数退出时,局部变量会被释放,这时,p所指向的位置就不一样是原来的数。
因为fun()函数返回的值被计算机的临时变量存放,当赋值给p的时候,p是指向临时变量的地址,所以还可以读取出100。
*p = "hello"这是常量字符串,从静态存储区分配,第一步字符串"hello"从静态存储区获取一块内存,指针变量p才指向这块静态内存,这块内存的特点是从程序开始到结束一直从在,所以可以返回。
(6)c语言反回第一步扩展阅读:
函数的返回值类型是在定义函数时指定的。return 语句中表达式的类型应与定义函数时指定的返回值类型一致。如果不一致,则以函数定义时的返回值类型为准,对 return 语句中表达式的类型自动进行转换,然后再将它返回给主调函数使用。
在调用函数时,如果需要从被调函数返回一个值供主调函数使用,那么返回值类型必须定义成非 void 型。此时被调函数中必须包含 return 语句,而且 return 后面必须要有返回值,否则就是语法错误。
❼ c语言函数的return谁能仔细给我解释一下
事实上 无论是return ; 还是return X;
在汇编上都只有一条指令:ret(retn)
只不过对于return X; 会在 执行ret指令之前对eax寄存器赋值:
如果是return 0 ; 可能编译器会这样做:
xor eax,eax
ret
其他情况类似
然后从C语言角度讲
对于返回类型为void的函数
函数体内可以出现return;语句来表示结束本函数的执行
这个时候eax还是有值的,因为 函数返回类型是void,因此在调用该函数的地方不可能会去用该函数的返回值,也就意味着该返回值是毫无意义的
楼主想问的 单独的return;语句,对于这行代码,一般只用在返回类型为void的函数体内
若出现在非void返回类型的函数体内,那么返回值是隐含在寄存器eax中的
然后对于有返回值的函数来说
return后面是肯定需要跟一个值的
这个值是被送入寄存器eax带出来的~
我说再多 也许还是会有人不信(本人玩逆向的,这一切信不信那是你们的事,我只能把事实告诉你们,我也只能做到这样了)
下面直接上代码上图:
(微软任何C/C++编译器、VC/VS这些、都支持编译此代码,没有警告,没有错误)
注:主函数不主函数的return都是没有区别的
但是main函数很特别,特别在它有好多种写法,标准C真正的主函数返回类型是int
有2个参数,一个是命令行参数个数,一个是命令行参数
windows下面的主函数可以有三个参数,前两个参数跟标准C一样,第三个参数是环境变量
这些参数都是由mainCRTStartup函数传进来的,而mainCRTStartup再往上你还要研究的话那。。。。那。。。那。。。我只能告诉你这些参数都是要操作系统传进来的吧~~~
我们编程的时候,也许有些菜鸟会把main写成如下形式:void main()
其实这种写法在编译之后都是会被转化成标准写法的底楼说的 不带返回值系统默认返回0这完全是不靠谱的,因为事实当中返回值都是被寄存器eax带出去的,而对于main是必须要返回值的,菜鸟写了没返回值的main在编译之前就被编译器替换掉了,哪来的默认返回0的说法?何来默认?系统会把你写的main换成 标准main形式!标准main会在底下返回0
主函数return的值只有你在其他进程中创建子进程,子进程的返回状态被父进程接收的值就是main的返回值,所以,在你写的程序不需要被其他进程创建的话,main的返回值是无关紧要的
❽ 想学c语言,但不知如何开头,学习c语言的第一步是什么
c语言是很多人都想学习的内容,但是很多人都不知道如何开头。
总结
c言语作为一门编程言语,应该是每个软件开发人员都应该控制的,而对计算机专业的学生来说更是根底。假如你依照我上面说的步骤,把这些学问都控制的话,置信你的c言语可以到达一个较好的程度。
❾ c语言 如何返回上一步骤
1、可以用while循环,一个菜单一个while循环,while循环里在套一个while循环;
2、例如:
cout<<"请选择:";cin>>choice;
switch(choice)
{
case'1':
{
while(run1)
{
cout<<"请选择:";cin>>x;
switch(x)
{
case'1':
{
}
break;
case'2':
{
}
break;
case'0'://选择0是级可返回主菜单
{
run1=0;
}
break;
}
}
break;
case'2':
{
}
break;
case'3':
{
}
break;
}
❿ c语言如何跳回前面的某一个点重新从那里开始运行
用goto语句。
#include<stdio.h>
voidmain()
{
inta;
begin:scanf("%d",&a);//goto语句的标号begin
if(a<0||a>9)
gotobegin;//如果用户输入的数不在0~9之间,则重新输入
eles
printf("%d ",a);//如果用户输入的数在0~9之间,则输出该数
}
(10)c语言反回第一步扩展阅读:
goto的基本语法
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 1;
while(1)
{
printf("在while(1)里 ");
while(i++)
{
printf("i = %d ",i);
if(i > 3)
{
goto TiaoChu;
}
}
}
TiaoChu:
printf("程序结束 ");
return 0;
}
运行结果:
标号位置
在while(1)里
2
3
4
程序结束