开启我的第一个博客
我是一个准大二新生,我在这个暑假开启了嵌入式的学习,我将通过记录我的学习历程,不断记录自己,保持习惯,希望大家多多指导!
我的c语言学习是跟着浙大翁恺老师进行的,所以题源均为翁恺老师的课程,但是代码是自己写的,或许输出结果相符,但是大多数地方有逻辑混乱的地方。
以下是这几天学习的代码,我将分为题目,思路和最终呈现输出以及自己的一些感悟,我的代码比较粗糙,非常想要得到各位大神指点:
1.输出前五十个素数
有确定的数量,通过设置一个计数量cnt来确定循环结束,利用中间量isprime表达素数,每个循环重置isprime,
素数从2开始
#include<stdio.h>intmain(){intx=2;intcnt=0;while(cnt<50)//计数法,输出前五十个符合条件的数{intn=2;intisprime=1;//中间量,避免混乱,默认为素数,减少判断for(n=2;n<x;n++)//确定素数{if(x%n==0)isprime=0;}if(isprime==1){printf("%d ",x);cnt++;}x++;}printf("\n");printf("%d",cnt);//确定数量return0;}2正整数分割
输入一个正整数,输出它单独的每位数
例如:输入354,输出3 5 4
思考过程:先想办法得到每位数,取余得到最后一个数字,然后通过除十去掉最后一个数字,但是这样printf出来是他的逆反数,所以先提前把这个正整数变为他的逆反数,再输出:
#include<stdio.h>intmain(){intx=354;//scanf("%d",&x);csdn演示,就直接使用一个具体值了inty=x;//记录原始值inttime=1,sum=0;while(y>9){time*=10;y/=10;}do//第一个循环得到逆反数sum{inta=x%10;sum+=a*time;x/=10;time/=10;}while(time>=1);do{intn=sum%10;sum/=10;printf("%d ",n);}while(sum>0);return0;}3求两值的最大公约数
学习了两种方法,基础的思维模式是利用嵌套循环,同时满足可以被两值整除:
#include<stdio.h>intmain(){inta=12,b=18;//scanf("%d %d",&a,&b);intmin;if(a>b)min=b;elsemin=a;inti=1,ret;for(i=1;i<=min;i++){if(a%i==0){if(b%i==0){ret=i;}}}printf("%d是%d和%d的最大公约数",ret,a,b);return0;}方法二,通过中间量和公式
第一步判断b是否等于零,不等于时设置t,t为a除b的余数
第二步使a等于b,b等于t
回到第一步判断,当b等于零时停止,此时的a就是最大公约数。
#include<stdio.h>intmain(){inta=12,b=18;//scanf("%d %d",&a,&b);intt;do{t=a%b;a=b;b=t;}while(b!=0);printf("最大公约数是%d",a);return0;}