C语言程序设计

printf函数中,%c和%s都可以输出字符串.

题目

printf函数中,%c和%s都可以输出字符串.

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

请编写函数fun(),对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码值升序排列。

例如:原来的字符串为BdsihAd,则排序后输出为 BAdhisd。

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include <stdio.h>

include <ctype.h>

include <conio.h>

int fun(char*s,int num)

{

}

main()

{

char s[10];

clrscr();

printf("输入7个字符的字符串:");

gets(s);

fun(s,7);

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

}


正确答案:int fun(char*sint num) {char t; int ij; for(i=1;inum-2;i++) /*下标值从1开始用循环依次取得字符串中的字符*/ for(j=i+1;jnum-1;j++) /*将字符与其后的每个字符比较*/ if(s[i]>s[j]) /*如果后面字符的ASCII码值小于该字符的ASCII码值*/ { t=s[i]; /*则交换这两个字符*/ s[i]=s[j]; s[j]=t; } }
int fun(char*s,int num) {char t; int i,j; for(i=1;inum-2;i++) /*下标值从1开始,用循环依次取得字符串中的字符*/ for(j=i+1;jnum-1;j++) /*将字符与其后的每个字符比较*/ if(s[i]>s[j]) /*如果后面字符的ASCII码值小于该字符的ASCII码值*/ { t=s[i]; /*则交换这两个字符*/ s[i]=s[j]; s[j]=t; } } 解析:本题考查利用循环来控制数组元素的操作,首尾元素除外,因此,数组的下标值要从1开始,用循环变量i来依次取得数组中的元素,用数组中的元素s[i]和s[j]进行比较,如果后一个元素的ASCII码值小于前一个元素的ASCII码值,则交换这两个数组元素的值。

第2题:

请补充函数fun(),该函数的功能是:依次取出字符串中所有的小写字母以形成新的字符串,并取代原字符串。

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

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

试题程序:

include<stdio.h>

include<conio.h>

void fun(char *s)

{

int i=0;

char *p=s;

while(【 】)

{

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

{

s[i]=*p;

【 】;

}

p++;

}

s[i]=【 】;

}

main()

