二级C语言:二维数组每行最大值与首元素交换、删除结构体的重复项、取出单词首字母

目录

一、程序填空 --- 二维数组每行最大值与首元素交换

题目

分析

知识点 --- 交换语句

二、程序修改 --- 删除结构体的重复项

题目

分析

三、程序设计 --- 取出单词首字母

题目

分析


前言
本章讲解:二维数组每行最大值与首元素交换、删除结构体的重复项、取出单词首字母
 

适用人群:

  1. 要参加C语言二级
  2. 中职学生
  3. 想提升C语言编程思维
  4. C语言学习者

一、程序填空 --- 二维数组每行最大值与首元素交换

难度:⭐

题目

函数 fun 的功能是:根据所给的二维数组,将二维数组每一行中的最大值,与该行中的第一个元素进行交换。

 

例如,如有二维数组:
51 27 44 50 99
74 58 28 62 84
45 75 71 97 76
51 35 72 67 46
91 34 42 73 32

 

则输出结果是:
99 27 44 50 51
84 58 28 62 74
97 75 71 45 76
72 35 51 67 46
91 34 42 73 32

 

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在 BLANK1.C 中。不得增行或删行,也不得更改程序的结构!

代码如下: 
在1️⃣2️⃣3️⃣处填空

#include <stdio.h>
#define N 5
void fun(int a[N][N])
{int i,j,k,t;for(i=0;i<N;i++)   {/**********found**********/____1️⃣____;for(j=1;j<N;j++)/**********found**********/if(a[i][j]>____2️⃣____)k=j;t=a[i][0];a[i][0]=a[i][k];  /**********found**********/____3️⃣____ =t;   }
}
main()
{int i,j;int a[N][N]={{51,27,44,50,99},{74,58,28,62,84},{45,75,71,97,76},{51,35,72,67,46},{91,34,42,73,32}};fun(a);for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%3d",a[i][j]);printf("\n");}}

分析

本题就是要找一行中最大的值,步骤如下:

  1. 假设每一行中的第一个为最大值
  2. 与同行其余值进行比较
  3. 找到最大值后进行交换

解答代码如下:

#include <stdio.h>
#define N 5
void fun(int a[N][N])
{int i,j,k,t;for(i=0;i<N;i++)   {/**********found**********///由下方代码可知//这个k是控制列的//所以先假设第一个是最大值k = 1️⃣0;for(j=1;j<N;j++)/**********found**********///找一行的最大值	if(a[i][j] > 2️⃣a[i][k])k=j;t=a[i][0];a[i][0]=a[i][k];  /**********found**********///从上方两个语句可以知道这里是一个交换语句3️⃣a[i][k]=t;   }
}
main()
{int i,j;int a[N][N]={{51,27,44,50,99},{74,58,28,62,84},{45,75,71,97,76},{51,35,72,67,46},{91,34,42,73,32}};fun(a);for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%3d",a[i][j]);printf("\n");}}

知识点 --- 交换语句

这里要记住的是这个交换语句,例如:

int a = 1, b = 2;
int t;
t = a;
a = b;
b = t;

这样就实现了变量a与变量b的交换,这里有个技巧就是:
 


二、程序修改 --- 删除结构体的重复项

难度:⭐

题目

已知用户记录由账号和密码两项信息构成,N 名用户的数据已经存入结构体数组 a 中,函数 fun 的功能是:删除用户记录中账号重复的记录,如有多个重复账号记录,则保留第一个账号的用户记录。

 

请改正程序中的错误,使它能得到正确结果。

 

注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。

代码如下:
在代码中找出3个错误并修改

#include <stdio.h>
#include <string.h>
#define N 10
struct user{char name[20];char password[20];
};
int  fun(struct user users[])
{int i=0,j,k;int n=N;while(i<n){/**********found**********/j=0;while(j<n){if(strcmp(users[i].name,users[j].name)==0){k=j;/**********found**********/for(;k<n;k++)/**********found**********/users[k]=users[k-1];n--;}j++;}i++;}return n;
}
main()
{int i,n=N;struct user users[N]={{"zhang","skf"},{"li","kf123"},{"chen","df77dd"},{"zhang","tt186"},{"ou","ou1236"},{"li","kk99qq"},{"sun","s9527"},{"guo","gg99"},{"yu","qiqi11367"},{"li","ww8866"}};printf("删除用户记录中账号重复的记录之前:\n");for(i=0;i<n;i++)printf("%4d%20s%20s\n",i,users[i].name,users[i].password);printf("删除用户记录中账号重复的记录之后:\n");n=fun(users);for(i=0;i<n;i++)printf("%4d%20s%20s\n",i,users[i].name,users[i].password);}

分析

删除结构体中的重复项,也还好理解,就是要注意第2空和第3空要一起来看

解答代码如下:

#include <stdio.h>
#include <string.h>
#define N 10
struct user{char name[20];char password[20];
};
int  fun(struct user users[])
{int i=0,j,k;int n=N;while(i<n){/**********found**********///由下面字符串对比可知//j要从i的后一位开始j=i+1;while(j<n){if(strcmp(users[i].name,users[j].name)==0){k=j;/**********found**********///由下方的赋值语句可知//当前位置要被后一位赋值//那么最后只要循环到倒数第二个就可以了//也就是,倒数第一的赋值给倒数第二的位置for(;k<n - 1;k++)/**********found**********/users[k]=users[k+1];n--;}j++;}i++;}return n;
}
main()
{int i,n=N;struct user users[N]={{"zhang","skf"},{"li","kf123"},{"chen","df77dd"},{"zhang","tt186"},{"ou","ou1236"},{"li","kk99qq"},{"sun","s9527"},{"guo","gg99"},{"yu","qiqi11367"},{"li","ww8866"}};printf("删除用户记录中账号重复的记录之前:\n");for(i=0;i<n;i++)printf("%4d%20s%20s\n",i,users[i].name,users[i].password);printf("删除用户记录中账号重复的记录之后:\n");n=fun(users);for(i=0;i<n;i++)printf("%4d%20s%20s\n",i,users[i].name,users[i].password);}

三、程序设计 --- 取出单词首字母

难度:⭐⭐⭐

题目

请编写函数 fun,fun 的功能是按顺序将形参 a 所指的字符串中每个单词的第一个字母取出,依次存放到形参 b 所指的字符串中去。

 

形参 a 所指的字符串中的单词以一个或多个空格进行分隔,字符串首部和尾部可以有一个或多个空格

代码如下
在fun函数中编写

#include <stdio.h>
#include <string.h>void fun(char *a,char *b)
{}
main()
{char a[50],b[50];gets(a);fun(a,b);puts(b);
}

分析

之前做过一道类似的:程序设计:提取单词尾部元素
而这道题是提取单词的第一个字母
这题思路还是差不多的,就是反着来

  1. 先取第一个单词的首字母
  2. 循环判断,空格后面是否是字母
    如果空格后面是字母,则表示为首部字母,就保存到b数组中

解答代码如下:

#include <stdio.h>
#include <string.h>void fun(char *a,char *b)
{int i = 0,j = 0;//考虑到第一个单词前面可能有空格while( a[i] == ' ' ) i++;//因为第一个单词可以直接加b[j++] = a[i];while( a[i + 1] != '\0' ){if(a[i] == ' ' && a[i+1] != ' '){b[j++] = a[i + 1];}i++;}b[j] = '\0';
}
main()
{char a[50],b[50];gets(a);fun(a,b);puts(b);
}

这里就是要注意,前面有空格的情况,使用while循环将空格跳过

希望这篇文章对您(* ̄︶ ̄)
专栏:二级C语言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10615.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CUDA学习-内存访问

一 访存合并 1.1 说明 本部分内容主要参考: 搞懂 CUDA Shared Memory 上的 bank conflicts 和向量化指令(LDS.128 / float4)的访存特点 - 知乎 1.2 share memory结构 图1.1 share memory结构 放在 shared memory 中的数据是以 4 bytes(即 32 bits)作为 1 个 word,依…

【python】python基于机器学习与数据分析的手机特性关联与分类预测(源码+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 python基于机器学习与数据分析的手机特性关联与分类…

【leetcode详解】T3175(一点反思)

解题心得 要写出一个好的程序&#xff0c;有效解决问题&#xff0c;思路上就不能“太乖” —— 不能被题目的叙述过程所束缚&#xff0c;而是力求细思问题&#xff0c;抽象化问题&#xff0c;并找到背后的逻辑&#xff1b;最后抓住核心对象&#xff0c;去除多余项&#xff0c;…

图论——最小生成树

最小生成树 给定一个无向图&#xff0c;在图中选择若干条边把图的所有节点连起来。要求边长之和最小。在图论中&#xff0c;叫做求最小生成树。 prim算法 prim 算法采用的是一种贪心的策略。 每次将离连通部分的最近的点和点对应的边加入的连通部分&#xff0c;连通部分逐渐扩大…

jvisualvm工具使用

jvisualvm 是JDK自带的具有图形界面操作功能的JVM性能监控和诊断工具&#xff0c;它不仅能分析和诊断堆转储文件&#xff0c;在线实时监控本地JVM进程&#xff0c;还能监控远程服务器上的JVM进程。 1 分析服务器下载dump文件 1&#xff09;在我们在安装JDK的bin目录双击jvisa…

C++ list

list需知&#xff1a; list不会出现insert迭代器失效问题 链表插入不会影响原有数据相对位置&#xff0c;且不用扩容 但是erase会导致相对数据位置移动&#xff0c;所有其erase会导致迭代器失效 list排序效率很低 不建议使用 小规模数据量可以使用&#xff0c;比较方便 此外…

DeepSeek-R1 论文解读 —— 强化学习大语言模型新时代来临?

近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域发展迅猛&#xff0c;大语言模型&#xff08;LLMs&#xff09;为通用人工智能&#xff08;AGI&#xff09;的发展开辟了道路。OpenAI 的 o1 模型表现非凡&#xff0c;它引入的创新性推理时缩放技术显著提升了推理能力…

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;项目基本介绍 &#x1f6a6;项…

蓝桥杯思维训练营(一)

文章目录 题目总览题目详解翻之一起做很甜的梦 蓝桥杯的前几题用到的算法较少&#xff0c;大部分考察的都是思维能力&#xff0c;方法比较巧妙&#xff0c;所以我们要积累对应的题目&#xff0c;多训练 题目总览 翻之 一起做很甜的梦 题目详解 翻之 思维分析&#xff1a;一开…

【AI】DeepSeek 概念/影响/使用/部署

在大年三十那天&#xff0c;不知道你是否留意到&#xff0c;“deepseek”这个词出现在了各大热搜榜单上。这引起了我的关注&#xff0c;出于学习的兴趣&#xff0c;我深入研究了一番&#xff0c;才有了这篇文章的诞生。 概念 那么&#xff0c;什么是DeepSeek&#xff1f;首先百…

minimind - 从零开始训练小型语言模型

大语言模型&#xff08;LLM&#xff09;领域&#xff0c;如 GPT、LLaMA、GLM 等&#xff0c;虽然它们效果惊艳&#xff0c; 但动辄10 Bilion庞大的模型参数个人设备显存远不够训练&#xff0c;甚至推理困难。 几乎所有人都不会只满足于用Lora等方案fine-tuing大模型学会一些新的…

【机器学习】自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数

一、使用pytorch框架实现逻辑回归 1. 数据部分&#xff1a; 首先自定义了一个简单的数据集&#xff0c;特征 X 是 100 个随机样本&#xff0c;每个样本一个特征&#xff0c;目标值 y 基于线性关系并添加了噪声。将 numpy 数组转换为 PyTorch 张量&#xff0c;方便后续在模型中…

数据分析系列--④RapidMiner进行关联分析(案例)

一、核心概念 1.项集&#xff08;Itemset&#xff09; 2.规则&#xff08;Rule&#xff09; 3.支持度&#xff08;Support&#xff09; 3.1 支持度的定义 3.2 支持度的意义 3.3 支持度的应用 3.4 支持度的示例 3.5 支持度的调整 3.6 支持度与其他指标的关系 4.置信度&#xff0…

国产之光DeepSeek架构理解与应用分析

目录 初步探索DeepSeek的设计 一、核心架构设计 二、核心原理与优化 三、关键创新点 四、典型应用场景 五、与同类模型的对比优势 六、未来演进方向 从投入行业生产的角度看 一、DeepSeek的核心功能扩展 二、机械电子工程产业中的具体案例 1. 预测性维护&#xff08;Predictive…

Golang :用Redis构建高效灵活的应用程序

在当前的应用程序开发中&#xff0c;高效的数据存储和检索的必要性已经变得至关重要。Redis是一个快速的、开源的、内存中的数据结构存储&#xff0c;为各种应用场景提供了可靠的解决方案。在这个完整的指南中&#xff0c;我们将学习什么是Redis&#xff0c;通过Docker Compose…

基于互联网+智慧水务信息化整体解决方案

智慧水务的概述与发展背景 智慧水务是基于互联网、云计算、大数据、物联网等先进技术&#xff0c;对水务行业的工程建设、生产管理、管网运营、营销服务及企业综合管理等业务进行全面智慧化管理的创新模式。它旨在解决水务企业分散经营、管理水平不高、投资不足等问题。 水务…

力扣动态规划-16【算法学习day.110】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践

Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI&#xff0c;是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手&#xff0c;感觉收获还蛮多的&#xff0c;今天来分享下开发过程中的一些经验~ 为啥要做这个…

langgraph实现 handsoff between agents 模式 (1)

官网示例代码 from typing_extensions import Literal from langchain_core.messages import ToolMessage from langchain_core.tools import tool from langgraph.graph import MessagesState, StateGraph, START from langgraph.types import Command from langchain_openai…

Redis代金卷(优惠卷)秒杀案例-单应用版

优惠卷表:优惠卷基本信息,优惠金额,使用规则 包含普通优惠卷和特价优惠卷(秒杀卷) 优惠卷的库存表:优惠卷的库存,开始抢购时间,结束抢购时间.只有特价优惠卷(秒杀卷)才需要填写这些信息 优惠卷订单表 卷的表里已经有一条普通优惠卷记录 下面首先新增一条秒杀优惠卷记录 { &quo…