从键盘输入n,然后输出1+2+3+···+n。
#include<stdio.h>
int main()
{int i,n,sum;scanf("%d",&n);sum=0;/*for(i=0;i<=n;i++){sum+=i;}*//*i=0;while(i<=n){sum+=i;}*///do~while方法i=1;do{sum+=i;}while(i<=n); //注意:这个循环它至少执行一次printf("%dn",sum);
}
空语句,常用于编写延时程序。
for(i-0;i<n;i++)
{; //就一个分号
}
输出1!+2!+3!·····。
#include<stdio.h>
int main()
{int i,j,k,sum,n;sum=0;scanf("%d",&n);for(i=1;i<=n;i++){k=1;for(j=1;j<=i;j++){k*=j}sum+=k;}/*for(i=1;i<=n;i++){k=k*i;sum+=k;//不用嵌套循环}*/printf("%dn",sum);
}
猜数游戏。
#include<time.h>
#include<stdio.h>
int main()
{int magic,guess,counter=0;//srand(time(NULL));设置随机数种子,包含头文件timeunsigned int seed;scanf("%u",&seed);srand(seed); //输入一个随机种子,包含头文件stdlibmagic=rand()%100+1;//猜1~100的数do{scanf("%d",&guess);/*ret=scanf("%d",&guess);while(ret!=1) //输入有误,重新输入{while(getchar()!='n'); //清除缓冲区非法字符ret=scanf("%d",&guess); //再一次输入}*/counter++;if(guess>magic)printf("big!n");else if(guess<magic)printf("small!n");elseprintf("Yes!n");}while(guess!=magic);//while(guess!=magic&&couter<10);//猜不对且未超过10次继续猜printf("counter=%dn",counter);
}
读入5个正整数并显示他们,输入负数时,程序终止。
#include<stdio.h>
int main()
{int i,n;for(i=0;i<5;i++){scanf("%d",&n);if(n<0)goto END;//goto语句要少用,除非要跳出多重循环。//break; //直接跳出for循环。//continue;//跳过下面的语句,不跳出循环printf("%dn",n);}END:printf("program is end!");
}
穷举法编程实例。
士兵排队报数,从1到5,多1个;从1到6,多5个;从1到7,多4个;从1到11,多10个;有多少个兵?
#include<stdlib.h>
#include<stdio.h>
int main()
{int i,flag;flag=0;for(i=1;!flag;i++){if(i%5==1&&i%==5&&i%7==4&&i%11==10){printf("%dn",i);flag=1;}}
}
类型溢出问题。
#include<stdio.h>
int main()
{short i,sum=0;for(i=1;;i++){sum+=i*i*i;if(sum>=1000000)break;}printf("%dn",i);//short只有两个字节,最大32767,发生了溢出
}
一般可以用long int。但是巨大无比的大数,超过了long long int,可考虑用数组来存储大数,每个数组元素对应大数的一位。
计算e=1+1/1!+1/2!+1/3!+···+1/n!,直到最后一项小于10^-5。
#include<stdio.h>
#include<math.h>
int main()
{int i,n;double j,e;j=1;e=1;i=1scanf("%d",&n);while(fabs(j)<1e-5){j*=(double)(1/(i));e+=j;i++;}printf("%lfn",e);
}
求一个数的阶乘
#include<stdio.h>
int fun(int n);//函数的声明,函数的定义放在main()后要加声明,
//否则不用。注意函数的声明要加一个分号;
int main()
{int n,m;scanf("%d",&n);m=fun(n);if(m==-1){printf("error!n");}else{printf("%dn",m);}
}
int fun(int n)
{int i;int result=1;if(n<0){return -1;//对非法值进行检验}else{for(i=2;i<=n;i++){result*=i;}}return result;
}
利用递归的方法求n!
#include<stdio.h>
int fun(int n);
int main()
{int n;long result;scanf("%d",&n);result=fun(n);if(result==-1){printf("error!n");}else{printf("%dn",result);}
}
int fun(int n)
{int i;if(n<0)return -1;else if(n==0||n==1)return 1;elsereturn n*fun(n-1);
}
用递归的方法输出Fibonacci数列,同时计算每一项递归的次数。
#include<stdio.h>
int count;//定义了一个全局变量,用来记录递归的次数,初始化为0;//全局变量的作用域为整个程序;long Fib(int n)
{count++; //记录每次递归的次数if(n==0)return 0;else if(n==1)return 1;elsereturn (Fib(n-1)+Fib(n-2));
}
int main()
{int n,i,x;scanf("%d",&n);for(i=0;i<=n;i++){count=0; //自动清零x=Fib(n);printf("Fib(%d):%d,count=%d",i,x,count);}
}
变量的存储类型:自动变量;静态变量;外部变量;寄存器变量。
自动变量:auto int tmp; auto可以省略不写
函数内部定义都是局部变量(包括main函数),局部变量(包括形参)都是自动变量,进入语块时自动申请内存,退出语块时自动释放内存。正因如此,在不同的并列语句块内可以定义同名变量,不会相互干扰 因为他们占据不同的内存单元,并且有着不同的作用域。
#include<stdio.h>
void swap(int a,int b) //这里的a,b与main函数里面的a,b不同。
{ //如果希望形参不被修改,可以在形参前面加一个const,声明为常量。int tmp;tmp=a;a=b;b=tmp;printf("a=%d,b=%dn",a,b);
}
int main()
{int a,b;scanf("%d%d",&a,&b);swap(a,b); //将实参的一个副本传给了被调函数,实参并不能被修改。printf("a=%d,b=%dn",a,b);
}
输出:
15 8
a=8,b=15
a=15,b=8
静态变量:static 类型名 变量名;
#include<stdio.h>
long fun(int n)
{static int p=1;//定义静态局部变量p*=n; //若不加static,每次p都会重置为1return p;
}
int main()
{int i,n;scanf("%d",&n);for(i=1;i<=n;i++){printf("%d!=%dn",i,fun(i));}
}
输出:
3
1!=1
2!=2
3!=6
外部变量:所有函数之外的变量,外部变量也是全局变量,作用域从定义处到本文件的末尾。要在定义之前或者其他文件中使用,需要:(extern 类型名 变量名) 进行声明,才可以使用。
寄存器变量:register 类型名 变量名
对频繁访问的数据放在CPU中,使程序执行地更快
求两个正整数的最大公约数。
欧几里得算法:对于正整数a和b,连续进行求余运算,直到余数为零,此时非零的除数就是最大公约数。
递归的方法:
#include<stdio.h>
/*
int fun(int a,int b)
{int c,d;c=0;d=1;if(a<b){c=a;a=b;b=c;}while(d!=0){d=a%b;if(d!=0){a=b;b=d;}}return b;
}
*/
int fun(int a,int b)
{if(a==b){return a;}else if(a>b){return (fun(a-b,b));}else{return (fun(a,b-a));}
}
int main()
{int a,b,c;scanf("%d%d",&a,&b);c=fun(a,b);printf("%dn",c);return 0;
}
5个人分椰子,第一个把椰子分为5等份,还剩下一个给猴子,自己拿了一份;第二个把剩下的椰子分为5等份,还剩下一个给猴子,自己拿了一份;以此类推,直到五个水手都分完。计算并输出这堆椰子至少有多少个?
#include<stdio.h>
int main()
{int i,n;double j,k;i=0;while(1){n=0;k=i*5+1;while(n<4){k=(k/4)*5+1;if(k!=(int)k){break;}n++;}if(n==4){break;}else{i++;}}printf("k=%dn",k);return 0;
}
本文发布于:2024-01-30 03:50:46,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170655785019025.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |