请注意任何代码的实现方式都不止一种,所以这里的题目的答案只是提供一种思路,也就是编程思维,希望通过这些题目能帮助到您!
第一题(3个数排列输出)
要求用程序实现输入三个整数,并且将这三个整数从大到小输出
例:输入:1 3 2
输出:3 2 1
答案参考
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//交换函数
void Swap(int* x,int* y)
{
int num = *x;
*x = *y;
*y = num;
}
int main()
{
int a = 0, b = 0, c = 0;
scanf("%d %d %d",&a,&b,&c);
//调整a和b的值
if (a < b)
{
Swap(&a,&b);//将a和b的值交换
}
if (a < c)
{
Swap(&a,&c);
}
if (b < c)
{
Swap(&b,&c);
}
printf("%d %d %d", a, b, c);
return 0;
}
第二题(100内的3个倍数)
写一个代码打印1-100之间的所有3的倍数的数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int count = 0;
for (int i = 0; i <=100; i+=3)
{
if (i % 3 == 0)
{
count++;
printf("%d ",i);
}
}
printf("\n%d",count);
return 0;
}
第三题(最大公约数)
假设提供了两个数,用程序求这两个数的最大公约数,并输出
例:24 18
最大公约数为:6
代码实现:
方法一(暴力求解):
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//这种方法是暴力求解,最直接的方式
int main()
{
int a = 0, b = 0;
static int max = 0;
scanf("%d %d",&a,&b);
for (int i = 1; i <= a; i++)
{
if (a % i == 0)
{
if (b % i == 0)
{
if (max < i)
{
max = i;
}
}
}
}
printf("%d",max);
return 0;
}
方法二(暴力求解)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0, b = 0;
scanf("%d %d",&a,&b);
int i = 0;
for (i=(a < b ? a : b);i>0; i--)//从两个数中较小的数开始,递减,找出两个数的公约数
{
if ((a % i == 0) && (b % i == 0))
{
printf("%d", i);
break;
}
}
return 0;
}
注意上面两种方法都是暴力求解,需要运算多次(不够高效)
方法三(辗转相除法):这个是数学的概念,感兴趣可以去百度一下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0, b = 0;
int c = 0;
scanf("%d %d",&a,&b);
//求最大公约数
while (c = a % b)
{
a = b;
b = c;
}
printf("%d\n",b);
return 0;
}
第四题(判断闰年)
写一个函数判断一年是不是闰年,打印1000~2000年之间的闰年
闰年判断的规则:
1、能被4整除,并且不能被100整除是闰年
2、能被400整除是闰年
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//是闰年返回1
//不是闰年放回0
int is_leap_year(int y)
{
if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
return 1;
else
return 0;
}
int main()
{
int cout = 0;
int year = 0;
for (year = 1000; year <= 2000; year++)
{
//判断year是否为闰年
if (is_leap_year(year))
{
printf("%d ", year);
cout++;
}
}
printf("\n%d", cout);
return 0;
}
第五题(判断素数)
打印100-200之间的素数,素数是只能被1和它本身整除的数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
//是素数返回1
//不是素数返回0
int is_prime(int n)
{
int j = 0;
for (j = 2; j <= sqrt(n); j++)
{
if (n%j==0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
int cout = 0;
for (i = 101; i <= 200; i += 2)
{
if (is_prime(i))
{
cout++;
printf("%d ", i);
}
}
printf("素数的个数为:%d\n", cout);
return 0;
}
第六题(是否含数字9)
编写程序数一下1到100的所有整数中出现多少个数字9
1~100的整数中包含9的数字有:
9 19 29 39 49 59 69 79 89 99
90 91 92 93 94 95 96 97 98 99
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int cout = 0;
for (int i =1;i<=100;i++)
{
//判断个位是不是9
if (i % 10 == 9)
cout++;
//判断十位是不是9
if (i / 10 == 9)
cout++;
}
printf("%d",cout);
return 0;
}
第七题(交替加减)
用程序计算1/1-1/2+1/3-1/4+1/5……+1/99-1/100
方法一(判断分母的奇偶性决定加减):
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
float sum = 0.0f;
for (int i = 1; i <= 100; i++)
{
if (i % 2 != 0)//i为奇数相加
{
sum = sum + 1.0 / i;
}
if (i % 2 == 0)//i为偶数相减
{
sum = sum - 1.0 / i;
}
}
printf("%f",sum);
return 0;
}
方法二(用标志位实现加减交替)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
float sum = 0.0f;
int flag = 1;
for (int i = 1; i <= 100; i++)
{
sum = sum + flag * (1.0 / i);
flag = -flag;
}
printf("%f", sum);
return 0;
}
第八题(十个数求最大值)
用程序求给定的十个整数中的最大值
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
//准备十个数
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//找出最大值
int max = arr[0];
for (int i = 1; i <= 10; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("%d",max);
return 0;
}
第九题(输入十个数求其最大值)
要求输出十个整数,求出这十个数之间的最大值并输出
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int arr[10] = {0};
//输出十个整数
for (int i = 0; i < 10; i++)
{
scanf("%d",&arr[i]);
}
//找最大值
int max = arr[0];
for (int j = 0; j < 10; j++)
{
if (arr[j] > max)
max = arr[j];
}
printf("%d\n",max);
return 0;
}
第十题(传址调用)
实现一个函数来交换两个整数的内容
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void Swap(int* x, int* y)
{
int m = *x;
*x = *y;
*y = m;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d",&a,&b);
printf("交换前,a = %d,b = %d",a,b);
Swap(&a,&b);
printf("交换后, a = %d,b =%d",a,b);
return 0;
}
第十一题(九九乘法口诀表)
要求在屏幕上输出9*9乘法口诀表
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <=i; j++)
{
printf("%d x %d = %2d ",j,i,i*j);//%2d两位整数右对齐 %-2d两位左对齐
}
printf("\n");
}
return 0;
}
第十二题(九九乘法口诀表的变形)
在屏幕上输出乘法口诀表,口诀表的行数和列数自己决定
如输入9就打印9*9乘法口诀表,输入12就打印12*12乘法口诀表
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int h = 0;
//int l = 0;
printf("请输入要打印乘法口诀表的行数和列数->");
scanf("%d", &h);
for (int i = 1; i <= h; i++)
{
for (int j = 1; j <=i; j++)
{
printf("%2dx%2d = %2d ",j,i,i*j);//%2d两位整数右对齐 %-2d两位左对齐
}
printf("\n");
}
return 0;
}
第十三题(二分查找)
用程序实现在一个有序数组中查找具体的某个数字。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;//最左的元素的下标
int right = sz - 1;//最右的元素的下标
while (left<=right)
{
int mid = (left + right) / 2;//二分
//int mid = left +(right -left)/2; 数学模型自行理解
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,下标是%d\n",mid);
break;
}
}
if (left > right)
printf("找不到了!");
return 0;
}
第十四题(猜数字游戏)
猜数字游戏:让电脑产生一个随机数(1-100)我们来猜这个数字(输出),猜的过程要反馈,猜大了或者猜小了,直到猜到了就结束
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("***************************\n");
printf("********* 1.玩一把 ********\n");
printf("********* 2.退出 ********\n");
printf("***************************\n");
}
//time()函数,返回整数型,时间戳
//0-32767
void game()
{
int num = 0;
//生成随机数
//0-99 (%取模100得到的余数)
int ret = rand()%100 + 1;
//rand()生成随机数的函数,返回的是整型,使用rand函数前要用srand设置生成起点(在mian函数里只需要设置一篇)
//printf("%d\n",ret);
//2.猜数字
while (1)
{
printf("请猜数字: >");
scanf("%d", &num);
if (num < ret)
{
printf("猜小了\n");
}
else if (num > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了!\n");
break;
}
}
}
//空指针
//int *p = NULL;//相当于初始化了个空指针,就是赋给指针变量p一个地址编号为0的指针
//int a =0;
int main()
{
srand((unsigned int)time(NULL));//给time传入一个NULL就是暂时不需要time的参数
int input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d",&input);
switch (input)
{
case 1:
game();//猜数字游戏的逻辑
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,重新选择!\n");
break;
}
} while (input);
return 0;
}