当前位置: 首页 > news >正文

C语言程序代码(四)

文章目录

          • 四十、冒泡排序(函数)
          • 四十一、输入一个整数,设计一个函数,计算整数的各位数字之和
          • 四十二、编写一个函数,由实参传来一个字符串,统计字母、数字、空格及其他字符的个数
          • 四十三、求总分、平均分、不及格人数(结构体数组+函数)
          • 四十三、求总分、平均分、不及格人数(结构体数组)
          • 四十四、录入学生联系方式

四十、冒泡排序(函数)
// 禁用 Visual Studio 编译器对不安全函数的安全警告(如 scanf 被认为不安全)
#define _CRT_SECURE_NO_WARNINGS 1// 包含标准输入输出库,用于使用 printf 和 scanf 函数
#include <stdio.h>// 函数声明:Sort
// 功能:对一个整型数组进行升序排序
// 参数:
//   int a[] - 待排序的整数数组
//   int n   - 数组中元素的个数
void Sort(int a[], int n);int main()
{int i;           // 循环变量,用于遍历数组int a[10];       // 定义一个长度为 10 的整型数组,存储用户输入的 10 个数字// 提示用户输入数据printf("请输入十个数:");// 使用 for 循环读取 10 个整数// i 从 0 到 9(共 10 次),依次将输入的值存入 a[0] ~ a[9]for (i = 0; i < 10; i++){scanf("%d", &a[i]);  // %d 读取整数,&a[i] 是第 i 个元素的地址}printf("\n");  // 输出一个换行,使界面更清晰// 调用冒泡排序函数,对数组 a 进行升序排序,共 10 个元素Sort(a, 10);// 排序完成后输出结果printf("从小到大的顺序:");// 遍历已排序的数组,输出每个元素for (i = 0; i < 10; i++){printf("%d ", a[i]);  // 每个数字后加一个空格,便于阅读}printf("\n");  // 最后再输出一个换行符,保持格式整洁return 0;  // 主函数执行成功,返回 0 表示正常结束
}/*** 冒泡排序函数(升序)** 原理:*   相邻两个元素比较,如果前一个比后一个大,就交换它们。*   每一轮会把当前未排序部分的最大值“浮”到右边。** 参数:*   int a[] - 要排序的整型数组(传入的是首地址)*   int n   - 数组中元素的个数*/
void Sort(int a[], int n)
{int i, j;     // i: 外层循环控制排序轮数;j: 内层循环用于相邻元素比较int temp;     // 临时变量,用于交换两个元素的值// 外层循环:控制排序的轮数// 总共需要 n-1 轮才能确保所有元素有序for (i = 0; i < n - 1; i++){// 内层循环:在每一轮中,从第一个元素开始,两两比较相邻元素// 注意:每完成一轮,最大值已经“沉底”,所以范围是 j < n - 1 - ifor (j = 0; j < n - 1 - i; j++){// 如果当前元素大于下一个元素,则交换它们(实现升序)if (a[j] > a[j + 1]){temp = a[j];          // 将 a[j] 存入临时变量a[j] = a[j + 1];      // 将较小的 a[j+1] 放到前面a[j + 1] = temp;      // 将原来的 a[j] 放到后面}}}
}
四十一、输入一个整数,设计一个函数,计算整数的各位数字之和
// 禁用安全警告(用于 Visual Studio 编译器,避免 scanf 被标记为不安全函数)
#define _CRT_SECURE_NO_WARNINGS 1// 引入标准输入输出库,用于 printf 和 scanf
#include <stdio.h>// 函数声明:Score 函数接收一个整数参数,返回该数个位、十位、百位数字之和
int Score(int a);int main()
{int a, score;  // 定义两个整型变量:a 存储用户输入的整数,score 存储计算结果// 提示用户输入一个整数printf("请输入一个整数:");// 使用 scanf 读取用户输入的整数,存储到变量 a 的地址中scanf("%d", &a);// 调用 Score 函数,传入 a,计算其个位、十位、百位数字之和,并将结果赋值给 scorescore = Score(a);// 输出最终结果printf("结果是:%d\n", score);// 主函数正常结束,返回 0 表示程序执行成功return 0;
}/*** Score 函数:计算一个整数的个位、十位和百位上的数字之和* * 参数:*   int a - 输入的整数(可以是正数或负数)* * 返回值:*   int - 个位 + 十位 + 百位 数字的和* * 注意:对于负数,由于 % 运算符在 C 中对负数的行为依赖编译器,*       实际运行时可能产生负的结果。建议先取绝对值以确保正确性。*/
int Score(int a)
{int score;     // 用于存储三个位上的数字之和int ge;        // 存储个位数字int shi;       // 存储十位数字int bai;       // 存储百位数字// 取个位:a % 10 得到最后一位数字// 例如:123 % 10 = 3ge = a % 10;// 取十位:先将 a 除以 10 去掉个位,再对 10 取模// 例如:(123 / 10) = 12, 12 % 10 = 2shi = (a / 10) % 10;// 取百位:先将 a 除以 100 去掉个位和十位,再对 10 取模// 例如:(123 / 100) = 1, 1 % 10 = 1cbai = (a / 100) % 10;// 将个位、十位、百位上的数字相加score = ge + shi + bai;// 返回计算得到的和return score;
}
四十二、编写一个函数,由实参传来一个字符串,统计字母、数字、空格及其他字符的个数
// 禁用 Visual Studio 编译器对不安全函数(如 gets)的安全警告
#define _CRT_SECURE_NO_WARNINGS 1// 包含标准输入输出库,用于使用 printf、scanf、gets 等函数
#include <stdio.h>// 函数声明:count 是一个无返回值函数,参数为字符数组 a[]
// 功能:统计字符串中各类字符的数量
void count(char a[]);// 全局变量定义(跨函数共享):
int zm = 0;  // zm: 字母计数器(初始为 0),记录英文字母 a-z 和 A-Z 的个数
int sz = 0;  // sz: 数字计数器(初始为 0),记录字符 '0'~'9' 的个数
int kg = 0;  // kg: 空格计数器(初始为 0),记录空格字符 ' ' 的个数
int qt = 0;  // qt: 其他字符计数器(初始为 0),记录不属于前三类的所有字符(如标点符号等)int main()
{char a[80];  // 定义一个长度为 80 的字符数组,最多可存储 79 个字符 + 1 个字符串结束符 '\0'printf("请输入一行文本(建议不超过79个字符):");  // 提示用户输入信息gets(a);     // 从键盘读取一整行输入并存储到数组 a 中,直到遇到换行符为止count(a);    // 调用 count 函数,传入字符串 a,开始统计各类字符数量// 输出最终的统计结果printf("字母:%d\n", zm);   // 打印字母总数printf("数字:%d\n", sz);   // 打印数字字符总数printf("空格:%d\n", kg);   // 打印空格字符总数printf("其它:%d\n", qt);   // 打印其余字符总数return 0;    // 主函数执行成功,返回 0 表示正常退出
}/*** 函数名:count* 参数:char a[] - 接收一个以 '\0' 结尾的字符串* 功能:遍历字符串中的每一个字符,根据其类型进行分类统计*/
void count(char a[])
{int i = 0;      // 当前字符的索引位置,初始指向第一个字符(下标 0)char c;         // 临时变量,用于保存当前正在处理的字符// 使用 while 循环逐个访问字符串中的每个字符// 条件:将 a[i] 赋值给 c,并判断 c 是否不是字符串结束符 '\0'while ((c = a[i]) != '\0'){// 判断当前字符是否为英文字母(小写 a-z 或大写 A-Z)if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'){zm = zm + 1;  // 是字母,则字母计数器 zm 加 1}// 判断当前字符是否为数字字符('0' 到 '9')else if (c >= '0' && c <= '9')  {sz = sz + 1;  // 是数字字符,则数字计数器 sz 加 1}// 判断当前字符是否为空格字符(ASCII 值为 32)else if (c == ' '){kg = kg + 1;  // 是空格,则空格计数器 kg 加 1}// 如果以上条件都不满足,则归类为“其他字符”else{qt = qt + 1;  // 其他字符计数器 qt 加 1c}i++;  // 移动到下一个字符的位置(即下标加 1)}
}
四十三、求总分、平均分、不及格人数(结构体数组+函数)
#define _CRT_SECURE_NO_WARNINGS 1  // 禁用安全警告(用于允许使用 scanf 等函数)
#include <stdio.h>                 // 包含标准输入输出库// 定义学生信息的结构体
struct student {int num;           // 学号(整数类型)char name[20];     // 姓名(字符数组,最多存放19个字符 + '\0' 结束符)char sex;          // 性别('M' 表示男,'F' 表示女)float score;       // 成绩(浮点数类型,修正原拼写错误 scroe -> score)
} body[5] = {          // 定义包含5个学生的全局数组 body{101, "Li Ping", 'M', 45},       // 第一个学生数据{102, "Zhang Ping", 'M', 92.5},  // 第二个学生数据{103, "He Fang", 'F', 82.5},     // 第三个学生数据{104, "Cheng Ling", 'F', 87},    // 第四个学生数据{105, "Wang Ming", 'M', 58}      // 第五个学生数据
};// 函数声明(也叫函数原型)—— 告诉编译器这些函数将在后面定义
void printTable(struct student stu[], int n);           // 打印学生表格
float calculateSum(struct student stu[], int n);        // 计算总成绩
float calculateAverage(float sum, int n);               // 计算平均成绩
int countFail(struct student stu[], int n);             // 统计不及格人数// 主函数:程序入口
int main()
{int n = 5;  // 学生人数固定为5人// 调用函数打印学生信息表格printTable(body, n);// 分别调用函数计算各项统计数据float sum = calculateSum(body, n);           // 获取总分float average = calculateAverage(sum, n);    // 根据总分计算平均分int failCount = countFail(body, n);          // 统计不及格人数// 输出统计结果printf("----------------------------------------\n");printf("总分是:%.2f\n", sum);               // 保留两位小数输出总分printf("平均分是:%.2f\n", average);         // 保留两位小数输出平均分printf("不及格有:%d人\n", failCount);       // 输出不及格人数return 0;  // 返回0表示程序正常结束
}// ==================== 函数定义 ====================/** 函数名:printTable* 功能:打印学生信息表格,包括表头和所有学生数据* 参数:*   stu[]: 学生结构体数组(传入要打印的数据)*   n:     数组中学生数量* 输出格式使用 %-6d 等对齐方式实现整齐排版*/
void printTable(struct student stu[], int n)
{// 打印表头(列名),%-6s 表示左对齐并占6个字符宽度printf("%-6s %-12s %-6s %-8s\n", "学号", "姓名", "性别", "成绩");printf("----------------------------------------\n");  // 分隔线// 遍历每个学生,逐行打印其信息for (int i = 0; i < n; i++) {printf("%-6d %-12s %-6c %-8.2f\n", stu[i].num,      // 学号stu[i].name,     // 姓名stu[i].sex,      // 性别stu[i].score);   // 成绩(保留两位小数)}
}/** 函数名:calculateSum* 功能:遍历学生数组,累加所有学生的成绩得到总分* 参数:*   stu[]: 学生结构体数组*   n:     学生人数* 返回值:float 类型的总成绩*/
float calculateSum(struct student stu[], int n)
{float sum = 0;              // 初始化总分为0for (int i = 0; i < n; i++) {sum += stu[i].score;    // 累加每位学生的成绩}return sum;                 // 返回总分
}/** 函数名:calculateAverage* 功能:根据总分和人数计算平均分* 参数:*   sum: 总成绩*   n:   学生人数* 返回值:float 类型的平均成绩*/
float calculateAverage(float sum, int n)
{return sum / n;  // 直接返回总分除以人数的结果
}/** 函数名:countFail* 功能:统计成绩低于60分的学生人数(不及格人数)* 参数:*   stu[]: 学生结构体数组*   n:     学生人数* 返回值:不及格的人数(整数)*/
int countFail(struct student stu[], int n)
{int count = 0;                    // 计数器初始化为0for (int i = 0; i < n; i++) {if (stu[i].score < 60) {      // 判断是否不及格count++;                  // 满足条件则计数+1}}return count;                     // 返回不及格总人数
}
四十三、求总分、平均分、不及格人数(结构体数组)
#define _CRT_SECURE_NO_WARNINGS 1  // 禁用 Visual Studio 中的安全警告(如不允许使用 scanf)
#include <stdio.h>                 // 包含标准输入输出头文件,用于 printf 和 scanf// 定义一个名为 student 的结构体,用来表示学生信息
struct student {int num;           // 学号:整数类型char name[20];     // 姓名:字符数组,最多可存储19个字符 + 1个字符串结束符 '\0'char sex;          // 性别:单个字符,'M' 表示男,'F' 表示女float scroe;       // 成绩:浮点数类型(注意:此处拼写错误应为 score,但不影响运行)
} body[5] = {          // 定义一个包含5个学生的全局数组 body,并进行初始化{101, "Li Ping", 'M', 45},       // 第1个学生数据{102, "Zhang Ping", 'M', 92.5},  // 第2个学生数据{103, "He Fang", 'F', 82.5},     // 第3个学生数据{104, "Cheng Ling", 'F', 87},    // 第4个学生数据{105, "Wang Ming", 'M', 58}      // 第5个学生数据
};  // 结构体定义和变量声明同时完成int main()  // 主函数:程序的入口点
{int i;              // 循环变量,用于遍历学生数组int count = 0;      // 计数器,统计不及格(成绩 < 60)的学生人数float sum = 0;      // 累加器,用于计算总成绩float average;      // 存储平均分的结果// 输出表格标题(表头),%-6s 表示左对齐并占至少6个字符宽度printf("%-6s %-12s %-6s %-8s\n", "学号", "姓名", "性别", "成绩");// 打印一条分隔线,增强可读性printf("----------------------------------------\n");// 使用 for 循环遍历所有5个学生for (i = 0; i < 5; i++) {// 打印当前学生的信息,各字段左对齐并对齐列宽printf("%-6d %-12s %-6c %-8.2f\n",body[i].num,      // 学号(整数,左对齐占6位)body[i].name,     // 姓名(字符串,左对齐占12位)body[i].sex,      // 性别(字符,左对齐占6位)body[i].scroe);   // 成绩(浮点数,保留两位小数,占8位)// 累加当前学生的成绩到总分sum = sum + body[i].scroe;// 判断当前学生成绩是否低于60分(不及格)if (body[i].scroe < 60) {count = count + 1;   // 如果不及格,则计数器加1}}// 输出统计结果printf("\n总分是:%.2f\n", sum);             // 总分,保留两位小数average = sum / 5;                           // 计算平均分(总分除以5人)printf("平均分是:%.2f\n", average);         // 输出平均分printf("不及格有:%d人\n", count);           // 输出不及格人数return 0;  // 返回0表示程序正常结束
}
四十四、录入学生联系方式
#define _CRT_SECURE_NO_WARNINGS 1  // 禁用 Visual Studio 对不安全函数(如 gets)的警告
#include <stdio.h>                 // 包含标准输入输出库,用于 printf 和 gets#define Num 3  // 定义宏常量 Num 表示要录入的学生(成员)数量为 3// 定义一个名为 member 的结构体,用来存储一个人的基本联系信息
struct member {char name[20];     // 姓名:字符数组,最多可存 19 个字符 + '\0' 结束符char phone[12];    // 联系电话:最多支持 11 位号码 + '\0'
};  // 注意:这里只定义了类型,还没有分配内存空间给具体变量int main()
{struct member man[Num];  // 定义一个结构体数组 man,包含 Num (3) 个元素int i;                   // 循环控制变量,用于遍历数组// 使用 for 循环,依次为每个成员输入姓名和联系电话for (i = 0; i < Num; i++) {printf("请输入第 %d 位的姓名:", i + 1);  // 提示用户输入姓名gets(man[i].name);                       // 使用 gets 函数读取整行字符串(包括空格),存入 name 字段printf("请输入联系电话:");               // 提示用户输入电话号码gets(man[i].phone);                      // 将输入的电话号码存入 phone 字段}// 输出换行,分隔输入与输出部分printf("\n");// 打印表格标题printf("姓名\t\t\t联系电话\n");             // \t 是制表符,用于对齐列printf("----------------------------------\n");  // 分隔线,增强可读性// 再次使用循环,输出所有已录入的成员信息for (i = 0; i < Num; i++) {printf("%s\t\t\t%s\n",                  // 格式化输出:姓名 和 电话man[i].name,                     // 当前成员的姓名man[i].phone);                   // 当前成员的联系电话}return 0;  // 主函数正常结束,返回 0
}
http://www.dtcms.com/a/561806.html

