当前位置: 首页 > news >正文

C语言程序设计(二)

四.找素数

      素数:除了1和它本身不再有其他因数的自然数。换句话说:一个大于1的自然数 ,如果只能被1和它本身整除,那就是素数(质数)。

在打印中遇到的问题就是,知道怎么写却总是运行不起来。主要有这两个问题:

1.每判断一个数是否是素数后都需要对flag进行初始化,否则flag一直都是1。

2.打印素数需要在外层循环里面,每判断一次就打印一次(是素数则打印,不是则不打印)。

int main()
{int i = 0;int j = 0;int flag = 0;//声明一个flagfor (i = 100; i <= 200; i++){flag = 0;//每次判断素数后需要初始化for (j = 2; j < i; j++){if (i % j == 0){flag = 1;//用1代表不是素数的自然数break;} }if (flag == 0){printf("%d是素数\n", i);//0则代表的是素数}}return 0;
}

 五.最小公倍数以及最大公约数

最大公约数:两个或多个整数共有的最大的那个正整数约数。例:(12,18)->36

       基本办法(穷举法):找两个数小的那个,然后依次减一,其中判断i是否既能被m整除又能被n整除,满足则最大公约数就i,接着跳出循环。

int main()
{int m = 0;int n = 0;int i = 0;scanf("%d %d", &m, &n);int min = m > n ? n : m;for (i = min; i >=1 ; i--){if (m % i == 0 && n % i == 0){printf("%d是最大公约数\n", i);break;}}return 0;
}

       辗转相除法 :输入两个数m和n,m对n求余。m%n如果等于0,则最大公约数为n;若不等于0,将原先的n赋值给m,求得的余数赋值给n,再进行求余,循环终止条件则是求余为0。

int main()
{int m = 0;int n = 0;int temp = 0;int t = 0;scanf("%d %d", &m, &n);while (m % n)//循环终止条件{temp = m % n;m = n;n = temp;}printf("%d是最大公约数\n", n);return 0;
}
最小公倍数:两个或多个整数的公倍数里最小的那一个。例:(12,18)->6

       通过计算两个或多个数之积,再除以它们的最大公约数(辗转相除法计算),求最小公倍数有很多种方法(也可以通过找两个数或多个数最大的,判断是否可以除尽其它数,不能则++直至找到能除尽的那个数)。

int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);int max = a * b;int k = 0;while (a % b)//辗转相除法{k = a % b;a = b;b = k;}printf("%d\n", max / b);return 0;
}

六.字符串逆序

 题目意思是最后打印的数组呈现出来的就是倒序的样子,而非倒序打印。要倒序打印数组,需要将第一个字符与最后一个字符交换(交换时需要第三方),第二个字符与倒数第二个字符交换,两端一直向中间汇聚,直到字符剩一个或两个。

       从第一次函数来说吧!先是'w'与'!'交换需要中间变量temp,改变数组得用上指针,指针找'!'需要知道字符串的长度*(string+len-1),将'!'赋值给*string,再将'\0'赋值给最后一个字符(这里赋值的原因是为了调用下一次函数时,计算剩下字符串的长度(除'w''和!'),因为字符串结束标志是'\0'。假使不赋值'\0',计算长度时会多加'!',等到下次赋值时就是将'!'给'e',这样就得不到想要的倒叙。)。递归重点来啦:不断重复以上操作,直至所剩的字符长度小于2,假设为1的话最后这个字符不需要交换且没有字符与之交换,这就成为这个题目递归的限制条件。最后再将temp的字符给*(string+len-1)。这样就好啦!


int Strlen(char *str)
{int count = 0;while (*str!='\0'){count++;str++;}return count;
}void reverse_string(char* string)
{int len = Strlen(string);char temp = *string;//交换头和尾字符*string = *(string + len - 1);*(string + len - 1) = '\0';//为了下一次递归头和尾相呼应if (Strlen(string + 1) >= 2)    //结束递归的条件向两端汇聚,当只剩一个字符则不需要交换{reverse_string(string + 1);//调用不需要指针*}*(string + len - 1) = temp;
}int main()
{char arr[] = "welcome to my world!!!";//int sz = sizeof(arr) / sizeof(arr[0]);//int len = strlen(arr);//printf("%d\n", sz);//23  写这个是为了测试sizeof和strlen计算字符串个数的区别//printf("%d\n", len);//22reverse_string(arr);printf("%s\n", arr);return 0;
}

这里再讲一个小知识:sizeof计算字符时会计算'\0',而strlen函数不计算它。

http://www.lryc.cn/news/409836.html

相关文章:

  • Oracle对数据库行和数据库的监控
  • 论文阅读:面向自动驾驶场景的多目标点云检测算法
  • Vite + Vue3 + TS项目配置前置路由守卫
  • 设计模式-备忘录
  • openEuler安装docker,加速镜像拉取
  • angular入门基础教程(七)系统路由
  • Unity Canvas动画:UI元素的动态展示
  • apache.commons.pool2 使用指南
  • 【Python面试题收录】Python编程基础练习题②(数据类型+文件操作+时间操作)
  • typescript 定义类型
  • 基于Java+SpringBoot+Vue的的课程作业管理系统
  • 分布式日志分析系统--ELK
  • Linux初学基本命令
  • 如何优化PyTorch以加快模型训练速度?
  • 用最简单的方法对大数据进行处理 vs spark(不需要安装大数据处理工具)
  • 非线性校正算法在红外测温中的应用
  • python----线程、进程、协程的区别及多线程详解
  • 将 magma example 改写成 cusolver example eqrf
  • 微信小程序教程007:数据绑定
  • Git -- git stash 暂存
  • 基于YOLO的植物病害识别系统:从训练到部署全攻略
  • 数据库开发:MySQL基础(二)
  • 实现物理数据库迁移到云上
  • [Spring] MyBatis操作数据库(进阶)
  • 【Websim.ai】一句话让AI帮你生成一个网页
  • 云计算实训16——关于web,http协议,https协议,apache,nginx的学习与认知
  • 2024年必备技能:小红书笔记评论自动采集,零基础也能学会的方法
  • 【Gitlab】SSH配置和克隆仓库
  • [Day 35] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • Vue 3 中使用 inMap.js 实现蜂窝热力图的可视化