C语言海量题型题库(下篇)


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);
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值