版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、习 题 77.1 选择题。(1)下列对字符串的定义中,错误的是: A 。A) char str7 = "FORTRAN"B) char str = "FORTRAN"C) char *str = "FORTRAN"D) char str = 'F','O','R','T','R','A','N',0;(2)以下程序段的输出结果是:_D_char a = "ABCDE" ; char *p = NULL;f
2、or (p=a; p<a+5; p+) printf("%sn", p);A)ABCDEB) AC) ED)ABCDE B DBCDE C CCDE D BDE E AE(3)下列程序是对字符串的相关操作,正确的是_D_。A)#include <stdio.h>main()static char a5; a = "abcde" ; printf("%sn", a);B)#include <stdio.h>main()static char a7= "goodbye!" printf(&
3、quot;%sn", a) ;C)#include <stdio.h>main()char a5 = "abcde" printf("%sn", a) ;D)#include <stdio.h>main()static char a="abcde" printf("%sn", a) ;(4)阅读下列函数,函数功能为_A_。void Exchange(int *p1, int *p2)int p;p = *p1;*p1 = *p2;*p2 = p;A)交换*p1和*p2的值B)正确,
4、但无法改变*p1和*p2的值C)交换*p1和*p2的地址 D)可能造成系统故障(5)设有语句:int array34; 则在下面几种引用下标为i和j的数组元素的方法中,不正确的引用方式是:_D_。A)arrayij B)*(*(array + i) + j)C)*(arrayi + j) D)*(array + i*4 + j)7.2 阅读下列程序,写出运行结果。(1)#include <stdio.h>main()static int x = 1,2,3;int s, i, *p = NULL; s = 1;p = x;for (i=0; i<3; i+) s* = *(p
5、 + i);printf("%dn",s);答案:6(2)#include <stdio.h>main() int a = 1,2,3,4,5;int *p = NULL;p = a;printf("%d, ",*p);printf("%d, ",*(+p);printf("%d, ",*+p);printf("%d, ",*(p-);printf("%d, ",*p+);printf("%d, ",*p);printf("%d, &
6、quot;,+(*p);printf("%d, ",*p);答案:1, 2, 3, 3, 2, 3, 4, 4,(3)#include <stdio.h>char b = "program"char *a = "PROGRAM"main() int i = 0;printf("%c%sn",*a, b + 1);while (putchar (*(a + i) i+;printf("i = %dn",i);while ( - i) putchar (*(b + i);printf(&
7、quot;n%sn", &b3); 答案:ProgramPROGRAM i = 7margorgram(4)/* 源文件名为demo.c */main(int argc, char *argv)int i;for (i=0; i<argc; i+) printf("%sn", argvi);假设该文件demo.c及其可执行程序demo.exe位于E盘的TC目录下,则当命令行参数为demo.exe This is a program,则运行结果应为什么答案:demo.exeThisisaprogram7.3 阅读程序,按要求,在空白处填写适当的表达式或
8、语句,使程序完整,并符合题目要求。(1)下面函数实现strlen函数的功能,即计算指针p所指向的字符串中的实际字符个数。unsigned int MyStrlen(char *p) int len;len = 0;for (; *p != 0 ; p+)len + ;return len ;(2)下面函数也是实现strlen函数功能的,但计算字符串s中的实际字符个数的方法与上一道题有所不同。unsigned int MyStrlen(char s) char *p = s;while (*p != 0 ) p+;return p-s ;提示:移动指针p使其指向字符串结束标志,此时指针
9、p与字符串首地址之间的差值即为字符串中的实际字符个数。(3)下面函数实现strcmp函数的功能,即比较两个字符串的大小,将两个字符串中第一个出现的不相同字符的ASII码值之差作为比较的结果返回,返回值大于0表示第一个字符串大于第二个字符串,返回值小于0表示,表示第一个字符串小于第二个字符串,当两个字符串完全一样时,返回值为0。int MyStrcmp(char *p1, char *p2)for (; *p1 = *p2; p1+,p2+)if (*p1 = '0') return 0 ;return *p1-*p2 ;7.4 在下面使用指针数组的程序中,存在一个错误,试分析这
10、个程序,并上机运行,观察运行结果,找到这个错误,并分析错误的原因。#include <stdio.h>void Print(char *arr, int len); void main() char *pArray = "Fred","Barrey","Wilma","Betty" int num = sizeof(pArray) / sizeof(char); printf("Total string numbers = %dn", num); Print(pArray, num)
11、;void Print(char *arr, int len) int i; for (i=0; i<len; i+) printf("%sn", arri); 答案:int num = sizeof(pArray) / sizeof(char); 应改为:int num = sizeof(pArray) / sizeof(char*);或:int num = sizeof(pArray) / sizeof(pArray0);理由:pArray是一个存放了4个字符串指针的数组,其中每一个元素是一个指针,而非一个字符。程序希望得到的运行结果如下:Total string
12、 numbers = 4FredBarreyWilmaBetty7.5 编写一个交换变量值的函数,利用该函数交换数组a和数组b中的对应元素。提示:参考例7.2,用指针变量做函数参数实现两数交换。答案:void swap(int a, int b, int n) int temp;for(int i=0;i<n;i+)temp = ai;ai=bi;bi=temp;7.6 任意从键盘输入10个整数,用函数编程实现计算其中的最大值和最小值,并返回它们所在数组中的位置。提示:参考例7.3,用指针变量做函数参数,得到最大值和最小值在数组中的位置。答案:void MaxAndMin(int *a,
13、 int n, int *pMaxIndex, int *pMinIndex)*pMaxIndex = *pMinIndex = 0;for (int i=0;i<n;i+)if (a*pMaxIndex<ai)*pMaxIndex = i;if (a*pMinIndex>ai)*pMinIndex = i;7.7 不用strcat函数编程实现字符串连接函数strcat的功能,将字符串t连接到字符串s的尾部。提示:参考例7.5,用i和j分别作为字符数组s和字符数组t的下标,先将i和j同时初始化为0,然后移动i使其位于字符s的尾部即字符串结束标志处,再将字符数组t中的字符依次拷
14、贝到字符数组s中。答案:void strcat(char*s,char*t)while (*s) s+;while(*s+ = *t+);7.8 编程从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。答案:#include <stdio.h>#include <string.h>int main()char s100=0;scanf("%s",s);int start = 0;int end = strlen(s)-1;for (;start<end;start+,end-)int temp = sstart;sstart =
15、 send;send = temp;printf("%sn",s);7.9 *编程判断输入的一串字符是否为“回文”。所谓“回文”就是指顺读和倒读都一样的字符串,例如"level"、"ABCCBA"都是回文。提示:由题意可知,回文就是一个对称的字符串,利用这一特点可采用如下算法进行判断:(1)设置两个指针pStart和pEnd,让pStart指向字符串首部,让pEnd指向字符串尾部;(2)利用循环从字符串两边对指针所指字符进行比较,当对应的两字符相等且两指针未超越对方时,使指针pStart向前移动一个字符位置即加1,使指针pEnd向后移
16、动一个字符位置即减1,一旦发现对应的两字符不等或两指针以互相超越(不可能是回文),则立即停止循环;(3)根据退出循环时两指针的位置,判断字符串是否为回文。答案:#include <stdio.h>#include <string.h>int main()char s100=0;scanf("%s",s);int start = 0;int end = strlen(s)-1;int flag = 1;for (;start<end;start+,end-)if (sstart!=send)flag = 0;break;printf("
17、%sn",flag"YES":"NO");7.10 *编写一个能对任意m×n的矩阵进行转置的函数Transpose。提示:参考例7.9,用指针变量做函数参数编程实现。答案:#include <stdio.h>void Transpose(int *arrDest,int *arrSource,int m,int n)for (int i=0;i<m;i+)for (int j=0;j<n;j+)*(arrDest+m*j+i) = *(arrSource+n*i+j);int main()int s34 = 0
18、,1,2,3,4,5,6,7,8,9,10,11,;int t43;Transpose(&t00,&s00,3,4);for (int i=0;i<4;i+)for (int j=0;j<3;j+)printf("%4d",tij);printf("n");7.11 *用指针数组编程实现:任意从键盘输入一个数字表示的月份值n,程序输出该月份的英文表示,若n不在112之间,则输出“Illegal month”。答案:#include <stdio.h>int main()char* months="January","February","March","April","May","June","July","August
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论