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标记控制奇偶项,奇数项为正,偶数项为负    

然后将所有的项相加即可

未完待续……

相关文章
|
3月前
|
NoSQL 编译器 程序员
【C语言】揭秘GCC:从平凡到卓越的编译艺术,一场代码与效率的激情碰撞,探索那些不为人知的秘密武器,让你的程序瞬间提速百倍!
【8月更文挑战第20天】GCC,GNU Compiler Collection,是GNU项目中的开源编译器集合,支持C、C++等多种语言。作为C语言程序员的重要工具,GCC具备跨平台性、高度可配置性及丰富的优化选项等特点。通过简单示例,如编译“Hello, GCC!”程序 (`gcc -o hello hello.c`),展示了GCC的基础用法及不同优化级别(`-O0`, `-O1`, `-O3`)对性能的影响。GCC还支持生成调试信息(`-g`),便于使用GDB等工具进行调试。尽管有如Microsoft Visual C++、Clang等竞品,GCC仍因其灵活性和强大的功能被广泛采用。
127 1
|
24天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
ly~
|
1月前
|
数据可视化 BI API
除了 OpenGL,还有哪些常用的图形库可以在 C 语言中使用?
除了OpenGL,C语言中还有多个常用的图形库:SDL,适合初学者,用于2D游戏和多媒体应用;Allegro,高性能,支持2D/3D图形,广泛应用于游戏开发;Cairo,矢量图形库,支持高质量图形输出,适用于数据可视化;SFML,提供简单接口,用于2D/3D游戏及多媒体应用;GTK+,开源窗口工具包,用于创建图形用户界面。这些库各有特色,适用于不同的开发需求。
ly~
193 4
|
1月前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
1月前
|
存储 搜索推荐 C语言
深入C语言指针,使代码更加灵活(二)
深入C语言指针,使代码更加灵活(二)
|
1月前
|
存储 程序员 编译器
深入C语言指针,使代码更加灵活(一)
深入C语言指针,使代码更加灵活(一)
|
1月前
|
C语言
深入C语言指针,使代码更加灵活(三)
深入C语言指针,使代码更加灵活(三)
深入C语言指针,使代码更加灵活(三)
|
2月前
|
安全 C语言
在C语言中,正确使用运算符能提升代码的可读性和效率
在C语言中,运算符的使用需要注意优先级、结合性、自增自减的形式、逻辑运算的短路特性、位运算的类型、条件运算的可读性、类型转换以及使用括号来明确运算顺序。掌握这些注意事项可以帮助编写出更安全和高效的代码。
50 4
|
1月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
1月前
|
C语言
C语言练习题代码
C语言练习题代码