C语言编程题小汇总

编程题汇总

目录

编程题汇总

 1、BC18 计算带余除法

 2、BC41 你是天才吗?

 3、BC49 判断两个数的大小关系

 4、BC83 被5整除问题

 5、BC56 线段图案

 6、打印3的倍数的数

 7、从大到小输出

 8、BC51 三角形判断

 9、分数求和

10、数9的个数

11、打印闰年

12、求最大值

13、乘法口诀表

14、最大公约数

15、打印素数

16、【一维数组】输入10个整数,求平均值

17、BC68 X形图案

18、BC69 空心正方形图案

19、BC107 矩阵转置

20、BC92 逆序输出

21、BC100 有序序列合并

22、【一维数组】交换数组


1、BC18 计算带余除法

c40d246f58bc459daaf02ea2dd740a5b.png

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("%d %d", a / b, a % b);
	return 0;
}

2、BC41 你是天才吗?

baa97f1a9872459281d33b09a6c29258.png

#include <stdio.h>
int main()
{
	int a = 0;
	//多组输入
	while (scanf("%d", &a) != EOF)
	{
		if (a >= 140)
		{
			printf("Genius\n");
		}
	}
	return 0;
}

3、BC49 判断两个数的大小关系

170a2d99b59b441e8a896ee9bd0fb003.png

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	//多组输入
	while (scanf("%d %d", &a, &b) != EOF)
	{
		if (a > b)
		{
			printf("%d>%d\n", a, b);
		}
		else if (a < b)
		{
			printf("%d<%d\n", a, b);
		}
		else
		{
			printf("%d=%d\n", a, b);
		}
	}
	return 0;
}

4、BC83 被5整除问题

e4f338b724cf427b96afcb26dded6939.png

#include <stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a % 5 == 0)
	{
		printf("YES\n");
	}
	else
	{
		printf("NO\n");
	}
	return 0;
}

5、BC56 线段图案

bcd67f76083544a0826ca68076be30ff.png

