以下题目是由老师布置的《 谭浩强C程序设计(第四版)》的oj第四次练习题,共五道
使用软件是Devc++5.11。

希望大家抄了作业顺手点个赞,谢谢,爱宁

最近期末挺忙的,学了微机原理之后,就突然很想写代码。。。这个帖子还没写完,但是写太久了,先发出来吧,之后再添加上最后一道题。宝贝们加油呀!

A. C语言_ex07_01

运行时间限制: 1000 运行内存限制: 65536

题目描述
首先请实现如下两个函数(要自己写代码完成,不允许直接调用库函数):
int myStrLen(char *s);
该函数功能为求字符串s的长度。
void myStrConcat(char *string1, char *string2);
该函数的功能为将字符串string2拼接至字符串string1后边。注意:该函数的两个参数,在调用时有可能会指向同一个字符串,函数需要在这种情况下能正确完成指定的功能。

主函数要求使用以上两个函数实现如下功能:
输入:
第一行为三个整数n(0<n<10),a,b, 第二行为n个整数,后边为n行字符串,每个字符串长度不超过20。
输出:
要求首先将第b行字符串拼接至第a行的字符串后再输出。
第一行为n个用单个空格分隔的整数(最后一个数后无空格),为按各字符串的输入次序输出的各字符串的长度。
后边n行为将输入的字符串按输入的第2行给出的顺序依次输出。
输入保证合法且字符串中不包含空格。

输入样例
2 0 1
1 0
Hello
World
输出样例
10 5
World
HelloWorld

#include<stdio.h>int myStrLen(char *s){int i,k=0;//我刚开始这里忘记给k赋值 for(i=0;s[i]!='\0';i++)//字符串末尾是\0是一个十分好用的条件 k++;return k;}void myStrConcat(char *string1, char *string2)//这里不能加分号!复制的时候很容易带上,会出现这个错误:expected identifier or '(' before '{' token{int i;int l1, l2;l1 =  myStrLen(string1);l2 =  myStrLen(string2);for (i=l1; i<l1+l2; ++i) string1[i] = string2[i-l1];string1[l1+l2] = '\0';   //注意这个不能改~想过在前面循环l1+l2上 +1,但是会答案错误 }int main(){int n,a,b,i;int num[10]; char str[10][50];//这个是要输入的字符串,n行,每行不超过21个字符,重叠之后就是 42,如果写了20就会运行时错误,写了42以下的就会答案错误 scanf("%d %d %d",&n,&a,&b);for(i=0;i<n;i++)scanf("%d",&num[i]); for(i=0;i<n;i++)scanf("%s",str[i]);//%s就是输入字符串,不用写& myStrConcat(str[a],str[b]);//使用刚刚建的函数for(i=0;i<n;++i)//这里一定要写++i printf(" %d",myStrLen(str[i])); printf("\n");//按第二行给出的顺序,就是按num[i]的顺序输出str[]for(i=0;i<n;++i)printf("%s\n",str[num[i]]);          return 0;  }

第一题太恐怖了,通过数/提交数有137/513!!提交数比别的题多了两三倍,大家一定要好好看这道题。。。

9.新加密技术

题目描述

你发明了一种新的加密技术,它是通过一种聪明的方法将随机产生的一些字符插入原信息。因为涉及专利问题,我们这里不讨论字符是如何产生和插入原信息的。为了证实你的想法,现在需要写个程序来检查原信息是否真的编入最终的字符串了。
给定2个字符串s和t,你需要判断s是否是t的子串。如果你可以通过从中删除部分字符,然后再连接剩下的字符得到s,则认为s是t的子串。
(改编自北大在线裁判系统中的题目)
输入格式
第1行是测试数据的组数T,后面跟着T行测试用例。每行包含2个用空格隔开的字符串(字符 串内仅包含英文大写字母或小写字母), 前边的为s,后边的为t (s和t的长度均不超过10000)。
输出格式
输出: T行,每行对应一组测试用例,如果s是t的子串输出Yes,否则输出No。
输入样例
4
sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter
输出样例
Yes
No
Yes
No

