一起刷C语言菜鸟教程100题(15-26含解析)

news/2024/10/21 3:13:32/

五一过的好快,五天假期说没就没,因为一些事情耽搁到现在,不过还是要继续学习的,之后就照常更新,先说一下,这个100题是菜鸟教程里面的,但是有一些题,我加入了自己的理解,甚至对有一些题进行了改编,目的是让大家更顺手一点,链接放在下面,需要的小伙伴可以点进去看看,话不多说,开始刷题。


C 语言经典100例 | 菜鸟教程 (runoob.com)

使用方法:

1.先看题目自己想思路,自己做

2.自己做不出来看解题思路,再次尝试

3.实在不会,看解题思路和代码一起理解


 题目15:   利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示

解题思路:这个题要用到三目操作符,具体表现形式如下:

表达式?如果表达式成立就输出这里: 如果表达式不成立就输出这里

#include<stdio.h>
int main()
{int score;char grade;scanf("%d",&score);grade=(score>=90)?'A':((score>=60)?'B':'C');//这里的意思是先判断score的大小,如果大于等于90就输出A,如果小于九十就进行第二个判断//(注意这里的score已经小于90了)如果大于等于60就输出B//如果比60小就输出Cprintf("%c\n",grade);return 0;
}

题目16:   输入两个正整数m和n,求其最大公约数和最小公倍数 

解题思路:这个题想必大家一定很熟悉,两个正整数其中小的数字先从它本身减一开始找因数,如果那个因数也能被大数整除,那么这个因数就是它们的最大公因数,求出来最大公因数后,公倍数等于   m * n / 最大公因数   就算出来结果了,菜鸟教程给的辗转相除法,耗时小,锻炼思维,大家可以理解理解 

#include <stdio.h>
int main()
{int m = 0, n = 0, i = 0;scanf("%d %d",&m,&n);if (m > n){int t = m;m = n;n = t;}for (i = 2; i < m; i--){if(m % i == 0 && n % i == 0){printf("最大公因数为%d\n",i);break;}}printf("最小公倍数为%d\n",m*n/i);return 0;
} 

题目17 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数

解题思路:这个题及其经典,所以直接把菜鸟教程的代码搬过来了,其中while后面的括号里之所以这么写是因为你输入了一段字符最后回车也算,所以是不等于 '\n' ,之后因为c是char类型,所以直接去计数就好。

#include<stdio.h>
int main()
{char c;int letters=0,spaces=0,digits=0,others=0;printf("请输入一些字母:\n");while((c=getchar())!='\n'){if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))letters++;else if(c>='0'&&c<='9')digits++;else if(c==' ')spaces++;elseothers++;}printf("字母=%d,数字=%d,空格=%d,其他=%d\n",letters,digits,spaces,others);return 0;
}

题目18:输入两个数字a,b,求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字,b代表几个数字相加。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 

解题思路:这个题每次循环都让 (a * 10)+ a  ,然后再把每次结果相加就得出答案,要保证每次个位加的都保持最开始的 a 

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

题目19:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。 

解题思路:仅仅只是找到还是很好写代码的,里面判断能不能被整除,之后能被整除就相加,最后如果等于因子之和就输出,最后别忘了循环过后下轮开始 sum 为 0

#include <stdio.h>
int main()
{int sum = 0;for (int i = 1; i <= 1000; i++){for (int j = 1; j < i; j++){if (i % j == 0){sum = sum + j;}}if (sum == i){printf("%d\n",i);}sum = 0;}return 0;
}

题目20:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 

解题思路:这道题也很基础,题目怎么说,我们怎么写,这里给大家菜鸟教程的代码

#include<stdio.h>
int main()
{float h,s;h=s=100;h=h/2; //第一次反弹高度for(int i=2;i<=10;i++){s=s+2*h;h=h/2;}printf("第10次落地时,共经过%f米,第10次反弹高%f米\n",s,h);return 0;
}

题目21:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 

解题思路:这个题我们可以用递归来做,递归结束条件为1,每次都减一,这样就能做出来这道题了

#include <stdio.h>
int p(int day)
{if (day == 1)return 1;elsereturn 2*(p(day - 1) + 1);
}
int main()
{int day = 10;int peach = p(day);printf("%d\n",peach);return 0;
}

题目22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 

解题思路:这个题我们可以用字符来比较,为了防止队友自己比起来,,防止重复比赛,所以有了第一个和第二个判断语句,第三个判断语句是题目中的那句话,我们就可以做出来了

#include <stdio.h>
int main()
{char i,j,k;for(i = 'x'; i <= 'z'; i++){for(j = 'x'; j <= 'z'; j++){if(i != j){for(k = 'x'; k <= 'z'; k++){if(i != k && j != k) {if(i != 'x' && k != 'x'&& k != 'z') a说他不和x比,c说他不和x,z比{printf("顺序为:a--%c\tb--%c\tc--%c\n",i,j,k);}}}}}}return 0;
}

题目23:输入一个数字,打印出n边菱形,如输入4,输出如下图案

   *********
****************

 解题思路:这类画图题一般都是找规律的题目,我们可以把菱形拆解成上三角和下三角,我们发现上三角形每一行 * 前面的空格都是逐渐递减,而 * 是逐渐递增的,下三角形的空格逐渐递增, * 逐渐递减,就可以完成代码了

