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

相关文章
|
8月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
372 23
|
7月前
|
存储 人工智能 程序员
一文彻底搞明白C语言的数组
本文详细介绍了C语言中的数组,包括定义、初始化(静态与动态)、存储方式、访问方法及常用操作,如遍历、修改元素和作为函数参数传递。数组是C语言中最基本的数据结构之一,掌握它对编程至关重要。下篇将介绍二维数组,敬请期待!
312 0
一文彻底搞明白C语言的数组
|
9月前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
659 6
|
10月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
C语言
C语言实现万年历
给出你想知道的年份,便可以计算出该年对应的每个月每个日所对应的星期数,是不是感觉很好玩 ? #include #include long int f(int year,int month) { /*f(年,月)=年-1,如月
1464 0
|
5天前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
223 0
|
2月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
238 15
|
7月前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
187 1
一文彻底搞清楚C语言的函数
|
8月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
309 15
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
|
8月前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
150 24