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语言第二次实验作业的更多相关文章

  1. C语言第二次实验报告

    1.实验题目 题1:11-7 找鞍点(20 分) 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点    题2: ...

  2. c语言 第二次实验报告

    一·实验题目,设计思路,实现方法 11-7 找鞍点 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点. 利用双重 ...

  3. SDN2017 第二次实验作业

    安装floodlight 参考链接:http://www.sdnlab.com/19189.html 从github下载源码,并编译安装 $ sudo apt-get install build-es ...

  4. C语言第二次博客作业---分支结构

    一,PTA实验作业 题目1.计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.实验代码 double x,result; scanf("%lf",&x); if( ...

  5. C语言第二次作业

    一.PTA实验作业 题目1:7-1 计算分段函数[2] 1.实验代码 double x,y; scanf("%lf",&x); if (x>=0) { y=sqrt( ...

  6. C语言第二次博客作业—分支结构

    一.PTA实验作业 题目1:计算分段函数 1.实验代码 double x,y; scanf("%lf",&x); if(x>=0){ y=sqrt(x); print ...

  7. C语言第二周作业

    一.PTA实验作业 题目一:7-1 计算分段函数 1.实验代码 double x,y; scanf("%lf", &x); if(x >= 0){ y=pow(x,0 ...

  8. C语言第二次博客作业——分支结构

    一.PTA实验作业 题目1:计算分段函数 1.实验代码 #include<stdio.h> #include<math.h> int main(void) { double x ...

  9. C语言第二次博客作业

    一.PTA实验作业 题目1:计算分段函数[2] 本题目要求计算下列分段函数f(x)的值: 1.实验代码 int main (void) { double x,y; scanf("%lf&qu ...

随机推荐

  1. c++ boost库学习二:内存管理->智能指针

    写过C++的人都知道申请和释放内存组合new/delete,但同时很多人也会在写程序的时候忘记释放内存导致内存泄漏.如下所示: int _tmain(int argc, _TCHAR* argv[]) ...

  2. CentOS 7 安装 maven

    下载地址 http://maven.apache.org/download.cgi 版本 apache-maven-3.3.9 -bin.tar.gz tar -xvf apache-maven-3. ...

  3. 3Sum,4Sum问题

    //三数和为0的问题.要求去重,并且输出数字有序.public List<List<Integer>> threeSum(int[] nums) { Arrays.sort(n ...

  4. DB2导入导出方法总结

    1.导出 DEL 文本文件  export to D:\T_TESTTABLE20121220.del of del select * from T_TESTTABLE 2.导出 ixf 文本文件.i ...

  5. JavaScript 正则表达收集整理

    JavaScript 正则表达收集整理 //可为空 /^\s*$/ //密码验证,必须且只含有数字和字母,可以拥有英文符号,6-17位 /(?=.{,})(?=.*\d)(?=.*[a-z])[\x2 ...

  6. Tensorflow中的transpose函数解析

    transpose函数作用是对矩阵进行转换操作 相信说完上面这一句,大家和我一样都是懵逼状态,完全不知道是怎么回事,那么接下来和我一起探讨吧 1.二维数组 x = [[1,3,5],  [2,4,6] ...

  7. 使用struts2的iterator标签出现的错误

    错误如下所示: 代码如下所示: <body> <s:debug></s:debug> 获取list的值第一种方式 <!-- 3 获取值栈list集合数据 -- ...

  8. Xcode 离线文档 下载

    从下面这个xml中可获取下载地址: https://developer.apple.com/library/downloads/docset-index.dvtdownloadableindex 最后 ...

  9. poj 1324 状态压缩+bfs

    http://poj.org/problem?id=1324 Holedox Moving Time Limit: 5000MS   Memory Limit: 65536K Total Submis ...

  10. win7与vbox虚拟机Ubuntu设置共享文件夹

    1.进入Ubuntu系统,在右上角打开设备->安装增强功能->运行->输入密码 2.在终端中安装,安装完后重新启动Ubuntu 3.在本机中设置一个共享文件夹(文件名是vbox-sh ...