学习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++必须会的一些编程题目!!!的主要内容,如果未能解决你的问题,请参考以下文章