目录
1.计算n的阶乘(即计算1*2*3*4*...*n)方法一:这是用循环的方法来计算
3.模拟用户登录的情景,并且只能登陆三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次输入错误,则退出程序)
1.计算n的阶乘(即计算1*2*3*
4*...*n)
方法一:这是用循环的方法来计算
//计算n的阶乘
#include<stdio.h>
int main()
{
int n;
printf("请输入n=》");
scanf("%d",&n);
int i,end_num=1;
for(i=1;i<=n;i++)
{
end_num=end_num*i;
}
printf("%d的阶乘为%d",n,end_num);
return 0;
}
方法二:应用自定义函数的方法来计算
//计算1到n的阶乘
#include<stdio.h>
int num(int n)
{
int ret=1,i;
for(i=1;i<=n;i++)
{
ret=ret*i;
}
return ret;
}
int main()
{
int n;
printf("请输入n=》");
scanf("%d",&n);
//现在定义一个函数 num 来计算n的阶乘
int end_num=num(n) ;
printf("%d的阶乘为%d",n,end_num);
return 0;
}
方法三:应用函数递归的方式来计算
//计算1到n的阶乘
#include<stdio.h>
int num(int n) //n的阶乘的计算公式为 1*2*3*...*n
{
if(n<=1)
return 1;
else
return n*num(n-1);
}
int main()
{
int n;
printf("请输入n=》");
scanf("%d",&n);
//现在定义一个函数 num 用来实现递归
int end_num=num(n);
printf("%d的阶乘为%d",n,end_num);
return 0;
}
2.求三个数的大小(比较数的大小)
//比较三个数的大小,并排列顺序
#include<stdio.h>
int main()
{
int a,b,c;
printf("第一个数等于:》");
scanf("%d",&a);
printf("第二个数等于:》");
scanf("%d",&b);
printf("第三个数等于:》");
scanf("%d",&c);
int min;
if(b>a)//保证a为最大数
{
min=a;
a=b;
b=min;//a与b互换了
}
if(c>a)//保证a为最大数
{
min=a;
a=c;
c=min;//c与a互换了
}
if(c>b)//保证b为第二大的数
{
min=b;
b=c;
c=min;
}
printf("\n%d>%d>%d\n",a,b,c) ;
return 0;
}
3.模拟用户登录的情景,并且只能登陆三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次输入错误,则退出程序)
方法一:这是最常规的一种方法,但是这种方法代码比较长,不推荐书写。
//模拟用户登录的情景,并且只能登陆三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次输入错误,则退出程序)
#include<stdio.h>
#include<string.h>
int main()
{
int a[100]={0};
printf("请输入密码:》") ; //假设密码为123456
gets(a);
if(strcmp(a,"123456")==0)
{
printf("输入正确\n登陆成功") ;
}
else
{
printf("输入错误,请重新输入:》") ;
gets(a);
if(strcmp(a,"123456")==0)
{
printf("输入正确\n登陆成功") ;
}
else
{
printf("输入错误,请重新输入:》") ;
gets(a);
if(strcmp(a,"123456")==0)
{
printf("输入正确\n登陆成功") ;
}
}
}
return 0;
}
方法二:这种方法运用了循环的方式书写,代码较第一种方法简洁。
//模拟用户登录的情景,并且只能登陆三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次输入错误,则退出程序)
#include<stdio.h>
#include<string.h>
int main()
{
int a[100]={0};
printf("请输入密码:》") ; //假设密码为123456
int i;
for(i=1;i<=3;i++)
{
gets(a);
if(strcmp(a,"123456")==0)
{
printf("输入正确\n登陆成功") ;
}
break;
else
printf("输入错误,请重新输入");
if(i==3)
break;
}
return 0;
}
如果不记算登陆错误的次数,代码还可以这样写。
#include<stdio.h>
#include<string.h>
int main()
{
int a[100]={0};
printf("请输入密码:》") ; //假设密码为123456
again:
gets(a);
if(strcmp(a,"123456")==0)
{
printf("输入正确\n登陆成功") ;
}
else
{
printf("输入错误,请重新输入密码:》");
goto again;
} //goto函数的运用
return 0;
}
4.找两个数的最大公约数和最小公倍数
方法一:这种方法是自定义函数的方法
//找两个数的最大公约数和最小公倍数
#include<stdio.h>
int max_num(int x,int y) //求最大公约数的函数
{
int n;
if(x>y)
n=y;
else
n=x;
for(n;n>0;n--)
{
if(x%n==0&&y%n==0)
{
return n;
break;
}
}
}
int min_num(int x,int y) //求最小公倍数的函数
{
int n;
if(x>y)
n=x;
else
n=y;
for(n;n;n++)
{
if(n%x==0&&n%y==0)
{
return n;
break;
}
}
}
int main()
{
int a,b,n;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
int num1=max_num(a,b);
int num2=min_num(a,b);
printf("最大公约数为%d\n", num1);
printf("最小公倍数为%d\n", num2);
return 0;
}
方法二:这种是常规做法
//找两个数的最大公约数和最小公倍数
#include<stdio.h>
int main()
{
int a,b,n;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
int i,j; //i用来求最大公约数 , j用来求最小公倍数
if(a>b)
i=b;
else
i=a;
for(i;i>0;i--)
{
if(a%i==0&&b%i==0)
break;
}
if(a>b)
j=a;
else
j=b;
for(j;j;j++)
{
if(j%a==0&&j%b==0)
break;
}
printf("最大公约数为%d\n", i);
printf("最小公倍数为%d\n", j);
return 0;
}
5.写一个猜数字的游戏
自动产生一个1-100的随机数字
猜数字
猜对了输出 恭喜你,游戏结束
猜错了输出 猜大了或者猜小了,继续猜,直到猜对
游戏可以一直进行,除非退出游戏
#include<stdio.h>
#include<stdlib.h>//rand与srand的头文件
#include<time.h>//time 的头文件
void menu() //这是一个菜单界面
{
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("$$$$$$$$$$$ 1.进入游戏 $$$$$$$$$$$$$$$$\n");
printf("$$$$$$$$$$$ 2.退出游戏 $$$$$$$$$$$$$$$$\n");
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
}
void game()
{
int ret = rand()%100+1;//%100的余数为0-99,再加1则生成0-100的随机数
int guess=0;
while(1)
{
printf("请猜数字\n");
scanf("%d",&guess);
if(guess<ret)
{
printf("猜小了\n") ;
}
else if(guess>ret)
{
printf("猜大了\n") ;
}
else
{
printf("恭喜你,猜对了\n") ;
break;
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//时间戳 强制将time转变为 int 类型
do
{
menu();//打印菜单
printf("请选择:>");
scanf("%d",&input);
switch(input) //选择input进去,即0为进去case0 1为进去case1
{
case 1:
game();
printf("猜数字\n");
break;
case 0:
printf("退出游戏\n");
break;
default: //default表示其他情况
printf("选择错误,请重新选择\n");
break;
}
}
while(input);
return 0;
}
6.写一个程序打印1000——3000年之间的闰年
//打印1000--3000之间的闰年
//闰年:能整除400;或者能够整除4但不能整除100
#include<stdio.h>
int main()
{
int year;
for(year=1000;year<=3000;year++)
{
if(year%400==0 )
printf("%-5d",year);
if(year%4==0&&year%100!=0 )
printf("%-5d",year);
}
return 0;
}
7.打印0——200的素数
方法一:这种方法运算次数较多
#include<stdio.h>
int main()
{
int y,i,count=0;
for(y=2;y<=200;y++)
{
for(i=2;i<=y-1;i++)
{
if(y%i==0)
break;
}
if(y==i)
{
count++; //计数
printf("%10d",y);
}
} printf("\n有%d个素数",count);
return 0;
}
方法二:因为m=a*b,所以a和b中至少有一个数字是<=根号m的,这是一个改进
#include<stdio.h>
#include<math.h>
int main()
{
int y,i,count=0;
for(y=2;y<=200;y+=2)
{
for(i=2;i<=sqrt(y);i++) //改进
{
if(y%i==0)
break;
}
if(y==i)
{
count++;
printf("%-10d",y);
}
}
printf("\n有%d个素数",count);
return 0;
}
8.计算1/1-1/2+1/3-1/4+1/5...1/n
#include<stdio.h>
int main()
{
int n;
printf("请输入n=") ;
scanf("%d",&n);
double num1=0,num2=0,num=0;
if(n%2==0)
{
double i,j;
for(i=2;i<=n;i+=2)
{
num2+=1/i;
}
for(j=1;j<=n-1;j+=2)
{
num1+=1/j;
}
num=num1-num2;
}
else if(n%2==1)
{
double i,j;
for(i=2;i<=n-1;i+=2)
{
num2+=1/i; //相当于num2=num2+1/i
}
for(j=1;j<=n;j+=2)
{
num1+=1/j;
}
num=num1-num2;
}
printf("sum=%lf\n",num);
return 0;
}
9.写一个函数实现n的n次方
//写一个函数实现n的n次方
#include<stdio.h>
double my_pow(double n)
{
int i;
double ret=1.0;
for(i=1;i<=n;i++)
{
ret=ret*n;
}
return ret;
}
int main()
{
double n;
printf("请输入一个n:》");
scanf("%lf",&n);
double a=my_pow(n);
printf("%lf",a);
return 0;
}
改编:写一个函数实现一个数n的k次方
//写一个函数实现一个数n的k次方
#include<stdio.h>
int my_pow(int n ,int k)
{
int i;
int ret=1;//这是中间变量
for(i=1;i<=k;i++)
{
ret=ret*n;
}
return ret;
}
int main()
{
int n,k;
printf("请输入n=");
scanf("%d",&n);
printf("请输入k=");
scanf("%d",&k);
int a=my_pow(n,k);
printf("%d\n",a);
return 0;
}
10.计算一个数的每位之和
//计算一个数的每位之和(递归实现)
//写一个递归Digitsum(n),输入一个非负整数,返回组成它的数字之和
//如Digitusum(256) 则得到 2+5+6=13
#include<stdio.h>
int Digitusum(int n)
{
if(n>9)
{
return Digitusum(n/10)+n%10;
}
else
return n;
}
int main()
{
int num;
printf("请输入一个非负数:》");
scanf("%d",&num);
int sum=Digitusum(num);
printf("%d\n",sum);
return 0;
11.写一个函数来实现自定义的乘法口诀表
//写一个函数,写一个乘法口诀表
#include<stdio.h>
void print_table(int n)
{
int i;
for(i=1;i<=n;i++) //打印行
{
int j; //打印列
for(j=1;j<=i;j++)
{
printf("%-2d*%-2d=%-3d",i,j,i*j);
}
printf("\n") ;
}
}
int main()
{
int n;
scanf("%d",&n);
print_table(n);
return 0;
}