实验7 字符数组和字符串
参考答案
[DIY]
1、调试下列程序(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)
[1.1] 以下程序统计字符串str中字符‘#’与数字字符的个数。
[代码]
c语言定义一个字符串 #include<stdio.h>
main()
{
char str[81];
int n1,n2;
gets(str);
for ( i = 0; str[i] ! = ‘\0’; i++ ){
if ( str[ i]=‘#’ )
n1 ++;
if (str[i]>=0 && str[i] <= 9 )
n2 ++; }
printf( “#=%d, digit=%d\n”, n1, n2 );
}
参考答案:
#include<stdio.h>
main()
{
char str[81];
int i,n1=0,n2=0;
gets(str);
for(i=0; str[i]!='\0';i++)
{
if (str[i]=='#')
n1++;
if (str[i]>='0' && str[i]<='9')
n2++; }
printf( "#=%d, digit=%d\n", n1, n2 );
}
[1.2] 有n个国家参加运动会,开幕式上,各国的出场顺序以国名在英文字典中的位置先后为序,输出一份各国出场顺序表。
[代码]
#include<stdio.h>
#include<math.h>
#define N 10
main()
{ char name[N][30], str[30]; int i, j;
printf("Enter the name:\n ");
for(i=0; i<N; i++)
{ scanf("%s", &name[i] ); strupr(name[i]); } /*输入国名,转换为大写*/
for( i = 0; i<N; i++) /*排序*/
for(j= i; j<N; j++ )
if(name[i]> name[j])
{ strcpy(name[i],str );
strcpy(name[i], name[j]);
strcpy(name[j], str);
}
for( i=0; i<N; i++) printf("%s\n", name[i]);
}
参考答案:
#include<stdio.h>
#include<string.h>
#define N 10
main()
{ char name[N][30], str[30]; int i, j;
printf("Enter the name:\n ");
for(i=0; i<N; i++)
{ scanf("%s", name[i] ); strupr(name[i]); } /*输入国名,转换为大写*/
for( i=0; i<N; i++) /*排序*/
for(j=0; j<N-i-1; j++ )
if(strcmp(name[j],name[j+1])>0)
{ strcpy(str,name[j] );
strcpy(name[j], name[j+1]);
strcpy(name[j+1], str);
}
for( i=0; i<N; i++) printf("%s\n", name[i]);
}
2.程序填空(请填写适当的符号,使程序实现其功能)
[2.1] 程序的功能是删除字符串s中与变量c相同的字符。
main( )
{ char s[80], c; int i, j;
scanf("%s", s); getchar(); c=getchar();
for (i=j=0; (1) ; i++)
if (s[i]!=c ) (2) ;
s[j]='\0';
puts(s);
}
参考答案:
s[i]!='\0';
s[j++]=s[i];
[2.2]以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。
#include <stdio.h>
#include <string.h>
main()
{ char s[80], d[80]; int i,j;
gets(s);
for(i=j=0;s[i]!='\0';i++)
if(__________) { d[j]=s[i]; j++; }
d[j]='\0';
puts(d);
}
参考答案:
if(s[i]>='0'&&s[i]<='9')
3.编程
[3.1] 最多从键盘输入80个字符,遇到回车键就结束,将输入的字符串按奇偶位置拆分,奇数位字符在前偶数位字符在后重新组成新的字符串输出,例如输入: ab12cd3456fg,则经过程序处理后输出: a1c35fb2d46g 。
#include "stdio.h"
#include "string.h"
main()
{
char s[100],d[100],c[100];
int i,j,k;
i=j=k=0;
while((s[i]=getchar())!='\n')
{if((i+1)%2) d[j++]=s[i++];
else c[k++]=s[i++];
}
d[j]=c[k]='\0';
strcat(d,c);
strcpy(s,d);
puts(s);
}
[3.2] 编程序把从键盘输入的英文短文作为一个字符串(长度不超过80),把短文中每个单词的首字母改成大写(原输入可以是大写),若还发现有两个或两个以上连续的空格,把它们删成只有一个空格,输出修改后的字符串。
#include<stdio.h>
#include<string.h>
char cha(char a)
{
char c;
if(a>='a'&&a<='z')
c=a-32;
else
c=a;
return c;
}
main()
{ char str[81],s[81],s1[81],c;
int i,j,k,word=0;
printf("Enter the string\n"); gets(str);
k=strlen(str);j=0;
for(i=0;i<k;i++,j++)
{ if(str[i]!=' ')
s[j]=str[i];
else if(str[i]==' '&&str[i+1]!=' ')
s[j]=str[i];
else if(str[i]==' '&&str[i+1]==' ')
s[j]=str[i++];
}
s[j]='\0';
k=strlen(s);
for(i=0,j=0;i<k;i++,j++)
{ if(s[i]==' ')
{ s1[j]=s[i];
s1[++j]=cha(s[++i]);
}
else
s1[j]=s[i];
}
s1[j]='\0';
puts(s1);
}
[本章测试]
一、单选题(10分)
1、以下不合法的数组定义是:___________ B ________。
A char a[]=”string”; B char a[6]=”string”;
C int a[5]={0,1,2,3,4,5}; D int a[]={0,1,2,3,4,5};
2、若有以下语句, 则下面正确的描述是___ B _______。
char x[]="12345"; char y[]={'1','2','3','4','5'};
A. x数组和y数组的长度相同 B. x数组的长度大于y数组的长度
C. x数组的长度小于y数组的长度 D. x数组等价于y数组
3、若有以下定义:char s[]=“\0187654321\\”; 则s 所占的内存空间为___ C ___。
A)1个字节 B)12个字节 C)11个字节 D)10个字节
4、下列关于字符串的说法中错误的是 B
A)在C语言中,字符串是借助于字符型一维数组来存放的,并规定以字符′\0′作为字符串结束标志
A)在C语言中,字符串是借助于字符型一维数组来存放的,并规定以字符′\0′作为字符串结束标志
B)′\0′作为标志占用存储空间,计入串的实际长度
C)在表示字符串常量的时候不需要人为在其末尾加入′\0′
D)在C语言中,字符串常量隐含处理成以′\0′结尾
5、以下程序的输出结果是:___ C __。
C)在表示字符串常量的时候不需要人为在其末尾加入′\0′
D)在C语言中,字符串常量隐含处理成以′\0′结尾
5、以下程序的输出结果是:___ C __。
#include “stdio.h”
main()
{ char s[]="abcdef";
s[3]='\0';
printf("%s\n",s);
}
A) abcdef B) abcde C) abcd D) abc
6、有以下程序
#include "stdio.h"
#include "string.h"
main()
{ char a[]={'a','b','c','d', 'e', 'f', 'g','h','\0'};
printf("%d,%d\n",strlen(a),sizeof(a));
}
程序运行后的输出结果是D
A) 9,9 B) 8,9 C) 1,8 D) 9,8
7、以下程序的输出结果是B
#include "stdio.h"
#include "stdio.h"
main()
{ char ch[3][5]={"AAAA","BBB","CC"};
printf("%s\n",ch[1]);
}
A. "AAAA" B. "BBB" C. "BBBCC" D. "CC"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论