前言
正所谓不动手等于白学,所以在有了前面几章的基础后,开始了一些简单的程序设计,本来觉得这种代码没必要保存,直到下午用了个很蠢的方法踩了个坑,觉得还是有必要记录一下自己写的程序,便于回顾也可以当做一种以后可以调用的函数来用。(真实原因:不想保存在本地占目录)
编程题1 输出五位数的各位数数字及逆序输出
#include <stdio.h>
int main(){
int number;
int figure;
int output[5];
scanf("%d",&number);
if(number>=10000){
figure=5;
}else if(number>=1000 && number<10000){
figure=4;
}else if(number>=100 && number<1000){
figure=3;
}else if(number>=10||number<100){
figure=2;
}else if(number>=0||number<10){
figure=1;
}
printf("%d\n",figure);
output[4]=number%10;
output[0]=(number-(number%10000))/10000;
output[1]=(number-output[0]*10000-(number%1000))/1000;
output[2]=(number-output[0]*10000-output[1]*1000-(number%100))/100;
output[3]=(number-output[0]*10000-output[1]*1000-output[2]*100-(number%10))/10;
for(int i=0;i<=3;i++){
printf("%d ",output[i]);
}
printf("%d\n",output[4]);
for(int i=4;i>=0;i--){
printf("%d",output[i]);
}
}
最大公约数最小公倍数
#include<stdio.h>
int main(){
int m,n,output,k;
scanf("%d %d",&m,&n);
if(m>n){
output=m%n;
while(output!=0){
k=output;
output=m%k;
if (output==0){
break;
}
}
output=k*(m/k)*(n/k);
}
if(m<n){
output=n%m;
while(output!=0){
k=output;
output=n%k;
if (output==0){
break;
}
}
output=k*(m/k)*(n/k);
}else
{
k=m;
output=m;
}
printf("%d ",k);
printf("%d",output);
}
核心是找出最大的公因数求法(取余至为0),以及知道两个数字m,n它们的最小公倍数H可以通过MN的乘积除以最大公因数K的平方求得,即H=MN/K2。
我这里采用的是while循环,可能递归会更好点。
有规律的数列求和
#include<stdio.h>
int main(){
int n;
int k=2;
int l=1;
float sum, number;
scanf("%d",&n);
for(float i=1;i<=n;i++){
number=(float)k/l;
sum+=number;
k+=l;
l=k-l;
}
printf("%0.2f",sum);
}
找出数列表达式就好求了,这里要小心,分母的值不要给错。
自由下落的距离计算
#include<stdio.h>
int main(){
int M,N;
float SL,L;
scanf("%d %d",&M,&N);
SL=(float)M/2;
L=SL;
for(int i=1;i<N;i++){
SL/=2;
L+=(float)2*SL;
}
L=2*L;
printf("%0.2f %0.2f",SL,L);
}
比较难的地方是建模。
筛选N以内的素数
#include<stdio.h>
int main(){
int n;
int j=0,k=0;
scanf("%d",&n);
int a[n];
a[0]=2;
for(int i=3;i<n;i++){
while(i%a[j]!=0){
if(j==k){
a[j+1]=i;
k++;
}
j++;
}
j=0;
}
for(int i=0;i<=k;i++){
printf("%d\n",a[i]);
}
}
思路是用数组a【】存储素数,用J记录每次用来除以当前数 I 的当前除数数组下标,用 k 来记录数组长度