网站的运营方式,国家建设人才网站,字体设计logo,一级a做爰网站免费函数基本操作练习 主要内容#xff1a; 本任务主要练习函数的申请、定义、调用等#xff0c;主要包含以下功能#xff1a; 1#xff09;编写函数#xff0c;输入一个整数#xff0c;求各个数字之和#xff1b; 2#xff09;编写函数#xff0c;计算1#xff01;2 本任务主要练习函数的申请、定义、调用等主要包含以下功能 1编写函数输入一个整数求各个数字之和 2编写函数计算123……n! 3编写函数输出m-n范围内含有数字7但不能被7整除的所有数据 4编写函数求两个整数的最大公约数和最小公倍数 5编写函数设N是一个四位数它的9倍恰好是其反序数例如1234的反序数是4321求N值 6编写函数判断整数是否为回文数 7编写函数判断整数是否为素数 8编写函数猜一个100以内的随机整数直到猜对为止 9编写函数求1-1/31/5-1/7…的值n是自己输入 10编写函数根据输入的n求an的值其中an的计算公式是a11an 其它要求以上十个功能需要定义各自的功能函数有菜单进行良好地引导操作main函数尽量精简。程序书写规范合理设计程序的结构提高代码的复用性减少冗余。 一、程序整体架构剖析
整个程序仿若一座精心构建的大厦被合理地划分为几个关键区域
菜单区作为程序与用户交互的门户它清晰地展示了所有可供选择的功能选项如同餐厅的菜单一般让用户一目了然地知晓自己能够进行何种操作。这一区域为用户提供了便捷的指引使用户能够轻松地决定程序的执行路径。主函数区主函数恰似大厦的枢纽承担着统筹全局的重任。它简洁而高效主要负责接收用户在菜单中输入的选择并依据选择精准地调用相应的功能函数。其自身代码量精简却能有效地协调各个功能模块之间的衔接与流转。函数区这里是程序的核心功能车间各个功能函数如同技艺精湛的工匠分别专注于特定的任务处理。每个函数都具备独立的功能和明确的职责从计算整数各位数字之和到判断素数从生成特定范围内的数字序列到求解复杂的数学关系它们各司其职共同构建起程序丰富多样的功能体系。引用区通过引入必要的头文件如stdio.h用于输入输出操作stdlib.h和time.h为特定功能如随机数生成提供支持为整个程序的运行奠定了坚实的基础如同大厦的根基确保各个功能模块能够顺利地施展其能力。
二、各功能函数思路解析
一求整数各位数字之和 - sumDigits函数
首先初始化一个变量sum为 0用于累加各位数字。利用while循环只要输入的整数num大于 0就执行以下操作 取出num的个位数字通过num % 10实现。将取出的个位数字累加到sum中。然后将num缩小 10 倍即num / 10以便处理下一位数字。循环结束后sum中存储的就是整数num的各位数字之和最后将其返回。
二计算阶乘和 - factorialSum函数
初始化总和变量sum为 0以及单个阶乘变量factorial为 1。通过for循环从 1 到输入的n进行迭代 在每次循环中先计算当前数i的阶乘即factorial * i。然后将计算得到的阶乘值累加到总和sum中。循环结束后sum中即为 1! 2! 3! …… n! 的结果将其返回。
三输出特定范围内含数字 7 且不能被 7 整除的数据 - printNumbersWith7函数
外层for循环遍历从m到n的所有整数。 对于每个整数i先将其赋值给临时变量temp并初始化一个标志变量has7为 0表示尚未发现数字 7。内层while循环用于检查temp中的每一位数字 当temp大于 0 时取其个位数字判断是否为 7如果是则将has7设为 1 并跳出内层循环。然后将temp缩小 10 倍继续检查下一位数字。当内层循环结束后如果has7为 1 且i不能被 7 整除则将i输出。所有符合条件的数字输出完毕后换行结束输出。
四求最大公约数 - gcd函数
采用辗转相除法通过while循环只要b不等于 0 先将b的值暂存到temp变量中。然后计算a除以b的余数将余数赋值给b。再将之前暂存的b的值即temp赋值给a。当b为 0 时a中存储的就是a和b的最大公约数将其返回。
五求最小公倍数 - lcm函数
直接利用已求得的最大公约数gcd通过公式(a * b) / gcd(a, b)计算并返回a和b的最小公倍数。
六寻找特定四位数 N 值 - findNValue函数
通过for循环遍历从 1000 到 9999 的所有四位数。 对于每个四位数i先保存其原始值到original变量初始化反序数reversed为 0并将i赋值给临时变量temp。利用while循环生成i的反序数每次取temp的个位数字将其累加到reversed中并将reversed乘以 10 以便下一位数字的累加然后将temp缩小 10 倍。当while循环结束后判断original的 9 倍是否等于reversed如果是则返回original。如果整个循环结束都未找到符合条件的数则返回 -1。
七判断回文数 - isPalindrome函数
保存输入的整数num到original变量初始化反序数reversed为 0。通过while循环每次取num的个位数字累加到reversed中并将num缩小 10 倍。循环结束后比较original和reversed是否相等如果相等则返回 1表示是回文数否则返回 0。
八判断素数 - isPrime函数
首先判断输入的num是否小于等于 1如果是则直接返回 0因为小于等于 1 的数不是素数。然后通过for循环从 2 到num的平方根进行迭代 如果num能被i整除则说明num不是素数直接返回 0。如果整个循环结束都未找到能整除num的数则返回 1表示num是素数。
九猜数字游戏 - guessNumber函数
首先使用srand(time(NULL))以当前时间作为随机数种子然后生成一个 100 以内的随机整数num。通过do - while循环让用户不断输入猜测的整数guess 如果guess大于num则提示 “猜大了”。如果guess小于num则提示 “猜小了”。如果guess等于num则提示 “猜对了” 并结束循环。
十求特定数列和 - seriesSum函数
初始化总和变量sum为 0符号变量sign为 1。通过for循环从 1 开始每次递增 2 到输入的n 在每次循环中将sign乘以1.0 / i的结果累加到sum中。然后改变sign的符号即sign * -1。循环结束后sum中存储的就是 1 - 1/3 1/5 - 1/7 …… 的值将其返回。
十一求an的值 - Sum10函数
初始化变量a为 1.0。通过while循环只要n大于 1 根据公式a a / (1 a)更新a的值。并将n减 1。循环结束后返回a的值。
三、实现代码
#include stdio.h
#include stdlib.h
#include time.h// 函数声明
int sumDigits(int num);
double factorialSum(int n);
void printNumbersWith7(int m, int n);
int gcd(int a, int b);
int lcm(int a, int b);
int findNValue();
int isPalindrome(int num);
int isPrime(int num);
void guessNumber();
double seriesSum(int n);
float Sum10(int n);// 主函数
int main() {int choice;int m, n;int num1, num2;int nValue;int num;int nForSeries;int nForSum10;do {// 显示菜单printf(**********************\n);printf(1. 输入一个整数求各个数字之和\n);printf(2. 计算123……n!\n);printf(3. 输出m-n范围内含有数字7但不能被7整除的所有数据\n);printf(4. 求两个整数的最大公约数和最小公倍数\n);printf(5. 设N是一个四位数它的9倍恰好是其反序数求N值\n);printf(6. 判断整数是否为回文数\n);printf(7. 判断整数是否为素数\n);printf(8. 猜一个100以内的随机整数直到猜对为止\n);printf(9. 求1-1/31/5-1/7…的值n是自己输入\n);printf(10.根据输入的n求an的值\n\n);printf(0. 退出\n);printf(**********************\n);printf(请选择);scanf(%d, choice);switch (choice) {case 1:printf(请输入一个整数);scanf(%d, num);printf(该整数各个数字之和为%d\n, sumDigits(num));break;case 2:printf(请输入n的值);scanf(%d, n);printf(123……n! 的值为%.0f\n, factorialSum(n));break;case 3:printf(请输入m和n的值m n);scanf(%d %d, m, n);printNumbersWith7(m, n);break;case 4:printf(请输入两个整数);scanf(%d %d, num1, num2);printf(最大公约数为%d\n, gcd(num1, num2));printf(最小公倍数为%d\n, lcm(num1, num2));break;case 5:nValue findNValue();if (nValue ! -1) {printf(满足条件的N值为%d\n, nValue);}else {printf(未找到满足条件的N值\n);}break;case 6:printf(请输入一个整数);scanf(%d, num);if (isPalindrome(num)) {printf(%d是回文数\n, num);}else {printf(%d不是回文数\n, num);}break;case 7:printf(请输入一个整数);scanf(%d, num);if (isPrime(num)) {printf(%d是素数\n, num);}else {printf(%d不是素数\n, num);}break;case 8:guessNumber();break;case 9:printf(请输入n的值);scanf(%d, nForSeries);printf(1-1/31/5-1/7…的值n %d为%.6f\n, nForSeries, seriesSum(nForSeries));break;case 10:printf(请输入n的值);scanf(%d, nForSum10);float result Sum10(nForSum10);printf(根据输入的nSum10的值为%.6f\n, result);break;case 0:printf(谢谢使用\n);break;default:printf(输入错误请重新输入\n);}} while (choice ! 0);return 0;
}// 函数定义// 求一个整数各个数字之和
int sumDigits(int num) {int sum 0;while (num 0) {sum num % 10;num / 10;}return sum;
}// 计算123……n!
double factorialSum(int n) {double sum 0;double factorial 1;for (int i 1; i n; i) {factorial * i;sum factorial;}return sum;
}// 输出m-n范围内含有数字7但不能被7整除的所有数据
void printNumbersWith7(int m, int n) {for (int i m; i n; i) {int temp i;int has7 0;while (temp 0) {if (temp % 10 7) {has7 1;break;}temp / 10;}if (has7 i % 7 ! 0) {printf(%d , i);}}printf(\n);
}// 求两个整数的最大公约数
int gcd(int a, int b) {while (b ! 0) {int temp b;b a % b;a temp;}return a;
}// 求两个整数的最小公倍数
int lcm(int a, int b) {return (a * b) / gcd(a, b);
}// 设N是一个四位数它的9倍恰好是其反序数求N值
int findNValue() {for (int i 1000; i 9999; i) {int original i;int reversed 0;int temp i;while (temp 0) {reversed reversed * 10 temp % 10;temp / 10;}if (original * 9 reversed) {return original;}}return -1;
}// 判断整数是否为回文数
int isPalindrome(int num) {int original num;int reversed 0;while (num 0) {reversed reversed * 10 num % 10;num / 10;}return original reversed;
}// 判断整数是否为素数
int isPrime(int num) {if (num 1) {return 0;}for (int i 2; i * i num; i) {if (num % i 0) {return 0;}}return 1;
}// 猜一个100以内的随机整数直到猜对为止
void guessNumber() {int num, guess;srand(time(NULL));num rand() % 100;do {printf(请猜一个100以内的整数);scanf(%d, guess);if (guess num) {printf(猜大了\n);}else if (guess num) {printf(猜小了\n);}else {printf(猜对了\n);}} while (guess ! num);
}// 求1-1/31/5-1/7…的值n是自己输入
double seriesSum(int n) {double sum 0;int sign 1;for (int i 1; i n; i 2) {sum sign * (1.0 / i);sign * -1;}return sum;
}// 根据输入的n求an的值\n
float Sum10(int n)
{double a 1.0;while (n 1){a a / (1 a);n n - 1;}return a;
}