二级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语言

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

优盘恢复原始容量工具

买到一个优盘&#xff0c;显示32mb&#xff0c;我见过扩容盘&#xff0c;但是这次见到的是缩容盘&#xff0c;把2g的容量缩成32MB了&#xff0c;首次见到。。用芯片查询工具显示如下 ChipsBank(芯邦) CBM2199E 使用以下工具&#xff0c;恢复原始容量。。 其他CMB工具可能不行…

面对企业文件交换难题,镭速跨网文件交换系统是如何解决的?

在当今这个数字化快速发展的时代&#xff0c;企业越来越依赖于数据交换来维持其业务运作。无论是内部网络之间的沟通还是与外部合作伙伴的数据共享&#xff0c;高效且安全的跨网文件交换都显得尤为重要。然而&#xff0c;在实际操作中&#xff0c;许多企业面临着各种各样的挑战…

黑马点评 - 商铺类型缓存练习题(Redis List实现)

首先明确返回值是一个 List<ShopType> 类型那么我们修改此函数并在 TypeService 中声明 queryTypeList 方法&#xff0c;并在其实现类中实现此方法 GetMapping("list")public Result queryTypeList() {return typeService.queryTypeList();}实现此方法首先需要…

计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

知识库管理如何推动企业数字化转型与创新发展的深层次探索

内容概要 在当今数字化转型的大背景下&#xff0c;知识库管理日益显现出其作为企业创新发展的核心驱动力的潜力。这种管理方式不仅仅是对信息的存储与检索&#xff0c;更是一种赋能&#xff0c;以提升决策效率和员工创造力。企业能够通过系统地整合和管理各类知识资源&#xf…

【Leetcode】463. 岛屿的周长

一、题目描述 给定一个KaTeX parse error: Undefined control sequence: \x at position 4: row\̲x̲\col的二维网格地图 g r i d grid grid&#xff0c;其中&#xff1a; g r i d [ i ] [ j ] 1 grid[i][j]1 grid[i][j]1表示陆地&#xff0c; g r i d [ i ] [ j ] 0 grid[…

企业微信远程一直显示正在加载

企业微信远程一直显示正在加载 1.问题描述2.问题解决 系统&#xff1a;Win10 1.问题描述 某天使用企业微信给同事进行远程协助的时候&#xff0c;发现一直卡在正在加载的页面&#xff0c;如下图所示 2.问题解决 经过一番查找资料后&#xff0c;我发现可能是2个地方出了问题…

【Block总结】ODConv动态卷积,适用于CV任务|即插即用

一、论文信息 论文标题&#xff1a;Omni-Dimensional Dynamic Convolution作者&#xff1a;Chao Li, Aojun Zhou, Anbang Yao发表会议&#xff1a;ICLR 2022论文链接&#xff1a;https://arxiv.org/pdf/2209.07947GitHub链接&#xff1a;https://github.com/OSVAI/ODConv 二…

英语语法 第一天

I’m a student. 我是个学生 我是个新东方的学生 I’m a student of New Oriental School 我爱你 I love you 我在心中爱你 I love you in my heart. 这是一朵花 This is a flower 这是一朵在公园里的花 This is a flower in the park.(修饰部分在修饰词后面) 主干…

doris:高并发导入优化(Group Commit)

在高频小批量写入场景下&#xff0c;传统的导入方式存在以下问题&#xff1a; 每个导入都会创建一个独立的事务&#xff0c;都需要经过 FE 解析 SQL 和生成执行计划&#xff0c;影响整体性能每个导入都会生成一个新的版本&#xff0c;导致版本数快速增长&#xff0c;增加了后台…

智联出行公司布局中国市场,引领绿色出行新潮流

近日&#xff0c;智联共享科技有限公司&#xff08;智联出行ZSTL&#xff09;正式入驻中国香港市场&#xff0c;开启中国地区“合伙人”战略部署&#xff0c;其线上服务平台也于同日上线。 作为共享单车领域的先行者&#xff0c;智联出行公司此举标志着其全球化布局的重要进展&…

PythonFlask框架

文章目录 处理 Get 请求处理 POST 请求应用 app.route(/tpost, methods[POST]) def testp():json_data request.get_json()if json_data:username json_data.get(username)age json_data.get(age)return jsonify({username: username测试,age: age})从 flask 中导入了 Flask…

开源的瓷砖式图像板系统Pinry

简介 什么是 Pinry &#xff1f; Pinry 是一个开源的瓷砖式图像板系统&#xff0c;旨在帮助用户轻松保存、标记和分享图像、视频和网页。它提供了一种便于快速浏览的格式&#xff0c;适合喜欢整理和分享多种媒体内容的人。 主要特点 图像抓取和在线预览&#xff1a;支持从网页…

前端进阶:深度剖析预解析机制

一、预解析是什么&#xff1f; 在前端开发中&#xff0c;我们常常会遇到一些看似不符合常规逻辑的代码执行现象&#xff0c;比如为什么在变量声明之前访问它&#xff0c;得到的结果是undefined&#xff0c;而不是报错&#xff1f;为什么函数在声明之前就可以被调用&#xff1f…

stm32教程:EXTI外部中断应用

早上好啊大佬们&#xff0c;上一期我们讲了EXTI外部中断的原理以及基础代码的书写&#xff0c;这一期就来尝试一下用它来写一些有实际效能的工程吧。 这一期里&#xff0c;我用两个案例代码来让大家感受一下外部中断的作用和使用价值。 旋转编码器计数 整体思路讲解 这里&…

数据分析系列--⑦RapidMiner模型评价(基于泰坦尼克号案例含数据集)

一、前提 二、模型评估 1.改造⑥ 2.Cross Validation算子说明 2.1Cross Validation 的作用 2.1.1 模型评估 2.1.2 减少过拟合 2.1.3 数据利用 2.2 Cross Validation 的工作原理 2.2.1 数据分割 2.2.2 迭代训练与测试 ​​​​​​​ 2.2.3 结果汇总 ​​​​​​​ …

WPS mathtype间距太大、显示不全、公式一键改格式/大小

1、间距太大 用mathtype后行距变大的原因 mathtype行距变大到底怎么解决-MathType中文网 段落设置固定值 2、显示不全 设置格式&#xff1a; 打开MathType编辑器点击菜单栏中的"格式(Format)"选择"间距(Spacing)"在弹出的对话框中调整"分数间距(F…

【Postman接口测试】Postman的安装和使用

在软件测试领域&#xff0c;接口测试是保障软件质量的关键环节之一&#xff0c;而Postman作为一款功能强大且广受欢迎的接口测试工具&#xff0c;能够帮助测试人员高效地进行接口测试工作。本文将详细介绍Postman的安装和使用方法&#xff0c;让你快速上手这款工具。 一、Pos…

因果推断与机器学习—用机器学习解决因果推断问题

Judea Pearl 将当前备受瞩目的机器学习研究戏谑地称为“仅限于曲线拟合”,然而,曲线拟合的实现绝非易事。机器学习模型在图像识别、语音识别、自然语言处理、蛋白质分子结构预测以及搜索推荐等多个领域均展现出显著的应用效果。 在因果推断任务中,在完成因果效应识别之后,需…

python算法和数据结构刷题[2]:链表、队列、栈

链表 链表的节点定义&#xff1a; class Node():def __init__(self,item,nextNone):self.itemitemself.nextNone 删除节点&#xff1a; 删除节点前的节点的next指针指向删除节点的后一个节点 添加节点&#xff1a; 单链表 class Node():"""单链表的结点&quo…