C语言经典实例:11-20例:使用结构体输出学生成绩、编制万年历、验证哥德巴赫猜想、求二维数组最大最小值、数组求素数、数组元素排序、进制数的转换进制数的转换、找出次大值、重组数组(下)

简介: C语言经典实例:11-20例:使用结构体输出学生成绩、编制万年历、验证哥德巴赫猜想、求二维数组最大最小值、数组求素数、数组元素排序、进制数的转换进制数的转换、找出次大值、重组数组(下)

3.5、C语言经典实例15-进制数的转换进制数的转换


在Main.h头文件中声明一个func15函数和trans函数,然后再Main.c源文件中定义func15函数和trans函数,并实现相关的功能。


Main.h头文件添加的代码如下


#define M sizeof(unsigned int)*8
// 实例15:进制数的转换进制数的转换
void func15();
int trans(unsigned n, int d, char s[]);


Main.c源文件添加的代码如下

// 实例15:进制数的转换进制数的转换
void func15()
{
  unsigned int num = 253;
  int scale[] = { 2,3,10,16,1 };
  char str[33];
  int i;
  for (i = 0; i < sizeof(scale) / sizeof(scale[0]); i++)
  {
    if (trans(num, scale[i], str))
    {
      printf("%5d = %s(%d)\n", num, str, scale[i]);
    } 
    else
    {
      printf("%5d => (%d) Error! \n", num, scale[i]);
    }
  }
}
int trans(unsigned n, int d, char s[])
{
  /* 十六进制数字的字符 */
  static char digits[] = "0123456789ABCDEF";
  char buf[M + 1];
  int j, i = M;
  if (d < 2 || d>16)
  {
    s[0] = '\0';  // 不合理的进制,置s为空字符串 
    return 0;   // 不合理的进制,函数返回0 
  }
  buf[i] = '\0';
  do
  {
    buf[--i] = digits[n % d]; // 译出最低位,对应字符存入对应工作数组中
    n /= d;
  } while (n);
  // 将译出在工作数组中的字符串复制到s */
  for (j = 0; (s[j] = buf[i]) != '\0'; j++, i++);
  // 其中控制条件可简写成s[j]=buf[i] 
  return j;
}


然后在main()函数中只调用func15()函数,其调试结果如下


f5db73bb08f943f29fa9fda376b37c08.png


3.6、C语言经典实例16-判断回文数


在Main.h头文件中声明一个func16函数和circle函数,然后再Main.c源文件中定义func16函数和circle函数,并实现相关的功能。

Main.h头文件添加的代码如下

// 实例16:判断回文数
void func16();
int circle(int n, int d);

Main.c源文件添加的代码如下


// 实例16:判断回文数
void func16()
{
    int num[] = { 232,27,851 };
    int scale[] = { 2,10,16 };
    int i, j;
    for (i = 0; i < sizeof(num) / sizeof(num[0]); i++)
    {
        for (j = 0; j < sizeof(scale) / sizeof(scale[0]); j++)
        {
            if (circle(num[i], scale[j]))
            {
                printf("%d -> (%d) 进制是回文数!\n", num[i], scale[j]);
            }
            else
            {
                printf("%d -> (%d) 进制不是回文数!\n", num[i], scale[j]);
            }
        }
    }
}
int circle(int n, int d)
{
    int s = 0, m = n;
    while (m)
    {
        s = s * d + m % d;
        m /= d;
    }
    return s == n;
}

然后在main()函数中只调用func16()函数,其调试结果如下

e351b4ab22864ea488dbb09fcd88acba.png


3.7、C语言经典实例17-找出次大值


在Main.h头文件中声明一个func17函数,然后再Main.c源文件中定义func17函数,并实现相关的功能。


Main.h头文件添加的代码如下


// 实例17:找出次大值
void func17();


Main.c源文件添加的代码如下

