大一期末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結(jié)束

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

  }

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

  getchar();

}

2.求一個有序數(shù)列 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的舊值,現(xiàn)在賦給b

  }

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

  getchar();

}

3.有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數(shù),他說比第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名學(xué)生,請從鍵盤隨機輸入這25名學(xué)生的某一門功課的成績,請編程:
(一)找出該班級學(xué)生此門功課的最高分和最低分,并記錄和最高分和最低分成績的學(xué)生的編號;
(二)將班級學(xué)生此門功課的成績按照從高到低進行排序,并輸出


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*/
(測試數(shù)據(jù))
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();//實現(xiàn)輸入清空;
    }
 /************************以上代碼實現(xiàn)輸入*****************************************************/
    max=a[0];               //此步是關(guān)鍵,把第一個值賦給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;
 /**********************以上代碼實現(xiàn)找到最大值及其序號******************************************/    
    for ( i = 0; i <25 ; i++)
    {
        if(a[i]<min)        //同上
        {
            min=a[i];       //同上
            min_xuhao=i;    //同上
        }

    }
    printf("min=%d,序號=%d\n",min,min_xuhao);
 /**********************以上代碼實現(xiàn)找到最小值及其序號******************************************/    

    for ( i = 0; i < 25; i++)
    {
        for ( int j= 0; j<24-i; j++)            //外層循環(huán)見bct4.png(圖)
        {
            if (a[j]<a[j+1])                    //內(nèi)層循環(huán)見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]);
 /**********************以上代碼實現(xiàn)從大到小輸出(冒泡排序法)******************************************/    

    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;                  //以上代碼實現(xiàn)交換
    printf("a為:%d\tb為:%d",a,b);
    getchar();
}

6.使用指針對三個數(shù)進行從小到大的排列


image
#include<stdio.h>
void swap(int *m,int *n)    //定義swap函數(shù),形參為指針變量m,n
{
    if(*m>*n)               //
    {
        int t=*m;           //
        *m=*n;              //
        *n=t;               //
    }
 /*****以上實現(xiàn)交換*****************************************/
}
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比較并交換
 /****以上調(diào)用三次swap函數(shù)實現(xiàn)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
*/
//以上為測試數(shù)據(jù)
void main()
{
    float a[7];
    printf("依次輸入七天的銀行錢的收納情況");
    for (int i = 0; i < 7; i++)
    {
        scanf("%f",&a[i]);
    }
     /**以上實現(xiàn)輸入7個數(shù)據(jù)************************/
    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.使用指針實現(xiàn)冒泡排序

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.找出二維數(shù)組中每行最大的數(shù)值進行求和

//8,4,3,-8,-4,-6,-1,-2,2,4,6,9
#include<stdio.h>
#define N 4                     //定義常數(shù)N,值為4
void max(int (*a)[N],int m)     //定義max函數(shù)   指針數(shù)組的名字可以看成是 指向指針的 指針                   
{
    int value,i,j,sum=0;
    for(i=0;i<m;i++)            
    {
        value=*(*(a+i));        //  雙解指針相當于a[i]+i       放每一行最大數(shù)     
        for(j=0;j<N;j++)
        {
            if(*(*(a+i)+j)>value) //
            {                       
                value=*(*(a+i)+j); 
            }
        }                   
        printf("第%d行:最大數(shù)是:%d\n",i,value);
        sum=sum+value;
    }
    printf("\n");
    printf("每行中最大數(shù)相加之和是:%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.求新入學(xué)班級新生的總?cè)藬?shù)

#include<stdio.h>
void main()
{  
    int i=0,n,sum=0;
    int a[20];                  //最大班級數(shù)設(shè)置為20
    
    printf("請輸入班級的個數(shù):");
    scanf("%d",&n);
    for ( i = 0; i <n ; i++)
    {
        printf("請輸入第%d個班級的人數(shù):",i+1);  //依次輸入各班級人數(shù)
        scanf("%d",&a[i]);
        sum=sum+a[i];           //累加a[i];
    }
    printf("sum=%d\n",sum);
    getchar();
}

11.有N個學(xué)生的數(shù)據(jù)記錄,每個記錄包括學(xué)號、姓名、三科成績。編寫一個函數(shù)input,用來輸入一個學(xué)生的數(shù)據(jù)記錄。

編寫一個函數(shù)print,打印一個學(xué)生的數(shù)據(jù)記錄。在主函數(shù)調(diào)用這兩個函數(shù),讀取N條記錄輸入,再按要求輸出。N<100。

/*
2106040235 劉金鵬 98 95 97
2106040237 劉金蓮 97 94 95
*///以上為測試數(shù)據(jù)
#include<stdio.h>
#include<stdlib.h>
struct STUDENT              //定義一個STUDENT型的結(jié)構(gòu)體,包含以下類型數(shù)據(jù)
{
    int xuehao;
    char name[20];
    float sa;
    float sb;
    float sc;
}stu[100];                  //定義一個名為stu的STUDENT型的數(shù)組,最大可容納100個元素

void input (int n)
{
    for (int i = 0; i <n ; i++)
    {
        printf("請輸入第%d名學(xué)生的學(xué)號,姓名,a科目分數(shù),b科目分數(shù),c科目分數(shù):\n",i+1);
        scanf("%d %s %f %f %f",&stu[i].xuehao,&stu[i].name,&stu[i].sa,&stu[i].sb,&stu[i].sc);
        //以上為依次輸入各數(shù)據(jù)
        getchar();//輸入占位
    }
    
}
void print(int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("學(xué)號:%d 姓名:%s a科目:%.2f b科目:%.2f c科目:%.2f \n",stu[i].xuehao,stu[i].name,stu[i].sa,stu[i].sb,stu[i].sc);
        //以上為依次輸出各數(shù)據(jù)
    }
    
}
void main()
{
    int n;
    printf("請輸入需要輸入的學(xué)生數(shù)據(jù)個數(shù):");
    scanf("%d",&n);
    input(n);       //輸入各數(shù)據(jù)函數(shù)
    print(n);       //輸出各數(shù)據(jù)函數(shù)
    getchar();
}

12.設(shè)計一個圣誕樹代碼(滑稽)


#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這個值調(diào)高 
        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;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容