2024年C语言考前冲刺题

第一题

题目:

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:请编写代码实现简易计算器功能,注意除数为0,则输出:Error: Division by zero,输入错误的运算符则输出:Error: Invalid operator,要求使用switch.....case....语句完成

 输入输出如下所示:

Enter first number: 12

Enter operator (+, -, *, /): *

Enter second number: 12

Result: 144.00

-----------------------------------------------------------------------

注意:请勿改动程序中的其他部分。

---------------------------------------------------------------------*/

#include <stdio.h>

int main() {

    double num1, num2;

    char operator;

    double result;

    printf("Enter first number: ");

    scanf("%lf", &num1);

    printf("Enter operator (+, -, *, /): ");

    scanf(" %c", &operator);

    printf("Enter second number: ");

    scanf("%lf", &num2);

/**********Program**********/






/**********  End  **********/

    printf("Result: %.2f\n", result);
    return 0;

}

答案:

switch(operator)

    {

         case '+':

             result=num1+num2;

             break;

         case '-':

             result=num1-num2;

             break;

         case '*':

             result=num1*num2;

             break;

         case '/':

             if(num2!=0)

                  result=num1/num2;

             else

             {

                  printf("Error:Division by zero\n");

                  return 1;

             }

             break;

         default:

             printf("Error:Invalid operator\n");

             return 1;

    }

第二题

题目:

 

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:题目:在此程序中,编一个函数double fun (double h ),该函数的功能是:使变量h中的值保留两位小数,并对第三位进行四舍五入(规定h中的值为正数)。

例如,若h值为1234.567,则函数返回1234.570000;若h值为1234.564,则函数返回1234.5600000

------------------------------------------------------------------------

注意:请勿改动程序中的其他内容。

----------------------------------------------------------------------*/

#include <stdio.h>

double fun (double h )

{

  long t;

  /**********Program**********/










/**********  End  **********/

}

main( )

{   double  a;

    printf ("Enter  a:  ");

         scanf ("%lf", &a );

    printf ( "The original data is :   " );

    printf ( "%f \n\n", a);

    printf ( "The result :  %f\n", fun(a));

   

}

答案:

t=(h*1000+5)/10;

return (double)t/100;

第三题

题目

 

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:定义一个函数求序列1,1,1/2,1/3,1/5,1/8,1/13,1/21,1/34,1/55各项平方的和,

      并输出结果,结果保留两位小数




      程序运行如下所示:




-----------------------------------------------------------------------

注意:请勿改动程序中的其他部分。

---------------------------------------------------------------------*/

#include <stdio.h>

#include <math.h>










double fibonacci(int n) {

         double a = 1, b = 1;

         double temp;

         int i;

    if (n <= 0) return 1;

    if (n == 1) return 1;

   

    for ( i = 2; i <= n; ++i) {

         temp = a;

        a += b;

        b = temp;

    }

    return a;

}

double my_round(double x) { 

    return (x >= 0.0) ? (double)((int)(x + 0.5)) : -(double)((int)(-x + 0.5)); 

} 




double sumOfSquares(int n) {

    double sum = 0;

         double fib;

         int i;

/**********Program**********/

        




/**********  End  **********/

   

    return my_round(sum * 100) / 100;

}




int main() {

    int terms = 10;

    double result = sumOfSquares(terms);

    printf("该序列前 %d 各项平方和的结果为 %.2f\n", terms, result);

    return 0;

}

 答案:

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

{

    fib=fibonacci(i);

    sum+=pow(1/fib,2);

}

第四题

题目:

 

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:用一元人民币兑换 5 分 2 分 1 分的硬币共五十,每种硬币至少一枚,问公多少种方

案,输出每种方案中三种硬币的枚数,兑换后人民币金额保持不变




      程序运行如样张所示。

方案 1: 5分硬币 1 枚, 2分硬币 46 枚, 1分硬币 3 枚

方案 2: 5分硬币 2 枚, 2分硬币 42 枚, 1分硬币 6 枚

方案 3: 5分硬币 3 枚, 2分硬币 38 枚, 1分硬币 9 枚

