C语言常见题目

目录

1.计算n的阶乘(即计算1*2*3*4*...*n)方法一:这是用循环的方法来计算

方法二:应用自定义函数的方法来计算

方法三:应用函数递归的方式来计算

2.求三个数的大小(比较数的大小)

3.模拟用户登录的情景,并且只能登陆三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次输入错误,则退出程序)

5.写一个猜数字的游戏

6.写一个程序打印1000——3000年之间的闰年

7.打印0——200的素数

8.计算1/1-1/2+1/3-1/4+1/5...1/n

9.写一个函数实现n的n次方

10.计算一个数的每位之和

11.写一个函数来实现自定义的乘法口诀表


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;
 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值