C语言100题练习打卡(2)

14,将一个正整数分解质因数。

例如:输入90,打印出90=2*3*3*5

#include<stdio.h>
/*分析:
* 1,如果这话质数恰巧等于(小于的时候,继续执行循环)n,
则说明分解质因数的过程已经结束,另外 打印出即可
2,但n能被k整除,则应该打印出k的之,并用n除以k的商,作为新的正整数n,
重新执行第二步
3,如果n不能被k整除,则用k+1作为k的值,重复执行第一步
*/
int main()
{int n, i;printf("请输入整数:\n");scanf_s("%d", &n);printf("%d=", n);for (i = 2; i <= n; i++){while (n % i == 0){printf("%d", i);n /= i;if (n != 1)printf("*");}}printf("\n");return 0;
}

15 学生成绩评价

 利用条件运算符的嵌套来完成此题:

学习成绩>=90分的同学用A来表示

60~89分之间的用B来表示,60分以下的用C来表示

方法一:

#include<stdio.h>
int main()
{int score;char grade;printf("请输入分数:\n");scanf_s("%d", &score);if (score >= 90){grade = 'A';}else if(score>60){grade = 'B';}else{grade = 'C';}printf("%c", grade);return 0;
}

方法二:

#include<stdio.h>
int main()
{int score;char grade;printf("请输入分数:\n");scanf_s("%d", &score);grade = ((score >= 90) ? 'A' : (score >= 60) ? 'B' : 'C');printf("%c", grade);return 0;
}

16 求最大公约数或最小公倍数

#include<stdio.h>
/*分析:
1,最小公倍数=输入的两个数之积除以他们的最大公倍数
2,求最大公约数用辗转相除法
证明:设c是a和b的最大公约数,记为c=gcb(a,b),a>=b,
令r=a % b
设a=kc,b=jc,则k,j互素,否则c不是最大公约数
据上,r=a-mb=kc-mjc=(k-mj)c,可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾,
由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证
2)算法描述:
第一步:a ÷ b,令r为所得余数(0≤r 
第二步:互换:置 a<-b,b<-r,并返回第一步。
*/
int main()
{int a,b,t,r,n;printf("请输入两个数字:\n");scanf_s("%d %d", &a, &b);if (a < b){t = b;b = a;a = t;}r = a % b; n = a * b;while (r != 0){a = b;b = r;r = a % b;}printf("这两个数的最大公约数是%d,最小公倍数是%d\n", b, n / b);return 0;
}

17,统计字符个数

输入一行字符,分别统计其中的英文字母,空格,数字和其他字符的个数

利用while语句 

#include<stdio.h>
int main()
{char c;int letters = 0,spaces = 0,digitals = 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'){digitals++;}else if (c == ' '){spaces++;}else{others++;}}printf("字母=%d,数字=%d,空格=%d,其他=%d\n", letters, digitals, spaces, others);return 0;
}

17 多位数求和

求s=a+aa+aaa+aaaa+aaaaa的值,其中a是一个数字。

例如2+22+222+2222+22222(此时共有五个数和相加)

#include<stdio.h>
int main()
{int s = 0,a, n, t;printf("请输入 a 和n的值:\n");scanf_s("%d %d", &a, &n);t = a;while (n > 0){s += t;a = a * 10;t += a;n--;}printf("a+aa+aaa+aaaa+aaaaa=%d\n", s);return 0;
}

 

18 计算球反弹的高度

题目:一球从100米高度自由落下,每次落地后反跳弹回高度的一半;

再落下,求它第十次落地时共经过多少米?

第十次反弹多高?

#include<stdio.h>
int main()
{double x = 100;//小球初始高度double S = 100;//小球第一次掉落路程for (int i = 0; i < 10; i++){x = x / 2;//每次反弹的高度S += 2*x;//每次反弹路程是掉落的两倍+初始时候的100米}printf("小球在第十次反弹的高度:%lf\n",x);printf("小球十次落地,共经历%lf米\n", S);return 0;
}

19 猴子摘桃问题

猴子吃桃问题:

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

方法一:

#include<stdio.h>/*程序分析:
题目:采取逆向思维的方法,从后往前推:
(1)设x1为前一天桃子数,x2为第二天桃子树:
x2=x1/2-1;x1=(x2+1)*2
x2=x1/2-1;x2=(x2+1)*2(2)从第十天可以类推到第一天,循环*/
int main()
{int x=1;//设最后一天只剩1个桃子for (int i = 1; i < 10; i++)//从第九天开始倒数,倒数到第一天{x = (x + 1) * 2;}printf("%d", x);return 0;
}

方法二:

