字符串及数组应用程序设计习题

合集下载

C语言练习--数组与字符串编程

C语言练习--数组与字符串编程

1、编写一个程序,处理某班3门课程的成绩,它们是语文、数学和英语。

先输入学生人数(最多为50个人),然后按编号从小到大的顺序依次输入学生成绩,最后统计每门课程全班的总成绩和平均成绩以及每个学生课程的总成绩和平均成绩。

2、编写一个程序,从键盘输入10个学生的成绩,统计最高分、最低分和平均分。

3、编写一个程序,将用户输入的十进制整数转换成任意进制的数。

4、编写一个程序,将一个子字符串s2插入到主字符串s1中,其起始插入位置为n.5、有一行文字,现要求从其中删去某个指定字符(如输入n,表示要从此行文字中删去所有是n 的字符),要求该行文字和待删的字符均由终端输入。

6、编写一个程序,将字符串“computer“赋给一个字符数组,然后从第一个字母开始间隔地输出该字符串。

7、有一个数列,它的第一项为0,第二项为1,以后每一项都是它的前两项之和,试产生出此数列的前20项,并按逆序显示出来。

8、从键盘上输入一个字符串,假定该字符串的长度不超过30,试统计出该串中所有十进制数字字符的个数。

9、首相从键盘输入一个4行4列的一个实数矩阵到一个二维数组中,然后求出主对角线上元素之乘积。

10、已知一个数值矩阵为,求出该矩阵的转置矩阵并输出,其中转置矩阵中的[i][j]位置上的元素等于原矩阵中的[j][i]位置上的元素。

11、已知一个数值矩阵A为,另一个矩阵B为,求出A与B的乘积矩阵c[3][4]并输出,其中c 中的每个元素c[i][j]等于∑A[i][k]*B[k][j]。

12、首先让计算机随机产生出10个两位正整数,然后按照从小到大的次序显示出来。

13、从键盘上输出一个字符串,假定字符串的长度小于80,试分别统计出每一种英文字14、有n个数,已按从小到大的顺序排列好,要求输入一个数,把它插入到原有的数列中,而且仍保持有序,同时输出新数列。

15、将螺旋方阵存放到维数为n的二维数组中,并把它们打印输出。

要求由程序自动生成下图所示的螺旋方阵16、将一个字符数组a中下标为单号的元素赋给另一个字符数组b, 并将其转换成大写字母,然后输出字符数组a和b.17、应用一维数组,实现从键盘输入10个整数,输出其中的最小数。

C++字符数组练习题及解答

C++字符数组练习题及解答

第1题:编写程序,比较两个字符串的大小,不允许使用strcmp函数。

输入分2行,每一行均为字符串(不包含空格)。

如果第一个字符串大于第二个字符串,则输出1;如果两个字符串大小相等,则输出0;如果第一个字符串小于第二个字符串,则输出-1。

样例输入:ChinaChina样例输出:0#include<iostream.h>int main(){char a[100],b[100];int t=0,i;cin>>a;cin>>b;for(i=0;a[i]!=0||b[i]!=0;i++){if(a[i]>b[i]){t=1;break;}if(a[i]<b[i]){t=-1;break;}}cout<<t;return 0;}第2题:编写程序,将一个字符串首尾互换,并与原字符串连接后输出。

输入字符串(不包含空格),输出处理后的结果。

样例输入:china样例输出:chinaanihc#include<iostream.h>#include<string.h>int main(){char str1[100],i;int n;cin>>str1;n=strlen(str1);for(i=0;i<n;i++){str1[n+i]=str1[n-i-1];}for(i=0;i<n*2;i++)cout<<str1[i];return 0;}第3题:编写程序,输入由数字字符构成的字符串,分别统计该字符串中数字字符对应的数字中奇数和偶数的个数。

样例输入:7843028503样例输出:4 6#include <string.h>#include <iostream.h>int main(){int a[100],i,n,o,j;char str[100];o=0;j=0;cin>>str;n=strlen(str);for(i=0;i<n;i++){a[i]=str[i];}for(i=0;i<n;i++){a[i]=a[i]-48;if(a[i]%2==0){o=o+1;}else{j=j+1;}}cout<<j<<" "<<o;return 0;}第4题:编写程序,输入字符串(不包含空格),删除字符串中ASCII码值能被3整除的字符,将剩余字符按从小到大排序后输出。

