C语言初学者超详细习题库1(含题目以及代码讲解)

简介: C语言初学者超详细习题库1(含题目以及代码讲解)

入门级

被5整除问题

输入描述:

输入包括一个整数M(1≤M≤100,000)。

输出描述:

输出包括一行,如果M可以被5整除就输出YES,否则输出NO(结果大小写敏感)。

代码:

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    if(n%5==0)
        printf("YES\n");
    else
        printf("NO\n");
    return 0;
}

讲解:

利用if else判断除于5 的余数是否为0

求两个数的较大值

写一个函数求两个整数的较大值

如:

输入:10 20

输出较大值:20

代码:

int get_max(int x, int y)
{
    if(x > y)
        return x;
    else 
        return y;
}
int main()
{
    int num1 = 10;
    int num2 = 20;
    scanf("%d%d", &num1, &num2);
    //要求:完成get_max函数
    int max = get_max(num1, num2);
    printf("max = %d\n", max);
  return 0;
}

讲解:

解题思路:本题目主要是考察函数的声明定义,利用if else判断大小。

计算Y的值

描述

已知一个函数y=f(x),当x < 0时,y = 1;当x = 0时,y = 0;当x > 0时,y = -1。  

输入描述:

一行,输入一个整数x。(-10000<x<10000)

输出描述:

一行,输出y的值。

代码:

#include <stdio.h>
int main()
{
    int x = 0;
    int y = 0;
    scanf("%d", &x);
    if(x<0)
        y = 1;
    else if(x == 0)
        y = 0;
    else
        y = -1;
    
    printf("%d\n", y);
    return 0;
}

讲解:

本题目主要是考察利用代码实现函数功能,利用if else实现多级判断。

字符转ASCII码

描述

字符常量或字符变量表示的字符在内存中以ASCII码形式存储。输入一个字符,输出该字符相应的ASCII码。

输入描述:

一行,一个字符。

输出描述:

一行,输出输入字符对应的ASCII码。

代码:

#include <stdio.h>
int main()
{
    char ch = 0;
    scanf("%c", &ch);
    printf("%d\n",ch);
    return 0;
}

讲解:

直接利用%d %c 的特性来实现转化 %c 来接收字符变量 %d 来输出整数变量即其对应的ASCII码。

判断整数奇偶性

描述

判断一个整数的奇偶性。从键盘任意输入一个整数(范围-231~231-1),编程判断它的奇偶性。

输入描述:

多组输入,每行输入包括一个整数。

输出描述:

针对每行输入,输出该数是奇数(Odd)还是偶数(Even)。

代码:

#include <stdio.h>
int main()
{
    int num = 0;
    while(scanf("%d", &num) != EOF)
    {
        if(num%2==1)
            printf("Odd\n");
        else
            printf("Even\n");
    }
    return 0;
}

讲解:

注意实现多组输入(下面详解),利用if else实现判断奇偶。

补充:多组数据的输入方法(c语言实现)

EOF法

因为在线评测系统的输入数据存放在一个文件中,因此可以通过文件是否结束的方式判断输入的数据是否结束。

scanf在读取到文件结束符时,会返回标识EOF(end of life),EOF是一个预定义的常量,等于-1。通过判断scanf的返回值否为EOF决定是否退出循环。

while(scanf("%d", &num) != EOF)
    {
       
    }

排电梯

描述

电梯前排了很多人,前面有n个人在等电梯。电梯每次可以乘坐12人,每次上下需要的时间为4分钟(上需要2分钟,下需要2分钟)。请帮助算还需要多少分钟才能乘电梯到达楼上。(假设最初电梯在1层)

输入描述:

输入包含一个整数n (0 ≤ n ≤ 109)

输出描述:

输出一个整数,即到达楼上需要的时间。

代码:

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", n/12*4+2);
    
    return 0;
}

讲解:

n/12*4是需要等的时间 2是上楼的时间

逆序输出

描述

输入10个整数,要求按输入时的逆序把这10个数打印出来。逆序输出,就是按照输入相反的顺序打印这10个数。

输入描述:

一行,输入10个整数(范围-231~231-1),用空格分隔。

输出描述:

一行,逆序输出输入的10个整数,用空格分隔。

代码:

#include <stdio.h>
int main()
{
    int arr[10] = {0};
    int i= 0 ;
    for(i=0; i<10; i++)
    {
        scanf("%d", &arr[i]);
    }
    for(i=9; i>=0; i--)
    {
        printf("%d ", arr[i]);
    }
    
    return 0;
}

讲解:

利用for循环以及scanf接收10个整数放在一个数组中,在利用for循环以及printf打印数组,数组名从大到小打印。

计算体重指数

描述

问题:计算BMI指数(身体质量指数)。BMI指数(即身体质量指数,简称体质指数又称体重,英文为Body Mass Index,简称BMI),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。主要用于统计用途,当我们需要比较及分析一个人的体重对于不同高度的人所带来的健康影响时,BMI值是一个中立而可靠的指标