#include <stdio.h>
int main()
{
	int a = 0;
	while (scanf("%d", &a) != EOF)
	{
		for (int i = 1; i <= a; i++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

6、打印3的倍数的数

描述:写一个代码打印1-100之间所有3的倍数的数字

//方法1
#include <stdio.h>
int main()
{
	int a = 0;
	for (a = 1; a <= 100; a++)
	{
		if (a % 3 == 0)
		{
			printf("%d ", a);
		}
	}
	return 0;
}

//方法2 - 简洁
#include <stdio.h>
int main()
{
	int a = 0;
	for (a = 3; a <= 100; a+=3)
	{
		printf("%d ", a);
	}
	return 0;
}

7、从大到小输出

写代码将三个整数数按从大到小输出。

例如:

输入:2 3 1

输出:3 2 1

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	scanf("%d%d%d", &a, &b, &c);
	//比较3个数的大小
	if (a < b)
	{
		int tmp = a;
		a = b;
		b = tmp;
	}//a >= b
	if (a < c)
	{
		int tmp = a;
		a = c;
		c = tmp;
	}//a >= c
	if (b < c)
	{
		int tmp = b;
		b = c;
		c = tmp;
	}//c >= b
	printf("%d %d %d", a, b, c);
	return 0;
}

总结:从大到小输出,就是比较谁大,谁大就在最前面,谁小就在最后面。

 8、BC51 三角形判断

84a3e8f2ea8e4386be38af1ee3daa6ee.png

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	while (scanf("%d %d %d", &a, &b, &c) != EOF)
	{
		//任意2边之和大于第3边,就可以构成三角形
		if ((a + b) > c && (a +c) > b && (b + c) > a) //满足三角形的3种条件
		{
			//三角形的3种情况
			if (a == b && b == c)
			{
				printf("Equilateral triangle!\n");
			}
			else if ((a == b) && (b != c) || (a == c) && (b != c) || (b == c) && (a != c))
			{
				printf("Isosceles triangle!\n");
			}
			else
			{
				printf("Ordinary triangle!\n");
			}
		}
		else //不是三角形
		{
			printf("Not a triangle!\n");
		}
	}
	return 0;
}

9、分数求和

 内容:计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

#include <stdio.h>
int main()
{
	double sum = 0.0;
	int flag = 1;
	for (int i = 1; i <= 100; i++)
	{
		sum = sum + 1.0 * flag / i;
		flag = -flag;
	}
	printf("%lf\n", sum);
	return 0;
}

 总结:
1、不要让结果永远为1的解决办法是,将分子改为小数(double/float类型)
2、使用flag(也可以是其他命名)实现正负交替

10、数9的个数

内容:编写程序数一下 1到 100 的所有整数中出现多少个数字9

 知识点:for循环、if语句、自增的单目操作符++、if...else...

思路:
9 19 29 39 49 59 69 79 89 90 91 92 93 94 95 96 97 98 99 ---20个
99是特殊的,它有2个
先观察一下,9出现的位置,个位和十位
个位如何求?十位如何求?
个位:19 % 10 == 9
十位:99 / 10 == 9
因为题目是记个数,所以每成功计算一个就用count++记一下(前面要int count = 0;)

 ​

#include <stdio.h>
int main()
{
	int count = 0;
	for (int i = 1; i <= 100; i++)
	{
		//99走一次
		if (i % 10 == 9)
		{
			count++;
		}
		//99走二次
		if (i / 10 == 9)
		{
			count++;
		}
	}
	printf("%d\n", count);
	return 0;
}

如果在if...if之间加个else,就成了单分支,结果也会发生变化
这时,求的就是有多少个数字包含9

#include <stdio.h>
int main()
{
	int count = 0;
	for (int i = 1; i <= 100; i++)
	{
		//单分支:如果走了第一个if,就不能走第二个if。如果喜欢ta,就不能喜欢我了。
		if (i % 10 == 9)
		{
			count++;
		}
		else if (i / 10 == 9)
		{
			count++;
		}
	}
	printf("%d\n", count);
	return 0;
}

11、打印闰年

内容:打印1000年到2000年之间的闰年

知识点:for循环、if语句、算数操作符%、逻辑操作符&& ||、赋值操作符==

思路:
闰年的条件是什么?
1.能被4整除,但不能被100整除
2.能被400整除
1000-2000用for循环

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1000; i <= 2000; i++)
	{
		if ((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0))
		{
			printf("%d ", i);
		}
	}
	return 0;
}

 12、求最大值

内容:求10 个整数中最大值

知识点:数组创建、数组元素的编号(也叫下标)、for循环、if语句、关系操作符<、赋值操作符=

思路:
打擂台,一个一个去PK!

#include <stdio.h>
int main()
{
	int arr[10] = { 2,3,4,6,7,5,2,0,20,8 };
	int max = arr[0]; //假设arr[0]第一个元素是最大值
	for (int i = 0; i < 10; i++)
	{
		if (max < arr[i]) //打擂台
		{
			max = arr[i]; //最终的胜者!
		}
	}
	printf("%d\n", max);
	return 0;
}

13、乘法口诀表

内容:在屏幕上输出9*9乘法口诀表

打印出来的效果:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=4 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
.......
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

思路:
循环的嵌套
用for循环产生2个1-9的值,分为外层循环和内层循环
外层循环的值赋值给i,内层循环的值赋值给j
j的值放乘号的左边,i的值放乘号右边
观察每一行的最后一个都是两个相同的数字相乘,所以内层循环的判断表达式应该为j <= i,而不是j <= 9

#include <stdio.h>
int main()
{
	for (int i = 1; i <= 9; i++)
	{
		for (int j = 1; j <= i; j++)
		{
			printf("\t%d*%d=%d ", j, i, j * i);
		}
		printf("\n");//每打印一行就换一行
	}
	return 0;
}

两个关键点:
j <= i(不是j <= 9)
j, i(j在前,i在后,而不是i, j)

14、最大公约数

内容:给定两个数,求这两个数的最大公约数

例如:

输入:20 40
输出:20