C程序设计(数组)习题与答案

C程序设计(数组)习题与答案

C程序设计(数组)习题与答案C程序设计(数组)习题与答案数组是C语言中常用的数据结构之一,它可以存储多个相同类型的元素。

掌握数组的使用对于C程序设计至关重要,下面将为大家介绍一些关于C数组的习题及其答案。

1. 习题一:计算数组元素的和题目描述:编写一个程序,计算给定数组中所有元素的和,并输出结果。

解题思路:```c#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5}; // 定义一个包含5个元素的整型数组int sum = 0; // 用于存储和的变量// 遍历数组,累加每个元素的值for (int i = 0; i < 5; i++) {sum += arr[i];}printf("数组元素的和为:%d\n", sum);return 0;}```2. 习题二:查找数组中的最大值题目描述:编写一个程序,找出给定整型数组中的最大值,并输出结果。

解题思路:```c#include <stdio.h>int main() {int arr[7] = {4, 7, 2, 9, 1, 5, 8}; // 定义一个包含7个元素的整型数组int max = arr[0]; // 假设第一个元素为最大值// 遍历数组,比较每个元素的值与当前最大值的关系for (int i = 1; i < 7; i++) {if (arr[i] > max) {max = arr[i];}}printf("数组中的最大值为:%d\n", max);return 0;}```3. 习题三:查找数组中的特定元素题目描述:编写一个程序,在给定整型数组中查找是否存在指定元素,并输出结果。

解题思路:```c#include <stdio.h>int main() {int arr[6] = {3, 6, 9, 2, 5, 8}; // 定义一个包含6个元素的整型数组 int target = 2; // 指定要查找的元素int found = 0; // 用于标记是否找到目标元素的变量// 遍历数组,比较每个元素的值与目标值的关系for (int i = 0; i < 6; i++) {if (arr[i] == target) {found = 1;break;}}if (found) {printf("数组中存在目标元素:%d\n", target);} else {printf("数组中不存在目标元素:%d\n", target);}return 0;}```4. 习题四:数组元素逆序排列题目描述:编写一个程序,将给定整型数组的元素逆序排列,并输出结果。

课后习题 第六章 数组与字符串

课后习题 第六章 数组与字符串
3. 写统计输入的正文中有多少单词的程序,这里的单词指的是用空白符分隔开的字符串。 #include <stdio.h> void main() { int c,n; bool inword; n = 0; inword = false; while((c = getchar()) != EOF) if(c == ' '||c == '\t'||c == '\n') inword = false; else if(inword == false) { inword = true; n ++;
cout பைடு நூலகம்< "输入的矩阵为:" << endl; for(i=0; i<3; i++) {
for (j=0; j<3; j++) cout << data[i][j] << " "; cout << endl;
} move(data); cout << "转置后的矩阵为:" << endl; for(i=0; i<3; i++) {
一:选择题 1. 要声明一个有 10 个 int 型元素的数组,正确的语句是____。 a. int a[10];
b. int a[2,5];
c. int a[]; d. int *a[10]; 2. 合法的数组初始化语句是____。 a. char a = "string";
b. int a[5] = {0,1,2,3,4,5};
5.编程实现对分查找。当数组很大时,循环查找很费时。如果程序已对数组进行升序和降序排序,就可用对分查找。 对分查找是每一次查找操作都把要检查的数值个数对半分。对查找不到的数,输出-1。

串与数组的练习题

串与数组的练习题

串与数组的练习题一、填空题 1. 称为空白串。

2. 设S=“A;/document/Mary.doc”,则的字符定位的位置为4. 子串的定位运算称为串的模式匹配;称为模式。

5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第6. 若n为主串长,m为子串长,则串的古典匹配算法最坏的情况下需要比较字符的总次数为。

7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。

已知A的起始存储位置为1000,则数组A的体积为8B;末尾元素A57的第一个字节地址为;若按行存储时,元素A14的第一个字节地址为×6+1000=107;若按列存储时,元素A47的第一个字节地址为×6+1000)=127 。

