C语言课上代码集合

C语言程序设计-翁恺视频
1、while循环
①求输入数字的位数:

#include <stdio.h>

int main ()
{
   int x;
   int n=0;
   scanf("%d",&x);
   n++;
   x /= 10;
   while ( x> 0 )
    {
        n++;
        x /= 10;
        }
    printf("%d\n",n);
return 0;   
}

②求log2X的值:

#include <stdio.h>
int main()
{
    int x;
    int ret = 0;
    scanf("%d",&x);
    int t = x ;
    while( x>1)
    {
        x /= 2;
        ret ++;
    }
    printf("log2 of %d is %d.", t, ret);
        
return 0;
}

2、if else的嵌套
①求三个数的最大值:

#include <stdio.h>

int main()
{    
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);    
if(a>b)
{
    if(a>c)
    printf("max=%d",a);
    else
    printf("max=%d",c);
}
else
{
    if(b>c)
    printf("max=%d",b);
    else
    printf("max=%d",c); 
}
return 0;
}

②分段函数:

#include <stdio.h>
int main()
{    
    int x,f;
    scanf("%d", &x);
    
if(x<0)
  {
    f=-1;
  } 
else if(x==0)
  {
    f=0;
  }
else 
  {
    f=2.0*x;
  }
    
    
printf("f(x)= %d\n", f);

return 0;
}

3、switch-case

#include <stdio.h>

int main()
{    
 int type;
 scanf("%d",&type); 
 switch(type)
 {
   case 1: printf("你好");   break;
   case 2: printf("早上好"); break;
   case 3: printf("晚上好"); break;
   case 4: printf("再见");   break;
   default: printf("啊,什么啊?");
}
return 0;
}

4、猜数游戏

  • x%n的结果是[0,n-l]的一个整数
#include <stdio.h>

int main(void)
{
    srand(time(0));
    int number = rand()%100+1;
    int count = 0;
    int a = 0;
    
    printf("我已经想好了一个1到100之间的数。");
    do
    {
        printf("请猜这个1到100之间数:");
        scanf("%d",&a);
        count ++;
        if( a > number)
        {
            printf("你猜的数大了。"); 
         } 
         else if ( a < number )
         {
            printf("你猜的数小了。"); 
         }
     } 
    while ( a != number);
    
    printf("太好了,你用了%d次就猜到了答案。\n",count); 
    
    
    return 0;
}

5、算平均数

#include <stdio.h>

int main(void)
{
    int number;
    int sum = 0;
    int count = 0;
    
    scanf("%d", &number);
    while( number != -1)
    {
        sum += number;
        count ++;
        scanf("%d",&number);
    }
    
    printf("%f\n", 1.0*sum/count);
    
    
    return 0;
}

6、整数逆序

①对一个整数做%l0的操作,就得到它的个位数;
②对一个整数做/10的操作,就去掉了它的个位数(整数运算会丢弃小数点后的数字);
③然后再对②的结果做%l0,就得到原来数的十位数了

#include <stdio.h>    

int main (void)                 //700转换为7
{
    int x;
    int digit;
    int ret = 0;
    
    scanf("%d", &x);
    while( x>0 )
    {
        digit = x%10;
        ret = ret*10 + digit;
        printf("x=%d,digit=%d,ret=%d\n", x, digit, ret);
        x /= 10;
    }
    printf("%d", ret);
    return 0;
 } 
#include <stdio.h>

int main (void)         //700转换为007
{
    int x;
    int digit;
    int ret = 0;
    
    scanf("%d", &x);
    while( x>0 )
    {
        digit = x%10;
        printf("%d",digit);
        ret = ret*10 + digit;
        x /= 10;
    }
    
    return 0;
 } 

7、阶乘 for循环

#include <stdio.h>

int main (void)              //for循环
{
    int n;
    int i = 1;
    int fact = 1;
    
    scanf("%d",&n);
    for ( i=1; i<=n; i++)     //for (int i=2; i<=n; i++)  去掉前面的i的声明,再换成这句也是可以的,前提是c99
    {                                 //for (; n>1; n--) { fact *= n;}
        fact *= i;
    }
    printf("%d!=%d\n", n, fact);
    return 0;
 } 
int main(void)          //while 循环
{
    int n;
    int fact = 1;
    int i = 1;
    
    scanf("%d", &n);
    while ( i <= n)
    {
        fact *= i;
        i++;
    }
    printf("%d!=%d\n", n, fact);
    return 0;
}

8、整数分解


image.png

9、求最大公约数(辗转相除法)

#include <stdio.h>
int main(void)
{
    int a, b;
    int t;
    scanf("%d %d", &a, &b);
    
    while ( b != 0 )
    {
        t = a%b;
        a=b;
        b=t;
    }
    printf("gcd=%d\n",a);
    return 0;
 } 

为何少一个循环

#include <stdio.h>
int main (void)
{
    int mask = 1;
    int x=70000;
    do
    {
        x /= 10;
        mask *=10;
        printf("x=%d mask=%d\n", x, mask);
    }while ( x > 9 );     //x>0

    printf("mask=%d\n", mask);
    
    return 0;
    
 } 

10、水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1​3​​​+5​​3​+3​​3​
​​本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

#include <stdio.h>
int main (void)
{
    int n;
    scanf("%d", &n);
    //n=3;
    int first = 1;
    int i =1;
    while ( i<n)
    {
        first *= 10;
        i ++;
    }
    
    i = first;
    while ( i<first*10)   // 遍历100-999
    {
        int t = i;
        int sum = 0;
        do
        {
            int d = t%10;
            t/=10;
            int p = d;
            int j = 1;    //1到n 循环n-1次和幂次一致,3次方乘2次 
            while ( j<n )
            {
                p *=d;     //求得每个位置上的幂次方 
                j++;
            }
            sum += p;
        }while ( t>0);
        
        if (sum == i)    //判断幂次和与原数是否一致,一致为水仙花数 
        {
            printf("%d\n", i);
        }
        i++;
     } 
    
    
    return 0;
}

11、本题要求对任意给定的1位正整数N,输出从1*1到N*N的部分口诀表:

#include <stdio.h>
int main(void)
{
    int n;
    scanf("%d", &n);
    int i,j;
    i=1;
    while ( i<=n )
    {
        j=1;
        while ( j<=i )
        {
            printf("%d*%d=%d", j,i,i*j);
            if( i*j < 10 )
            {
                printf("   ");
             } 
             else {
                printf("  ");
             }
            j++;
        }
       i++;
       printf("\n");
     } 
    return 0;
 } 
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容