大一期末C语言编程题题库解析

编程题

1.求1!+2!+3!+...+20!的和.

#include<stdio.h>

void main()

{

  int s=0,x=1;   //s第一次参与计算需要赋初值为0,x则需赋初值为1;

  for (int i = 1; i <=20; i++)

  {

   x=x*i;    //从1开始累乘,到i结束

   s=s+x;    //s累加x;

  }

  printf("sum=%d",s);

  getchar();

}

2.求一个有序数列 2/1,3/2,5/3,8/5,13/8,21/13 前20项的和


image
#include<stdio.h>

void main()

{

  int i,n=20,a=2,b=1,s=0,t;

  for ( i = 1; i <=n; i++)

  {

    s=s+a/b;   //开始计算累加a/b,第一个值是2/1;

    t=a;     //a把自身的值赋给t

    a=a+b;    //新a的值为a+b,赋给自身,刷新a的值

    b=t;     //t是a的旧值,现在赋给b

  }

  printf("sum=%d",s);

  getchar();

}

3.有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

image

#include<stdio.h>
int age(int x)
{
    if(x==1)return 10;
        x= age(x-1)+2;
        return x;
}
void main()
{

    printf("sum=%d",age(5));
    getchar();
}

4.一个班级有25名学生,请从键盘随机输入这25名学生的某一门功课的成绩,请编程:
(一)找出该班级学生此门功课的最高分和最低分,并记录和最高分和最低分成绩的学生的编号;
(二)将班级学生此门功课的成绩按照从高到低进行排序,并输出


image
#include<stdio.h>
/*98 97 96 86 85 20 83 87 84 
83 74 99 100 30 89 54 87 89
 98 74 89 88 87 45 10*/
(测试数据)
void main()
{
     int a[25],i,j,t,max,min,max_xuhao,min_xuhao;
    printf("输入25个成绩\n");
    for (i = 0; i < 25; i++)
    {
        scanf("%d",&a[i]);
        getchar();//实现输入清空;
    }
 /************************以上代码实现输入*****************************************************/
    max=a[0];               //此步是关键,把第一个值赋给max;
    max_xuhao=0;
    for ( i = 0; i <25 ; i++)
    {
        if(a[i]>max)        //开始从i=0判断每一个元素是否大于max
        {
            max=a[i];       //如果a[i]大于max,那他就成了max
            max_xuhao=i;    //记录最大值的序号
        }
    }
    printf("max=%d,序号=%d\n",max,max_xuhao);
    min=a[0];
    min_xuhao=0;
 /**********************以上代码实现找到最大值及其序号******************************************/    
    for ( i = 0; i <25 ; i++)
    {
        if(a[i]<min)        //同上
        {
            min=a[i];       //同上
            min_xuhao=i;    //同上
        }

    }
    printf("min=%d,序号=%d\n",min,min_xuhao);
 /**********************以上代码实现找到最小值及其序号******************************************/    

    for ( i = 0; i < 25; i++)
    {
        for ( int j= 0; j<24-i; j++)            //外层循环见bct4.png(图)
        {
            if (a[j]<a[j+1])                    //内层循环见bct4.png(图)
            {
                t=a[j];a[j]=a[j+1];a[j+1]=t;    //判断并交换见bct4.png(图)
            }
            
        }
        
    }
    for(i=0;i<25;i++)
        printf("%d ",a[i]);
 /**********************以上代码实现从大到小输出(冒泡排序法)******************************************/    

    getchar();
}

5.使用指针交换两个变量的值。


image
#include<stdio.h>
void main()
{
    int a=4,b=5,*pa,*pb;    //定义变量a,b和指针变量pa,pb;
    pa=&a;pb=&b;            //把a的地址赋给pa,b的地址赋给pb,注意取地址符号&                  
    int t=*pa;              //
    *pa=*pb;                //
    *pb=t;                  //以上代码实现交换
    printf("a为:%d\tb为:%d",a,b);
    getchar();
}

6.使用指针对三个数进行从小到大的排列


image
#include<stdio.h>
void swap(int *m,int *n)    //定义swap函数,形参为指针变量m,n
{
    if(*m>*n)               //
    {
        int t=*m;           //
        *m=*n;              //
        *n=t;               //
    }
 /*****以上实现交换*****************************************/
}
void main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    swap(&a,&b);            //a,b比较并交换
    swap(&b,&c);            //b,c比较并交换
    swap(&a,&c);            //c,a比较并交换
 /****以上调用三次swap函数实现a,b,c的互相比较和交换**********/
 /****注意传入的是地址*************************************/
    printf("%d %d %d",a,b,c);
    getchar();
}

7.使用指针将某银行一周的钱收纳汇总

#include<stdio.h>
/*
78943.1 2156.54 4654.4 4687.45 78965.4 1354.5 4656.8
*/
//以上为测试数据
void main()
{
    float a[7];
    printf("依次输入七天的银行钱的收纳情况");
    for (int i = 0; i < 7; i++)
    {
        scanf("%f",&a[i]);
    }
     /**以上实现输入7个数据************************/
    float sum=0,*p=a;
     /**sum需要参与首次计算,初始化为0,
      同时定义一个指针变量p,值为a的首地址**********/
    for (int i = 0; i < 7; i++)
    {
        sum+=*p;    //累加指针p所指元素的值
        p++;        //指针右移一位
    }
    printf("sum=%.2f",sum);
    getchar();
}