int main()
{int day, x1 = 0, x2;day = 9;x2 = 1;while (day > 0){x1 = (x2 + 1) * 2;x2 = x1;day--;}printf("桃子总数为:%d", x2);return 0;
}

19 打印菱形图案

方法1:

#include<stdio.h>
//前四行一个规律,后三行一个规律
int main()
{int i, j, k;for (int i = 0; i <= 3; i++)//表示打印前四行{for (j = 0; j <= 2 - i; j++){printf(" ");}for (k = 0; k <= 2 * i; k++){printf("*");}printf("\n");}for (int i = 0; i <= 2; i++){for (j = 0; j <= i; j++){printf(" ");}for (k = 0; k <= 4-2 * i; k++){printf("*");}printf("\n");}return 0;
}

方法二:

#include<stdio.h>
//前四行一个规律,后三行一个规律
int main()
{int i, j, n=3;for (int i = 1; i <= n; i++)//表示打印前四行{for (j = n - i; j >=1; j--){printf(" ");}for (j = 1; j <= 2 * i-1; j++){printf("*");}printf("\n");}for (int i = n - 1; i >=1; i--){for (j = n - i; j >= 1; j--){printf(" ");}for (j = 1; j <= 2 * i - 1; j++){printf("*");}printf("\n");}return 0;
}

 20 求分数序列之和

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

#include<stdio.h>
int main()
{int i, t;float sum = 0;float a = 2, b=1;//设a为分子,b为分母for (int i = 1; i <= 20; i++){sum = sum + a / b;t = a;//将分子赋值给ta = a + b;//将新的分母变成下一个数的分子b = t;//将新的分子变成下一个数的分母}printf("sum = %9.6f\n", sum);return 0;
}

 21 求1~20阶乘的和

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

方法一:

#include<stdio.h>
int main()
{int i;long double sum=0, mix=1;for (i = 1; i <= 20; i++){mix = mix * i;sum = sum + mix;}printf("%lf\n", sum);return 0;
}

21 用递归的方法求5!

#include<stdio.h>
int Fact(int n)
{if (n == 0)return 1;elsereturn n * Fact(n - 1);
}int main()
{int n = 5;long double ret = Fact(n);printf("%lf", ret);return 0;
}

 22 利用递归将字符反转

利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来

首先我们先正序打印:

#include<stdio.h>void Print(int n)
{if (n > 9){Print(n / 10);}printf("%d ", n % 10);
}int main()
{int m = 0;scanf_s("%d", &m);Print(m);return 0;
}

然后我们来看看反转打印:

#include <stdio.h>// 定义递归函数用于反向输出字符串
void reversePrint(const char* str) {// 检查字符串是否为空if (*str != '\0') {// 先递归调用函数处理字符串的剩余部分reversePrint(str + 1);// 然后输出当前字符printf("%c", *str);}
}int main() {const char* myString = "Hello, World!";printf("Original String: %s\n", myString);printf("Reversed String: ");reversePrint(myString);printf("\n");return 0;
}

23 用递归函数计算第五个人的年龄

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

#include<stdio.h>
int age(int n)
{int c;if (n == 1)c = 10;elsec = age(n - 1) + 2;return c;
}int main()
{printf("%d\n", age(5));return 0;
}

24 求整数的位数和反转

给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字,

#include<stdio.h>
int main()
{long a, b, c, d, e, x;printf("请输入五位数:\n");scanf_s("%ld", &x);a = x / 10000;//万位b = x % 10000 / 1000;//千位c = x % 1000 / 100;//百位d = x % 100 / 10;//十位e = x % 10;//个位if (a != 0){printf("逆序打印5位数为:%ld %ld %ld %ld %ld \n", e, d, c, b, a);}else if (b != 0){printf("逆序打印4位数为:%ld %ld %ld %ld\n", e, d, c, b);}else if (c != 0){printf("逆序打印3位数为:%ld %ld %ld \n", e, d, c);}else if (d != 0){printf("逆序打印2位数为:%ld %ld \n", e, d);}else if (e != 0){printf("逆序打印1位数为:%ld  \n", e);}return 0;
}

 

 25 回文数

一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