8. 设数组a[1?60, 1?70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为答:不考虑0行0列,利用列优先公式:LOC=LOC+[*+i-c1)]*L 得:LOC=2048+[*+32-1]]*2=89509. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。

10.求下列广义表操作的结果:GetHead===;//头元素不必加括号GetHead】=== ; GetHead】】===b; GetTail】】===;二、单选题1. 串是一种特殊的线性表,其特殊性体现在:A.可以顺序存储B.数据元素是一个字符C.可以链式存储D.数据元素可以是多个字符2. 设有两个串p和q,求q在p中首次出现的位置的运算称作:A.连接B.模式匹配C.求子串D.求串长3. 设串s1=’ABCDEFG’,s2=’PQRST’,函数con返回x和y串的连接串,subs返回串s的从序号i开始的j个字符组成的子串,len返回串s的长度,则con), subs,))的结果串是:A.BCDEF B.BCDEFG C.BCPQRST D.BCDEFEF解:con返回x和y串的连接串,即con=‘ABCDEFGPQRST’; subs返回串s的从序号i开始的j个字符组成的子串,则subs)=subs=’ BCDEF’; subs,)=subs=’ EF’;所以con), subs,))=con之连接,即BCDEFEF4.假设有60行70列的二维数组a[1?60, 1?70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为。

数据结构串和数组的习题答案

数据结构串和数组的习题答案
Βιβλιοθήκη 12.D 13.A 14.B
补充习题:
15.两维数组是一种非线性结构。( A)正确 B)不正确 )
16.数组A三维的长度分别为b3,b2,b1;每个数组元素占一个 存储单元;LOC[0,0,0]为基址。若以行序为主序,则元素 A[i][j][k]的地址为( )(其中0<=i<b3,0<=j<b2,0<=k<b1) A)LOC[0,0,0]+i*b2*b1+j*b1+k
B)任意个字母的序列 D)有限个字符的序列
C)串中所含字符的个数,且大于0
D)串中所含字符的个数
1.C 2.D 3.D
补充习题:
4.设有两个串p和q,求q在p中首次出现的位置的运算( A)连接 C)求子串 B)模式匹配 D)求串长 )存储方式最为节 ).
5.若某串的长度小于一个常数,则采用( 省空间。 A)链式 A)正确 A)正确 B)堆结构 B)不正确 C)顺序
(3,1,5),(3,2,-1),(4,5,4),(5,1,-3),则其转置矩阵的三元 组表中第3个三元组为( )。
A) (2,1,3)
C) (3,2,-1)
B) (3,1,5)
D) (2,3,-1)
14.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素 的行下标和列下标互换,就完成了对该矩阵的转置运算,这 种观点( ) A)正确 B)不正确
A)表达变得简单 B)减少不必要的存储空间的开销 C)去掉矩阵中的多余元素 D)对矩阵元素的存取变得简单
8.B 9.D 10.B 11.B
补充习题:
12.三元组表不包括( A) 行数 B) 列数 )。 C) 元素值 D) 元素总数
13.设已知一个稀疏矩阵的三元组如下:(1,2,3),(1,6,1),

3字符数组及字符串练习题

3字符数组及字符串练习题

1.输入一串字符,个数不超过100个,且以"."结束。

判断它们是否构成回文。

(所谓回文,是指一串字符从左往右与从右往左读,结果是一致的)。

2.随机输入n个国家的英文名称,每个国家的名称单独占一行,按字母顺序排序后输出,输出时仍然要求每个国家的名称单独占一行。

3.随机输入一些国家的英文名字(输入的数据共占一行且不超过255个字符,以一个空格为分隔符),按字母顺序排序后输出。

比较大小(bj.pas)输入正整数a,b(<=10250),比较a和b的大小。

【输入文件】bj.in。

第一行:a,第二行:b 。

【输出文件】bj.out。

如果a>b,输出1;如果a=b,输出0;如果a<b,输出-1 。