方案 4: 5分硬币 4 枚, 2分硬币 34 枚, 1分硬币 12 枚

方案 5: 5分硬币 5 枚, 2分硬币 30 枚, 1分硬币 15 枚

方案 6: 5分硬币 6 枚, 2分硬币 26 枚, 1分硬币 18 枚

方案 7: 5分硬币 7 枚, 2分硬币 22 枚, 1分硬币 21 枚

方案 8: 5分硬币 8 枚, 2分硬币 18 枚, 1分硬币 24 枚

方案 9: 5分硬币 9 枚, 2分硬币 14 枚, 1分硬币 27 枚

方案 10: 5分硬币 10 枚, 2分硬币 10 枚, 1分硬币 30 枚

方案 11: 5分硬币 11 枚, 2分硬币 6 枚, 1分硬币 33 枚

方案 12: 5分硬币 12 枚, 2分硬币 2 枚, 1分硬币 36 枚

总共有 12 种方案。

-----------------------------------------------------------------------

注意:请勿改动程序中的其他部分,请勿定义新的变量。

---------------------------------------------------------------------*/

#include <stdio.h> 




int main() { 

    int count = 0; // 用于计数方案数 

  int one,two,five;




  /**********Program**********/




 /**********  End  **********/

  

             printf("方案 %d 5分硬币 %d 枚,2分硬币 %d 枚, 1分硬币 %d 枚\n", ++count, five, two, one);       

                

            

        

         }




    printf("总共有 %d 种方案。\n", count); 




    return 0; 

}

答案:

for(five=1;five<=20;++five)

{

    for(two=1;two<=50;++two)

         for(one=1;one<=100;++one)

             if(five+two+one==50)

                  if(5*five+2*two+one==100)

第五题

题目:

 

/*--------------------------------------------------------------------------

【程序设计】

----------------------------------------------------------------------------

题目:有多少个含有不同数字的三位微abc使得a>b>c>d>e?输出这些三位数,每行15个(每个三位数之间用一个空格作为间隔),并输出满足条件的三位数的总数,要求使用for循环

 程序运行结果如下所示。




----------------------------------------------------------------------------

注意:请勿改动程序中的其他内容。

---------------------------------------------------------------------------*/

#include <stdio.h>




int countNumbers() {

    int count = 0;

         int a,b,c;

/**********Program**********/













/**********  End  **********/

  




    return count;

}




int main() {

    int result = countNumbers();

    printf("Total count: %d\n", result);




    return 0;

}

 答案:

 

 

for(a=1;a<=9;a++)

         for(b=0;b<=9;b++)

             for(c=0;c<=9;c++)

                  if(a>b&&b>c)

                  {

                      count++;

                      printf("%d%d%d ",a,b,c);

                      if(count%15==0)

                      printf("\n");

                  }

第六题

 

题目:

 

第七题

【程序设计】

------------------------------------------------------------------------

题目:定义一个函数计算一个皮球从 100 米的高度自由落下每次落地后反弹高度为原高度的一半,再落下,在反弹,求当第十次落地时,共经历了多少米,第十次反弹多高,

程序运行如下所示。

输入球的初始高度:100

10次落下和再跳后的总距离: 299.609375 米

第10次反弹的高度: 0.097656 米

-----------------------------------------------------------------------

注意:请勿改动程序中的其他部分,请勿定义新的变量。

---------------------------------------------------------------------*/

#include <stdio.h>

 

void calculateBallFall(int times, float height, float *total_distance, float *rebounce_height) {

float distance = 0;

float rebounce = height;

int i;

 

/**********Program**********/

 

 

 

 

/**********  End  **********/

 

}

 

int main() {

int times = 10;

float height;

float total_distance, rebounce_height;

 

printf("输入球的初始高度: ");

scanf("%f", &height);

 

calculateBallFall(times, height, &total_distance, &rebounce_height);

 

printf("10次落下和再跳后的总距离: %f 米\n", total_distance);

printf("第10次反弹的高度: %f 米\n", rebounce_height);

 

return 0;

}

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:编写函数输出如下所示的九九乘法表




      输入输出如下所示:

9 x 9 = 81      8 x 9 = 72      7 x 9 = 63      6 x 9 = 54      5 x 9 = 45      4 x 9 = 36      3 x 9 = 27      2 x 9 = 18      1 x 9 = 9

8 x 8 = 64      7 x 8 = 56      6 x 8 = 48      5 x 8 = 40      4 x 8 = 32      3 x 8 = 24      2 x 8 = 16      1 x 8 = 8

7 x 7 = 49      6 x 7 = 42      5 x 7 = 35      4 x 7 = 28      3 x 7 = 21      2 x 7 = 14      1 x 7 = 7

6 x 6 = 36      5 x 6 = 30      4 x 6 = 24      3 x 6 = 18      2 x 6 = 12      1 x 6 = 6

5 x 5 = 25      4 x 5 = 20      3 x 5 = 15      2 x 5 = 10      1 x 5 = 5

4 x 4 = 16      3 x 4 = 12      2 x 4 = 8       1 x 4 = 4

3 x 3 = 9       2 x 3 = 6       1 x 3 = 3

2 x 2 = 4       1 x 2 = 2

1 x 1 = 1

-----------------------------------------------------------------------

注意:请勿改动程序中的其他部分。

---------------------------------------------------------------------*/










#include <stdio.h>




void print_multiplication_table_reverse() {




         int i,j;

/**********Program**********/










/**********  End  **********/

        printf("\n");

    }

}

