学习C/C++必须会的一些编程题目!!!

Posted 是七喜呀!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习C/C++必须会的一些编程题目!!!相关的知识,希望对你有一定的参考价值。

不定时更新

1.打印菱形

#include<iostream>
using namespace std;
int main()
{
	int n;
	cout <<"请输入你将要打印的菱形的上半部分行数:";
	cin >> n;
	//上半部分
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n - 1 - i; j++)
			cout <<" ";
		for (int j = 0; j < 2 * (i + 1) - 1; j++)
			cout << "8";
		cout <<endl;
	}
	//下半部分
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = 0; j < 1 + i; j++)
			cout << " ";
		for (int j = 0; j < 2 * (n - 1) - 1 - 2 * i; j++)
			cout << "8";
		cout << endl;
	}
	return 0;
}

2.交换两个int元素的值

//使用中间变量
	int x = 10;
	int y = 20;
	int c = 0;//中间变量
	c = x;
	x = y;
	y = c;
//不使用中间变量
	int x = 10;
	int y = 20;
	x = x + y;
	y = x - y;//上一步x变化为x + y 
	x = x - y;//上一步y变化为x 
	//注:可能会有溢出的问题,即可能会超过int的数据范围

异或的性质

//异或的性质
int x = 10;
	int y = 20;
	x = x ^ y;
	y = x ^ y;//x ^ y ^ y = x
	x = x ^ y; //x ^ y ^ x ^ y ^ y = y;

3.找出数组中只出现一次的数字

#include<stdio.h>

int main()
{
	int i,j;
	int arr[] = { 1,2,3,55,3,2,1};
	int sz = sizeof(arr) / sizeof(arr[0]);//计算arr的元素个数
	for (i = 0; i < sz; i++)
	{
		int count = 0;//计数器,同时在二重循环里面置零
		for(j = 0; j < sz; j++)
		{
			if (arr[i] == arr[j])
				count++;
		}
		//判断
		if(count == 1)
		{
			printf("数组中只出现一次的数字为%d",arr[i]);
			return 0;//直接结束主函数的进行
			//当然你也可以break;
		}
	}
	return 0;
}

感兴趣的小伙伴可以看一下这篇文章的多解
4.写一个简单的关机程序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	char input[20] = { 0 };//存储数据
again:
	printf("注意注意!!!您的系统将在60秒内关机,请输入:我是猪,来取消关机\\n");
	system("shutdown -s -t 60");
	scanf("%s",input);
	if(strcmp(input,"我是猪") == 0)
	{
		system("shutdown -a");
	}
	else
		goto again;
	//strcmp为字符串函数中的字符串比较函数,如两个字符相等就返回0
	//包含在头文件<string.h>

	//明确system()-专门用来执行系统指令的包含在头文件<stdlib.h>
	//其中shutdown -s -t 60 表示60秒后注销用户
	//shutdown -a 表示取消关机
	
	return 0;
}

5.求解最小公倍数,最大公约数
多种方法求解最大公约数与最小公倍数

6.while循环实现求满足:1 + 2 + 3 + 4 + 5 + … + N >= M的最小N

#include<stdio.h>

int main()
{
	int M;
	int sum = 0;
	int N = 0;
	scanf("%d",&M);
	while(sum < M)
	{
	//注意一个关键点 ,就是 N - 1还满足左式 < 右式
	//N的时候不满足左式 < 右式
	//所以就有了以下的循环中的N++放在前面
		N++;
		sum += N;
		
	}
	printf("%d",N);
	return 0;
}

7.求出1!+2!+…+N!的值

#include<stdio.h>
//1! + 2! + 3! = 9
int main()
{
	int mul = 1, sum = 0;
	int i,j;
	int N;
	scanf("%d",&N);
	for (i = 1; i <= N; i++)
	{
		mul = 1;//注意这边要初始化mul的值
		for (j = 1; j <= i; j++)
		{
			mul *= j;
		}
		sum += mul;
	}
	printf("%d",sum);
	return 0;
}

8.找出a,b,c中的大数

int main()
{
	int a,b,c;
	int max;
	scanf("%d %d %d",&a,&b,&c);
	max = a > b ? a : b;
	max = max > c ? max : c;
	printf("%d",max);
}

9.不按顺序排序

//if多分枝结构实现
//注:else跟靠的最近的if匹配
#include <stdio.h>
int main()
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	if(a<=b && a<=c)//这边是a为最小
	{
		if(b<c)
		  printf("%d %d %d",c,b,a);
		else
		  printf("%d %d %d",b,c,a);
	}
    else//a不是最小
        {
   	    if(b<c)
                if(a<c)
              	   printf("%d %d %d",c,a,b);
	 			else
	 	   			printf("%d %d %d",a,c,b);
	    else
	 		if(b<a)
	           printf("%d %d %d",a,b,c);
	 		else
	 	   		printf("%d %d %d",b,a,c);
        }
}

10.按顺序按元素排序

//法一:
#include<stdio.h>

int main()
{
	//将三个数从大到小输出其中规定a中放最大值,c中放最小值
	int a,b,c;
	int max,min,tmp;
	scanf("%d %d %d",&a,&b,&c);
	tmp = a + b + c;//可能会有溢出

	//得最大值
	max = a > b ? a : b;
	max = max > c ? max : c;
	a = max;

	//得最小值
	min = a < b ? a : b;
	min = min < c ? min : c;
	c = min;

	//得中间值
	b = tmp - max - min;
	printf("a b c从大到小的顺序为 a = %d > b =  %d > c = %d",a,b,c);
	return 0;
}