数据范围:输入的数据满足  50≤n≤180

输入描述:

一行,两个整数,分别表示体重(公斤),身高(厘米),中间用一个空格分隔。

输出描述:

一行,BMI指数(保留两位小数)。

代码:  

#include <stdio.h>
int main()
{
    int weight = 0;
    int height = 0;
    double bmi = 0.0;
    scanf("%d%d", &weight, &height);
    bmi = weight/((double)height*height/10000);
    printf("%.2lf\n", bmi);
    return 0;
}

讲解:

按照公式——用体重公斤数除以身高米数平方得出的数字 求BMI 注意数字类型 double 和in t 计算时需要转换类型

基础级

找最大数

描述

获得4个最大数,编程找到最大的数。

输入描述:

一行,4个整数,用空格分开。

输出描述:

一行,一个整数,为输入的4个整数中最大的整数。

代码:  

#include <stdio.h>
int main()
{
    int arr[4] = {0};
    int i = 0;
    for(i=0; i<4; i++)
    {
        scanf("%d", &arr[i]);
    }
    //假设
    int max = arr[0];
    for(i=1; i<4; i++)
    {
        if(arr[i]> max)
        {
            max = arr[i];
        }
    }
    printf("%d\n", max);
    return 0;
}

讲解:

利用for循环以及scanf接收10个整数放在一个数组中,假设最大值是数组第一个数,进行遍历比较,利用if循环调整。

字母大小写转换

描述

字母大小写转换,有一个字符,判断它是否为大写字母,如果是,将它转换成小写字母;反之则转换为大写字母。

输入描述:

多组输入,每一行输入一个字母。

输出描述:

针对每组输入,输出单独占一行,输出字母的对应形式。

代码:  

#include <stdio.h>
int main()
{
    int ch = 0;
    while((ch=getchar()) != EOF)
    {
        if(islower(ch))
        {
            printf("%c\n", toupper(ch));
        }
        else
        {
            printf("%c\n", tolower(ch)); 
        }
        getchar();
    }
    return 0;
}

讲解:

注意多组输入变为字符时,利用getchar() 实现

C语言的islower函数是一个用来判断一个字符是否为小写字母的函数。

C语言的toupper函数是一个用来将一个小写字母转换为大写字母的函数。

C语言的tplower函数是一个用来将一个大写字母转换为小写字母的函数。

判断是不是字母

描述

判断输入的字符是不是字母,编程实现。

输入描述:

多组输入,每一行输入一个字符。

输出描述:

针对每组输入,输出单独占一行,判断输入字符是否为字母,输出内容详见输出样例。

代码:

#include <stdio.h>
int main()
{
    int ch = 0;
    while((ch=getchar()) != EOF)
    {
        //判断字母
        //if((ch>='A' && ch<='Z') || (ch>='a' && ch<='z'))
        if(isalpha(ch))
        {
            printf("%c is an alphabet.\n", ch);
        }
        else
        {
            printf("%c is not an alphabet.\n", ch);
        }
        //清理掉\n
        getchar();
    }
    return 0;
}

讲解:

注:1.判断字母的两种方法

       if((ch>='A' && ch<='Z') || (ch>='a' && ch<='z')) 利用字母范围判断

       if(isalpha(ch)) 利用函数 C语言的isalpha函数是一个用来判断一个字符是否为字母的函数。

        2.利用getchar()函数清理掉换行符\n 清理掉输入的回车键

打印闰年

描述:打印1000年到2000年之间的闰年

代码:  

#include <stdio.h>
int main()
{
  int year = 0;
  for(year=1000; year<=2000; year++)
  {
    //判断year是否为闰年
    if(year%4==0)  // 如果year能够被4整除,year可能为闰年
    {
      if(year%100!=0) // 如果year不能内100整除,则一定是闰年
      {
        printf("%d ", year);
      }
    }
    if(year%400 == 0)  // 每400年再润一次
    {
      printf("%d ", year);
    }
  }
  return 0;
}
//
//介绍一下这种的简单写法
//
int main()
{
  int year = 0;
  for(year=1000; year<=2000; year++)
  {
    if(((year%4==0)&&(year%100!=0))||(year%400==0))
    {
      printf("%d ", year);
    }
  }
  return 0;
}

讲解:

思路: 要求1000年到2000年之间的闰年,只需要知道求解闰年的方法即可。

闰年的条件:如果N能够被4整除,并且不能被100整除,则是闰年            

或者:N能被400整除,也是闰年      

即:4年一润并且百年不润,每400年再润一次

最大公约数

描述:给定两个数,求这两个数的最大公约数

例如:

输入:20 40

输出:20

代码:  

int main()
{
  int a = 18;
  int b = 24;
  int c = 0;
  while(c=a%b)
  {
    a = b;
    b = c;
  }
  printf("%d\n", b);
  return 0;
}

讲解:

最大公约数:即两个数据中公共约数的最大者。

求解的方式比较多,暴力穷举、辗转相除法、更相减损法、Stein算法算法

