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

相关文章
|
9天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
50 8
|
9天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
36 7
|
1月前
|
算法 C语言
【C语言】排序查找
【C语言】排序查找
|
1月前
|
存储 编译器 C语言
【C语言】数组(一维、二维数组的简单介绍)
【C语言】数组(一维、二维数组的简单介绍)
|
1月前
|
NoSQL 算法 Redis
Redis的实现三:c语言实现平衡二叉树,通过平衡二叉树实现排序集
本博客介绍了如何在C语言中实现一个平衡二叉树,并通过这个数据结构来模拟Redis中的排序集功能。
12 0
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第六章 数组_一维数组_二维数组_字符数组详解
本章介绍了C语言中的数组概念及应用。数组是一种存储同一类型数据的线性结构,通过下标访问元素。一维数组定义需指定长度,如`int a[10]`,并遵循命名规则。数组元素初始化可使用 `{}`,多余初值补0,少则随机。二维数组扩展了维度,定义形式为`int a[3][4]`,按行优先顺序存储。字符数组用于存储字符串,初始化时需添加结束符`\0`。此外,介绍了字符串处理函数,如`strcat()`、`strcpy()`、`strcmp()` 和 `strlen()`,用于拼接、复制、比较和计算字符串长度。
|
3月前
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
|
5月前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
5月前
|
C语言
【C语言刷题系列】移除元素
【C语言刷题系列】移除元素