int main() {

    print_multiplication_table_reverse();

    return 0;

}

答案:

    for(i=9;i>=1;--i)

    {

         for(j=i;j>=1;--j)

             printf("%d x %d = %d\t",j,i,i*j);

/*----------------------------------------------------------------------

答案:

 

for(i=0;i<times;i++)

    {

         distance+=height+rebounce;

         height/=2;

         rebounce=height;

    }

    *total_distance=distance-rebounce;

    *rebounce_height=rebounce;

    *total_distance=distance-rebounce;

    *rebounce_height=rebounce;

第八题

题目:

 

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:定义一个函数将键盘输入的字符串从小到大进行排序,然后输出新的字符串

程序运行结果如下:

请输入一个字符串: hello world142589

排序后的字符串:  124589dehllloorw




-----------------------------------------------------------------------

注意:请勿改动程序中的其他部分。

---------------------------------------------------------------------*/

#include <stdio.h> 

#include <stdlib.h> 

#include <string.h> 







int compare_chars(const void *a, const void *b) { 

    return *(const char *)a - *(const char *)b; 

} 







void sort_string(char *str) { 

    int length; 

   /**********Program**********/




   







/**********  End  **********/

  

} 


int main() { 

    char input_string[100]; 

    printf("请输入一个字符串: "); 

    fgets(input_string, sizeof(input_string), stdin); 

    input_string[strcspn(input_string, "\n")] = 0; 

    sort_string(input_string); 

    printf("排序后的字符串: %s\n", input_string); 

    return 0; 

}

 

答案:

    length=strlen(str);

    qsort(str,length,sizeof(char),compare_chars);

第九题

题目:

 

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:输入字符串然后按照如下规则进行加密,通过将每个字母向右移动固定数量的位置来实现加密然后输出加密后的字符串,忽略其他字符,如空格、数字等




      输入输出如下所示:

Enter a string to encrypt: akljhvn123

Enter the number of characters to shift: 2

Encrypted string: cmnljxp123

-----------------------------------------------------------------------

注意:请勿改动程序中的其他部分。

---------------------------------------------------------------------*/


#include <stdio.h>

#include <string.h>

void encrypt(char* str, int shift) {

    int len = strlen(str);

    int i;

    /**********Program**********/

   


/**********  End  **********/

  

}


int main() {

    char str[100];

    int shift;

    printf("Enter a string to encrypt: ");

    fgets(str, sizeof(str), stdin);

    printf("Enter the number of characters to shift: ");

    scanf("%d", &shift);

    encrypt(str, shift);

    printf("Encrypted string: %s\n", str);

    return 0;

}

 

答案:

    for(i=0;i<len;i++)

         if(str[i]>='a'&&str[i]<='z')

             str[i]=(str[i]-'a'+shift)%26+'a';

         else if(str[i]>='A'&&str[i]<='Z')

             str[i]=(str[i]-'A'+shift)%26+'A';

第十题

题目:

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:定义一个函数用于计算数学分段函数y=x(x<2);y=1/x+1(x>=10),并调用函数求从键盘上输入的某个x值对应的y值

程序运行如下所示。

请输入x的值 : 15

函数值为: 0.062500

-----------------------------------------------------------------------

注意:请勿改动程序中的其他部分,请勿定义新的变量。

---------------------------------------------------------------------*/

#include <stdio.h>




float calculateY(float x) {

    float y;

    /**********Program**********/













/**********  End  **********/
}

int main() {

    float x, y;
    printf("请输入x的值 : ");

    scanf("%f", &x);

    y = calculateY(x);

    printf("函数值为: %f\n", y);

    return 0;

}

 答案:

 

    if(x<2)

         y=x;

    else

         y=1/(x+1);

    return y;

第十一题

题目:

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:有一只青蛙在一个深为 h 尺的井里。它每次能向上爬 u 尺,但每次也会滑下 d 尺(d < u)。假设井口的深度为 0,青蛙需要爬到井口才能出去。请问青蛙需要多少次跳跃才能爬出井口?当输入合法时,程序将输出青蛙需要跳跃的次数;当输入不合法时,程序将输出 "Impossible"

程序运行结果如下所示:

请输入井的深度(h)、每次爬升的高度(u)和每次滑下的高度(d)(以空格分隔):10 5 3

青蛙需要 4 次跳跃才能爬出井口

-----------------------------------------------------------------------

注意:请勿改动程序中的其他部分,请勿定义新的变量。

---------------------------------------------------------------------*/




#include <stdio.h>




int climbOutOfWell(int h, int u, int d) {

    int netGain;

    int steps;

    /**********Program**********/
















/**********  End  **********/

   

}




int main() {

    int height, upJump, downSlide, result;

    printf("请输入井的深度(h)、每次爬升的高度(u)和每次滑下的高度(d)(以空格分隔):"); 

    scanf("%d%d%d", &height, &upJump, &downSlide);

    result = climbOutOfWell(height, upJump, downSlide);

   

    if (result == -1) {

        printf("Impossible\n");

    } else {

        printf("青蛙需要 %d 次跳跃才能爬出井口\n", result);

    }

   

    return 0;

}

 答案:

 

    if(u<=d||u<h&&u-d<=0)

         return -1;

    netGain=u-d;

    steps=(h-u+netGain-1)/netGain+1;

    return steps;

第十二题

题目:

 

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

在此程序中,函数fun的功能是求矩阵(二维数组) a[N]N中每行的最小值,结果存放到数组b中。假如:若a=

1 4 3 2

8 6 5 7

11 10 12 9

13 16 14 10

则结果应为1 ,5 , 9 ,10 ,

------------------------------------------------------------------------

注意:请勿改动程序中的其他内容。

----------------------------------------------------------------------*/

#include  <stdio.h>

#define   N   4

void fun(int  a[][N], int  b[])

{   int  i, j;

   /**********Program**********/










/**********  End  **********/







}

void main()

{   int  a[N][N]={{1,4,3,2},{8,6,5,7},{11,10,12,9},{13,16,14,10}},b[N];  

    int  i;

    fun(a,b);

    for (i=0; i<N; i++)  printf("%d,", b[i]);

    printf("\n");

}

 答案:

 

    for(i=0;i<N;i++)

    {

         b[i]=a[i][0];

         for(j=1;j<N;j++)

             if(b[i]>a[i][j])

                  b[i]=a[i][j];

    }

第十三题

题目:

 

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:此程序的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里"单词"是指由空格隔开的字符串)。

