• C语言实例练习


    1.两个整数四则运算

    /*
    输入两个整数,进行加、减、乘、除、求余运算 
    */
    
    #include 
    
    int add(int a, int b)  // 两个整数相加 
    {
    	return a + b;
    }
    
    int sub(int a, int b)  // 两个整数相减 
    {
    	return a - b;
    }
    
    int multi(int a, int b)  // 两个整数相乘 
    {
    	return a * b;
    }
    
    double div(int a, int b)  // 两个整数相除 
    {
    	double ans = a * 1.0 / b;
    	return ans;
    }
    
    int mod(int a, int b)  // 求余 
    {
    	return a % b;
     }
     
     
     int main()
     {
     	int m, n;
     	scanf("%d %d", &m, &n);
     	printf("%d + %d = %d\n", m, n, add(m, n));
     	printf("%d - %d = %d\n", m, n, sub(m, n));
     	printf("%d * %d = %d\n", m, n, multi(m, n));
     	if(n != 0)
     		printf("%d / %d = %.2f\n", m, n, div(m, n));
     	printf("%d %% %d = %d", m, n, mod(m, n));
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    执行效果:在这里插入图片描述


    2.两个浮点数运算

    /*
    输入两个整浮点数,进行加、减、乘、除
    */
    
    #include 
    
    double add(double a, double b)  // 两个浮点数相加 
    {
    	return a + b;
    }
    
    double sub(double a, double b)  // 两个浮点数相减 
    {
    	return a - b;
    }
    
    double multi(double a, double b)  // 两个浮点数相乘 
    {
    	return a * b;
    }
    
    double div(double a, double b)  // 两个浮点数相除 
    {
    	float ans = a * 1.0 / b;
    	return ans;
    }
     
     
     int main()
     {
     	double m, n;
     	scanf("%lf %lf", &m, &n);
     	printf("%lf + %lf = %.2lf\n", m, n, add(m, n));
     	printf("%lf - %lf = %.2lf\n", m, n, sub(m, n));
     	printf("%lf * %lf = %.2lf\n", m, n, multi(m, n));
     	printf("%lf / %lf = %.2lf\n", m, n, div(m, n));
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    执行效果:
    在这里插入图片描述


    3.字符转ASCII码

    #include 
    #include 
    
    int main()
    {
    	char c1[7] = {'a', ' b', 'c', 'd', 'e', 'f', 'g'};
    	char c2[7] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
    	for(int i=0; i < strlen(c1); i++)
    	{
    		printf("%c-->%d %c-->%d\n", c1[i], c1[i], c2[i], c2[i]);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    执行效果:
    在这里插入图片描述


    4.数值比较

    #include 
    
    int main()
    {
    	int a, b;
    	scanf("%d %d", &a, &b);
    	int max = a > b ? a : b;
    	printf("%d", max);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    执行效果:
    在这里插入图片描述


    5.计算int/float/double/char的字节大小

    #include 
    
    int main()
    {
    	int a;
    	float b;
    	double c;
    	char d;
    	
    	printf("size of int: %d bytes\n", sizeof(a));
    	printf("size of float: %d bytes\n", sizeof(b));
    	printf("size of double: %d bytes\n", sizeof(c));
    	printf("size of char: %d bytes\n", sizeof(d));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    执行效果:
    在这里插入图片描述


    6.交换两个数的值

    #include 
    
    int main()
    {
    	int a, b, temp;
    	scanf("%d %d", &a, &b);
    	temp = a;
    	a = b;
    	b = temp;
    	printf("%d %d\n", a, b);
    	a = a + b;
    	b = a - b;
    	a = a - b;
    	printf("%d %d\n", a, b);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    执行效果:
    在这里插入图片描述


    7.判断奇偶

    #include 
    
    int main()
    {
    	int n;
    	scanf("%d", &n);
    	if(n % 2 == 0)
    		printf("%d是偶数\n", n);
    	else
    		printf("%d是奇数\n", n);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    执行效果:
    在这里插入图片描述


    8.判断元音/辅音

    #include 
    
    int main()
    {
    	char c;
    	scanf("%c", &c);
    	
    	if((c=='a' || c=='e' || c=='i' || c=='o' || c=='u') || (c=='A' || c=='E' || c=='I' || c=='O' || c=='U'))
    	{
    		printf("%c是元音\n", c);
    	}
    	else
    	{
    		printf("%c是辅音\n", c);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    执行效果示例:
    在这里插入图片描述


    9.判断三个数中的最大最小值

    #include 
    
    int main()
    {
    	int a, b, c;
    	scanf("%d %d %d", &a, &b, &c);
    	int max = a, min = a;
    	if(max < b)
    	{
    		max = b;
    	}
    	if(max < c)
    	{
    		max = c;
    	}
    	if(min > b)
    	{
    		min = b;
    	}
    	if(min > c)
    	{
    		min = c;
    	}
    	printf("max = %d, min = %d", max, min);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    执行效果:
    在这里插入图片描述


    10.判断闰年

    /*
    闰年需满足的条件:
    1.能被4整除,不能被100整除;
    2.能被400整除 
    */
    #include 
    
    int main()
    {
    	int year;
    	scanf("%d",&year);
    	if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
    	{
    		printf("%d 是闰年\n", year);
    	}else{
    		printf("%d 不是闰年\n", year);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    执行效果:
    在这里插入图片描述


    11.判断字母

    #include 
    
    int main()
    {
    	char c;
    	scanf("%c", &c);
    	if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
    	{
    		printf("%c是字母\n", c);
    	}
    	else
    	{
    		printf("%c 不是字母", c);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    执行效果:
    在这里插入图片描述

    12.求1-n的和

    #include 
    
    int main()
    {
    	int n, i, sum = 0;
    	scanf("%d", &n);
    	for(i=1; i<=n; i++)
    	{
    		sum += i;
    	}
    	printf("%d", sum);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    执行效果:
    在这里插入图片描述


    13.输出九九乘法表

    #include 
    
    int main()
    {
    	int i, j;
    	for(i = 1; i <= 9; i++)
    	{
    		for(j = 1; j <= i; j++)
    		{
    			printf("%dx%d=%d\t", j, i, i * j);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    执行效果:
    在这里插入图片描述


    14.斐波那契数列

    #include 
    
    int main()
    {
    	int i, n, t1 = 0, t2 = 1, t3;
    	scanf("%d", &n);
    	for (i = 1; i <= n; i++)
    	{
    		printf("%d ", t1);
    		t3 = t1 + t2;
    		t1 = t2;
    		t2 = t3;
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    执行效果:
    在这里插入图片描述


    15.求两数的最大公约数

    #include 
    
    int main()
    {
    	int a, b, min, gcd;
    	scanf("%d %d", &a, &b);
    	min = a < b ? a : b;
    	for(int i=1; i <= min; i++)
    	{
    		if (a % i == 0 && b % i  == 0)
    		{
    			gcd = i;
    		}
    	}
    	printf("%d", gcd);
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    执行效果:
    在这里插入图片描述


    16.求两数的最小公倍数

    #include 
    
    int main()
    {
    	int a, b, min;
    	scanf("%d %d", &a, &b);
    	min = (a < b) ? a : b;
    	for(int i = min; i <= a * b; i++)
    	{
    		if((i % a == 0) && (i % b == 0))
    		{
    			printf("%d", i);
    			break;
    		}
    	}
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    执行效果示例:
    在这里插入图片描述


    17.求阶乘

    #include 
    
    int main()
    {
    	int n, fact=1;
    	scanf("%d", &n);
    	if(n < 0)
    	{
    		printf("error");
    		return -1;
    	}
    	for(int i=1; i <= n; i++)
    	{
    		fact *= i;
    	}
    	printf("%d", fact);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    执行效果示例:
    在这里插入图片描述


    18.判断数字为几位数

    #include 
    
    int main()
    {
    	long long n;
    	int count = 0;
    	
    	scanf("%lld", &n);
    	
    	while(n)
    	{
    		n /= 10;
    		count++;
    	}
    	printf("输入的是一个%d位数", count);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    执行效果:
    在这里插入图片描述


    19.判断回文数

    /*
    设n是一个任意自然数,若将n的各位数字反向排列,得到的自然数与n相等,则称n为回文数。
    如12321是回文数,12345不是回文数。 
    */
    #include 
    
    int main()
    {
    	int n, reversed = 0, m, original;
    	scanf("%d",&n);
    	original = n;
    	
    	while(n != 0)
    	{
    		m = n % 10;     // 获得个位、十分位、百分位... 
    		reversed = reversed * 10 + m;    // 构建一个各个数字顺序与原数相反的数 
    		n /= 10;
    	}
    	
    	if(reversed == original)
    		printf("%d是回文数\n", original);
    	else
    		printf("%d不是回文数\n", original);
    	return 0;		
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    #include 
    #include 
    
    int main()
    {
    	int n, m;
    	char s[20]={'\0'},s1[20]={'\0'};
    	scanf("%d", &n);
    
    	sprintf(s, "%d", n);     // 将数值转换成字符串
    	int count = strlen(s);
    	int i, j;
    	for(i = count-1, j=0; i >= 0, j<count; i--, j++)
    	{
    		s1[j] = s[i];
    	}
    	if(strcmp(s, s1) == 0)
    		printf("%d 是回文数\n", n);
    	else
    		printf("%d 不是回文数\n", n);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    执行效果:
    在这里插入图片描述


    20.判断素数

    #include 
    #include 
    
    int main()
    {
    	int n, i, k;
    	scanf("%d", &n);
    	k = sqrt(n);
    	for(i = 2; i <= k; i++)
    	{
    		if(n % i == 0)
    			break;
    	}
    	if(i <= k)
    		printf("%d不是素数", n);
    	else
    		printf("%d是素数", n);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    执行效果:
    在这里插入图片描述


    21.输出水仙花数

    /*
    如果一个三位数的各个数字的立方之和等于这个数本身,则称这个数为“水仙花数”。如153是一个水仙花数。 
    */
    #include 
    
    int main()
    {
    	int n, i, j, k;
    	for(n=100; n<1000; n++)
    	{
    		i = n / 100;   // 百分位
    		j = n / 10 % 10;  // 十分位
    		k = n % 10;  // 个位
    		if(i * i * i + j * j * j + k * k * k == n)
    			printf("%d ", n);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    执行效果:
    在这里插入图片描述


    22.判断Armstrong数

    /*
    如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。
    例如1^3 + 5^3 + 3^3 = 153
    */
    #include 
    #include 
    
    int main()
    {
    	int n, result = 0, m, count = 0, original1, original2;
    	scanf("%d",&n);
    	original1 = original2 = n;
    	
    	while(original1)
    	{
    		original1 /= 10;
    		count++;
    	}
    	
    	while(original2 != 0)
    	{
    		m = original2 % 10;
    		result += pow(m, count);
    		original2 /= 10;
    	}
    	
    	if(result == n)
    		printf("%d是Armstrong数\n", n);
    	else
    		printf("%d不是Armstrong数\n", n);
    	return 0;		
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    执行效果:
    在这里插入图片描述


    23.判断完数

    /*
    一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而
    6 = 1+2+3。因此,6是一个完数。 
    */
    #include 
    
    void print(int n)
    {
    	int i;
    	for(i=1; i<n; i++)
    	{
    		if(n % i == 0)
    			printf("%d ", i);
    	}
    }
    
    int main()
    {
    	int n, sum=0, i;
    	scanf("%d", &n);
    	for(i=1; i<n; i++)
    	{
    		if(n % i == 0)
    		{
    			sum += i;
    		}
    	}
    	if(sum == n)
    	{
    		printf("%d 是一个完数,它的因子是:", n);
    		print(n);
    	}	
    	else
    		printf("%d 不是一个完数", n);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    执行效果:
    在这里插入图片描述


    24.求一个整数的所有因数

    #include 
    
    int main()
    {
    	int num, i;
    	scanf("%d", &num);
    	for(i=1; i<= num; i++)
    	{
    		if(num % i == 0)
    		{
    			printf("%d ", i);
    		}
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    执行效果:
    在这里插入图片描述


    25. 判断是否能构成三角形

    /*
    组成三角形需满足:
    任意两边之和大于第三边;任意两边之差小于第三边。 
    */
    
    #include 
    
    bool is_triangle(int a, int b, int c)    // 判断是否能组成三角形 
    {
    	if((a+b>c) && (a+c>b) && (b+c>a))
    		return true;
    	else
    		return false;	
    }
    
    bool is_isosceles(int a, int b, int c)	// 判断是否能组成等腰三角形 
    {
    	if(is_triangle(a, b, c) && (a==b || a==c || b==c))
    		return true;
    	else return false;	
    }
    
    bool is_equilateral(int a, int b, int c)  // 判断是否能组成等边三角形 
    {
    	if(is_triangle(a, b, c) && (a==b && a==c))
    		return true;
    	else return false;
    }
    
    bool is_right(int a, int b, int c)     // 判断是否能组成直角三角形
    {
    	if(is_triangle(a, b, c))
    	{
    		if((a*a + b*b == c*c) || (a*a + c*c == b*b) || (b*b + c*c == a*a))
    			return true;
    		else
    			return false;
    	}
    	return false;
    }
    
    
    int main()
    {
    	int a, b, c;
    	scanf("%d %d %d", &a, &b, &c);
    	if(is_triangle(a, b, c))
    		printf("%d,%d,%d 能组成三角形\n", a, b, c);
    	else
    		printf("%d,%d,%d 不能组成三角形\n", a, b, c);
    	if(is_isosceles(a, b, c))
    		printf("%d,%d,%d 能组成等腰三角形\n", a, b, c);
    	else
    		printf("%d,%d,%d 不能组成等腰三角形\n", a, b, c);
    	if(is_equilateral(a, b, c))
    		printf("%d,%d,%d 能组成等边三角形\n", a, b, c);
    	else
    		printf("%d,%d,%d 不能组成等边三角形\n", a, b, c);
    	if(is_right(a, b, c))
    		printf("%d,%d,%d 能组成直角三角形\n", a, b, c);
    	else
    		printf("%d,%d,%d 不能组成直角三角形\n", a, b, c);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    执行效果:
    在这里插入图片描述


    26.判断一个数是否可以拆分成两个素数之和

    /*
    判断一个整数是否可以拆分成两个素数之和。如:
    34 = 3 + 31,34 = 5 + 29, 34 = 11 + 23, 34 = 17 + 17 
    */
    #include 
    #include 
    
    
    bool is_prime(int n)
    {
    	int i, k=sqrt(n);
    	for(i=2; i<=k; i++)
    	{
    		if(n % i == 0)
    			break;
    	}
    	if(i <= k)
    		return false;
    	else
    		return true;	
    }
    
    int main()
    {
    	int n, i, flag = 0;
    	scanf("%d", &n);
    	for(i=2; i<=n/2; i++)
    	{
    		if(is_prime(i) && is_prime(n-i))
    		{
    			printf("%d = %d + %d\n", n, i, n-i);
    			flag = 1;
    		}
    	}
    	if(flag == 0)
    		printf("%d 不能拆分成两个素数", n);
    	return 0;	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    执行效果示例:
    在这里插入图片描述


    27.二进制与十进制相互转换

    #include 
    #include 
    
    int BinaryToDecimal(long long n)  // 二进制转十进制 
    {
    	int ans = 0, i = 0, temp;
    	while(n != 0)
    	{
    		temp = n % 10;
    		n /= 10;
    		ans += temp * pow(2, i);
    		i++;
    	}
    	return ans;
    }
    
    long long DecimalToBinary(int n)  // 十进制转二进制 
    {
    	long long ans = 0;
    	int temp, i = 1;
    	while(n != 0)
    	{
    		temp = n % 2;
    		n /= 2;
    		ans += temp * i;
    		i *= 10;
    	}
    	return ans;
    }
    
    int main()
    {
    	int m;
    	long long n;
    	printf("输入一个二进制数:");
    	scanf("%lld", &n);
    	printf("二进制数 %lld 转为十进制:%d\n", n, BinaryToDecimal(n));
    	printf("输入一个十进制数:");
    	scanf("%d", &m);
    	printf("十进制数 %d 转为二进制:%lld\n", m, DecimalToBinary(m));
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    执行效果示例:
    在这里插入图片描述


    28.二进制与八进制相互转换

    #include 
    #include 
    
    int BinaryToOctal(long long n)  // 二进制转八进制 
    {
    	int ans = 0, i = 0, temp, dec = 0, j = 1;
    	
    	// 将二进制转为十进制 
    	while(n != 0)
    	{
    		temp = n % 10;
    		dec += temp * pow(2, i);
    		n /= 10;
    		i++;
    	}
    	
    	// 将十进制转为八进制
    	while(dec != 0)
    	{
    		temp = dec % 8;
    		ans += temp * j;
    		dec /= 8;
    		j *= 10;
    	}
    	return ans;
    }
    
    long long OctalToBinary(int n)  // 八进制转二进制 
    {
    	long long ans = 0;
    	int temp, i = 0, dec = 0, j = 1;
    	
    	// 将八进制转为十进制 
    	while(n != 0)
    	{
    		temp = n % 10;
    		dec += temp * pow(8, i);
    		i++;
    		n /= 10;
    	}
    	
    	// 将十进制转为二进制
    	while(dec != 0)
    	{
    		temp = dec % 2;
    		dec /= 2;
    		ans += temp * j;
    		j *= 10;
    	}
    	return ans;
    }
    
    int main()
    {
    	int m;
    	long long n;
    	printf("输入一个二进制数:");
    	scanf("%lld", &n);
    	printf("%lld", n);
    	printf("二进制数 %lld 转为八进制:%d\n", n, BinaryToOctal(n));
    	printf("输入一个八进制数:");
    	scanf("%d", &m);
    	printf("八进制数 %d 转为二进制:%lld\n", m, OctalToBinary(m));
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    执行效果示例:
    在这里插入图片描述


    29.八进制与十进制相互转换

    #include 
    #include 
    
    int OctalToDecimal(long long n)  // 八进制转十进制 
    {
    	int ans = 0, i = 0, temp;
    	while(n != 0)
    	{
    		temp = n % 10;
    		ans += temp * pow(8, i);
    		i++;
    		n /= 10;
    	}
    	return ans;
    }
    
    int DecimalToOctal(int n)  // 十进制转八进制 
    {
    	int ans = 0;
    	int temp, i = 1;
    	while(n != 0)
    	{
    		temp = n % 8;
    		ans += temp * i;
    		n /= 8;
    		i *= 10;
    	}
    	return ans;
    }
    
    int main()
    {
    	int m;
    	int n;
    	printf("输入一个八进制数:");
    	scanf("%d", &n);
    	printf("八进制数 %d 转为十进制:%d\n", n, OctalToDecimal(n));
    	printf("输入一个十进制数:");
    	scanf("%d", &m);
    	printf("十进制数 %d 转为八进制:%d\n", m, DecimalToOctal(m));
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    执行效果:
    在这里插入图片描述

    30.打印杨辉三角

    /*
    杨辉三角规律:
    1.每一行的第一列都是1;
    2.每一行的最后一个数都是1;
    3.从第3行开始,除第一个数和最后一个数外,其余各数为上一行同列和前一列两个数之和。 
    */
    
    #include 
    #define N 10
    
    int main()
    {
    	int i, j, a[N][N];
    	
    	for(i=0; i<N; i++)
    	{
    		a[i][0] = 1;		// 每行第一列元素的值为1 
    		a[i][i] = 1;		// 对角线元素值为1 
    	}
    	
    	for(i=2; i<N; i++)
    	{
    		for(j=1; j<i; j++)
    		{
    			a[i][j] = a[i-1][j-1] + a[i-1][j];  // 值为上一行同列和前一列两个数之和
    		}
    	}
    	
    	for(i=0; i<N; i++)
    	{
    		for(j=0; j<=i; j++)
    		{
    			printf("%4d", a[i][j]);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    执行效果:
    在这里插入图片描述


    31.查找数组中的最大/最小元素

    #include 
    
    int main()
    {
    	int n;
    	int i, max, min;
    	scanf("%d", &n);
    	int a[n];
    	for(i=0; i<n; i++)
    		scanf("%d", &a[i]);
    	min = a[0], max = a[0];
    	for(i=1; i< n; i++)
    	{
    		max = (a[i] > max) ? a[i] : max;
    		min = (a[i] < min) ? a[i] : min;
    	}
    	printf("最大值为:%d,最小值为:%d", max, min);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    执行效果:
    在这里插入图片描述


    32.矩阵转换

    #include 
    
    int main()
    {
    	int n, m, temp, i, j;
    	printf("输入矩阵的行数和列数:");
    	scanf("%d %d", &n, &m);
    	int a[n][m];
    	int b[m][n];
    	for(i=0; i<n; i++)
    	{
    		for(j=0; j<m; j++)
    		{
    		 scanf("%d", &a[i][j]);
    		}
    	}
    	
    	for(i=0; i<n; i++)
    	{
    		for(j=0; j<m; j++)
    		{
    			b[j][i] = a[i][j];
    		}
    	}
    	for(i=0; i<m; i++)
    	{
    		for(j=0; j<n; j++)
    		{
    			printf("%d ", b[i][j]);
    			if(j == n - 1)
    				printf("\n");
    		}
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    执行效果:
    在这里插入图片描述


    33.统计字符在字符串中出现的次数

    #include 
    #include 
    
    int main()
    {
    	char str[100];
    	char ch;
    	int i, count = 0;
    	printf("输入字符串:");
    	scanf("%s", &str);
    	int len = strlen(str);
    	printf("请输入要查找的字符:");
    	getchar();
    	scanf("%c", &ch);
    	for(i=0; i<len; i++)
    	{
    		if(str[i] == ch)
    			count++;
    	}
    	printf("字符 %c 在输入的字符串中出现的次数为:%d", ch, count);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    执行效果示例:
    在这里插入图片描述


    34.字符串中字母数字等的出现次数

    /*
    统计字符串中字母、数字、空格及其它字符出现的次数 
    */
    #include 
    #include 
    
    int main()
    {
    	char str[100];
    	int letter = 0, digit = 0, space = 0, others = 0;
    	printf("输入字符串:\n");
    	gets(str);
    	int len = strlen(str);
    	for(int i=0; i<len; i++)
    	{
    		if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
    			letter++;
    		else if(str[i] >= '0' && str[i] <= '9')
    			digit++;
    		else if(str[i] == ' ')
    			space++;
    		else
    			others++;	
    	}
    	printf("字母:%d,数字:%d,空格:%d,其他字符:%d", letter, digit, space, others);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    执行效果示例:
    在这里插入图片描述


    35.计算两个时间段的差值

    /*
    计算两个时间段的差值 
    */
    #include 
    #include 
    
    int main()
    {
    	int hours_1, minutes_1, seconds_1, hours_2, minutes_2, seconds_2;
    	int diff_hours, diff_minutes, diff_seconds, temp, time1, time2;
    	
    	printf("请输入第一个时间(小时 分钟 秒):\n");
    	scanf("%d %d %d", &hours_1, &minutes_1, &seconds_1);
    	
    	printf("请输入第二个时间(小时 分钟 秒):\n");
    	scanf("%d %d %d", &hours_2, &minutes_2, &seconds_2);
    	
    	time1 = hours_1*60*60 + minutes_1*60 + seconds_1;
    	time2 = hours_2*60*60 + minutes_2*60 + seconds_2;
    	temp = abs(time2 - time1);
    	
    	diff_hours = temp / 3600;       // 小时差值 
    	diff_minutes = temp / 60 % 60 ; // 分钟差值 
    	diff_seconds = temp % 60;       // 秒差值 
    	
    	printf("时间差值为:%d小时%d分%d秒", diff_hours, diff_minutes, diff_seconds);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    执行效果:
    在这里插入图片描述


    36.计算日期是第几天

    /*
    输入一个日期,计算该日期是这一年的第几天 
    */
    #include 
    
    int main()
    {
    	int count_days(int month, int day);
    	bool is_leap(int year);
    	int year, month, day, days;
    	printf("请输入日期(年,月,日):");
    	scanf("%d,%d,%d", &year, &month, &day);
    	days = count_days(month, day);
    	if(month > 2 && is_leap(year))
    		days += 1;			// 如果是闰年且月份大于2,则天数要加1 
    	printf("%d-%d-%d是%d年的第%d天", year, month, day, year, days);
    	return 0;	
    }
    
    int count_days(int month, int day)   // 统计天数 
    {
    	int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    	int i;
    	if(month > 1)
    	{
    		for(i=0; i<month-1; i++)
    			day += months[i];
    	}
    	return day;
    }
    
    bool is_leap(int year)     // 判断是否是闰年 
    {
    	return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    执行效果:
    在这里插入图片描述


    37.将字符串写入文件

    #include 
    #include 
    
    int main()
    {
    	char str[100];
    	FILE *fp;
    	
    	fp = fopen("test_str.txt", "w");
    	if(fp == NULL)
    	{
    		printf("Error!");
    		exit(0);
    	}
    	printf("输入字符串:\n");
    	fgets(str, (sizeof str / sizeof str[0]), stdin);
    	fprintf(fp, "%s", str);
    	fclose(fp);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    执行效果:
    在这里插入图片描述


    38.读取文件

    #include 
    #include 
    
    int main()
    {
    	char str[100];
    	FILE *fp;
    	
    	fp = fopen("test_str.txt", "r");
    	if(fp == NULL)
    	{
    		printf("Error!");
    		exit(0);
    	}
    	fscanf(fp, "%[^\n]", str);  // 读取文本,直到遇到新的一行
    	printf("%s", str); 
    	fclose(fp);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    执行效果:
    在这里插入图片描述


    39.读写文件

    #include 
    #include 
    #include 
     
    int main()
    {
        FILE *in;
        FILE *out;
     
        char str[5][10]; // 存放字符串的二维数组 
        int i, j=0, n = 5;
    //    printf("输入想要输入的字符串数量:");
    //    scanf("%d", &n);
        printf("请输入字符串:\n");
        for(i=0; i<n; i++)
        {
        	gets(str[i]);    // 输入字符串 
    	}
        
        if ((in = fopen("test_str2.txt", "w"))== NULL)   // 打开文件 
    	{
    		printf("无法打开文件!");
    		exit(0);
    	}
    	
    	for(i=0; i<n; i++)
    	{
    		fputs(str[i], in);     // 将字符串写入in指向的文件
    		fputs("\n", in);
    	}
        fclose(in);
        
        
        if ((out = fopen("test_str2.txt", "r"))== NULL)
    	{
    		printf("无法打开文件!");
    		exit(1);
    	}
    	
    	printf("从文件中读取的字符串如下:\n");
    	while(fgets(str[j], n, out)!= NULL)    // 从文件中读取字符串 
    	{
    		printf("%s", str[j]);
    		j++;
    	}
        fclose(out);
     
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    执行效果:
    在这里插入图片描述

    #include 
    #define N 5
    
    struct Student
    {
    	int num;         // 学号 
    	char name[20];   // 姓名 
    	float chinese, math, english, physics, chemistry, biology;  // 语数英物化生成绩 
    	float average;   // 平均分 
    	float total;     // 总分 
    }stu[N];
    
    int main()
    {
    	void save(void);   // 函数声明 
    	int i;
    	FILE *fp1;
    		printf("请输入各学生信息及各门课程分数:学号、姓名、语文、数学、英语、物理、化学、生物:\n");
    	for(i=0; i<N; i++)
    	{
    		// 输入数据 
    		scanf("%d %s %f %f %f %f %f %f", &stu[i].num, &stu[i].name, &stu[i].chinese, &stu[i].math, 
    			&stu[i].english, &stu[i].physics, &stu[i].chemistry, &stu[i].biology);
    		stu[i].total = stu[i].chinese + stu[i].math + stu[i].english + stu[i].physics + stu[i].chemistry + stu[i].biology;
    		stu[i].average = stu[i].total / 6.0;
    	}
    	save();
    	
    	fp1 = fopen("stu_score.txt", "r");    // 以读方式打开文件 
    	printf("\n学号	姓名	语文	数学	英语	物理	化学	生物	总分	平均分\n");
    	printf("------------------------------------------------------------------------------\n");
    	
    	for(i=0; i<N; i++)
    	{
    		fread(&stu[i], sizeof(struct Student), 1, fp1);
    		printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].num, stu[i].name,
    		stu[i].chinese, stu[i].math, stu[i].english, stu[i].physics, stu[i].chemistry, 
    		stu[i].biology, stu[i].total, stu[i].average);
    	}
    	fclose(fp1);
    	return 0;
    }
    
    void save(void)     // 向文件输出数据
    {
    	FILE *fp;
    	int i;
    	if((fp = fopen("stu_score.txt", "w")) == NULL)    // 以写方式打开文件 
    	{
    		printf("无法打开文件!");
    		return;
    	}
    	for(i=0; i<N; i++)
    	{
    		if(fwrite(&stu[i], sizeof(struct Student), 1, fp) != 1)
    		{
    			printf("文件写入失败!");
    			return;
    		}
    	}
    	fclose(fp);
    }
    /*
    1001 张三 87 80 90 68 73 65
    1002 李四 90 78 88 78 64 59
    1003 王五 77 68 56 66 77 80
    1004 赵六 80 68 87 58 68 72
    1005 Jack 66 68 72 79 82 83
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

    执行效果:
    在这里插入图片描述


    40.将一个数插入排好序的数组

    #include 
    #include 
    #include 
    
    int main()
    {
    	int a[21], i, j, num, t, t1, t2;
    	srand((int)time(NULL));
    	for(i=0; i<20; i++)
    	{
    		a[i] = rand() % 90 + 10;
    	}
    	for(i=0; i<20; i++)
    	{
    		for(j=0; j<19-i; j++)
    		{
    			if(a[j] > a[j+1])
    			{
    				t = a[j];
    				a[j] = a[j+1];
    				a[j+1] = t;
    			}
    		}
    	}
    	for(i=0; i<20; i++)
    	{
    		printf("%d ", a[i]);
    	}
    	printf("\n");
    	printf("输入一个整数:\n");
    	scanf("%d", &num);
    	if(num > a[19])
    		a[20] = num;  // 如果大于数组末尾的元素值,则放到最后
    	else
    	{
    		for(i=0; i<20; i++)
    		{
    			// 与前面的值进行比较
    			if(a[i] > num)
    			{
    				t1 = a[i];
    				a[i] = num;
    				for(j=i+1; j<21; j++)
    				{
    					// 把后面的元素往后移一个位置
    					t2 = a[j];
    					a[j] = t1;
    					t1 = t2;
    				}
    				break;
    			}
    		}
    	}
    	for(i=0; i<21; i++)
    	{
    		printf("%d ", a[i]);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    执行效果:
    在这里插入图片描述


    参考:
  • 相关阅读:
    使用Python编写Web接口
    基于nest框架的redis streams实现mq(bullmq)
    网络基础-2
    学习STM32第十五天
    Redis中常见数据结构和数据类型
    深度学习入门(三十三)卷积神经网络——ResNet
    K8S中的某个容器突然出现内存和CPU占用过高的情况解决办法
    HTML5期末大作业:基于HTML+CSS+JavaScript仿蘑菇街购物商城设计毕业论文源码
    “参与 Debian 项目 20 年后,被降级的我选择退出”
    定位到叠放次序以及定位的拓展
  • 原文地址:https://blog.csdn.net/username666/article/details/126752357