辗转相除法 ——> 求最大公约数

辗转相除法的基本原理:
假设a为20,b为40,余数为c
c = a % b
如果c = 0,那么最大公约数就为b
如果c != 0,那么就要再用b(除数)除以c(余数),重复此过程,直到余数为0,除数就是最大公约数

思路:
先创建2个变量a和b,将20和40,分别赋值给它们
然后再创建一个变量c,将a%b的余数赋值给它
如果c不等于0,就要再用b%c,重复此过程,直到余数为0,所以要用到while循环
接下来写while循环
循环内部先互换a和b的值(a=b;b=c;)
再用a%b,赋值给c
如果c为0,就不再循环,直接打印b(最大公约数)

//方法1
#include <stdio.h>
int main()
{
	int a = 20;
	int b = 40;
	int c = a % b;//20
	//如果c不等于0,则要继续算,可能是1次,也可能是多次,所以要用到while循环
	while (c != 0)
	{
		//辗转相除法 —> 互换a和b的值
		a = b;//除数 40
		b = c;//余数 20
		c = a % b;//0
	}
	printf("%d\n", b);
	return 0;
}


//方法2
#include <stdio.h>
int main()
{
	int a = 20;
	int b = 40;
	int c = a % b;//20
	int r = 0;
	//如果c不等于0,则要继续算,可能是1次,也可能是多次,所以要用到循环
	while (r != 0)
	{
		r = b % c;//0
	}
	printf("%d\n", c);
	return 0;
}

15、打印素数

内容:写一个代码:打印100~200之间的素数。
注:素数又称质数,只能被1和本身整除的数字。

思路:
需要用到嵌套循环
外层循环产生100-200之间的数值
然后再判断是否为素数
(素数判断举例:7,只有1和7才能被整除,还有2 3 4 5 6,就诶个去试除7,如果被整除,就不是素数,如果不被整除,就是素数,
所以是拿2~i-1的之间的数,依次去除i。)
如果2到i-1的值能整除i,那就不是素数
不能整除,就是素数

//试除法
#include <stdio.h>
int main()
{
	for (int i = 100; i <= 200; i++)
	{
		//判断是否为素数
		int flag = 1;//假设i是素数 作为一个标记值
		for (int j = 2; j <= i - 1; j++)
		{
			if (i % j == 0)//证明不是素数
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)//是素数
		{
			printf("%d ", i);
		}
	}
	return 0;
}

如果想要知道素数的总数有多少个呢?

#include <stdio.h>
int main()
{
    //创建变量count
	int count = 0;

	for (int i = 100; i <= 200; i++)
	{
		//判断是否为素数
		int flag = 1;//假设i是素数 作为一个标记值
		for (int j = 2; j <= i - 1; j++)
		{
			if (i % j == 0)//证明不是素数
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)//是素数
		{
			printf("%d ", i);

            //用count计数,每打印一次i,就+1
			count++;

		}
	}
    
    //最后打印count
	printf("\ncount = %d\n", count);

	return 0;
}

16、【一维数组】输入10个整数,求平均值

内容:编写一个程序,从用户输入中读取10个整数并存储在一个数组中。然后,计算并输出这些整数的平均值。 