8.使用指针实现冒泡排序

image
#include<stdio.h>
void main()
{
    int a[10]={6,1,8,9,4,3,2,7,5,0},*p;
    p=a;
    int i,j,t;
    for(i=0;i<10;i++)
    {
        for(j=0;j<10-1-i;j++)
        {
            if(*(p+j)>*(p+j+1))
            {   
                t=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=t;
            }
        }
    }
    for (int i = 0; i < 10; i++)
    {
        printf("%d\t",*(p+i));
    }
    getchar();
}

9.找出二维数组中每行最大的数值进行求和

//8,4,3,-8,-4,-6,-1,-2,2,4,6,9
#include<stdio.h>
#define N 4                     //定义常数N,值为4
void max(int (*a)[N],int m)     //定义max函数   指针数组的名字可以看成是 指向指针的 指针                   
{
    int value,i,j,sum=0;
    for(i=0;i<m;i++)            
    {
        value=*(*(a+i));        //  双解指针相当于a[i]+i       放每一行最大数     
        for(j=0;j<N;j++)
        {
            if(*(*(a+i)+j)>value) //
            {                       
                value=*(*(a+i)+j); 
            }
        }                   
        printf("第%d行:最大数是:%d\n",i,value);
        sum=sum+value;
    }
    printf("\n");
    printf("每行中最大数相加之和是:%d\n",sum);
}
void main()
{
    int a[3][N],i,j;
    int (*p)[N];
    p=&a[0];
    printf("please input:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<N;j++)
        {
            scanf("%d",&a[i][j]);
            getchar();
        }
    }
    max(p,3);                       
    getchar();                              
}

10.求新入学班级新生的总人数

#include<stdio.h>
void main()
{  
    int i=0,n,sum=0;
    int a[20];                  //最大班级数设置为20
    
    printf("请输入班级的个数:");
    scanf("%d",&n);
    for ( i = 0; i <n ; i++)
    {
        printf("请输入第%d个班级的人数:",i+1);  //依次输入各班级人数
        scanf("%d",&a[i]);
        sum=sum+a[i];           //累加a[i];
    }
    printf("sum=%d\n",sum);
    getchar();
}

11.有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。编写一个函数input,用来输入一个学生的数据记录。

编写一个函数print,打印一个学生的数据记录。在主函数调用这两个函数,读取N条记录输入,再按要求输出。N<100。

/*
2106040235 刘金鹏 98 95 97
2106040237 刘金莲 97 94 95
*///以上为测试数据
#include<stdio.h>
#include<stdlib.h>
struct STUDENT              //定义一个STUDENT型的结构体,包含以下类型数据
{
    int xuehao;
    char name[20];
    float sa;
    float sb;
    float sc;
}stu[100];                  //定义一个名为stu的STUDENT型的数组,最大可容纳100个元素

void input (int n)
{
    for (int i = 0; i <n ; i++)
    {
        printf("请输入第%d名学生的学号,姓名,a科目分数,b科目分数,c科目分数:\n",i+1);
        scanf("%d %s %f %f %f",&stu[i].xuehao,&stu[i].name,&stu[i].sa,&stu[i].sb,&stu[i].sc);
        //以上为依次输入各数据
        getchar();//输入占位
    }
    
}
void print(int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("学号:%d 姓名:%s a科目:%.2f b科目:%.2f c科目:%.2f \n",stu[i].xuehao,stu[i].name,stu[i].sa,stu[i].sb,stu[i].sc);
        //以上为依次输出各数据
    }
    
}
void main()
{
    int n;
    printf("请输入需要输入的学生数据个数:");
    scanf("%d",&n);
    input(n);       //输入各数据函数
    print(n);       //输出各数据函数
    getchar();
}

12.设计一个圣诞树代码(滑稽)


#include <stdio.h>
 
int main(void)
{
    int i, j, x;
    int n = 0;
    // a是间隔填充物,这里用空白填充;b是雪花,这里用*表示;c是圣诞树的填充,用'0'表示 
    char a = ' ', b = '*', c = '0';
    // 第一部分,输出树叶
    for (x = 0; x < 3; x++) {
        // 想让圣诞树变高可以将4这个值调高 
        for (i = 0; i < x + 6; i++) {
            for (j = 0; j < 80; j++) {
                if ((j <= 25 + n) && (j >= 25 - n)) {
                    printf("%c", c);
                } else if ((j % (n + 6) == n) && ( (j > 25 + n) || (j < 25 - n))) {
                    printf("%c", b);
                } else {
                    printf("%c", a);
                }  
            }
            printf("\n");
            n = n + 2;
        }
        n = n - 2 * (x + 2);
    }
    // 第二部分,输出树干,高度为5 
    for (i = 0; i < 5; i++) {
        for (j = 0; j < 80; j++) {
            if (j >= 22 && j <= 28) {
                printf("%c", c);
            } else if ((j % (n + 6) == n) && ((j > 25 + n) || (j < 25 - n))) {
                printf("%c", b);
            } else {
                printf("%c", a);
            }   
        }
        n = n + 2;
        printf("\n");
    }
    // 第三部分,输出地面,高度为3 
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 80; j++) {
            if (j % 2 == 0) {
                printf("%c", b);
            } else {
                printf("%c", a);
            }
                
        }
        printf("\n");
    }
    getchar ();
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容