【样例输入】:12345【样例输出】:1字符串编辑(edit.pas)对一个长度<=40个字符的字符串, 进行如下编辑:①D:删除一个字符,命令的方式为:D a 其中a为被删除的字符例如:D s 表示删除字符‘s’,若字符串中有多个‘s’,则删除第一次出现的,如原串:‘This is a book.’,删除的结果为:‘Thi is a book.’②I:插入一个字符,命令的格式为:I a1 a2 其中a1表示插入到指定字符前面,a2表示将要插入的字符例如: I s d 表示在指定字符‘s’的前面插入字符‘d’,若原串中有多个‘s’,则插入在最后一个字符的前面,如原串:‘This is a book.’ 插入后:‘This idsa book.’③R:替换一个字符,命令格式为:R a1 a2 其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1,则应全部替换,如原串:‘This is a book.’,输入命令: R o e,替换后:‘This is a bee k.’在编辑过程中,若出现被指定的字符不存在时,则给出提示信息‘no t exist’。

【输入文件】edit.in两行,第一行为字符串,第二行为命令。

字符数组练习题

字符数组练习题

字符数组练习题字符数组是C语言中常用的数据类型之一,用于存储一系列字符。

在本文中,我们将探讨一些字符数组的练习题,以帮助提升对字符数组的理解和运用。

1. 字符串拷贝题目描述:给定两个字符数组str1和str2,请编写一个函数,将str2的内容拷贝到str1中。

要求:不使用标准库函数strcpy(),而是自己编写实现。

解题思路:遍历str2,将每个字符逐个拷贝到str1的对应位置。

