课后习题 第六章 数组与字符串
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5. 答: #include<iostream.h> int binary_search(int array[],int value,int size) { int found=0; int high=size,low=0,mid; mid=(high+low)/2; cout<<"Looking for: "<<value<<endl; while((!found)&&(high>=low)) { cout<<"low mid high "<<endl; cout<<low<<" "<<mid<<" "<<high<<endl; if(value==array[mid]) found=1; else if(value<array[mid]) high=mid-1; else low=mid+1; mid=(high+low)/2; }
一:选择题 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};
b.float a(3,4)
c.double a[1][4] d.float a(3)(4) 8.已知:int[3][4],则对数组元素引用正确的是____。 a.a[2][4]
b.a[1,3]
c.a[1+1][0] d.a(2)(1) 9. 在 C++语言中,二维数组元素在内存中的存放顺序是____。 a.按行存放 b.按列存放 c.由用户自己定义 d.由编译器决定
10. 下面程序的运行结果是____。 char c[5] = {'a','b','\0','c','\0'}; printf("%s",c);
a.'a''b' b.ab c.ab c d.以上三个答案均有错误
一:选择题: 1.A 2.D 3.C 4.A 5.C 6.C 7.C 8.C 9.A 10.B 二:程序填空题 1.程序读入 20 个整数,统计非负数个数,并计算非负数之和。 #include <stdio.h> void main(void) { int i,a[20],s,count; s = count = 0; for(i = 0;i < 20;i ++) scanf("%d", _________); for(i = 0;i < 20;i ++) { if(a[i] < 0) ____________; s += a[i]; count ++; } printf("s = %d\t count = %d\n",s,count); } 2. 函数 index(char s[],char t[])检查字符串 s 中是否包含字符串 t,若包含,则返回 t 在 s 中的开始位置(下标值),否 则返回-1。 int index(char s[],char t[]) { int i,j,k; for(i = 0;s[i] != '\0';i ++) { for(j = i,k = 0; _________&&s[j] == t[k];j ++,k ++); if( __________) return i; } return -1; } 3. 以下程序将数组中的数据按逆序存放。
for (j=0; j<3; j++) cout << data[i][j] << " "; cout << endl;
} }
2. 编程实现两字符串的连接,要求使用字符数组保存字符串(要求不使用库函数)。 #include <iostream.h> void main() { int i=0,j=0; char s1[200],s2[100]; cout << "请输入第一个字符串:"; cin >> s1; cout << "请输入第二个字符串:"; cin >>s2; while(s1[i]) i++; while(s2[j]) s1[i++] = s2[j++]; s1[i] = '\0'; cout << "连接后的字符串为:" << s1 << endl; }
} printf("There are %d words\n",n); }
4.参考程序如下: #include <iostream.h> const MAX_STR_LENGTH = 100;
void main() {
char str[MAX_STR_LENGTH];
/* 输入ห้องสมุดไป่ตู้分 */ cout<<"Input a string:"; cin>>str;
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++) {
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 ++;
1. 编写 3×3 矩阵转置程序。 2.编程实现两字符串的连接,要求使用字符数组保存字符串(要求不使用库函数)。
3.写统计输入的正文中有多少单词的程序,这里的单词指的是用空白符分隔开的字符串。
4.编写程序实现一个简单的加密器,实现英文字符串的加密。加密规则如下:将字符替换成它后面的第二个字符。比 如'a'替换成'c','C'替换成'E','z'替换成'|'。"Panda"替换成"Rcpfc"。
#include<stdio.h>
void main()
{
int a[12],i,j,t;
for(i=0;i<12;i++) scanf("%d",&a[i]);
i=0;j=12;
while( ________)
{ t=a[i]; ___________; ____________;i++;j _________;}
for(i=0;i<12;i++)printf("%3d",a[i]);
printf("\n");
}
二、程序填空
1.① &a[i] ② continue
2.① t[k] != '\0' ②t[k] == '\0'
三:编程题
3.(1)i<j/2 (2) a[i]=a[j-1] (3) a[j-1]=t (4) –
/* 加密部分 */ for(int i = 0; i < MAX_STR_LENGTH; i++) {
if(str[i] == '\0') break; str[i] = str[i] + 2; }
/* 输出部分 */ cout<<"加密后的字符串为:"<<str<<endl; } 程序输出结果如下: Input a string:China 加密后的字符串为:Ejkpc
c. int a[] = "string" d. char a[] = {0,1,2,3,4,5}; 3. 在下述对 C++语言字符数组的描述中,有错误的是____。 a. 字符数组可以存放字符串 b. 字符数组中的字符串可以进行整体输入输出 c. 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值 d. 字符数组的下标从 0 开始 4. 若用数组名作为函数调用时的实参,则实际上传递给形参的是____。 a. 数组首地址 b. 数组的第一个元素值 c. 数组中全部元素的值 d. 数组元素的个数 5..已知:
return((found)? mid: -1); } void main(void) {
int array[100],i; for(i=0;i<100;i++) array[i]=i; cout<<"Result of search: "<<binary_search(array,33,100)<<endl; cout<<"Result of search: "<<binary_search(array,76,100)<<endl; cout<<"Result of search: "<<binary_search(array,566,100)<<endl; }
5.编程实现对分查找。当数组很大时,循环查找很费时。如果程序已对数组进行升序和降序排序,就可用对分查找。 对分查找是每一次查找操作都把要检查的数值个数对半分。对查找不到的数,输出-1。
三、编程题
1.写 3×3 矩阵转置程序。 #include <iostream.h> void move (int matrix[3][3]) { int i, j, k; for(i=0; i<3; i++) for (j=0; j<i; j++) { k = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = k; } } void main() { int i, j; int data[3][3]; cout << "输入矩阵的元素" << endl; for(i=0; i<3; i++) for (j=0; j<3; j++) { cout << "第" << i+1 << "行第" << j+1 <<"个元素为:"; cin >> data[i][j]; }
int i,x[3][3] = {1,2,3,4,5,6,7,8,9}; 则下面语句的输出结果是____。 for(i = 0;i < 3;i ++)
printf("%d ",x[i][2-i]); a. 1 5 9 b. 1 4 7 c. 3 5 7 d. 3 6 9 6.在 C++语言中,引用数组元素时,其数组下标的数据类型允许是____。 a.只能整型常量 b.只能整型表达式 c.整型常量或整型表达式 d.任何类型的表达式 7. 以下对二维数组 a 的正确声明是____。 a.int a[3][]
一:选择题 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};
b.float a(3,4)
c.double a[1][4] d.float a(3)(4) 8.已知:int[3][4],则对数组元素引用正确的是____。 a.a[2][4]
b.a[1,3]
c.a[1+1][0] d.a(2)(1) 9. 在 C++语言中,二维数组元素在内存中的存放顺序是____。 a.按行存放 b.按列存放 c.由用户自己定义 d.由编译器决定
10. 下面程序的运行结果是____。 char c[5] = {'a','b','\0','c','\0'}; printf("%s",c);
a.'a''b' b.ab c.ab c d.以上三个答案均有错误
一:选择题: 1.A 2.D 3.C 4.A 5.C 6.C 7.C 8.C 9.A 10.B 二:程序填空题 1.程序读入 20 个整数,统计非负数个数,并计算非负数之和。 #include <stdio.h> void main(void) { int i,a[20],s,count; s = count = 0; for(i = 0;i < 20;i ++) scanf("%d", _________); for(i = 0;i < 20;i ++) { if(a[i] < 0) ____________; s += a[i]; count ++; } printf("s = %d\t count = %d\n",s,count); } 2. 函数 index(char s[],char t[])检查字符串 s 中是否包含字符串 t,若包含,则返回 t 在 s 中的开始位置(下标值),否 则返回-1。 int index(char s[],char t[]) { int i,j,k; for(i = 0;s[i] != '\0';i ++) { for(j = i,k = 0; _________&&s[j] == t[k];j ++,k ++); if( __________) return i; } return -1; } 3. 以下程序将数组中的数据按逆序存放。
for (j=0; j<3; j++) cout << data[i][j] << " "; cout << endl;
} }
2. 编程实现两字符串的连接,要求使用字符数组保存字符串(要求不使用库函数)。 #include <iostream.h> void main() { int i=0,j=0; char s1[200],s2[100]; cout << "请输入第一个字符串:"; cin >> s1; cout << "请输入第二个字符串:"; cin >>s2; while(s1[i]) i++; while(s2[j]) s1[i++] = s2[j++]; s1[i] = '\0'; cout << "连接后的字符串为:" << s1 << endl; }
} printf("There are %d words\n",n); }
4.参考程序如下: #include <iostream.h> const MAX_STR_LENGTH = 100;
void main() {
char str[MAX_STR_LENGTH];
/* 输入ห้องสมุดไป่ตู้分 */ cout<<"Input a string:"; cin>>str;
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++) {
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 ++;
1. 编写 3×3 矩阵转置程序。 2.编程实现两字符串的连接,要求使用字符数组保存字符串(要求不使用库函数)。
3.写统计输入的正文中有多少单词的程序,这里的单词指的是用空白符分隔开的字符串。
4.编写程序实现一个简单的加密器,实现英文字符串的加密。加密规则如下:将字符替换成它后面的第二个字符。比 如'a'替换成'c','C'替换成'E','z'替换成'|'。"Panda"替换成"Rcpfc"。
#include<stdio.h>
void main()
{
int a[12],i,j,t;
for(i=0;i<12;i++) scanf("%d",&a[i]);
i=0;j=12;
while( ________)
{ t=a[i]; ___________; ____________;i++;j _________;}
for(i=0;i<12;i++)printf("%3d",a[i]);
printf("\n");
}
二、程序填空
1.① &a[i] ② continue
2.① t[k] != '\0' ②t[k] == '\0'
三:编程题
3.(1)i<j/2 (2) a[i]=a[j-1] (3) a[j-1]=t (4) –
/* 加密部分 */ for(int i = 0; i < MAX_STR_LENGTH; i++) {
if(str[i] == '\0') break; str[i] = str[i] + 2; }
/* 输出部分 */ cout<<"加密后的字符串为:"<<str<<endl; } 程序输出结果如下: Input a string:China 加密后的字符串为:Ejkpc
c. int a[] = "string" d. char a[] = {0,1,2,3,4,5}; 3. 在下述对 C++语言字符数组的描述中,有错误的是____。 a. 字符数组可以存放字符串 b. 字符数组中的字符串可以进行整体输入输出 c. 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值 d. 字符数组的下标从 0 开始 4. 若用数组名作为函数调用时的实参,则实际上传递给形参的是____。 a. 数组首地址 b. 数组的第一个元素值 c. 数组中全部元素的值 d. 数组元素的个数 5..已知:
return((found)? mid: -1); } void main(void) {
int array[100],i; for(i=0;i<100;i++) array[i]=i; cout<<"Result of search: "<<binary_search(array,33,100)<<endl; cout<<"Result of search: "<<binary_search(array,76,100)<<endl; cout<<"Result of search: "<<binary_search(array,566,100)<<endl; }
5.编程实现对分查找。当数组很大时,循环查找很费时。如果程序已对数组进行升序和降序排序,就可用对分查找。 对分查找是每一次查找操作都把要检查的数值个数对半分。对查找不到的数,输出-1。
三、编程题
1.写 3×3 矩阵转置程序。 #include <iostream.h> void move (int matrix[3][3]) { int i, j, k; for(i=0; i<3; i++) for (j=0; j<i; j++) { k = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = k; } } void main() { int i, j; int data[3][3]; cout << "输入矩阵的元素" << endl; for(i=0; i<3; i++) for (j=0; j<3; j++) { cout << "第" << i+1 << "行第" << j+1 <<"个元素为:"; cin >> data[i][j]; }
int i,x[3][3] = {1,2,3,4,5,6,7,8,9}; 则下面语句的输出结果是____。 for(i = 0;i < 3;i ++)
printf("%d ",x[i][2-i]); a. 1 5 9 b. 1 4 7 c. 3 5 7 d. 3 6 9 6.在 C++语言中,引用数组元素时,其数组下标的数据类型允许是____。 a.只能整型常量 b.只能整型表达式 c.整型常量或整型表达式 d.任何类型的表达式 7. 以下对二维数组 a 的正确声明是____。 a.int a[3][]