C语言第二次实验作业
PTA
=================
11-6 方阵循环右移
---------------
本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、...、n-1列变换为第n-m、n-m+1、...、n-1、0、1、..、n-m-1列。
输入格式:
输入第一行给出两个正整数m和n(1≤n≤6)。接下来一共n行,每行n个整数,表示一个n阶的方阵。
输出格式:
按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。
输入样例:
```
2 3
1 2 3
4 5 6
7 8 9
```
输出样例:
```
2 3 1
5 6 4
8 9 7
```
1.设计思路
- 定义两个大小相同的二维数组
- 用一个数组存储初始数组,用另一个数组存储循环右移后的数组
2.源代码
```
#include<stdio.h>
int main(){
int a[7][7],b[7][7],m,n,i,j;
scanf("%d %d",&m,&n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
b[i][(j+m)%n]=a[i][j];
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ",b[i][j]);
}
printf("\n");
}
return 0;
}
```
3.遇到的问题和解决方法
- 答案错误:两个数组对应数的列位置关系弄反了
解决方法:更正两个数组对应数的列位置关系
***
12-8 删除重复字符
---------------------
本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
```
ad2f3adjfeainzzzv
```
输出样例:
```
23adefijnvz
```
1.设计思路
- 定义两个数组,a[80]存储输入数据并作为b[200]的下标
- 将下标为a[80]中数值的b[200]数组元素赋同值
- 输出b[200]数组的下标值转化为字符输出
2.源代码
```
#include<stdio.h>
#include<string.h>
int main(){
char a[80],b[200]={0};
gets(a);
int i;
for(i=0;a[i]!='\0';i++){
b[a[i]]=1;
}
for(i=0;i!=200;i++){
if(b[i]==1) printf("%c",i);
}
return 0;
}
```
3.遇到的问题和解决方法
- 答案错误:定义过多数组,使用混乱
解决方法:重新整理思路,只定义两个数组,将a数组转化为下标
***
13-6 数组循环右移
-------------------
本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a?0??a?1???a?n?1??)变换为(a?n?m???a?n?1??a?0??a?1???a?n?m?1??)(最后m个数循环移至最前面的m个位置)。
函数接口定义:
```
int ArrayShift( int a[], int n, int m );
```
其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。
裁判测试程序样例:
```
#include <stdio.h>
#define MAXN 10
int ArrayShift( int a[], int n, int m );
int main()
{
int a[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
ArrayShift(a, n, m);
for ( i = 0; i < n; i++ ) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
printf("\n");
return 0;
}
/* 你的代码将被嵌在这里 */
```
输入样例:
```
6 2
1 2 3 4 5 6
```
输出样例:
```
5 6 1 2 3 4
```
1.设计思路
- 定义一个数组存储数据
- 定义另一个数组存储循环右移后的结果并输出
2.源代码
```
int ArrayShift( int a[], int n, int m ){
int b[100],i;
for(i=0;i<n;i++){
b[(i+m)%n]=a[i];
}
for(i=0;i<n;i++){
a[i]=b[i];
}
}
```
3.遇到的问题和解决方法
- 答案错误:将两个数组对应数值所在列数关系弄反,导致新数组列顺序出错
解决方法:更正两个数组对应数值所在列数关系式
***
14-5 指定位置输出字符串
--------------------------
本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。
函数接口定义:
char *match( char *s, char ch1, char ch2 );
函数match应打印s中从ch1到ch2之间的所有字符,并且返回ch1的地址。
裁判测试程序样例:
```
#include <stdio.h>
#define MAXS 10
char *match( char *s, char ch1, char ch2 );
int main()
{
char str[MAXS], ch_start, ch_end, *p;
scanf("%s\n", str);
scanf("%c %c", &ch_start, &ch_end);
p = match(str, ch_start, ch_end);
printf("%s\n", p);
return 0;
}
/* 你的代码将被嵌在这里 */
```
输入样例1:
```
program
r g
```
输出样例1:
```
rog
rogram
``
输入样例2:
```
program
z o
```
输出样例2:
```
(空行)
(空行)
```
输入样例3:
```
program
g z
```
输出样例3:
```
gram
gram
```
1.设计思路
- 运用while()函数寻找第一个指定字符和第二个指定字符
- 运用指针记录第一个字符首次出现的地址
2.源代码
```
char *match( char *s, char ch1, char ch2 ){
int i=0;
char *p;
while(s[i]!=ch1) {i++;if(s[i]=='\0') break;}
if(s[i]=='\0') {p="\n";}
else{
p=&s[i];
while(s[i]!=ch2){
if(s[i]=='\0') break;
printf("%c",s[i]);
i++;
}
if(s[i]==ch2) printf("%c",s[i]);
printf("\n");
}
return p;
}
```
3.遇到的问题和解决方法
- 答案错误:ch1找不到, ch2找到的的情况多输出一行空行
解决方法:没找到ch1的情况删去多输出的一个回车
- 答案错误:ch1找到, ch2找不到的情况输出乱码
解决方案:找到ch1后再将ch1的地址赋给指针p
***
15-3 函数实现字符串逆序
------------------------
本题要求实现一个字符串逆序的简单函数。
函数接口定义:
```
void f( char *p );
```
函数f对p指向的字符串进行逆序操作。要求函数f中不能定义任何数组,不能调用任何字符串处理函数。
裁判测试程序样例:
```
#include <stdio.h>
#define MAXS 20
void f( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
f(s);
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
```
输入样例:
```
Hello World!
```
输出样例:
```
!dlroW olleH
```
1.设计思路
- 对字符数组是元素个数为奇数或偶数进行讨论
- 将前后对称位置的字符对调
2.源代码
```
void f( char *p ){
int i=0,k;
char t;
while(p[i]) i++;
if(i%2==1){
for(k=0;k<=i/2;k++){
t=p[k];
p[k]=p[i-k-1] ;
p[i-k-1]=t;
}
}
else {
for(k=0;k<i/2;k++){
t=p[k];
p[k]=p[i-k-1] ;
p[i-k-1]=t;
}
}
}
```
3.遇到的问题和解决方法
- 答案错误:输出字符串乱序
解决方法:将数组元素个数为奇数和偶数的情况分开
***
心得体会
-------------
1.遇到不懂的地方要多找人问问
2.要考虑清楚特定输出数据赋值语句摆放位置,若摆放位置不当可能出现乱码
C语言第二次实验作业的更多相关文章
- C语言第二次实验报告
1.实验题目 题1:11-7 找鞍点(20 分) 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点 题2: ...
- c语言 第二次实验报告
一·实验题目,设计思路,实现方法 11-7 找鞍点 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点. 利用双重 ...
- SDN2017 第二次实验作业
安装floodlight 参考链接:http://www.sdnlab.com/19189.html 从github下载源码,并编译安装 $ sudo apt-get install build-es ...
- C语言第二次博客作业---分支结构
一,PTA实验作业 题目1.计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.实验代码 double x,result; scanf("%lf",&x); if( ...
- C语言第二次作业
一.PTA实验作业 题目1:7-1 计算分段函数[2] 1.实验代码 double x,y; scanf("%lf",&x); if (x>=0) { y=sqrt( ...
- C语言第二次博客作业—分支结构
一.PTA实验作业 题目1:计算分段函数 1.实验代码 double x,y; scanf("%lf",&x); if(x>=0){ y=sqrt(x); print ...
- C语言第二周作业
一.PTA实验作业 题目一:7-1 计算分段函数 1.实验代码 double x,y; scanf("%lf", &x); if(x >= 0){ y=pow(x,0 ...
- C语言第二次博客作业——分支结构
一.PTA实验作业 题目1:计算分段函数 1.实验代码 #include<stdio.h> #include<math.h> int main(void) { double x ...
- C语言第二次博客作业
一.PTA实验作业 题目1:计算分段函数[2] 本题目要求计算下列分段函数f(x)的值: 1.实验代码 int main (void) { double x,y; scanf("%lf&qu ...
随机推荐
- Hadoop相关知识整理系列之一:HBase基本架构及原理
1. HBase框架简单介绍 HBase是一个分布式的.面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.HBas ...
- INSPIRED启示录 读书笔记 - 第29章 大公司如何创新
大公司实现创新的方法 20%法则:谷歌的程序员有20%的工作时间可以用来从事创新研究,这个方法最早是从施乐帕克研究所学来的.20%法则鼓励普通员工自己尝试各种想法,让员工打心底愿意倾注更多的激情和汗水 ...
- 第一章 安装MongoDB
需要下载 高效开源数据库(mongodb) V3.0.6 官方正式版 安装配置: MongoDB默认的数据目录为:C:\data\db.如果不用默认目录,则需要在在mongod.exe命令后加--db ...
- 【转载】丑数humble numbers
转载地址:http://blog.csdn.net/qwerty_xk/article/details/12749961 题:只有2 3 5 这三个因子的数,求第1500个 设1为第一个丑数,求第 ...
- 向maven依赖包中添加新的jar包
今天做一个项目测试的时候正好遇到这个问题,查了网上的资料,有两篇写的挺好,两种方法都试了,都可以. 1.个人觉得第一种简单:http://www.360doc.com/content/14/0517/ ...
- 深入Spring:自定义注解加载和使用
前言 在工作中经常使用Spring的相关框架,免不了去看一下Spring的实现方法,了解一下Spring内部的处理逻辑.特别是开发Web应用时,我们会频繁的定义@Controller,@Service ...
- MapReduce-join连接
join连接 MapReduce能够执行大型数据集间的连接(join)操作.连接操作的具体实现技术取决于数据集的规模及分区方式连接操作如果由mapper执行,则称为“map端连接”:如果由reduce ...
- 在java中public void与public static void区别
static 方法可以被main方法直接调用,而非static方法不可以.因为static方法是属于类的,是类方法.可以通过类名.方法名直接调用.而非static方法必须等对象被new出来以后才能使用 ...
- numpy nonzero与isnan
nonzero 直接看例子: In [83]: x = np.array([[1,0,0], [0,2,0], [1,1,0]]) In [84]: x.shape Out[84]: (3L, 3L) ...
- 深入分析理解Tomcat体系结构
Tomcat整体结构 由上图可知Tomcat的顶层容器是Server,而且一个Tomcat对应一个Server,一个server有多个service提供服务.service包含两个重要组件:Conne ...