今天也要加油,不能因为一时的疲惫忘掉脚下的路,当心中有了方向,就会忘掉一切,努力的做好,今天我们来继续刷题
C 语言经典100例 | 菜鸟教程 (runoob.com)
使用方法:
1.先看题目自己想思路,自己做
2.自己做不出来看解题思路,再次尝试
3.实在不会,看解题思路和代码一起理解
题目4:输入某年某月某日,判断这一天是这一年的第几天?
解题思路:判断某一天,我们应该考虑是否为闰年,如果是闰年,三月份以后的天数会比非闰年多一天,因此我们就可以写代码啦,菜鸟教程给的代码是 switch 大家可以尝试写一下
#include <stdio.h>
int main()
{
int year = 0, month = 0, day = 0, sum = 0;
scanf("%d %d %d",&year,&month,&day);
//非闰年的天数
if (month == 1) sum = day;
else if (month == 2) sum = day + 31;
else if (month == 3) sum = day + 59;
else if (month == 4) sum = day + 90;
else if (month == 5) sum = day + 120;
else if (month == 6) sum = day + 151;
else if (month == 7) sum = day + 181;
else if (month == 8) sum = day + 212;
else if (month == 9) sum = day + 243;
else if (month == 10) sum = day + 273;
else if (month == 11) sum = day + 304;
else if (month == 12) sum = day + 334;
//判断闰年
if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
{
if (month >= 3)
{
printf("%d",sum+1);
}
else
{
printf("%d",sum);
}
}
else
{
printf("%d",sum);
}
return 0;
}
题目5:输入三个整数x,y,z,请把这三个数由小到大输出。
解题思路:这道题菜鸟教程的思路很巧妙,所以建议大家记住这个思路就好,就是对三个整数两两比较,让小的数字永远在 x 中,前两个 if 就做到了,在第三个判断是把小的数字放到 y 中,这样就可以解决这道题了
#include <stdio.h>
int main()
{
int x,y,z,t;
scanf("%d %d %d",&x,&y,&z);
if (x>y)
{
t=x;x=y;y=t;
}
if(x>z)
{
t=z;z=x;x=t;
}
if(y>z)
{
t=y;y=z;z=t;
}
printf("%d %d %d\n",x,y,z);
return 0;
}
题目6:用*号输出字母C的图案。
解题思路:面向结果,用 printf 输出就好,记得换行符号
#include <stdio.h>
int main()
{
printf("用 * 号输出字母 C!\n");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
}
题目7 : 根据char类型去看ASCII码,这道题也是输出的题,因为简单,所以这里让大家手熟悉一下ASCII码,记住大小写字母的ASCII值,后续练习可能会用到,下面给大家在百度找到一个ASCII码表的图片,可以参考一下
题目8:输出9*9乘法表。
解题思路:典型的循环嵌套,第一个 for 循环判断行,第二个 for 循环判断列,注意换行就行
PS:有个细节就是关于左对齐和右对齐“%-3d”的负号表示左对齐,“%3d”表示右对齐,数字代表对齐几格
#include <stdio.h>
int main() {
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
printf("%d*%d=%-3d", i, j, i*j);
}
printf("\n");
}
return 0;
}
题目9:要求输出国际象棋棋盘 ,1代表白格子,0代表黑格子
解题思路:棋盘的样子如下图(在网上找的图片),我们可以发现,奇数行奇数列为白格子,偶数行偶数列为黑格子,根据这个我们就可以写代码啦
#include<stdio.h>
int main()
{
for (int i = 1; i <= 8; i++)
{
for (int j = 1; j <= 8; j++)
{
if ((i % 2 == 0 && j % 2 == 0) || (i % 2 == 1 && j % 2 == 1))
{
printf("%d ",1);
}
else
{
printf("%d ",0);
}
}
printf("\n");
}
return 0;
}
题目10:用数字一打印10层上三角形(如图)。
解题思路: 也是典型的循环嵌套,第一个 for 循环判断行,第二个 for 循环判断列,可以和九九乘法表配套练习(你也可以尝试倒三角,沙漏等)
#include<stdio.h>
int main()
{
int i,j;
for(i=1;i<11;i++)
{
for(j=1;j<=i;j++)
printf("1 ");
printf("\n");
}
return 0;
}
题目11:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
解题思路:当我们罗列出前几个数字,我们发现这就是一个斐波那契数列问题,一般这种问题我们会用递归函数代码会简洁一些(但是也分题,有的题循环就方便)
斐波那契数列就是前两个数字的和等于后一个数字,前两个数字为1,下面代码函数就是斐波那契数列的递归函数写法
#include<stdio.h>
long int fib(int n)
{
if (n == 1) return 1;
if (n == 2) return 2;
return fib(n - 1) + fib(n - 2);
}
int main()
{
for (int i = 1; i <= 39;i++)
{
long int sum = fib(i);
printf("%ld\n",sum);
}
return 0;
}
题目12:判断 m 到 n 之间的素数,m,n 均为整数
解题思路:这是一个统计素数的题目,素数是除了它本身和1都不能被整除的数字叫素数
#include <stdio.h>
int main()
{
int m = 0, n = 0, i = 0;
scanf("%d %d",&m,&n);
for (i = m;i<=n;i++)
{
int j = 2;
for (j = 2;j < i;j++)
{
if (i%j == 0)
break;
}
if (j>=i)
{
printf("%d\n",i);
}
}
if (m == 1)
{
printf("%d\n",i);
}
return 0;
}
题目13:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
解题思路:先遍历100~999,然后拆分各个位,在三次方,就做出来了,这里就直接给菜鸟教程的答案了,后续大家可以试试n位数字的水仙花数
#include<stdio.h>
int main()
{
int i,x,y,z;
for(i=100;i<1000;i++)
{
x=i%10;
y=i/10%10;
z=i/100%10;
if(i==(x*x*x+y*y*y+z*z*z))
printf("%d\n",i);
}
return 0;
}
题目14:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
解题思路:一个数除以比它小的数字,一直除下去,最后一次也是它的因数,这里也可以达到将一个正整数分解质因数,只不过因数的顺序是不是从小到大的,但是代码会简洁
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d",&n);
printf("%d=",n);
for (int i = 2; i < n; i++)
{
if (n % i == 0)
{
printf("%d*",i);
n = n/i;
}
//printf("*");
}
printf("%d",n);
return 0;
}
今天刷了十道题,都比较基础,希望大家好好理解,多多练习,希望和大家一起努力,一起加油呀!