例如,若输入"I am a student to take the examination",

则应输出"I Am A Student To Take The Examination"。

-----------------------------------------------------------------------

注意:请勿改动程序中的其他内容。

----------------------------------------------------------------------*/

#include <ctype.h>

#include <string.h>

#include  <stdio.h>




void upfst ( char  *p )

{  int  k=0;

/**********Program**********/










/**********  End  **********/




}




main( )

{   char   chrstr[81];

    printf( "\nPlease enter an English text line: " );   gets( chrstr );

       upfst(  chrstr );

    printf( "\nAfter changing:\n  %s\n", chrstr );

}

 答案:

 

    while(*p)

    {

         if(k)

         {

             if(*p==' ')

                  k=0;

         }

         else if(*p!=' ')

         {

             k=1;

             *p=toupper(*p);

         }

         p++;

    }

第十四题

题目:

 

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:定义一个函数,键盘输入一个包含2正整数,判断能否被3整除。在主函数中调用函数。




      程序运行如下所示。

请输入一个包含2的正整数 21

数字 21 包含2且能被3整除

-----------------------------------------------------------------------

注意:请勿改动程序中的其他部分。

---------------------------------------------------------------------*/

#include <stdio.h>




int containsTwoAndDivisibleByThree(int num) {

    int containsTwo = 0;

    int divisibleByThree = 0;

    int n;

   

    /**********Program**********/

   










/**********  End  **********/

   

}




