寒假编程练习(一)(c语言)

本文提供了一系列C语言编程实例,包括九九乘法表、求最大值、素数判断等常见算法实现,适合初学者实践练习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 使用c语言编写程序,在屏幕上打印九九乘法口诀表
#include<stdio.h>
int main()
{
    int i = 0, j = 0;
    for (size_t i = 1; i <=9; i++)
    {
        for (size_t j = 1; j <= i; j++)
        {
            printf("%d*%d=%d  ", j, i, i*j);
        }
        printf("\n");
    }
    return 0;
}

2.【分支判断】使用c语言编写程序,求两个整数的较大值

#include<stdio.h>
int main()
{
    int num1=0, num2=0;
    scanf("%d %d", &num1, &num2);
    int max = (num1 > num2) ? num1 : num2;
    printf("%d\n", max);
    return 0;
}

3.【循环】使用c语言编写程序,求10个整数中的最大值

#include<stdio.h>
int main()
{
    int i = 0, num = 0, tmp = 0;
    for (size_t i = 0; i < 10; i++)
    {
        scanf("%d", &num);
        tmp = (tmp > num) ? tmp : num;
    }
    printf("%d\n", tmp);
    return 0;
}

4.使用c语言编写程序,求1-100之间的素数

#include<stdio.h>
#include<math.h>
int judge_num(int i)
{
    int j, k;
    k = sqrt(i);
    /*,对于一个数i,只需要判断sqrt(i)以下的数字就行了,因为sqrt(i)*sqrt(i)==i。如果有a*b==i,那么a和b之中有一会比sqrt(i)要小。如果sqrt(i)不是整数而且比sqrt(i)更小的数都不能整除i,那么肯定就没有数能够整除i了。而且sqrt(i)一般情况下是小于等于i/2的。*sqrt(i)是i的平方根,需要包含<math.h>才能使用*/
    for (j = 2; j <= k; j++)
    {
        if (i%j == 0)
        {
            return 0;
        }
    }
    return 1;
}
int main()
{
    int i, k;
    printf("1 2 3");
    for (i = 4; i <= 100; i++)
    {

        if ((judge_num(i)) == 1)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

5.【辗转相除法】使用c语言编写程序,求两个整数的最大公约数

#include<stdio.h>
#include<math.h>
int main()
{
    int num1, num2, tmp=1;
    scanf("%d %d", &num1, &num2);
    if (num1 < num2)
    {
        num1 = num1 ^ num2;
        num2 = num1 ^ num2;
        num1 = num1 ^ num2;
    }//此方法需要使num1>num2。
    while (tmp != 0)
    {
        tmp = num1 % num2;
        num1 = num2;
        num2 = tmp;
    }
    /*用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。*/
    printf("%d\n", num1);
    return 0;
}

6.使用c语言编写程序,求两个整数的最小公倍数

#include<stdio.h>
#include<math.h>
int main()
{
    int num1, num2, tmp=1;
    scanf("%d %d", &num1, &num2);
    if (num1 < num2)
    {
        num1 = num1 ^ num2;
        num2 = num1 ^ num2;
        num1 = num1 ^ num2;
    }
    if (num1%num2 == 0)
    {
        printf("%d\n", num1);
    }//如果两个数能够整除,那num1为最小公倍数
    else
    {
        int tmp_1 = num1, tmp_2 = num2;
        while (tmp != 0)
        {
            tmp = num1 % num2;
            num1 = num2;
            num2 = tmp;
        }
        //先求出最大公约数,再用num1.num2去除,再用最大公约数乘结果求出最小公倍数
        tmp_1 = tmp_1 / num1;
        tmp_2 = tmp_2 / num1;
        num1 = num1 * tmp_1*tmp_2;
        printf("%d\n", num1);
    }
    return 0;
}

7.使用c语言编写程序,交换两整数的值

#include<stdio.h>
#include<math.h>
int main()
{
    int num1, num2;
    scanf("%d %d", &num1,&num2);


        num1 = num1 ^ num2;
        num2 = num1 ^ num2;
        num1 = num1 ^ num2;


    return 0;
}

8.【循环】有1.2.3.4四个数字,能组成多少个互不相同且无重复的三位数?都是多少?

程序分析:可填在百位、十位、个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件的排列

#include<stdio.h>
#include<math.h>
#include<Windows.h>
int main()
{
    int i,tmp,b,c,d,e;
    int num = 0;
    for (int i = 1; i<=4; i++)
    {
        tmp = 0;
        tmp = i * 100;
        for (int a = 1; a <= 4; a++)
        {
            tmp = tmp + a * 10;
            for (int b = 1; b <= 4; b++)
            {
                tmp = tmp + b;
                if(i!=a&&i!=b&&a!=b)
                {
                    printf("%d  ", tmp);
                    num++;
                }
                tmp -= b;
            }
            tmp -= a * 10;
        }

    }
    printf("\n");
    printf("%d\n", num);
    system("pause");
    return 0;

}

9.有一分数序列:2/1,3/2,5/3。。。求出这个序列的前20项之和

#include<stdio.h>
#include<math.h>
#include<Windows.h>
int main()
{
    float a = 1, b = 2;
    float sum = 0;
    int x;
    for (int i = 1; i <= 20; i++)
    {
        sum += b / a;
        x = a;
        a = b;
        b = x + b;
    }
    printf("和是%f\n", sum);
    system("pause");
    return 0;
}
  1. s=a+aa+aaaa+aa..a,其中a是一个数字,例如2+22+2222+22222(此时a=2,共有五个数相加)其中a和个数n由键盘输入控制。
#include<stdio.h>
#include<math.h>
#include<Windows.h>

int main()
{
    int a, n;
    scanf("%d %d", &a, &n);
    int tmp = 0;
    int sum=0;
    for (int i = 1; i <= n; i++)
    {
        tmp = tmp * 10 + a;
        sum = tmp + sum;
    }
    printf("%d\n", sum);
    system("pause");
    return 0;

}

11.一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,求他在第十次落地时,共经过多少米?第十次反弹多高?

#include<stdio.h>
#include<math.h>
#include<Windows.h>

int main()
{
    float begin = 100.0, hn = begin / 2;
    int n;
    for (n = 2; n <= 10; n++)
    {
        begin = begin + 2 * hn;/*第n次落地时共经过的米数*/
        hn = hn / 2; /*第n次反跳高度*/
    }
    printf("路程 %f\n", begin);
    printf("高度 %f \n", hn);
    system("pause");
    return 0;
}

12.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃一个,长此以往,到第十天只剩下一个桃子,求一共有多少个桃子

#include<stdio.h>
#include<math.h>
#include<Windows.h>

int main()
{
    int sum = 0;//桃子总数  
    int day_10 = 1;//第10 天只剩一个桃子  
    int day = 0;
    for (day = 9; day > 0; day--)
    {
        sum = (day_10 + 1) * 2;//每天的桃子总数是后一天剩余桃子加1乘2  
        day_10 = sum;
    }
    printf("猴子第一天一共摘了%d个桃子\n", sum);
    system("pause");
    return 0;
}

13.
1+2!+!+。。。+20!(20表示20的阶乘)

include<stdio.h>
#include<math.h>
#include<Windows.h>

int main()
{
    int sum = 0;
    int s=1;
    for (int i = 1; i <= 20; i++)
    {
        for (int a = 1; a <= i; a++)
        {
            s = s*a;
        }
        sum += s;
        s = 1;
    }
    printf("%d\n",sum);
    system("pause");
    return 0;
}

14.
判断一个数是否为回文数,(回文数也是一个数字,数字的特点是正反序是同一个数字,如12321,3443就是回文数)

#include<stdio.h>
#include<math.h>
#include<Windows.h>
//判断回文数
int main()
{
        int i = 0, j, k = 1, n, a[20];
        scanf("%d", &n);
        while (n)
        { 
            a[i] = n % 10; n /= 10 ; i++; 
        }
        for (j = 0; j<i / 2; j++)
            if (a[j] != a[i - j - 1]) { k = 0; break; }
        k ? printf("是回文\n") : printf("不是回文\n");

    system("pause");
    return 0

15.判断一个字符串是否为回文字符串。(回文字符串就是说一个字符串,但是源字符串和字符串逆序之后一样,比如‘abcba’,’cddc’就是回文字符串)

15
#include<stdio.h>
#include<math.h>
#include<Windows.h>
#include<string.h>
//判断回文字符串
int main()
{
    char a[100];
    gets(a);
    int tmp;
    int len = strlen(a);
    for (int i = 0, j = len - 1; i <= j; i++, j--)  //第一位和最后一位相比较循环判断
    {
        if (a[i] == a[j])  
            tmp = 1;
        else
        {
            tmp = 0;
            break;
        }
    }
    tmp ? printf("是回文字符串\n") : printf("不是回文字符串\n");
    system("pause");
    return 0;
}

16.求一个3*3矩阵对角线元素之和

#include<stdio.h>
#include<math.h>
#include<Windows.h>
#include<string.h>

int main()
{
    int a[3][3], i, j, sum = 0;
    printf("请输入数组元素:(3*3)\n");
    for (i = 0; i<3; i++)
        for (j = 0; j<3; j++)
            scanf("%d", &a[i][j]);
    printf("\n");
    printf("对角线的和:\n");
    for (i = 0; i<3; i++)
        for (j = 0; j<3; j++)
            if (i == j || 2 - i == j)
                sum += a[i][j];
    printf("%d\n", sum);
    system("pause");
    return 0;
}

17.将一个整形数组逆序

#include<stdio.h>
#include<math.h>
#include<Windows.h>
#include<string.h>

int main()
{
    int a[] = { 1,2,3,4,5 };
    for (int i = 0; i < 2; i++)
    {
        a[i] ^= a[4 - i];
        a[4 - i] ^= a[i];
        a[i] ^= a[4 - i];
    }
    system("pause");
    return 0;
}

18.对任意一个整形数组排序(使用冒泡排序法)

#include<stdio.h>
#include<math.h>
#include<Windows.h>
#include<string.h>

int main()
{
    int a[] = {1,151,151,5154,8184,45451,4518};
    int n=0;
    int tmp;
    int len = sizeof(a)/sizeof(a[0]);
    for (int i =0; i < len-1; i++)
    {
        for (int j = len - 1; j > i; j--)
        {
            if (a[j]<a[j - 1])
            {
                tmp = a[j];
                a[j] = a[j - 1];
                a[j - 1] = tmp;
            }
        }
    }
    for (int d = 0; d < len; d++)
    {
        printf("%3d     ", a[d]);
    }
    printf("\n");
    system("pause");
    return 0;
}

19.使用c语言编写程序,将多个字符串排序输出。

#include<stdio.h>
#include<math.h>
#include<Windows.h>
#include<string.h>

void swap(char **p1, char **p2)
{
    char *ret = *p1;
    *p1 = *p2;
    *p2 = ret;
}
int main()
{
    int i = 0;
    char *a[3];
    a[0] = "hello";
    a[1] = "bit-tech";
    a[2] = "world";
    if (strcmp(a[0], a[1])>0)
    {
        swap(&a[0], &a[1]);
    }
    if (strcmp(a[0], a[2])>0)
    {
        swap(&a[0], &a[2]);
    }
    if (strcmp(a[1], a[2])>0)
    {
        swap(&a[1], &a[2]);
    }
    for (i = 0; i<3; i++)
    {
        printf("%s\n", a[i]);
    }
    return 0;
}

20.用递归的方式求斐波那契数列的第n个数

#include<stdio.h>
#include<math.h>
#include<Windows.h>
#include<string.h>

int Fib(int n)
{
    if (n == 1 || n == 2) 
        return 1;
    else
        return Fib(n - 1) + Fib(n - 2); 
}
int main()
{
    int n;
    scanf("%d", &n);
    printf("%d\n", Fib(n));
    system("pause");
    return 0;
}

21.用非递归的方式求斐波那契数列的第n个数

#include<stdio.h>
#include<math.h>
#include<Windows.h>
#include<string.h>
int main()
{
     int n,sum=1,prev=1,next=1;
    scanf("%d", &n);
    if (n <= 2)
    {
        sum = 1;
    }
    while (n > 2)
    {
        n--;
        next = prev;
        prev = sum;
        sum = next + prev;
    }
    printf("%d\n",sum);
    system("pause");
    return 0;
}

22.编写一个函数可以求字符串的长度(不使用任何库函数)

#include<stdio.h>
#include<math.h>
#include<Windows.h>
#include<string.h>
int main()
{
    char arr[] ="sdfsdgedfsdfgdfsg";
    int n=0;
    while (arr[n] != '\0')
    {
        n++;

    }
    printf("%d\n", n);
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值