c语言程序设计试题答案.docx

上传人:b****5 文档编号:8273271 上传时间:2023-01-30 格式:DOCX 页数:11 大小:64.50KB
下载 相关 举报
c语言程序设计试题答案.docx_第1页
第1页 / 共11页
c语言程序设计试题答案.docx_第2页
第2页 / 共11页
c语言程序设计试题答案.docx_第3页
第3页 / 共11页
c语言程序设计试题答案.docx_第4页
第4页 / 共11页
c语言程序设计试题答案.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

c语言程序设计试题答案.docx

《c语言程序设计试题答案.docx》由会员分享,可在线阅读,更多相关《c语言程序设计试题答案.docx(11页珍藏版)》请在冰豆网上搜索。

c语言程序设计试题答案.docx

c语言程序设计试题答案

c语言程序设计试题答案

习题7

7.1选择题。

(1)下列对字符串的定义中,错误的是:

A。

A)charstr[7]="FORTRAN";

B)charstr[]="FORTRAN";

C)char*str="FORTRAN";

D)charstr[]={'F','O','R','T','R','A','N',0};

(2)以下程序段的输出结果是:

____D_________

chara[]="ABCDE";

char*p=NULL;

for(p=a;p

{

printf("%s\n",p);

}

A)ABCDEB)AC)ED)ABCDE

BDBCDE

CCCDE

DBDE

EAE

(3)下列程序是对字符串的相关操作,正确的

 

(3)

#include

charb[]="program";

char*a="PROGRAM";

main()

{

inti=0;

printf("%c%s\n",*a,b+1);

while(putchar(*(a+i)))

{

i++;

}

printf("i=%d\n",i);

while(--i)

{

putchar(*(b+i));

}

printf("\n%s\n",&b[3]);

}

答案:

Program

PROGRAMi=7

margor

gram

(4)

/*源文件名为demo.c*/

main(intargc,char*argv[])