相关文章:

  • 仿射变换的图像配准技术
  • wordpress看文网站芜湖营销网站建设
  • 泰州企业建站程序做购物网站的图标从哪里来
  • 1. Linux C++ muduo 库学习——库的编译安装
  • C++中的多态
  • C++ 使用 SQLite3 数据库
  • 郑州做网站的专业公司有哪些导购网站自己做电商
  • 松江品划网站建设推广美食网站建设策划书范文
  • 网站建设 全包 模板安徽省建设干部学校网站关停
  • 从空间几何到地球重量——张祥前质量定义方程的实证推导
  • 做网站有什么注意事项新手怎样做网络营销推广
  • 网站账户上的余额分录怎么做做网站的目的是什么
  • Wan-AI/Wan2.2-Animate-14B
  • 杂记 17
  • 国际营销网站建设新型实体企业100强
  • 载带 东莞网站建设英文网站搜索
  • 【Java】关于mybatis动态拼接SQL实现动态查询时遇到的一些问题
  • 做电影网站会违法吗网站模块怎么恢复
  • 网站程上传服务商类型是什么意思
  • 3.基础--数据模型
  • 设计logo网站生成器个人电脑做网站服务器网站
  • 49.渗透-Yakit-基础模块应用(爆破与未授权检测)
  • Taro 开发快速入门手册
  • html5网络公司网站模板wordpress 左右翻页
  • Python GUI 编程(Tkinter)
  • 外贸商业网站建设重庆专业的网站建设公司
  • 做怎么样的网站好wordpress 技术类主题
  • Java 大视界 -- Java 大数据在智能政务公共资源交易数据分析与监管中的应用
  • 雅思口语主题
  • 江门网站江苏建设厅长