{

char str[80];

clrscr();

printf("\nEnter a string:");

gets(str);

printf("\n\nThe string is:\%s\n",str);

fun(str);

printf("\n\nThe string of changing

is:\%s\n",str);

}


正确答案:*p i++ '\0'
*p i++ '\0' 解析:第一空:while循环的循环条件是指针p所指的字符不是'\0',也就是说,当处理到字符串最后的结束标记字符 '\0'时,while循环结束。第二空:如果指针p所指的字符为小写字母,则将这个字符存于原字符串s中,同时,下标自加1,为下一次存放做准备。第三空:在取出所有小写字母并存于原字符串s后,要注意在最后加上字符串结束标志符'\0'。

第3题:

在printf()函数调用的格式字符串中,若使用格式符为“ %c”,则对应输出的数据类型为( )。


正确答案:char

第4题:

下列给定程序中函数fun()的功能是:求出字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。例如,当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出结果应是abcdx。当字符串中的内容为abcdabfabcdx,t中的内容为abd时,则程序输出未找到的信息:Not found!

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

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

试题程序:

include<stdio.h>

include <conio.h>

include <string.h>

char *fun(char *s,char *t)

{

char *p,*r,*a;

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

a=Null;

while(*s)

{ p=s;r=t;

while(*r)

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

if(r= =p) {r++;p++;}

else break;

if(*r=='\0') a=s;

s++;

}

return a;

}

main()

{char s[100],t[100],,*p;

clrscr();

printf("\nPlease enter string S: ");

scanf("%s",s);

printf("\nPlease enter substring t: ");

scanf("%s",t);

p=fun(S,t);

if(p) printf("\nThe result is:%s\n",p);

else printf("\nNot found!\n ");

}


正确答案:(1)错误:a=NuLL; 正确:a=NULL; (2) 错误;if(r==p){r++;p++;} 正确:if(*r==*p){r++;p++;}
(1)错误:a=NuLL; 正确:a=NULL; (2) 错误;if(r==p){r++;p++;} 正确:if(*r==*p){r++;p++;} 解析:题目要求将最后一次出现的输入字符后面的字符串做一复制处理,并在主函数中输出从此地址开始的字符串。 a=NuLL;是明显的常识性错误。题目中已经定义了指针变量chaf *p,*r,*a;,循环条件应该是if(*r==*p){r++;p++;},而非iRf(r==p) {r++;p++;}。

第5题:

假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:将字符串中的前导*号全部删除,中间和后面的*号不删除。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G*******。

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

请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。

试题程序;

include <stdio. h>

include <conio. h>

void fun (char *a)

{

}

main()

{

char s[81];

printf("Enter a string :\n");

gets (s);

fun (s);

printf ("The string after deleted: \n");

puts (s);

}


正确答案:void fun (char *a) { char*p=a; while(*P==‘+’) p++; /*指针p指向字符串第一个字母*/ for(;*p!=‘\0’;p++a++) *a=*p; /*从第—个字母开始其后的字符都放入指针a所指的字符串中*/ *a=‘\0’; /*在字符串最后加上结束标记符*/ }
void fun (char *a) { char*p=a; while(*P==‘+’) p++; /*指针p指向字符串第一个字母*/ for(;*p!=‘\0’;p++,a++) *a=*p; /*从第—个字母开始,其后的字符都放入指针a所指的字符串中*/ *a=‘\0’; /*在字符串最后加上结束标记符*/ } 解析:在前面的改错题和编程题中,相关试题已经出现好多次了,我们在此提供另一种解答方法。
#includestring.h>
void fun (char *a)
{char *p=a;
while (*p==‘*’)p++;
strcpy(a,p);
}

第6题:

请编写函数proc,该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。 例如,若字符串数组中的M个字符串为: ABCD BCDEFG CDEFGHI 则合并后的字符串内容应该是ABCDBCDEFGCDEF—GHl。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填人所编写的若干语句。 试题程序: include<stdio.h> include<conio.h> define M 3 define N 20 void proc(char arr[M][N],char*b) {

} void main { char str[M][N]={"ABCD","BCDEFG"," CDEFGHI"},i; char arr[100]={" "); printf("The string:\n"); for(i=0;i<M;i++) puts(str[i]); printf("\n"); proc(str,arr); printf("The A string:\n"); printf("%s",arr); printf("\n\n"); }


正确答案:

void proc(char arr[M][N],char*b)
{
int i,j,k=0;
for(i=0;i<M;i++) //i表示其行下标
for(j=0;.rr[i][j]!=\0 ;j++)//由于每行的个数不等,因此用a[i][j]!=\0 来作为循环结束的条件
b[k++]=arr[il[j]; //把二维数组中的元素茄到b的一维数组中,
b[k]=\0; //最后把b赋\0作为字符串结束的标志
}
【解析】字符串数组中每一行都是一个一个完整的字符串,其结束标志为\0 。因此,通过字符串的结束标志来判断每一个字符串是否结束,将字符串数组中的所有字符串均赋值新的一维数组b来完成字符串的合并。

第7题:

编写一个函数fun(),它的功能是:实现两个字符串的连接(不使用库函数strcat,即把p2所指的字符串连接到p1所指的字符串后。

例如,分别输入下面两个字符串:

FirstString

SecondString

则程序输出:

FirstStringSecondString

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号小填入所编写的若干语句。

试题程序:

include <stdio. h>

include<conio. h>

void fun (char pi[],char p2[])

{

}

main ( )

{

char s1[80],s2[40];

clrscr ();

printf("Enter s1 and s2:\n");

scanf ("%s%s", s1, s2);

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

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

printf("Invoke fun(s1,s2) :\n");

fun(s1,s2);

printf("After invoking:\n");

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

}


正确答案:void fun (char p1[]char p2[]) { int ij; for (i=0;p1 [i] !='\0'; i++); /*求出的i为p1字符的总长度包括结束标记位*/ for (j=0;p2 [j] !='\0'; j++) p1 [i++]=p2 [j]; /*将p2字符串连在p1字符串的后面*/ p1[i]='\0'; /*在字符串最后加上结束标记符*/ }
void fun (char p1[],char p2[]) { int i,j; for (i=0;p1 [i] !='\0'; i++); /*求出的i为p1字符的总长度,包括结束标记位*/ for (j=0;p2 [j] !='\0'; j++) p1 [i++]=p2 [j]; /*将p2字符串连在p1字符串的后面*/ p1[i]='\0'; /*在字符串最后加上结束标记符*/ } 解析:本题用两个循环,第1个循环的作用是将i走到第1个字符串的末尾。第2个循环的作用是将第2个字符串的字符连到第1个字符串的末尾。

第8题:

●试题三

请补充函数fun(),该函数的功能是:只保留字符串中的大写字母,删除其他字符,结果仍保存在原来的字符串中,由全局变量m对删除后字符串的长度进行保存。

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

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

试题程序:

#include<stdio.h>

#include<conio.h>

int m;

void fun(char *s)

{

int i=0,j=0;

char *p=s;

while(*(p+i))

{

if(*(p+i)>=′A′&&*(p+i)<=′Z′)

{

(1) ;

}

(2) ;

}

s[j]=′\0′;

(3) ;

}

main()

{

char str[80];

clrscr();

printf("\nEnter a string:");

gets(str);

printf("\n\nThe string is:\%s\n",str);

fun(str);

printf("\n\nThe string of changing

is:\%s\n",str);

printf("\n\nThe length of changed string

is:\%d\n",m);

}


正确答案:

●试题三

【答案】(1sj++=*(p+i)2i++3m=j

【解析】填空1:将大写字母存于原字符串中,数组下标j自加1,为下一次存放做准备。填空2:为了判断字符串中的下一个字符是否为大写字母,变量i自加1。填空3:最后将大写字母的个数,即删除后字符串的长度赋给全局变量m

 

第9题:

请补充函数fun(),该函数的功能是:把ASCII码为奇数的字符从字符串str中删除,结果仍然保存在字符串str中。字符串str从键盘输入,其长度作为参数传入函数fun()。

例如,输入“abcdef”,输出“bdf”。

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

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

试题程序:

include <stdio.h>

define N 80

void fun(char s[],int n)

{

int i, j;

j=0;

for(i=0;【 】;i++)

{

if(【 】)

s [j++]-s [i];

}

【 】;

}

main ( )

{

int i=0, strlen=0;

char str [N];

clrscr ();

printf ("\nInput a string: \n");

gets (str);

while (str [i] !='\0')

{

strlen++;

i++;

}

fun(str, strlen);

printf("\n*** display string ***\n");

puts (str);

}


正确答案:in s[i]%2=0 s[j]= '\0'
in s[i]%2=0 s[j]= '\0' 解析:第一空:变量n为字符串的长度,所以字符数组的下标的取值范甲是从0到n-1。第二空:如果当前字符的ASCII码对2取余等于0,就说明这个字符的ASCII码为偶数,故不能删除,而是将它存于字符串s中。第三空:通过保留ASCII码为偶数的字符的力法,来实现删除ASCII码为奇数的字符的目的。处理结束后,还要在字符串s的最后加上结束标记符'\0'。

第10题:

请补充函数fun(),该函数的功能是:把字符串str中的字符按字符的ASCⅡ码降序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传入。

例如,如果输入“cdefgh”,则输出为“hgfedc”。

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

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

试题程序:

include <stdio.h>

define N 80

void fun (char s [], int n)

{

int i, j;

char ch;

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

for(j=【 】;j<n;j++)

if (s[i]<s [j])

{

ch=s [j];

【 】;

s [i] =ch;

}

main ( )

{

int i=0, strlen=0;

char str [N];

clrscr ();

printf ("\nInput a string: \n");

gets (str);

while (str [i] !=' \0')

{

strlen++;

i++;

}

fun (str, strlen);

printf ("\n***display string ***\n");

puts (str);

}


正确答案:I s[j]=s[i]
I s[j]=s[i] 解析:第一空:本题采用选择法进行排序。选择法的算法思路是:如果有n个数则从头到倒数的第2个数一个一个往后走动,每走动一个数总是将这个数与其后的所有数进行两两比较,在比较时按题目要求的顺序将进行比较的这两个数排序 (即交换)。理解了选择法的思路,则此空就非常简单了,应该填i。第二空:借助第三个变量交换两数的方法,非常重要也非常基础,必须要求掌握。

更多相关问题