{

inti;

for(i=0;i

{

printf("%s\n",argv[i]);

}

}

假设该文件demo.c及其可执行程序demo.exe位于E盘的TC目录下,则当命令行参数为demo.exeThisisaprogram,则运行结果应为什么?

答案:

demo.exe

This

is

a

program

7.2阅读程序,按要求,在空白处填写适当的表达式或语句,使程序完整,并符合题目要求。

(1)下面函数实现strlen函数的功能,即计算指针p所指向的字符串中的实际字符个数。

unsignedintMyStrlen(char*p)

{

intlen;

len=0;

for(;*p!

=‘\0’;p++)

{

len++;

}

return len;

}

(2)下面函数也是实现strlen函数功能的,但计算字符串s中的实际字符个数的方法与上一道题有所不同。

unsignedintMyStrlen(chars[])

{

char*p=s;

while(*p!

=‘\0’)

{

p++;

}

returnp-s;

}

[提示:

移动指针p使其指向字符串结束标志,此时指针p与字符串首地址之间的差值即为字符串中的实际字符个数。

]

(3)下面函数实现strcmp函数的功能,即比较两个字符串的大小,将两个字符串中第一个出现的不相同字符的ASII码值之差作为比较的结果返回,返回值大于0表示第一个字符串大于第二个字符串,返回值小于0表示,表示第一个字符串小于第二个字符串,当两个字符串完全一样时,返回值为0。

intMyStrcmp(char*p1,char*p2)

{

for(;*p1==*p2;p1++,p2++)

{

if(*p1=='\0')return0;

}

return*p1-*p2;

}

7.3在下面使用指针数组的程序中,存在一个错误,试分析这个程序,并上机运行,观察运行结果,找到这个错误,并分析错误的原因。

#include

voidPrint(char*arr[],intlen);

voidmain()

{

char*pArray[]={"Fred","Barrey","Wilma","Betty"};

intnum=sizeof(pArray)/sizeof(char);

printf("Totalstringnumbers=%d\n",num);

Print(pArray,num);

}

voidPrint(char*arr[],intlen)

{

inti;

for(i=0;i

{

printf("%s\n",arr[i]);

}

}

答案:

intnum=sizeof(pArray)/sizeof(char);

应改为:

intnum=sizeof(pArray)/sizeof(char*);或:

intnum=sizeof(pArray)/sizeof(pArray[0]);

理由:

pArray是一个存放了4个字符串指针的数组,其中每一个元素是一个指针,而非一个字符。

程序希望得到的运行结果如下:

Totalstringnumbers=4

Fred

Barrey

Wilma

Betty

7.4编写一个交换变量值的函数,利用该函数交换数组a和数组b中的对应元素。

[提示:

参考例7.2,用指针变量做函数参数实现两数交换。

]

答案:

voidswap(inta[],intb[],intn)

{

inttemp;

for(inti=0;i

temp=a[i];

a[i]=b[i];

b[i]=temp;

}

}

 

7.5任意从键盘输入10个整数,用函数编程实现计算其中的最大值和最小值,并返回它们所在数组中的位置。

[提示:

参考例7.3,用指针变量做函数参数,得到最大值和最小值在数组中的位置。

]

答案:

voidMaxAndMin(int*a,intn,int*pMaxIndex,int*pMinIndex)

{

*pMaxIndex=*pMinIndex=0;

for(inti=0;i

if(a[*pMaxIndex]

*pMaxIndex=i;

}

if(a[*pMinIndex]>a[i]){

*pMinIndex=i;

}

}

}

7.6不用strcat函数编程实现字符串连接函数strcat的功能,将字符串t连接到字符串s的尾部。

[提示:

参考例7.5,用i和j分别作为字符数组s和字符数组t的下标,先将i和j同时初始化为0,然后移动i使其位于字符s的尾部即字符串结束标志处,再将字符数组t中的字符依次拷贝到字符数组s中。

]

答案:

voidstrcat(char*s,char*t)

{

while(*s)s++;

while(*s++=*t++);

}

 

7.7编程从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。

答案:

#include

#include

intmain()

{

chars[100]={0};

scanf("%s",s);

intstart=0;

intend=strlen(s)-1;

for(;start

inttemp=s[start];

s[start]=s[end];

s[end]=temp;

}

printf("%s\n",s);

}

7.8*编程判断输入的一串字符是否为“回文”。

所谓“回文”就是指顺读和倒读都一样的字符串,例如"level"、"ABCCBA"都是回文。

[提示:

由题意可知,回文就是一个对称的字符串,利用这一特点可采用如下算法进行判断:

(1)设置两个指针pStart和pEnd,让pStart指向字符串首部,让pEnd指向字符串尾部;

(2)利用循环从字符串两边对指针所指字符进行比较,当对应的两字符相等且两指针未超越对方时,使指针pStart向前移动一个字符位置即加1,使指针pEnd向后移动一个字符位置即减1,一旦发现对应的两字符不等或两指针以互相超越(不可能是回文),则立即停止循环;

(3)根据退出循环时两指针的位置,判断字符串是否为回文。

]

答案:

#include

#include

intmain()

{

chars[100]={0};

scanf("%s",s);

intstart=0;

intend=strlen(s)-1;

intflag=1;

for(;start

if(s[start]!

=s[end]){

flag=0;

break;

}

}

printf("%s\n",flag?

"YES":

"NO");

}

 

7.9*编写一个能对任意m×n的矩阵进行转置的函数Transpose。

[提示:

参考例7.9,用指针变量做函数参数编程实现。

]

答案:

#include

voidTranspose(int*arrDest,int*arrSource,intm,intn)

{

for(inti=0;i

for(intj=0;j

*(arrDest+m*j+i)=*(arrSource+n*i+j);

}

}

}

intmain()

{

ints[3][4]=

{

0,1,2,3,

4,5,6,7,

8,9,10,11,

};

intt[4][3];

Transpose(&t[0][0],&s[0][0],3,4);

for(inti=0;i<4;i++){

for(intj=0;j<3;j++){

printf("%4d",t[i][j]);

}

printf("\n");

}

}

 

7.10*用指针数组编程实现:

任意从键盘输入一个数字表示的月份值n,程序输出该月份的英文表示,若n不在1~12之间,则输出“Illegalmonth”。

答案:

#include

intmain()

{

char*months[]={

"January","February","March","April","May","June",

"July","August","September","October","November","December",

};

intm;

scanf("%d",&m);

if(m<1||m>12){

printf("Illegalmonth\n");

}

else{

printf("%s\n",months[m-1]);

}

}

7.11*用指针数组编程改写例7.4中的两个函数DayofYear和MonthDay。

答案:

由于函数原型和用途都不知,故此题没有答案。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1