//法二:
#include<stdio.h>

int main()
{
	int a,b,c;
	int tmp;
	scanf("%d %d %d",&a,&b,&c);
	if(a < b)
	{
		tmp = b;
		b = a;
		a = tmp;
	}
	if (a < c)
	{
		tmp = c;
		c = a;
		a = tmp;

	}//这边的出a的最大值

	if ( b < c)
	{
		tmp = b;
		b = c;
		c = tmp;
	}//这边对b 和 c 进行排序
	printf("a = %d > b = %d > c = %d",a,b,c);
	return 0;
}

11.判断闰年的综合运用

//根据月份判断,根据年份来判断的话,太麻烦了
//年份能被400整除,或能被4整除但不能被100整除,则称为闰年
//否则为平年。
#include <stdio.h>
int main()
{
  int y,m,d;
  scanf("%d%d",&y,&m);
  if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12)
     d=31;
  else if(m==4 || m==6 || m==9 || m==11)
     d=30;
  else
  {
      if(y%4==0 && y%100!=0 || y%400==0)
      //这边是闰年的判断条件
   	  d=29;
      else
	  d=28;	 
   }
   printf("%d年%d月有%d天",y,m,d);
   return 0;
}

12.求1~100中所有整数总共含有数字9的个数

#include<stdio.h>

int main()
{
	int count = 0;
	int i = 1;
	for (; i <= 100; i++)
	{
		if (i / 10 == 9)//判断十位上的数字
			count++;
		if (i % 10 == 9)//判断个位数字
			count++;
		//注意不能是else if 不然99中的两个9就只能就算一次
	}
	printf("%d",count);
	return 0;
}

13.打印N * N乘法口诀表

#include<stdio.h>

int main()
{
	int i,j;
	int N;
	scanf("%d",&N);
	for(i = 1; i <= N; i++)
	{
		for (j = 1; j <= i; j++)
		{
			printf("%2d*%2d=%-3d",i,j,i*j);
			//%2d表示右对齐
			//两个占位符
			//前面有个负号表示左对齐
		}
		printf("\\n");
	}
	return 0;
}

14.求1/1-1/2+1/3-1/4+…+1/99-1/100的值

#include<stdio.h>

int main()
{
	double sum = 0;//注意数据类型很重要,不能是int
	int i,flag = 1;
	for (i = 1; i <= 100; i++)
	{
		sum += 1.0 * flag / i;
		flag = -flag;//改变正负

	}
	printf("%lf",sum);
	return 0;
}

15.计算排名(数组中的元素无重复)

//法一:
#include<stdio.h>
//往数组中输入10个数字,按照大小计算排名,数字小的排名靠后
//我们采用以空间换时间的做法
int main()
{
	int i;
	int arr1[10] = { 0 };
	int arr2[10] = {1,1,1,1,1,1,1,1,1,1};//排名数组初始化为1,以空间换时间
	//录入数字
	for (i = 0; i < 10; i++)
	{
		scanf("%d",&arr1[i]);
	}
	for (i = 0; i < 10; i++)
	{
		int j = 0;
		for(; j < 10; j++)
		{
			if (arr1[i] < arr1[j])
				arr2[i]++;//排名数组开始变化
		}
	}
	for(i = 0; i < 10; i++)
	{
		printf("元素arr1[%d] = %d,排名为%d\\n",i,arr1[i],arr2[i]);
	}
	return 0;
}

//法二:
//快速排序
#include<stdio.h>
//往数组中输入10个数字,按照大小计算排名,数字小的排名靠后
//我们采用以空间换时间的做法
void My_bubble(int* arr1,int sz)
{
	int i,j;
	for (i = 0; i < sz - 1; i++)//趟数
	{
		for (j = 0; j < sz - 1 - i; j++)//交换的对数
		{
			if (arr1[j] > arr1[j + 1])
			{
				int tmp = arr1[j];
				arr1[j] = arr1[j + 1];
				arr1[j + 1] = tmp;
			}
		}
	}
}
int main()
{
	int i;
	int arr1[10] = { 0 };
	//录入数字
	for (i = 0; i < 10; i++)
	{
		scanf("%d",&arr1[i]);
	}
	//这边实现冒泡排序函数
	My_bubble(arr1,10);
	for(i = 0; i < 10; i++)
	{
		printf("元素arr1[%d] = %d,排名为%d\\n",i,arr1[i],i + 1);
	}
	return 0;
}
//快排会改变数组中的内容,如果我们不想改变原数组中的内容我们可以
//再开辟一个数组来存放原数组

16.打印按要求的数字图形

要求:打印下列数组矩阵
//1 2 3 4
//2 3 4 1
//3 4 1 2
//4 1 2 3
#include<stdio.h>

int main()
{
	int i,j;
	for (i = 1; i <= 4; i++)
	{
		for(j = i; j <= 4; j++)
		{
			printf("%d ",j);
		}
		for (j = 1;j <= i - 1; j++)
		{
			printf("%d ",j);
		}
		printf("\\n");
	}

	return 0;
}

17.改变方阵

#include<stdio.h>

int main(以上是关于学习C/C++必须会的一些编程题目!!!的主要内容,如果未能解决你的问题,请参考以下文章

学编程必须得会的异常处理

C++编程 之 CMake实践

python编程题目,会的帮帮忙

大数据技术扫盲,你必须会的这些点

c/c++:四则运算题目生成器3

你会的还只有初级安卓工程师的技术吗?含小米腾讯阿里