此处主要介绍:辗转相除法

思路: 例子:18和24的最大公约数 第一次:a = 18  b = 24  c = a%b = 18%24 = 18      

循环中:a = 24   b=18 第二次:a = 24   b = 18  c = a%b = 24%18 = 6      

循环中:a = 18   b = 6 第三次:a = 18   b = 6   c=a%b = 18%6 = 0  

循环结束  

此时b中的内容即为两个数中的最大公约数。

乘法口诀表

描述:在屏幕上输出9*9乘法口诀表

代码:  

#include <stdio.h>
int main()
{
  int i = 0;
  //控制行数
  for(i=1; i<=9; i++)
  {
    //打印每一行内容,每行有i个表达式
    int j = 0;
    for(j=1; j<=i; j++)
    {
      printf("%d*%d=%2d ", i, j, i*j);
    }
    printf("\n");
  }
  return 0;
}

讲解:

思路: 两个循环进行控制 外层循环控制打印多少行

内部循环控制每行打印多少个表达式以及表达式内容, 比较简单,具体参考代码

分数求和

描述:计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

代码:  

#include <stdio.h>
int  main()
{
  int i = 0;
  double sum = 0.0;
  int flag = 1;
  for(i=1; i<=100; i++)
  {
    sum += flag*1.0/i;
    flag = -flag;
  }
  printf("%lf\n", sum);
  return 0;
}

讲解:

思路:

1. 从上述表达式可以分析出    a. 该表达式主要由100项,基数项为正,偶数项为负

2. 设置一个循环从1~100,给出表达式中的每一项:1.0 / i, 注意此处不能使用1,否则结果全部为0    

然后使用flag标记控制奇偶项,奇数项为正,偶数项为负    

然后将所有的项相加即可

未完待续……

相关文章
|
1月前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
37 3
|
1月前
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
20 2
|
1月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
66 16
|
1月前
|
存储 编译器 C语言
【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。如果操作数是浮点数,在 C 语言中是不允许直接进行。的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;注意:每一个数据输出格式为 printf("%4d", i);的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。取余运算要求两个操作数必须是整数类型,包括。开始你的任务吧,祝你成功!
52 1
|
1月前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
77 18
|
1月前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
52 13
|
1月前
|
Serverless C语言
【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】
根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码,求解出数值x的平方根;运用迭代公式,编写一个循环程序,求解出数值x的平方根。注意:不能直接用平方根公式/函数求解本题!开始你的任务吧,祝你成功!​ 相关知识 求平方根的迭代公式 绝对值函数fabs() 循环语句 一、求平方根的迭代公式 1.原理 在C语言中,求一个数的平方根可以使用牛顿迭代法。对于方程(为要求平方根的数),设是的第n次近似值,牛顿迭代公式为。 其基本思想是从一个初始近似值开始,通过不断迭代这个公式,使得越来越接近。
57 18
|
1月前
|
存储 安全 C语言
【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】
分支的语句,这可能不是预期的行为,这种现象被称为“case穿透”,在某些特定情况下可以利用这一特性来简化代码,但在大多数情况下,需要谨慎使用。编写一个程序,该程序需输入个人数据,进而预测其成年后的身高。根据提示,在右侧编辑器补充代码,计算并输出最终预测的身高。分支下的语句,提示用户输入无效。常量的值必须是唯一的,且在同一个。语句的作用至关重要,如果遗漏。开始你的任务吧,祝你成功!,程序将会继续执行下一个。常量都不匹配,就会执行。来确保程序的正确性。
71 10
|
1月前
|
小程序 C语言
【C语言程序设计——基础】顺序结构程序设计(头歌实践教学平台习题)【合集】
目录 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果: 任务描述 相关知识 编程编写一个程序,从键盘输入3个变量的值,例如a=5,b=6,c=7,然后将3个变量的值进行交换,使得a=6,b=7,c=5。面积=sqrt(s(s−a)(s−b)(s−c)),s=(a+b+c)/2。使用输入函数获取半径,格式指示符与数据类型一致,实验一下,不一致会如何。根据提示,在右侧编辑器补充代码,计算并输出圆的周长和面积。
40 10
|
1月前
|
存储 C语言
【C语言程序设计——循环程序设计】利用数列的累加和求 sinx(头歌实践教学平台习题)【合集】
项的累加和,一般会使用循环结构,在每次循环中计算出当前项的值(可能基于通项公式或者递推关系),然后累加到一个用于存储累加和的变量中。在C语言中推导数列中的某一项,通常需要依据数列给定的通项公式或者前后项之间的递推关系来实现。例如,对于一个简单的等差数列,其通项公式为。的级数,其每一项之间存在特定的递推关系(后项的分子是其前项的分子乘上。,计算sinx的值,直到最后一项的绝对值小于。为项数),就可以通过代码来计算出指定项的值。对于更复杂的数列,像题目中涉及的用于近似计算。开始你的任务吧,祝你成功!
51 6

热门文章

最新文章