// 实例17:找出次大值
void func17()
{
  int n;
  int t;
  int m1 = 0;
  int m2 = 0;
  int k;
  printf("请输入数据的个数:\n");
  scanf_s("%d", &n);
  printf("请输入这些数:\n");
  for (k = 1; k <= n; k++)
  {
    scanf_s("%d", &t);
    if (t > m1)
    {
      m2 = m1;///                                                                                                                                                                
      m1 = t;
    }
    else
    {
      if (t > m2)
        m2 = t;
    }
  }
  printf("这些数的最大值:%d,次大值:%d\n", m1, m2);
}


然后在main()函数中只调用func17()函数,其调试结果如下


7249f93dca6c462abc2f00386a967995.png


3.8、C语言经典实例18-验证哥德巴赫猜想


在Main.h头文件中声明一个func18函数、judgeGDBHArith函数和primeJudge函数,然后再Main.c源文件中定义func18函数、judgeGDBHArith函数和primeJudge函数,并实现相关的功能。

Main.h头文件添加的代码如下

// 实例18:验证哥德巴赫猜想
void func18();
// 否符合哥德巴赫猜想
int judgeGDBHArith(int intNum);
int primeJudge(int n);

Main.c源文件添加的代码如下

// 实例18:验证哥德巴赫猜想
void func18()
{
  int a = 0;
  printf("输入一个大于6的偶数:\n");
  scanf_s("%d", &a);
  int blFlag = judgeGDBHArith(a);       //判断是否符合哥德巴赫猜想
  if (blFlag)
  {
    printf("%d能写成两个素数的和,所以其符合哥德巴赫猜想。\n", a);
  }
}
// 否符合哥德巴赫猜想
int judgeGDBHArith(int intNum)
{
  int blFlag = 0;             //标识是否符合哥德巴赫猜想
  if (intNum % 2 == 0 && intNum > 6)        //对要判断的数字进行判断
  {
    for (int i = 1; i <= intNum / 2; i++)
    {
      int bl1 = primeJudge(i);      //判断i是否为素数
      int bl2 = primeJudge(intNum - i);   //判断intNum-i是否为素数
      if (bl1 & bl2)
      {
        // 符合哥德巴赫猜想 输出等式
        printf("%d = %d+ %d\n", intNum, i, intNum - i);
        blFlag = 1;
      }
    }
  }
  return blFlag;                //返回bool型变量
}
int primeJudge(int n)
{
  int i;
  for (i = 3; i <= n / 2; i += 2)
  {
    if (n % i == 0)
      return 0;
  }
  return 1;
}

然后在main()函数中只调用func18()函数,其调试结果如下


b037e4f84f3346279ffc6e45dfc3f645.png

3.9、C语言经典实例19-学生成绩输出


在Main.h头文件中先定义两个结构体:学生成绩信息表、学生表,然后在声明一个func19和getMember函数,然后再Main.c源文件中定义func19和getMember函数,并实现相关的功能。


Main.h头文件添加的代码如下

// 实例19:学生成绩输出
void func19();
#define STUNEM 5;
// 定义一个学生的成绩表
typedef struct _tagMember
{
    char number[8];         // 学号
    char name[16];          // 名字
    int math;               // 数学分数
    int chinese;            // 语文分数
    int english;            // 英语分数
    int sum;                // 总分
} Member, *pMember;
// 定义学生表
typedef struct _tagTable
{
    pMember men;            // 学生数据指针
    int num;                // 学生数量
} Table, *pTable;           // 获取学生表中的学生指针
pMember getMember(pTable table, int n);


Main.c源文件添加的代码如下

// 实例19:学生成绩输出
void func19()
{
  pTable table = (pTable)malloc(sizeof(Table));
  char i;
  pMember p;
  printf("请输入5个学生的学号、姓名、3门课成绩:\r\n");
  table->num = STUNEM;
  table->men = (pMember)malloc(sizeof(Member) * table->num);
  for (i = 1; i <= table->num; i++)
  {
    p = getMember(table, i);
    scanf_s("%s %s %d %d %d", &p->number, sizeof(p->number), &p->name, sizeof(p->name),
      &p->math, &p->chinese, &p->english);
    p->sum = p->math + p->chinese + p->english;
  }
  printf("-----------------------------------------------成绩表------------------------------------------------\r\n");
  printf("学号\t姓名\t数学\t语文\t英语\t总分\r\n");
  for (i = 1; i <= table->num; i++)
  {
    p = getMember(table, i);
    printf("%s\t%s\t%d\t%d\t%d\t%d\r\n", p->number, p->name, p->math, p->chinese, p->english, p->sum);
  }
  free(table->men);
}
pMember getMember(pTable table, int n)
{
  if (n <= table->num && n > 0)
    return table->men + n - 1;
  else
    return 0;
}