#include <stdio.h>
int main()
{
	int arr[10] = { 0 };
	//输入10个整数
	for (int i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	//遍历数组,将它们加起来
	int sum = 0;
	for (int i = 0; i < 10; i++)
	{
		sum += arr[i];
	}
	printf("sum = %d\n", sum);
	//平均值为小数
	double avg = sum * 1.0 / 10;
	printf("avg = %0.2lf\n", avg);
	return 0;
}

 

17、BC68 X形图案

 碰到这种题,画图尤为重要。画完图,就找规律。

#include <stdio.h>
int main()
{
	int a = 0;
	while (scanf("%d", &a) != EOF)
	{
		//产生行
		for (int i = 0; i < a; i++)
		{
			//产生列
			for (int j = 0; j < a; j++)
			{
				//判断是否打印*
				if (i == j || i + j == a - 1)
				{
					printf("*");
				}
				else
				{
					printf(" ");
				}
			}
			//每一行遍历完就换一行
			printf("\n");
		}
	}
	return 0;
}

 

18、BC69 空心正方形图案

  碰到这种题,画图尤为重要。画完图,就找规律。

#include <stdio.h>
int main()
{
	int n = 0;
	while (scanf("%d", &n) != EOF)
	{
		//产生行
		for (int i = 0; i < n; i++)
		{
			//产生列
			for (int j = 0; j < n; j++)
			{
				//判断是否打印* 
				if (i == 0 || i == n - 1 || j == 0 || j == n - 1)
				{
					printf("* ");
				}
				else
				{
					printf("  ");
				}
			}
			//每一行遍历完就换一行
			printf("\n");
		}
	}
	return 0;
}

 

 19、BC107 矩阵转置

 

#include <stdio.h>
int main()
{
	int n = 0;
	int m = 0;
	scanf("%d %d", &n, &m);
	//可变数组
	int arr[n][m];
	//n行
	for (int i = 0; i < n; i++)
	{
		//m列
		for (int j = 0; j < m; j++)
		{
			//读入n行m列的数据
			scanf("%d", &arr[i][j]);
		}
	}
	//实现功能
	//m行
	for (int i = 0; i < m; i++)
	{
		//n列
		for (int j = 0; j < n; j++)
		{
			printf("%d ", arr[j][i]);
		}
		printf("\n");
	}
	return 0;
}

 

20、BC92 逆序输出

#include <stdio.h>
int main()
{
	int arr[10] = { 0 };
	//良好的编程习惯是:习惯初始这个数组
	for (int i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (int i = 9; i >= 0; i--) //注意是i--
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

 

21、BC100 有序序列合并

 

#include <stdio.h>
int main()
{
    int n = 0;
    int m = 0;
    //输入第一行
    scanf("%d%d", &n, &m);
    //数组的个数不超过1000
    int arr1[1000] = { 0 };
    int arr2[1000] = { 0 };
    //输入第二行
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr1[i]);
    }
    //输入第三行
    for (int i = 0; i < m; i++)
    {
        scanf("%d", &arr2[i]);
    }
    //上述已经完成数组的输入

    int i = 0;//遍历第一个数组
    int j = 0;//遍历第二个数组
    //第一种情况 都满足
    while(i < n && j < m)
    {
        //比大小
        if (arr1[i] < arr2[j])
        {
            printf("%d ", arr1[i]);
            i++;//继续比较后面的数
        }
        else 
        {
            printf("%d ", arr2[j]);
            j++;
        }
    }
    //第二种情况 i>=n j<m
    while(j < m)
    {
        printf("%d ", arr2[j]);
        j++;
    }
    //第三种情况 j>=m i<n
    while(i < n)
    {
        printf("%d ", arr1[i]);
        i++;
    }
    return 0;
}

22、【一维数组】交换数组

 内容:将数组A中的内容和数组B中的内容进行交换。(数组一样大)

 

#include <stdio.h>
int main()
{
	int arrA[] = { 1,2,3,4 };
	int arrB[] = { 5,6,7,8 };
	//用sizeof计算数组元素个数
	int len = sizeof(arrA) / sizeof(arrA[0]); //求数组的长度
	//原来数组的内容
	for (int i = 0; i < len; i++)
	{
		printf("%d ", arrA[i]);
	}
	printf("\n");
	for (int i = 0; i < len; i++)
	{
		printf("%d ", arrB[i]);
	}
	printf("\n-------");
	//A和B数组内容交换
	for (int i = 0; i < len; i++)
	{
		int temp = arrA[i];
		arrA[i] = arrB[i];
		arrB[i] = temp;
	}
	printf("\n");
	//交换后数组的内容
	for (int i = 0; i < len; i++)
	{
		printf("%d ", arrA[i]);
	}
	printf("\n");
	for (int i = 0; i < len; i++)
	{
		printf("%d ", arrB[i]);
	}
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值