int main() {

    int num;




    printf("请输入一个包含2的正整数 ");

    scanf("%d", &num);




    if (containsTwoAndDivisibleByThree(num)) {

        printf("数字 %d 包含2且能被3整除\n", num);

    } else {

        printf("数字 %d 不不包含2或者不能被3整除\n", num);

    }




    return 0;

}

 答案:

 

    n=num;

    while(num>0)

    {

         if(num%10==2)

         {

             containsTwo=1;

             break;

         }

    num/=10;

    }

    if(containsTwo==1&&n%3==0)

         divisibleByThree=1;

    return divisibleByThree;

第十五题

题目:

/*----------------------------------------------------------------------

【程序设计】

------------------------------------------------------------------------

题目:小朋友爬楼梯,他可以每次走 1 级或者 3 级,编写函数实现输入楼梯的级数,求不同的走法数。例如: 楼梯 共有3级,他可以每次都走1级,或者1次走3级,一共2 种方法

      程序运行如下所示。




Enter the number of stairs:

输入楼梯数: 4

爬楼梯的不同方式的数量: 3

-----------------------------------------------------------------------

注意:请勿改动程序中的其他部分,请勿定义新的变量。

---------------------------------------------------------------------*/




#include <stdio.h>




int countWays(int n) {







    /**********Program**********/




   







/**********  End  **********/

  

}




int main() {

    int stairs;

     int ways;

    printf("输入楼梯数:");

    scanf("%d", &stairs);




    ways = countWays(stairs);

   

    printf("爬楼梯的不同方式的数量:%d\n", ways);




    return 0;

}

 答案:

 

    if(n<=0)

         return 0;

    else if(n==1||n==2)

         return 1;

    else if(n==3)

         return 2;

    else

         return countWays(n-1)+countWays(n-3);

第十六题

题目:

 

/*----------------------------------------------------------------------
【程序设计】
------------------------------------------------------------------------
题目:定义函数将键盘输入的字符串按照指定的位置后面的字符串反向存储。在主函数中调用函数后输出新的字符串,要用指针实现。

      程序运行如下所示。

Enter a string: 123456789
Enter the starting position to reverse: 2
Reversed string: 129876543
-----------------------------------------------------------------------
注意:请勿改动程序中的其他部分。
---------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>

void reverseSubstring(char *str, int start) {
    int length;    
    char *startPtr;
    char *endPtr;
    char temp;

/**********Program**********/




/**********  End  **********/
    
    }
}

int main() {
    char input[100];
    int start;

    printf("Enter a string: ");
    fgets(input, 100, stdin);

    printf("Enter the starting position to reverse: ");
    scanf("%d", &start);

    // 去除换行符
    input[strcspn(input, "\n")] = 0;

    reverseSubstring(input, start);

    printf("Reversed string: %s\n", input);

    return 0;
}

答案:

length=strlen(str);

startPtr=str+start;

endPtr=str+length-1;

while(startPtr<endPtr)

{

temp=*startPtr;

*startPtr=*endPtr;
*endPtr=temp;

startPtr++;
endPtr--;         

}

 

阅读剩余
THE END