//这道题其实就是去判断两个字符串中的相等元素,相等的从第一个判断到最后一个
#include<stdio.h>
# include <string.h>
#include<stdbool.h>//如果函数选择了bool类型,布尔值对应的头文件。不过有的编辑器不写这个也可以过。int judge( char *str1,char *str2)//这个用布尔值bool也可以。
{int i,j,l1,l2,equal=0,start=0;l1=strlen(str1);l2=strlen(str2);//因为检测字符串2中有没有1,所以用1中的第一个元素,去2里面对一圈,对到了第一个就跳出循环,开始对下一个 for(i=0;i<l1;++i)//经过上一道题,养成了写++i代替i++的习惯。。 {for(j=start; j<l2; ++j)//注意这里的start,因为文字有顺序的,字符串1中的第二个元素有可能出现在之前对上的元素之前{start++;if(str1[i] == str2[j]){equal++;break;}} }if(equal==l1)return 1;elsereturn 0;//如果用布尔值这里要改成
//   if (equal == l1)
//      return true;
//  else
//      return false;
}int main ()
{int T,i;scanf("%d",&T); //T行测试用例,小技巧:按住shift再按字母可以快捷输入大写英文 char str1[T][10005],str2[T][10005];//仍然要注意这里的取值范围。for(i=0;i<T;++i) scanf("%s %s",str1[i],str2[i]); for(i=0;i<T;++i) {    if(judge(str1[i],str2[i]))//if(表达式)表达式的值为1后面的程序执行,若为0则不执行。printf("Yes\n");elseprintf("No\n");}}

C. 句子输出

运行时间限制: 1000 运行内存限制: 65536
作者: bupt_admin 是否specialjudge: False

题目描述

事先允许最多五个英文字符串输入后,再指定输出顺序的编号(即对应输入字符串的顺序),使对应输出的英文字符串按照指定的顺序输出在一行上。
输入格式
第一行:输入一个正整数,表示将要输入的字符串的个数,最大为5。
第二行起:在每一行内对应输入一个字符串,限制在10个字符以内(含10个字符) 。
输入完最后一个字符串的下一行:依次输入输出顺序编号,从0开始(即0表示输入的第一个字符串, 1表示输入的第二个字符串,依次类推),两个相邻数字之间用空格隔开。
输出格式
只有一行,按照输入指定的顺序输出字符串。两个相邻的字符串间用空格隔开,最后一个字符串后没有空格且应换行。
输入样例
3
world
Hello
!
1 0 2
输出样例
Hello world !

#include<stdio.h>
# include <string.h>
int main()
{//按order数组中的顺序输出str中的内容
//不要太纠结空格啥的了,都已经学到这里了。。。int n,order[10],i,j;char str[10][20];scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",str[i]);}for( j=0;j<n;j++){scanf("%d",&order[j]);}for(i=0;i<n;i++){printf("%s ",str[order[i]]);//这个空格不加也能过}
}

D、密码危机

题目描述
CSDN用户密码泄露事件在互联网引起了一场密码危机。热衷于使用支付宝网购的盾盾不禁担心起自己的支付宝账户安全。通过了解,盾盾发现支付宝使用双密码,安全控件,资金异动通知,各种安全产品来保障账户的安全,可以放心使用。密码危机事件也引起了盾盾对加密的兴趣,不过他也只能从最简单的开始。盾盾开始有一个长为26的字符串,表示字母的对应关系,比如S对应A,C对应E,于是SCS就被加密为AEA。可是数据一多盾盾便不知道如何处理了,他只能求助于你,现在给你一个26个字母的对应关系,然后再给你n个加密前的字符串,请你输出加密后的字符串。
输入格式
一共有T组测试数据。每组数据第一行为长为26的字符串,第i位S[i]表示字符(‘A’+i-1) 加密后得到S[i],之后为一个数字n,表示共有n组询问。
数据范围: T<=10;n<=100;
字符串长度不超过30(均为大写字母)
输出格式
对于每组数据中的每次询问,输出一行,为加密后的字符串
输入样例
1
QWERTYUIOPASDFGHJKLZXCVBNM
3
ILOVEBUPT
ACMICPC
BUPTSCS
输出样例
OSGCTWXHZ
QEDOEHE
WXHZLEL

#include<stdio.h>
#include<string.h>//题目的意思就是QWER对应ABCD。先输入密码,然后把密码后面的文字加密输出。
//T的意思是:不止一组密码。可以分别对应,做个循环。 int main()
{int T,n,i,j;char string[10][32][102];      //string是被加密的文字,第一个数字表示第T组密码,第二个是第几行代码 char strkey[10][26];      //string key,用来存放密码 scanf("%d",&T);for(i=0;i<T;i++){scanf("%s",strkey[i]);  scanf("%d",&n); for(j=0;j<n;j++){scanf("%s",string[i][j]);}for(j=0;j<n;j++){encryption(string[i][j],strkey[i]);   //进行加密!输出的代码写在函数里面啦//我一开始是把输出写在main里的。//但是对于函数来说,return一个字符串有点难操作。为了不难为自己,就在函数里面输出吧。 printf("\n");        //我一开始忘记换行啦! } }}
void encryption(char* in,   char* key)
//encryption百度查的词,意思是“加密”。这行的括号里定义的是(被加密的字符串str in,密码key)
//char* 这个东西,暂时考虑成一个不用琢磨范围写几的数组就ok。
{//在函数里面使用的参数,名字可以随便取,不会对main里的有什么影响。但是main里定义的也不能拿来用。(这就是传说中的形参与实参) int i=0;char out[35];for(i=0;i<strlen(in);i++)  //一个一个的转化strin,需要用到strlen来知道in字符串的长度。//或者用   字符串最后一个是'\0'   这个条件来判断。 out[i]=key[in[i]-65]; //A的asc2码是65。后面的依次加一。减去65,就可以知道这个字母是A后面第几个。//用密码里面对应位置的字母,放进out里面。 out[strlen(in)]='\0'; //【高亮】这句很重要! printf("%s",out );
}

E.北京市机动车网上自选牌号的正误容易鉴别吗?

题目描述
2009年3月9日开始,北京市交通管理局正式推出北京市机动车网上自选牌号业务,极大的方便了新购车的市民自选中意的新车牌照号的需求。根据国家制定的机动车号牌号码标准,一辆机动车的号牌号码由七位字符组成,前两位是号牌号码发牌机关代码,后五位是具体号牌号码。主管部门在具体操作上又出台了以下规定:
机动车所有人网上选号的号牌号码发牌机关代码为"京N或者"京Y。后面的五位号牌号码的最后一位必须为数字,其余四位有且必须有两位为英文字母(但字母和0不可用)。例如:京NAB999、京NC9D99、京NE99F9、京N9GH99、京N9J9K9、京N99LM9、京YNB999、京YP9D99、京YZ99F9号码都是正确的。
你能据此用C语言编写一个程序来检测给定的号牌号码是否符合上述规定吗?
输入格式
只有一行,含有号牌号码最后五位的字符内容。如果输入了小写字母,请先变更为大写字母再行检测。如果输入不允许的其他字符内容,则输出"no.”(不含双引号本身)。
输出格式
只有一行。如果检测认为符合规定则输出yes:"并后跟对应的号牌号码,如果检测认为不符合规定则输出’no.”(不含双引号本身)。
输入样例
K00a1
输出样例
yes:K00A1

#include<stdio.h>
#include<string.h>
/*题目分析:先把大小写搞对,然后再判断。判断要素有三条:
1.第5位必须是数字 ---在i=4时添加判断条件 。
2.字母不能是I、O---在输入时判断,如果输入了IO就直接错啦 。
3.有且仅有两位是字母---可以在输入时添加变量,计算字母、数字的个数;也可以利用字母比数字asc2码大的特点在最后判断。
注意要点:非常考验asc2码的应用和判断顺序的逻辑。这道题其实放哪章都能做。输出的“.”、“:”和数组界限都是老生常谈了。
*/
char change(char input)     //用来把小写字母变成大写。不用函数也是一样的
{char output = 0;if(input>='a'&&input<='z'){output=input-32;              //同样字母的小写ASCII码值比大写的ASCII码值大32return output;}else{return input;         //函数是用return来表示自己对输入干了点什么的。//这个叫change的函数吃掉的和吐出来的都是字符,所以函数的定义类型是char。}}int main()            //这里是主函数。
{int i=0,sum=0;char in[5]={ };       //我一开始华丽丽的把这个写成了in[4],出现的bug是最后一位不管是什么都会双倍asc2码输出。(如:1-b,2-d) for(i=0;i<5;++i) //得到教训:出现百思不得解的bug,要优先考虑数组越界 {scanf("%c",&in[i]); in[i] = change(in[i]);sum =sum + in[i];switch(in[i]){                              //注:冒号后面是空语句,或者理解成满足条件直接跳出循环。 case 'A'...'H':   break;    //查了一下 ,switch中判断范围可以用...来表示。注意如果判断数字的范围,要在点和数字之间加空格 case 'J'...'N':   break; //感兴趣的同学可以查一下,关键词是 "switch判断范围"case 'P'...'Z':   break;    //用if(>=&&<= )这种判断方式也是一样的。case '0'...'9':   break;    //注意本句写法~是判断0到9的asc2码,而不是判断数字。 default :{printf("no.");return 0;       //其实main也只是个函数。//让他早点return个0出来,后面步骤的就直接不用走了。//相当于跳出函数的意思。}}if(i==4)       //在i=4时判断两个情况:最后一位为字母、有且只有两个字母 {if(in[4]<='0'||in[4]>='9'){printf("no.");return 0;}if(sum<=274)       //最小的大写字母是A(65),这就是满足条件的最小情况 65+65+48+48+48=274。‘0’的码是48~我一开始这里也犯错了{printf("no.");return 0;}else break; }}printf("yes:");for(i=0;i<5;i++){printf("%c",in[i]);}
}

道歉解释

由于我实在是太能拖,第八次练习已经挂了。。没办法在oj上验证了。。。如果可以的话,过两天做点其他的题继续放上来

【C语言答案】第七次练习---二维数组简单函数相关推荐

  1. 【IT】C语言函数中怎么返回一个二维数组

    C语言函数中怎么返回一个二维数组

  2. C语言编写杨辉三角(二维数组方法)

    C语言实现杨辉三角(二维数组) 杨辉三角是什么 杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,帕斯卡(1623--- ...

  3. C语言中的二级指针和二维数组问题

    关于二级指针和二维数组两者差别很大,不可以直接用二级指针传递二维数组 首先来看看二维数组在内存中是如何组织的呢? 一维数组 T arr1 = new T[9]  二维数组T arr2 = new T[ ...

  4. java把二维转换为一维_在R语言中什么函数可以将二维数组转换成一维数组

    满意答案 vi31892i 2013.09.11 采纳率:44%    等级:11 已帮助:6956人 这好象是汇编语言的问题吧 举个例子吧 #include "iostream.h&quo ...

  5. android数据存放map_go语言学习笔记(18)-二维数组和map

    二维数组 二维数组在声明/定义时有对应四种写法(类似一维数组) var 数组名 [大小][大小]类型 = [大小][大小]类型{{初值...},{初值...}} var 数组名 [大小][大小]类型 ...

  6. 3 5的二维数组C语言程序,C语言及程序设计提高例程-33 二维数组元素的引用

    贺老师教学链接  C语言及程序设计提高 本课讲解 输入输出二维数组元素 #include int main() { int s[3][5], i, j; printf("Input 3*5 ...

  7. c语言二维函数杨辉三角,C语言编写杨辉三角(二维数组方法)

    C语言实现杨辉三角(二维数组) 杨辉三角是什么 杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,帕斯卡(1623--- ...

  8. 【C语言】案例三十三 【二维数组】神奇魔方阵

    害,神奇魔方阵.让我想起了我做过的快乐暑假······ 案例描述 古代又称"纵横图",就是指由自然数组成的方阵.编程要求实现一个5行5列的魔方阵. 必备知识 二维数组的定义与初始化 ...

  9. cout 数组_C语言学习笔记(十)二维数组内存预设

    1 问题描述 二维数组存储数据数量根据其他方法间接获得: 为当前数据数量申请内存: 2 相关程序 #include --2020.11.23--

最新文章

  1. “看墙之外” ——遮挡下的人体姿态估计
  2. Lucene第一篇【介绍Lucene、快速入门】
  3. Nginx 使用中文URL,中文目录路径
  4. 荐号 | 11个人工智能与大数据相关的个人、企业优质号
  5. boost::split()的使用方式
  6. 查看oracle空间使用率,Oracle 查看表空间使用率
  7. 单用户修改root密码--centos6.2
  8. Linux启动服务详解
  9. Delphi 中的DLL 封装和调用对象技术
  10. Linux安装GCC 9.2.0
  11. python抽签代码,python:选房抽签小工具
  12. 区块链相关技术学习总结(1)——区块链以及区块链技术入门详解
  13. 什么是测试思维?测试思维都有什么?
  14. Google 展示广告
  15. 我的世界java版怎么加整合包_我的世界java如何下载安装optifine和forge及整合包和常见问题[纯小白教程]...
  16. PgSQl 结合 Mybatis 插入 json,及查询,数据库使用 jsonb
  17. java面试题:编写java程序,随机生成n个m以内的加减法算式,形如a±b=c,其中n,m∈N+,a,b,c∈[0,m].请结合自身请款勾选作答的题目,然后在下面写出代(伪)码.
  18. 怎样来实现数据接口的加密?
  19. python实现低通滤波_python中的低通滤波器
  20. C++用两个队列实现栈

热门文章

  1. 对timedelta64的理解
  2. 查看服务器内存型号及主频
  3. PTA团体程序设计天梯赛-练习集L1-021 重要的话说三遍
  4. [Vue.js 1] 入门基础知识与开发
  5. 【图】广度与深度遍历
  6. linux nc 抓包,抓包及NC上传原理
  7. 如何将PDF转换为PPT?2个免费好用的pdf转ppt工具
  8. 【MMU篇】一文总结ARMv8中的MMU架构
  9. 美团java工程师,成都外包面试笔试题
  10. Java系列技术之JDBC操作数据库-钟洪发-专题视频课程