代码示例:```cvoid stringCopy(char str1[], char str2[]) {int i = 0;while (str2[i] != '\0') {str1[i] = str2[i];i++;}str1[i] = '\0'; // 添加字符串结束符}2. 字符串连接题目描述:给定两个字符数组str1和str2,请编写一个函数,将str2的内容连接到str1的末尾。

要求:不使用标准库函数strcat(),而是自己编写实现。

解题思路:先找到str1的末尾位置,然后从该位置开始,逐个拷贝str2的字符到str1。

代码示例:```cvoid stringConcat(char str1[], char str2[]) {int i = 0;while (str1[i] != '\0') {i++;}int j = 0;while (str2[j] != '\0') {str1[i] = str2[j];i++;j++;str1[i] = '\0'; // 添加字符串结束符}```3. 字符串长度题目描述:给定一个字符数组,请编写一个函数,计算该字符数组表示的字符串的长度。

要求:不使用标准库函数strlen(),而是自己编写实现。

解题思路:遍历字符数组,直到遇到字符串结束符'\0'时停止,并记录经过的字符个数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
int i,j,a[20][20],n,k=0;
cin>>n;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (i>=j)
a[i][j]= ++ k;
else
a[i][j]=0;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
cout<<a[i][j]<<" ";
字符串及数组应用程序设计习题
1、【字符替换问题】
题目描述:在使用Word 进行文档编辑的过程中,我们都有过使用替换操作的经历,现在就请你运用字符串操作函数来实现一个简化的替换操作!
题目要求:用户输入三行字符串:第一行为原始文本串(长度为100以内);第二行为被替换子串;第三行为新的替换子串,注意替换操作可能不止进行一次。
3、【归并操作问题】
题目描述:在计算机内部排序方案中,有一种重要的排序思想叫归并排序。归并排序的主要操作是递归分解、回归合并。回归合并操作就是将两个原本有序的序列,合并为一个有序序列。例如:A序列为{12、14、32};B序列为{13、15、40、99};则新序列C为{12、13、14、15、32、40、99}。
一维、二维数组及应用程序设计习题参考答案
1、字符统计问题
#include <iostream.h>
void main()
{
int i,a[26];
char c;
cin>>c;
for (i=0;i<26;i++) a[i]=0;
while ((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
题目要求:编程实现用户输入的两个有序子序列的合并操作,合并长度不长过100个元素。
输入数据:如上A、B子序列;输出结果:如上C序列。
4、【矩阵初始化问题】
题目描述:在计算机算法习题设计中,我们常常需要运用矩阵来记录当前问题的子问题的最优解,进而导出当前问题的最优解,并最终得到全局最优解,因此矩阵的下标运算是学习这类问题的重要基础之一。如下图所示方阵中的A矩阵称为螺旋矩阵、B矩阵称为蛇形矩阵。
题目要求:用户输入方阵的维大小,编程完成该方阵的这类初始化(分别实现)。
A4×4=B4×4=
输入数据:4 输出结果:螺旋矩阵如上图中的A矩阵、蛇形矩阵如上图中的B矩阵。
5、【高精度运算问题】
题目描述:计算机软件功能其实就是扩展硬件功能。比如:计算机中硬件所能表示的最大整数long int型数为-231到231,要想表示更大的整型数据或其运算就只能依赖整型数组来完成!
题目要求:键盘输入一段被压缩的字符信息,其中仅含大小写字母、数字、‘-’字符,并假定其中连续的字符(超过2个字符)已压缩为“起始字符-终止字符”的形式,请编程实现解压缩操作(解压后长度不超过200字符)!
输入数据:a-eio1-49X-Z 输出数据:abcdeio12349XYZ
思考:试试编写压缩操作(仅供同学们讨论实现,较难)。
for (i=0;i<2;i++)
for (j=0;j<3;j++)
b[j][i]=a[i][j];
for (i=0;i<3;i++)
{
for (j=0;j<2;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
}
4、矩阵初始化问题
#include <iostream.h>
void main()
{
if (c>='a'&&c<='z')
a[c-'a']++;
else
a[c-'A']++;
cin>>c;
}
for (i=0;i<26;i++)
{
cout<<char(i+'A')<<"("<<a[i]<<")"<<" ";
if ((i+1)%10==0)
cout<<endl;
}
}
2、约瑟夫问题
#include <iostream.h>
题目要求:用户输入两个充分大的整数(C++基本类型是装不下了哟!),请输出它们的和。
输入数据(两行):15464315464465465
482321654151
输出数据: 和为 15464797786119616
思考:求积(仅供同学们讨论实现,较难),上述数据积为 7458774215133872939813395215。
cin>>n;
for (i=0;i<n;i++) //填数
{
a[i][0]=1;a[i][i]=1;
for (j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for (i=0;i<n;i++) //输出
{
for (k=n-i;k>0;k--)
cout<<" ";
for (k=n-i;k>0;k--) //输出前导空格
cout<<" ";
for (j=0;j<=i;j++) //输出每行系数表
cout<<a[j]<<" ";
cout<<endl;
}
}
5-2、杨辉三角问题(二维数组)
#include <iostream.h>
void main()
{
int i,j,n,k,a[20][20];
j=0;//点数从新开始
k++; //出局的猴数增1
t=i; //记录出局的编号,每次覆盖
}
i++; //考查下一点
if(i==m) i=0;
}
cout<<t+1<<endl;
}
3、行列互换问题
#include <iostream.h>
void main()
{
int i,j,a[2][3]={{1,2,3},{4,5,6}},b[3][2];
输入数据:What’s the meat
输出数据:What’s the meaning of that?
2、【简单字符串解压(压缩)问题】
题目描述:在计算机世界里,数据量总是庞大无比,因此压缩的概念无处不大:比如,音、视频信息压缩就产生了MP3、MP4等;网络数据包压缩更是减少了网络传输量,加快了数据传输出速度等,今天,我们也来试试一点简单的字符串解压(压缩)操作!
cout<<endl;
}
}
5、杨辉三角问题(一维数组)
#include <iostream.h>
void main()
{
int i,j,n,k,a[20];
cin>>n;
for (i=0;i<n;i++) //控制行数
{
a[i]=1;
for (j=i-1;j>0;j--)
a[j]=a[j]+a[j-1];
for (j=0;j<=i;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
void main()
{
int i,j,k,m,n,a[1000],t=0;
cin>>m>>n;
for (i=0;i<m;i++)
a[i]=1;
i=0;k=0;j=0;
while(k<m)//k记录已出局的猴数
{
if(a[i]) j++; //点数
if(j==n) //符合出局条件
{
a[i]=0; //出局
相关文档
最新文档