#include <stdio.h>
int main()
{int n = 0;scanf("%d",&n);int i = 0, j = 0, k = 0;for(i = 1; i <= n ; i++){for (j = (n - i); j >= 1; j--){printf(" ");}for (k = 1; k <= (2 * i) - 1; k++){printf("*");}printf("\n");}for(i = 1; i <= (n - 1) ; i++){for (j = 1; j <= i; j++){printf(" ");}for (k =(2 * (n - i)) - 1; k >= 1; k--){printf("*");}printf("\n");}return 0;
}

题目24:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和

解题思路:大家熬过上个题,这个题是不是就简单了许多,只需要把分子和分母的规律各自找出来再除一下就行

#include <stdio.h>
int main()
{double m = 0, s = 0, sum = 0;m = 1.0;s = 2.0;for (int i = 1; i <= 20; i++){sum = sum + s / m;double t = s;s = m + s;m = t;}printf("%f",sum);return 0;
}

题目25:求1+2!+3!+...+20!的和

解题思路:这个题不知道为什么我用DEV C++ 5.11显示出来为0.000000,可能版本有问题???这个疑问有没有大佬来解决啊<~.~>

题目26:利用递归方法求5!

解题思路:熟悉递归用法 ,大家可以先尝试一下,和之前单独讲递归函数汉诺塔问题那里提到过,链接给大家放在这里,递归函数进阶版汉诺塔http://t.csdnimg.cn/baGuR

#include <stdio.h>
int f(int i)
{int fact = 0;if (i == 0)return 1;elsefact = i * f(i - 1);return fact;
}
int main()
{int i = 5;int fact = f(i);printf("%d\n",fact); return 0;
}

今天内容就到这里,希望大家可以勤加练习 

今天依旧积累几句话激励自己和大家

理想与现实差了十万八千里

我鞭长莫及
却也马不停蹄


http://www.ppmy.cn/news/1457857.html

相关文章

11.偏向锁原理及其实战

文章目录 偏向锁原理及其实战1.偏向锁原理2.偏向锁案例代码演示2.1.偏向锁案例代码2.2.1.无锁情况下状态2.1.2.偏向锁状态2.1.3.释放锁后的状态 2.2.偏向锁的膨胀和撤销2.2.1.偏向锁撤销的条件2.2.2.偏向锁的撤销 2.2.3.偏向锁的膨胀 2.3.全局安全点原理和偏向锁撤销性能问题2.…

C语言——文件描述符、系统调用操作文件

文件描述符 在Unix-like操作系统中&#xff0c;文件描述符&#xff08;file descriptor&#xff09;是一个用于标识打开文件或I/O设备的整数值。它是对底层文件系统的抽象&#xff0c;用于在应用程序和操作系统之间传递文件信息。 文件描述符是一个非负整数&#xff0c;通常是…

【FX110】2024外汇市场中交易量最大的货币对是哪个?

作为最大、最流动的金融市场之一&#xff0c;外汇市场每天的交易量高达几万亿美元&#xff0c;涉及到数百种货币。不同货币对的交易活跃程度并不一样&#xff0c;交易者需要根据货币对各自的特点去进行交易。 全年外汇市场中涉及美元的外汇交易超过50%&#xff01; 实际上&…

优化电脑空间清理电脑占用磁盘空间垃圾

1. 清理磁盘 右下角放大镜&#xff0c;搜索 此电脑 点击要清理的磁盘 &#xff0c;比如点击C盘&#xff0c;右键属性&#xff0c;常规选项卡&#xff0c;点击清理磁盘&#xff0c; 和点击清理系统文件 1.1 优化磁盘 右下角放大镜&#xff0c;搜索 此电脑 点击要清理的磁盘 &…

VS2022Qt6通过ODBC连接MySQL

QSqlDatabase是Qt框架中用于管理数据库连接的类。它提供了一种在Qt应用程序中连接和操作数据库的方式。通过QSqlDatabase&#xff0c;可以连接到各种类型的数据库&#xff0c;并执行查询、插入、更新和删除等操作&#xff0c;Qt通过ODBC连接数据库的第一步就是初始化QSqlDataba…

LabelImg下载及目标检测数据标注

为什么这一部分内容这么少会单独拎出来呢&#xff0c;因为后期会接着介绍YOLOv8中的其他任务&#xff0c;会使用其他软件进行标注&#xff0c;所以就单独区分开来每一个任务的标注方式了。 这一部分就介绍目标检测任务的标注&#xff0c;数据集是我从COCO2017Val中抽出来两类&a…

vue3 element-plus表单form验证规则设置的require:true无效

必填项为空校验&#xff0c;valid第一次为true&#xff0c;再点值为false 引入FormInstance &#xff0c;校验代码改为以下&#xff1a; import { ElMessage, FormInstance } from element-plus const ruleFormRef ref<FormInstance>()const submitForm async (formEl:…

如何快速优雅的免费申请和搭建属于自己的服务器

今天来讲一下如何快速优雅的搭建属于自己的服务器&#xff0c;我们以阿里云的云服务器为例&#xff0c;新用户一般是有三个月使用期限。 首先我们进入官网&#xff0c;选择云服务器ecs 链接直达&#xff1a;https://cn.aliyun.com 打开网页后&#xff0c;往下滑&#xff0c;然…