文章目录
1.数组的循环右移
(1,2,3,4,5变为5,1,2,3,4)
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5},i,end;
end=a[4];//end功能存放尾元素
for(i=3;i>=0;i--)
{
a[i+1]=a[i];
}
a[0]=end;//不能放在循环体中,它要等上面循环完,再进行赋值
for(i=0;i<5;i++)
printf("%d\n",a[i]);
}
2.编写程序实现输入十进制数,输出对应的二进制数
(除2求余)
#include <stdio.h>
int main()
{
int a[100],i=0,n;
scanf("%d",&n);
while(n!=0)//实现不断求余
{
a[i]=n % 2;
n=n/2;
i++;
}
for(i=i-1;i>=0;i--)//实现由低位向高位输出
printf("%d",a[i]);
}
3.在1,2,3,4四个数字中,选出两个数字组成一个2位数,输出所有组合
(数字不能重复)
#include <stdio.h>
int main()
{
int i,j;
//循环嵌套使用
for(i=1;i<5;i++)//与内循环每项进行比较
for(j=1;j<5;j++)
if(i!=j)//实现不重复输出
printf("%d%d\n",i,j);
return 0;
}
4.编程输出九九乘法口诀表
#include <stdio.h>
int main(void)
{
int i,j;
//嵌套循环
for(i=1;i<10;i++)
{
for(j=1;j<=i;j++)
{
printf("%d*%d=%d\t",j,i,i*j);//j在前,输出第几行数,i输出第几列数
}
printf("\n");
}
return 0;
}
5.已知斐波那契数列:1 1 2 3 5 8 13 21 34 55…编程输出斐波那契数列的前20个数
(从第三个数开始,每个数等于前两个数字之和)
#include <stdio.h>
//循环方法写
int main(void)
{
int a[20]={1,1};//数组前两个数初始化,其他元素默认为0
int i;
for(i=2;i<20;i++)
{
a[i]=a[i-1]+a[i-2];//前两个数字之和为第三个数,将每次之和存入a[i]中,
//a[i]随循环不断变化
}
for(i=0;i<20;i++)
printf("%d ",a[i]);
return 0;
}
#include <stdio.h>
//函数的思想写
int fun(int n)
{
if(n==1||n==2)return 1;//因为前两个数特殊
else return fun(n-1)+fun(n-2);//递归调用
}
int main(void)
{
int i;
for(i=1;i<=20;i++)//因为输出前20个,i<=20
printf("%d\n",fun(i));
}
6.编写程序输出1000以内全部的完数
(完数:所有的真因子(就是除了自身以外的约数)的和恰好等于它本身,例如:6的约数1,2,3(真因字不包括本身6)1+2+3=6,所以6是完数)
//判断是否为完数
int main(void) {
int i,num,sum=0;
scanf("%d",&num);
for(i=1;i<num;i++)
{
if(num%i==0)
sum=sum+i;//是约数,就相加赋给sum
}
if(sum==num)
printf("%d是完数",num);
else
printf("%d不是完数",num);
return 0;
}
//输出1000以内完数
#include <stdio.h>
int main() {
int i,j,sum;
for(i=1;i<=1000;i++)//外循环控制让1000以内每个数进行循环
{
sum=0;//切记让sum初始化,否则不管是否是完数,都会一直累加
for(j=1;j<i;j++)//内循环控制让小于外循环数的数从1开始求余判断是否是约数
if(i%j==0) sum=sum+j;//约数累加
if(i==sum)//如果相加的约束等于本身,是完数
printf("%d\n",i);
}
return 0;
}
7.计算1+22+23+24……+210
#include <stdio.h>
//普通方法
int main()
{
int i,sum=0,p=1;//此时p存放2^0^
for(i=0;i<11;i++)
{
sum+=p;//累加
p=p*2;//p循环递增变化2^1^ 2^2^ 2^3^ 2^4^……2^10^,控制求几的次方
}
printf("和%d",sum);
return 0;
}
//函数形式
int fun(int n)
{
int i,p=1;//例如sum求和初值为1,p求乘初始为1
for(i=0;i<n;i++)//切记,i从0 开始,不然最后一个次方就没有加上,除非更改条件为(i=1;i<n+1;i++)
p=p*2;//反复调用p,求2的i次方,控制求几的次方
return p;//p的值就是fun()函数值
}
int main()
{
int i,sum=0;
for(i=0;i<11;i++)//控制最多求到2的几次放
{
sum+=fun(i);//fun(i)的作用就是求2的i次方
}
printf("和%d",sum);
return 0;
}
7.用递归法计算n!
#include <stdio.h>
int fun(int n)
{
long b;
if(n==0||n==1)
b=1;
else if(n<0)
printf("输入错误");
else
b=(n*fun(n-1));//递归调用,实现n!
return b;
}
int main()
{
int i;
long a;
scanf("%d",&i);
a=fun(i);
printf("%d",a);
}
8.求三个数中最大值和最小值的差值
方法一
#include <stdio.h>
int main()
{
int i,j,k,max,mix,num;
int a,c;
scanf("%d%d%d",&i,&j,&k);
if(i>j)
{
max=i;
mix=j;
}
else
{
max=j;
mix=i;
}
if(max<k)
max=k;
else if(mix>k)
mix=k;
num=max-mix;
printf("差值为%d",num);
return 0;
}
方法2
采用函数之间调用方式计算,更加简单清晰
#include <stdio.h>
int max(int x,int y,int z)
{
int r;
r=x>y? x:y;//x>y 返回x,否则返回y
return(r>z? r:z);//将上面最大值和第三者比较,返回最大值
}
int mix(int x,int y,int z)
{
int r;
r=x<y? x:y;
return(r<z? r:z);
}
int def(int x,int y,int z)
{
return max(x,y,z)-mix(x,y,z);
}
int main()
{
int a,b,c,d;
scanf("%d%d%d",&a,&b,&c);
d=def(a,b,c);
printf("差值为%d",d);
}
9.求二维数组中的最大元素值
#include <stdio.h>
int max_s(int arr[3][4])
{
int i,j,max;
max=arr[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
{
if(arr[i][j]>max)
max=arr[i][j];
return max;
}
}
int main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
printf("最大值是%d",max_s(a));
}
10.有三人五门 ,求每个学生的平均成绩和所有人的总成绩
(可定义一个二维数组,用于存放三人五门的成绩,定义一个一维数组存放各科平均成绩,定义s存放总成绩,定义aver存放平均值)
#include <stdio.h>
int main()
{
int a[3]={0,0,0};
int b[3][5];
int i,j,s=0;
float aver;
float avg;
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
scanf("%d%d%d",&b[i][j]);
s=s+b[i][j];
}
}
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
a[i]+=b[i][j];
avg=a[i]/5;//每个人的平均成绩
printf("%d个人的平均成绩%d\n",a[i],avg);
}
}
aver=s/15.0;//切记一旦有求平均值的地方,整型一定变成浮点型,负责求出的是整型
printf("总成绩是%d\n",s);
printf("总平均成绩是%.2f\n",aver);
}