然后在main()函数中只调用func19()函数,其调试结果如下


4e30493b3c834d55a76d20aee562d4fd.png

3.10、C语言经典实例20-重组数组


在Main.h头文件中声明一个func10函数,然后再Main.c源文件中定义func10函数,并实现相关的功能。

Main.h头文件添加的代码如下


// 实例20:重组数组
void func20();
#define MAX 26
#define START 2
int sort_intfun(const void* a, const void* b);

Main.c源文件添加的代码如下


// 实例20:重组数组
void func20()
{
  int i;
  int array[20];
  srand((unsigned)time(NULL));    // 随机数播种函数
  for (i = 0; i < 20; i++)      // 产生十个随机数
    array[i] = rand() % START;    // 设定随机数范围并输出
  for (i = 0; i < 20; i++)      // 产生十个随机数
  {
    if (array[i] == 0)
      array[i] = 65 + rand() % MAX;
    else
      array[i] = 97 + rand() % MAX;
  }
  printf("产生十个随机数是:");
  for (i = 0; i < 20; i++)
    printf("%d ", array[i]);
  printf("\n");
  qsort((void*)array, 20, sizeof(array[0]), sort_intfun);
  printf("\n用qsort重组数组后的数据是:");
  for (i = 0; i < 20; i++)
    printf("%d ", array[i]);
  printf("\n");
}
int sort_intfun(const void* a, const void* b)
{
  return *(int*)a - *(int*)b;
}


然后在main()函数中只调用func20()函数,其调试结果如下


6356b283c5b34b0ba53f1dba3328a686.png


b04e6c1e58d24e0bad16933b61194fc3.jpg

相关文章
|
10月前
|
存储 人工智能 Java
一文彻底搞定C语言中的二维数组
本文详细介绍了C语言中的多维数组,包括二维和三维数组的定义、初始化方式、内存布局及遍历方法。通过具体示例讲解了多种赋值技巧,并强调了数组在内存中按行存放的特点。希望这些内容能帮助你在编程路上不断成长!君志所向,一往无前!
730 1
一文彻底搞定C语言中的二维数组
|
11月前
|
存储 算法 安全
【C语言程序设计——选择结构程序设计】按从小到大排序三个数(头歌实践教学平台习题)【合集】
本任务要求从键盘输入三个数,并按从小到大的顺序排序后输出。主要内容包括: - **任务描述**:实现三个数的排序并输出。 - **编程要求**:根据提示在编辑器中补充代码。 - **相关知识**: - 选择结构(if、if-else、switch) - 主要语句类型(条件语句) - 比较操作与交换操作 - **测试说明**:提供两组测试数据及预期输出。 - **通关代码**:完整代码示例。 - **测试结果**:展示测试通过的结果。 通过本任务,你将掌握基本的选择结构和排序算法的应用。祝你成功!
204 4
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
1896 5
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
416 7
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
568 8
|
算法 C语言
【C语言】排序查找
【C语言】排序查找
|
人工智能 算法 C语言
C语言算法竞赛入门(二)---数组元素移动 、排序问题 、猴子选大王问题
数组元素移动 【问题描述】调整输入数组A[0..n],将其分为两部分,左边所有元素为奇数,右边所有元素为偶数 【输入形式】a0,b1,b2,a1,a2,b3,a3,a4 【输出形式】a0,a1,a2,a3,a4,b1,b...
2224 0
|
3月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
999 0
|
11月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
626 23
|
5月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
323 15