#include<stdio.h>
int main()
{long int a, b, c, d, e, x;printf("请输入五位数:\n");scanf_s("%ld", &x);a = x / 10000;//万位b = x % 10000 / 1000;//千位c = x % 1000 / 100;//百位d = x % 100 / 10;//十位e = x % 10;//个位if (a == e&& b == d){printf("该数是回文数!");}else{printf("该数不是回文数!");}return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/624831.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

会议室预约小程序开源版开发

会议室预约小程序开源版开发 支持设置免费预约和付费预约、积分兑换商城、积分签到等 会议室类目&#xff0c;提供多种类型和设施的会议室选择&#xff0c;满足不同会议需求。 预约日历&#xff0c;展示会议室预约情况&#xff0c;方便用户选择空闲时段。 预约记录&#xff0…

如何使用Git-Secrets防止将敏感信息意外上传至Git库

关于Git-Secrets Git-secrets是一款功能强大的开发安全工具&#xff0c;该工具可以防止开发人员意外将密码和其他敏感信息上传到Git库中。 Git-secrets首先会扫描提交的代码和说明&#xff0c;当与用户预先配置的正则表达式模式匹配时&#xff0c;便会阻止此次提交。该工具的优…

20240416,对象初始化和清理,对象模型和THIS指针

哈哈哈乌龟越狱了 目录 2.5 深拷贝&浅拷贝 2.6 初始化列表 2.7 类对象作为类成员 2.8 静态成员 2.9 成员变量和成员函数分开存储 2.10 THIS指针的用途 2.11 空指针访问成员函数 2.12 COSNT修饰成员函数 2.5 深拷贝&浅拷贝 浅拷贝&#xff1a;简单的赋值拷贝…

什么是邮箱分身?如何快速创建30个邮箱分身?

很多人只知道微信、QQ等应用分身&#xff0c;对于邮箱分身并不是很了解。邮箱分身和他们的不同点在于我们直接在原有邮箱的基础上创立新的虚拟邮箱地址&#xff0c;并且密码一致&#xff0c;在我们需要运营多个社交媒体账号或者管理多个项目的情况下&#xff0c;邮箱分身是一个…

快速切换node.js版本方法(使用开源项目方便切换版本)

1、安装nvm nvm下载地址&#xff1a;https://github.com/coreybutler/nvm-windows/ 2、输入nvm -v 3、查看可以安装的node.js版本 4、安装你想要的版本 5、查看是否安装成功&#xff08;*表示目前你使用的版本&#xff09; 6、切换版本 7、查询当前使用的版本

【Git】常用命令速查

目录 一、创建版本 二、修改和提交 三、查看提交历史 四、撤销 五、分支与标签 六、合并与衍合 七、远程操作 一、创建版本 命令简要说明注意事项git clone <url>克隆远程版本库 二、修改和提交 命令简要说明注意事项 三、查看提交历史 命令简要说明注意事项 …

【行为型模式】观察者模式

一、观察者模式概述​ 软件系统其实有点类似观察者模式&#xff0c;目的&#xff1a;一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变&#xff0c;他们之间将产生联动。 观察者模式属于对象行为型&#xff1a; 1.定义了对象之间一种一对多的依赖关系&#xff…

static+单例模式+类的复合继承

汇编语言 汇编语言是最靠谱的验证“编程语言相关知识点”正确性的方式 汇编语言与机器语言一一对应&#xff0c;每一条机器语言都有与之对应的汇编指令 机器语言是计算机使用的语言&#xff0c;它是一串二进制数字 汇编语言可以通过汇编得到机器语言机器语言可以通过反汇编得到…

视频汇聚/安防视频监控云平台EasyCVR云端录像播放与下载的接口调用方法

视频汇聚/安防视频监控云平台EasyCVR支持多协议接入、可分发多格式的视频流&#xff0c;平台支持高清视频的接入、管理、共享&#xff0c;支持7*24小时不间断监控。视频监控管理平台EasyCVR可提供实时远程视频监控、录像、回放与存储、告警、语音对讲、云台控制、平台级联、磁盘…

03.卸载MySQL

卸载MySQL 1.Windows卸载MySQL8 停止服务 用命令停止或者在服务中停止都可以 net stop mysql&#xff08;服务名字可以去服务里面看一下&#xff09;控制面板卸载MySQL 卸载MySQL8.0的程序可以和其他桌面应用程序一样直接在控制面板选择卸载程序&#xff0c;并在程序列表中…

当全连接队列满了,tcp客户端收到服务端RST信令的模拟

当tcp服务端全连接队列满了后&#xff0c;并且服务端也不accept取出连接&#xff0c;客户端再次连接时&#xff0c;服务端能够看到SYN_RECV状态。但是客户端看到的是ESTABLISHED状态&#xff0c;所以客户端自认为成功建立了连接&#xff0c;故其写往服务端写数据&#xff0c;发…

hadoop编程之工资序列化排序

数据集展示 7369SMITHCLERK79021980/12/17800207499ALLENSALESMAN76981981/2/201600300307521WARDSALESMAN76981981/2/221250500307566JONESMANAGER78391981/4/22975207654MARTINSALESMAN76981981/9/2812501400307698BLAKEMANAGER78391981/5/12850307782CLARKMANAGER78391981/…