c语言基本算法练习(一)

https://blog.youkuaiyun.com/ivan804638781/article/details/52387884

  1. Description:求a和b的最大公约数 
  2.              gcd(a  ,b)= gcd(b,  a%b) 
  3.              例:gcd(36,24) =gcd(24, 12 ) =gcd(12, 0 )(9) 
  4. Funcion List:  
  5. *****************************************************/   
  6. #include <stdio.h>    
  7. int gcd(int a, int b)  
  8. //跳过,一般从主函数看起  
  9. {  
  10.     int x, y, i;  
  11.     if (a > b)  
  12. //先找到两个数中较大的那个,作为除数  
  13.     {  
  14.         y = b;  
  15.         x = a;  
  16.     }  
  17.     else  
  18.     {  
  19.         y = a;  
  20.         x = b;  
  21.     }  
  22.     while (1)  
  23.     {  
  24.         if (x % y == 0)  
  25. //若余数不为0,则y还不是最大公约数  
  26.         {  
  27.             break;  
  28.         }  
  29.         i = x % y;  
  30. //余数赋值给y  
  31.         x = y;  
  32. //两个数中较小的值y赋值给x  
  33.         y = i;  
  34. //循环,直到余数为0,则y就是最大公约数  
  35.     }  
  36.     return y;  
  37. }  
  38.   
  39. int main()  
  40. {  
  41.     int a, b;  
  42.     int i;  
  43.     scanf("%d%d", &a, &b);  
  44.     i = gcd(a,b);  
  45. //得到最大公约数  
  46.     printf("最大公约数 = %d\n", i);  
  47.     return 0;  
2.

  1. Description:求100~200间的所有素数,每行打印5个素数(11) 
  2. Funcion List:  
  3. *****************************************************/   
  4. #include <stdio.h>   
  5. int main()  
  6. {  
  7.     int i, j, k = 0;  
  8.     int s1[100];  
  9.     for (i = 100; i <= 200; i++)  
  10.     {  
  11.         for (j = 2; j <= i; j++)  
  12. //两个for循环,第一个循环是100-200每一个数,第二个循环是判断该数是否是素数  
  13.         {  
  14.             if (i == j)  
  15.             {  
  16.                 s1[k++] = i;  
  17. //若是就放入数组  
  18.             }  
  19.             if (i % j == 0)  
  20.             {  
  21.                 break;  
  22. //若不是就退出,换下一个数  
  23.             }  
  24.         }  
  25.     }  
  26.     i = 0, j = 1;  
  27.     while (k != 0)  
  28.     {  
  29.         printf("%d ",s1[i]);  
  30. //输出素数  
  31.         if (j % 5 == 0)  
  32.         {  
  33.             printf("\n");  
  34. //每五个一行  
  35.         }  
  36.         i++;  
  37.         j++;  
  38.         k--;  
  39. //k:总共有k个素数  
  40.     }  
  41.     printf("\n");  
  42.   
  43.     return 0;  
  44. }  
  1. Description:将整数转换为10进制、2进制、16进制的数字串(12) 
  2. Funcion List:  
  3. *****************************************************/   
  4. #include <stdio.h>  
  5. void two(int n);  
  6. void ten(int n);  
  7. void sixteen(int n);  
  8. int main()  
  9. {  
  10.     int n;  
  11.     scanf("%d", &n);  
  12.     two(n);  
  13.     ten(n);  
  14.     sixteen(n);     
  15.     return 0;  
  16. }  
  17.   
  18. void two(int n)  
  19. {  
  20.     int i = 0;  
  21.     int s1[100];  
  22.     while(n != 0)  
  23.     {  
  24.         s1[i] = n % 2;  
  25.         n = n / 2;  
  26.         i++;  
  27.     }  
  28.     for(i = i - 1; i >= 0; i--)  
  29.     {  
  30.         printf("%d", s1[i]);  
  31.         if(i % 4 == 0)  
  32.         {  
  33.             printf(" ");  
  34.         }  
  35.     }  
  36.     printf("\n");  
  37. }  
  38. void ten(int n)  
  39. {  
  40.     int i = 0;  
  41.     int s1[100];  
  42.     while(n != 0)  
  43.     {  
  44.         s1[i] = n % 10;  
  45.         n = n / 10;  
  46.         i++;  
  47.     }  
  48.     for(i = i -1; i >= 0; i--)  
  49.     {  
  50.         printf("%d",s1[i]);  
  51.     }  
  52.     printf("\n");  
  53. }  
  54. void sixteen(int n)  
  55. {  
  56.     int i = 0, j;  
  57.     char s1[100];  
  58.     while(n != 0)  
  59.     {     
  60.             switch(n % 16)  
  61. //十六进制的余数,在>=10时,变为A-F可以用switch,其余相似  
  62.             {  
  63.                 case 0:s1[i] = '0';break;  
  64.                 case 1:s1[i] = '1';break;  
  65.                 case 2:s1[i] = '2';break;  
  66.                 case 3:s1[i] = '3';break;  
  67.                 case 4:s1[i] = '4';break;  
  68.                 case 5:s1[i] = '5';break;  
  69.                 case 6:s1[i] = '6';break;  
  70.                 case 7:s1[i] = '7';break;  
  71.                 case 8:s1[i] = '8';break;  
  72.                 case 9:s1[i] = '9';break;  
  73.                 case 10:s1[i] = 'A';break;  
  74.                 case 11:s1[i] = 'B';break;  
  75.                 case 12:s1[i] = 'C';break;  
  76.                 case 13:s1[i] = 'D';break;  
  77.                 case 14:s1[i] = 'E';break;  
  78.                 case 15:s1[i] = 'F';break;  
  79.             }  
  80.         n = n / 16;  
  81.         i++;  
  82.     }  
  83.  for(i = i -1; i >= 0; i--)

        {

            printf("%c",s1[i]);

        }

        printf("\n");

    }
  1. Description:整数数组的冒泡排序(从小到大)(13) 
  2. Funcion List:  
  3. *****************************************************/  
  4. #include <stdio.h>  
  5. #define N 5  
  6. int main()  
  7. {  
  8.     int i, j, t;  
  9.     int a[10];  
  10.     for (i = 0; i < N; i++)  
  11.     {  
  12.         scanf("%d", &a[i]);  
  13.     }  
  14.     for (i = 0; i < N - 1 ; i++)   //N - 1 表示最后一个元素位置已经固定了 
  15.     {  
  16.         for (j = 0; j < N - 1 - i; j++)  
  17. //冒泡排序,两个循环,每一次都把最大的数移到最上面,重复移N-1次,完成N个数排序  
  18.         {  
  19.             if (a[j + 1] < a[j])  
  20.             {  
  21.                 t = a[j + 1];  
  22.                 a[j + 1] = a[j];  
  23.                 a[j] = t;  
  24.             }  
  25.         }  
  26.     }  
  27.     for (i = 0; i < 5; i++)  
  28.     {  
  29.         printf("%d\n", a[i]);  
  30.     }  
  31.     return 0;  
  32. }  
  1. Description:计算字符串中的单词数。 
  2.           单词:由空格分开的连续字母数字串。 
  3. Funcion List:  
  4. *****************************************************/  
  5.  #include <stdio.h>   
  6. int count_string(char *string)  
  7. {  
  8.     int sum = 0;  
  9.     char *p = NULL;  
  10.     p = string;   
  11.     while(*p != '\n')  
  12.     {       
  13.         if((*p >= '0' && *p <= '9') || (*p >= 'a' && *p <= 'z'))  
  14.         {  
  15.             sum++;  
  16.             while((*p >= '0' && *p <= '9') || (*p >= 'a' && *p <= 'z'))  
  17.             {  
  18.                 p++;  
  19.             }  
  20.         }  
  21.         p++;  
  22.     }  
  23.     return sum;  
  24. }  
  25. int main()  
  26. {  
  27.     char string[1024] = "0010 hello world hello c 10086 ! \n";  
  28.     int sum = 0;   
  29.     sum = count_string(string);  
  30.     printf("count = %d\n",sum);  
  31.     return 0;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值