计算机二级

有以下程序: #include main( ) { int k,n=0;char c,str[]="teach"; for(k=0;str[k];k++) { c=str[k]; switch(k) { case 1:case 3:case 5:putchar(c);printf("%d",++n);break; default:putchar(′N′); } } } 序的运行结果是( )。A.Ne1NNB.e1a2e3C.Ne1Nc2ND.Na1NNNN

题目

有以下程序: #include main( ) { int k,n=0;char c,str[]="teach"; for(k=0;str[k];k++) { c=str[k]; switch(k) { case 1:case 3:case 5:putchar(c);printf("%d",++n);break; default:putchar(′N′); } } } 序的运行结果是( )。

A.Ne1NN

B.e1a2e3

C.Ne1Nc2N

D.Na1NNNN

参考答案和解析
答案:C
解析:程序执行过程:k=0时,c=str[0]=′t′,执行default分支,输出N;k=1时,c=′e′,执行case 1分支,没有break语句,继续执行case 3分支,没有break语句,继续执行case 5分支,输出e1;k=2时,c=′a′,输出N;k=3,c=′c′,输出c2;k=4,c=′h′,输出N。故程序的输出结果为Ne1Nc2N。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有以下程序:includeincludeincludevoid f(char*s,char*t){char k;k=*s; *

有以下程序: #include<stdio.h> #include<string.h> #include void f(char*s,char*t) { char k; k=*s; *s=*t; *t=k; s++;t--; if(*s)f(s,t): } main() {char str[10]="abcdefg",*P; P=str+strlen(str)/2+1: f(p,p-2); printf("%s\n",str); } 程序运行后的输出结果是( )。

A.abcdefg

B.gfedcba

C.gbcdefa

D.abedcfg


正确答案:B

第2题:

有以下程序:includevoid f(char *s, char *t){ char k;k=*s;*s=*t; *t=k;s++;t- -;

有以下程序:#include <string .h>void f(char *s, char *t){ char k; k=*s; *s=*t; *t=k; s++; t- -; if(*s) f(s, t);}main(){ char str[10]="abcdefg",*p; p=str+strlen(str)/2+ 1; f(p,p-2); printf("%s\n", str);}程序运行后的输出结果是( )。

A.abcdcfg

B.gfedcba

C.gbcdefa

D.abedcfg


正确答案:B
解析:本题定义的函数f()是一个递归函数。它先交换两个字符指针所指的内容,然后将第1个指针往后移动—位,第2个指针往前移动一位,如果第1个指针所指内容不是字符串结束标志,则递归调用自身。主函数中首先定义了—个字符数组sir[10]=“ahcdeft”然后定义了一个字符指针p=str+strlen(str)/2+1,即让p指向str+4(或&str[4])的位置。然后调用f(p,p-2);,这使得p所指的str[4]及其以后的2个位置str[5]、str[6]中的内容同p-2所指的str[p]及其以前的2个位置str[1]、str[0]中的内容互相交换。即让整个字符串逆序。所以本题应该选择B。

第3题:

( 12 ) 有以下程序

#include <stdio.h>

#include <string.h>

void fun ( char *str )

{ char temp;int n,i;

n=strlen ( str ) ;

temp=str[n-1];

for ( i=n-1;i>0;i-- ) str[i]=str[i-1];

str[0]=temp;

}

main ()

{ char s[50];

scanf ( " %s " ,s ) ; fun ( s ) ; printf ( " %s\n " ,s ) ;}

程序运行后输入: abcdef< 回车 > ,则输出结果是 【 12 】 。


正确答案:

第4题:

有以下程序:includevoid f(char*s,char*t){ char k;k=*s;*s=*t;*t=k;s++;t--;if(*s)f

有以下程序: #include<string.h> void f(char*s,char*t) { char k; k=*s; *s=*t; *t=k; s++; t--; if(*s) f(s,t); } main( ) {char str[10]="abcdefg",*p; p=str+strlen(str)/2+1; f(p,p-2); printf(~%s\n",str); } 程序运行后的输出结果是 ______。

A.abcdef

B.gfedcba

C.gbcdefa

D.abedcfg


正确答案:B
解析:p=str+strlen(str)/2+1=str+4,f(p,p-2)的功能是将p[4]与p[2]互换,p[5]与p[1]互换,p[6]与p[0]互换,最后的结果为gfedcba。

第5题:

请补充函数fun(),该函数的功能是:按‘0’到‘9’统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。

例如:输入“x=112385713.456+0.909*bc”,结果为:1 =3,3=2,5=2,7=1,9=2。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

include<stdio.h>

define N 1000

void fun(char*tt,int num[])

{

int i,j;

int bb[10];

char *p=tt;

for(i=0;i<10;i++)

{

num[i]=0;

bb[i]=0;

}

while (【 】)

{

if(*p>=‘0’&&*p<=‘9’)

【 】;

p++;

}

for(i=1;j=0;i<10;i=i+2,j++)

【 】;

}

main()

{

char str[N];

int num[10],k;

clrscr();

printf("\nPlease enter a char string:");

gets(str);

printf("\n**The original string**\n");

puts(str);

fun(str,num);

printf("\n**The number of letter**\n");

for(k=0;k<5;k++)

{

printf("\n");

printf("%d=%d",2*k+1,num[k]);

}

printf("\n");

return;

}


正确答案:*p bb[*p-'0']++ num[j]=bb[i]
*p bb[*p-'0']++ num[j]=bb[i] 解析:第一空:通过移动指针p,指向字符串tt中的各个字符,当指针p所指的字符为,'\0'时,即指向字符串tt的最后一个字符,while循环结束。第二空:将字符串中的数字字符‘0’到‘9’的个数都保存在数组bb[10]中。*p-‘0’实现将字符‘0’的个数保存在bb[0]中,将字符‘1’的个数保存在bb[1]中,依此类推,直到将字符‘9’的个数保存在bb[9]中。第三空:由于奇数数字字符的个数存于bb[1]、bb[3]、bb[5]、bb[7]、bb[9]中,所以for循环的目的是将这些元素分别赋给num[0]、

第6题:

阅读下列程序,当运行函数时,输入asd af aa z67,则输出为

#include

#include

#include

int fun (char *str)

{ int i,j=0;

for(i=0;str[i]!=′\0′;i++)

if(str[i]!=′ ′)str[j++]=str[i];

str[j]= ′\0′;

}

main()

{

char str[81];

int n;

clrscr();

printf("Input a string : ");

gets(str);

puts(str);

fun(str);

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

}

A.asdafaaz67

B.asd af aa z67

C.asd

D.z67


正确答案:A

第7题:

有以下等程序include void f(char *s, char *t){ chark; k=*s; *s=*t; *t=k; s++;t-

有以下等程序#include <string. h>void f(char *s, char *t){ char k; k=*s; *s=*t; *t=k; s++; t--; if(*s) f(s, t);}main (){ char stt[10] ="abcdefg", *p; p=str+strlen (str)/2+1; f (p,p-2); print f ( "%s\n", str);}

A.abcdefg

B.gfedcba

C.gbcdefa

D.abedcfg


正确答案:B
解析:本题考查的是递归函数。在一个函数中直接或间接地调用了自身,则称此函数为递归函数。本题定义的函数f()就是一个递归函数。它先交换两个字符指针所指的内容,然后将第1个指针往后移动一位,第2个指针往前移动一位,如果第1个指针所指内容不是字符串结束标志,则递归调用自身。主函数中首先定义了一个字符数组sTR[10]="abcdefg",然后定义了一个字符指针p=str+strlen(str)/2+1,即让p指向str+4(或&str[4])的位置.然后调用f(p,p-2);,这使得p所指的str[4]及其以后的2个位置str[5]、str[6]中的内容同p-2所指的3tr[2]及其以前的2个位置str[1]、str[0]中的内容互相交换。即让整个字符串逆序。所以本题应该选择B。

第8题:

下列程序的运行结果为includevoid abc(char*str){int a,b;for(a=b=0;str[a]!='\0';a++

下列程序的运行结果为 #include<stdio.h> void abc(char*str) { int a,b; for(a=b=0;str[a]!='\0';a++) if(str[a]!='c') str[b++]=str[a]; str[b]='\0';} void main() { char str[]="abcdef"; abc(str); printf("str[])=%s",str);}

A.str[]=abdef

B.str[]=abcdef

C.str[]=a

D.str[]=ab


正确答案:A
解析: 本题考查了用字符指针引用字符数组中的字符及对字符的操作。函数abc()的for语句执行过程是:从字符指针str所指向的字符数组的第一个元素开始,逐一判断字符是否为'c',若不是就执行一次数组元素的赋值过程,若字符为'c'就不执行。

第9题:

请补充函数fun(),该函数的功能是:从‘a’到‘z’统计一个字符串中所有字母字符各自出现的次数,结果保存在数组aIf中。注意:不区分大小写,不能使用字符串库函数。

例如,输入: “A=abc+5*c”,结果为:a=2, b=l,c=2。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数run的横线上填入所编写的若干表达式或语句。

试题程序:

include<conio.h>

include<stdio.h>

define N 100

void fun(char *tt,int alf[])

{

int i

char *p=tt;

for(i=0;i<26;i++)

【 】;

while(*p)

{

if(*p>='A'&&*p<='z')

【 】;

if(*p>='a'&&*p<='Z')

alf[*p-'a']++;

【 】;

}

}

main()

{

char str[N];

char a='a';

int alf[26],k;

clrscr();

printf("\nPlease enter a char string:");

scanf("%S",str);

printf("\n**The original string**\n");

puts(str);

fun(str,alf);

printf("\n**The number of letter**\n");

for(k:0;k<26;k++)

{

if(k%5==0)

printf(“\n”);

printf(“%c=%d”,a+k,alf[k]);

}

printf(“\n”);

}


正确答案:alf[i]=0 *p+=32 p++
alf[i]=0 *p+=32 p++ 解析:第一空:数组alf[26]用来存放字母字符出现的次数,在使用之前需要清零。第二空:题目要求不区分大小写,所以可以先将所有的大写字母都转换为对应的小写字母,然后一并记录出现的次数。将大写字母转换为对应的小写字母,只需将ASCII码加上32就可以了。第三空:指针p指向字符串tt,通过p自加1来移动指针,访问字符串中的所有字符。

第10题:

下列给定程序中,函数fun()的功能是:统计字符串substr在字符串srt中出现的次数。例如,若字符串为aaas 1 kaaas,子字符串为as,则应输出2。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

include <stdio.h>

fun (char *str, char *substr)

{int i, j, k, num=0;

/*************found**************/

for (i=0, str [i], i++)

for (j=i, k=O; substr [k]==str [ j ]; k++, j ++ )

if (substr [k+l]==' \0')

{num++;

break;

}

return num;

}

main ( )

{ char str[80],substr[80];

printf("Input a string: ");

gets (str);

printf("Input a sbustring: ");

gets (substr);

printf ("%d\n ", fun (str, substr) );


正确答案:错误:for(i=0srt[i]i++) 正确:for(i=0;str[i];i++)
错误:for(i=0,srt[i],i++) 正确:for(i=0;str[i];i++) 解析:从字符串s中找出子字符串的方法是:从第1个字符开始,对字符串进行遍历;若s串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串的结尾,则跳出循环;若s串的字符和t串的字符不对应相同,则继续对s串的下一个字符进行处理。

更多相关问题