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 ...
随机推荐
- 20165101刘天野 2017-2018-2 《Java程序设计》第7周学习总结
#20165101刘天野 2017-2018-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十一章JDBC与MySQL数据库 JDBC简介 JDBC(Java Databas ...
- QGIS 编译
QGIS 编译 在编译的过程中花费了很长时间,特别是编译Debug版本.release版本的编译可以从晚上找到很多的资料,但是Debug的编译相对较少.在Debug编译的过程中,需要单独build工程 ...
- iOS_多线程(一)
在学习多线程之前首先搞清楚以下几个问题. 并发:在同一时刻,只有一条指令被执行,多条指令进行快速切换执行. 并行:在同一时刻,多个处理器可以处理多条指令 1.什么是进程? 一个运行的程序就是 ...
- create_workqueue和create_singlethread_workqueue【转】
本文转载自:http://bgutech.blog.163.com/blog/static/18261124320116181119889/ 1. 什么是workqueueLinux中的Workque ...
- nginx面试要点
首先列出一些面试题目包括nginx和redis的. 1..nginx 框架是怎样的 2. nginx负载均衡的算法怎么实现的,懵逼,说没看过 . nginx 的 upstream目前支持 4 种方式 ...
- oracle 导出
一.导出csv文件 利用Oracle中的Spool缓冲池技术可以实现Oracle数据导出到文本文件. 1).在Oracle PL/SQL中输入缓冲开始命令,并指定输出的文件名: spool /tmp/ ...
- RabbitMQ解决分布式事务
案例:经典案例,以目前流行点外卖的案例,用户下单后,调用订单服务,让后订单服务调用派单系统通知送外卖人员送单,这时候订单系统与派单系统采用MQ异步通讯. RabbitMQ解决分布式事务原理: 采用最终 ...
- MSER最稳定极值区域源码分析
最稳定极值区域介绍 如把灰度图看成高低起伏的地形图,其中灰度值看成海平面高度的话,MSER的作用就是在灰度图中找到符合条件的坑洼.条件为坑的最小高度,坑的大小,坑的倾斜程度,坑中如果已有小坑时大坑与小 ...
- $.ajax应用之请求头headers
昨天项目中,由于要请求token验证,后台给出的方案是采用请求头返回token数据,给出的API文档是这样的 由于之前一直都是采用请求体发送请求,服务器在应答体李返回数据.和这个不一样: 采用jq的$ ...
- 特殊字符处理(WPF)
WPF XAML 特殊字符(小于号.大于号.引号.&符号) - Andrew.Wangxu 时间 2013-09-07 18:14:00 博客园-所有随笔区原文 http://www.cn ...