视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
实验7 字符数组和字符串
2025-09-29 16:30:32 责编:小OO
文档
实验7  字符数组和字符串

[预备知识]

完成学生登录和试题下载的任务,将试题包文件解压缩完后可看到有一个实验素材文件夹;在实验素材文件夹下,将diy文件夹下的所有.c文件复制到实验结果文件夹下;

打开实验结果文件夹,选择一个.c的文件,单击右键并选择“打开方式\选择程序”如图

选择“浏览”按钮,选择“c:\\program files\\microsoft visual studio\\common\\msdev98\\bin\\msdev.exe”程序,并将复选框打钩,单击“确定”,如图

双击.c扩展名的文件,自动启动VC++6.0的程序。

按要求依次完成DIY中的三项任务,调式程序、程序填空和编程题,将debug文件夹下的所有.exe 程序文件复制到实验报告和结果文件夹下,打开“实验报告.doc”文件,填写相关的原程序文件名和可执行程序文件名;

关闭所有应用程序,点击上传按纽。

 [实验目的]

1.掌握字符串的概念、定义及存储

2.掌握字符串的基本操作

3.熟悉常用的字符串操作函数

[实验范例]

[问题] 输入两个字符串arr1和arr2,判断第1个字符串arr1是否包含第2个字符串arr2。

[分析]设第2个字符串长度小于第1个字符串。从第1个字符开始,从arr1中取出一个字符与arr2的第1个字符比较,若相同,则从arr1中取出与arr2长度相等的子字符串放入中间字符数组中,判断该中间字符串与arr2是否相等,若不同,则从arr1的下一个字符再判断。

[代码]

#include

#include

#define MAX 20

void main()

{

 int i,j,k,m,n,flag=0;

 printf("请输入第一组字符串:");

 请输入第二组字符串:");

  第1个字符串的长度*/

  第2个字符串的长度*/

   初始化中间字符数组*/

   判断arr1的某个字符与arr2的第1个字符是否相同*/

 

  

    从arr1中取子串*/

   

    比较两个字符串是否相同*/

   {

    位置:%d,包含\\n",i+1);

    flag=1; 相同则变量flag置1*/

       break;       /*退出循环*/

}

 

  不包含\\n");

}

[DIY]

1、调试下列程序(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)

[1.1]以下程序统计字符串str中字符‘#’与数字字符的个数。

[代码]

     #include

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 );

        }

[1.2] 有n个国家参加运动会,开幕式上,各国的出场顺序以国名在英文字典中的位置先后为序,输出一份各国出场顺序表。

[代码]

#include

#include

#define N 10

main()

{  char name[N][30], str[30];  int i, j;

   printf("Enter the name:\\n ");

for(i=0; i { scanf("%s", &name[i] ); strupr(name[i]); }  /*输入国名,转换为大写*/

for( i = 0; i    for(j= i; j     if(name[i]> name[j])

       { strcpy(name[i],str ); 

strcpy(name[i], name[j]); 

strcpy(name[j], str);

}

for( i=0; 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); 

}

[2.2]以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。

3.编程

[3.1] 最多从键盘输入80个字符,遇到回车键就结束,将输入的字符串按奇偶位置拆分,奇数位字符在前偶数位字符在后重新组成新的字符串输出,例如输入: ab12cd3456fg,则经过程序处理后输出: a1c35fb2d46g。

[3.2] 编程序把从键盘输入的英文短文作为一个字符串(长度不超过80),把短文中每个单词的首字母改成大写(原输入可以是大写),若还发现有两个或两个以上连续的空格,把它们删成只有一个空格,输出修改后的字符串。

[本章测试]

一、单选题(10分)

1、以下合法的数组定义是:___________________。

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、若有以下语句, 则下面正确的描述是__________。

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 所占的内存空间为______。

A)1个字节     B)12个字节    C)11个字节    D)10个字节

  4、下列关于字符串的说法中错误的是

  A)在C语言中,字符串是借助于字符型一维数组来存放的,并规定以字符′\0′作为字符串结束标志

  B)′\0′作为标志占用存储空间,计入串的实际长度

  C)在表示字符串常量的时候不需要人为在其末尾加入′\0′

  D)在C语言中,字符串常量隐含处理成以′\0′结尾

 5、以下程序的输出结果是:_______。

  #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”

    main()

  { char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\\0’}; int i,j;

   i=sizeof(a); j=strlen(a);

   printf(“%d,%d\\b”i,j);

  }

程序运行后的输出结果是

     A) 9,9       B) 8,9       C) 1,8        D) 9,8

 7、以下程序的输出结果是B

     #include “stdio.h”

     main()

    { char ch[3][5]={"AAAA

    printf("\\"%s\\"\\n",ch[1]);

    }

 A. "AAAA"   B. "BBB"     C. "BBBCC"     D. "CC"

 8、当执行下面的程序时,如果输入ABC,则输出结果是____。

    #include “stdio.h”

    #include “string.h”

    main()

    { char ss[10]=“1,2,3,4,5”;

     gets(ss); strcat(ss, “67”); printf(“%s\\n”,ss);

    }

   A. ABC67     B. ABC67     C. 12345ABC6   D. ABC4567

 9、有下面程序段

 #include "stdio.h"

  #include "string.h"

  main()

  {char a[3][20]={{"china"},{"isa"},{"bigcountry!"}};

   char k[100]={0},*p=k;

  int i;

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

  { p=strcat(p,a[i]);}

   i=strlen(p);

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

则程序段的输出结果是

    A)18      B)19        C)20      D)21

10、有以下程序

#include

#include

   main()

   { char p[][10]={ "abc

int i,j;

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

for(j=i+1;j<5;j++)

if(strcmp(p[i],p[j])<0)

{ strcpy(t,p[i]);

           strcpy(p[i],p[j]);

    strcpy(p[j],t);

         }

     printf("%d\\n",strlen(p[0]));

    }

程序运行后的输出结果是。

A. 6         B. 4         C. 5         D. 3

二、填空题(7分)

1、已知字符数组str的定义:char str[ ]=“ABCDEFGHIJ”;执行函数调用printf(“%.2s \\n”,str+5 )后的输出结果是______________________。

2、若有定义语句: char s[100],d[100]; int j=0, i=0;,且s中已赋字符串,请填空以实现字符串拷贝。(注:不得使用逗号表达式)

while(s[i]){ d[j]= ; j++;} d[j]=’\\0’;

3、定义char words[10][20]; 使用printf写出语句:输出words中第一维下标i对应的字符串。

  ______________________。

4、设有如下程序段,程序运行结果是__________________________)。

char s1[20]="P4CPU";

char s2[]="DVD+17\\"CRT+56KMODEM";

s2[10]='\\0';

strcat(s1,s2+3);

puts(s1);

5、下面的程序输出结果是 __________________。

#include

  main()

   { char  language[][10]={"FORTRAN

    int   c;

    c=strcmp(language[1],language[3]);

     printf("%d\\n",c);

    }

 6、下面程序的功能是将输入字符串的内容颠倒过来。请在空白处填空。

#include

void main( )

{ int i, j;char str[80];     (1)     ;  gets(str);

  for ( i=0, j=strlen(str)    (2)     ; i{ k=str[i]; str[i]=str[j]; str[j]=k; }

puts(str);  

}

三、程序调试题(10分)

1、下面程序功能是输入一个字符串,并将其中的字符’a’用字符串”shu”替代后输出。如输入为”123abcaHello”,则输出为”123shubcshuHello”。

[程序3-1]

for (i=0;  line[i]!=’\\n’; i++)

if (line[i]==’a’)

2、下列程序的功能是:将字符串b连接到字符串a。

[程序3-2]

#include

void main( )

{ char a[]="wel",b[]="come";

 int i,n=0;

 for(i=0;b[i]!='\\0';i++)

 

}

四、程序填空题(30分)

1、下面的程序功能是根据输入的学生姓名,查看该生是否是某个班的学生。(假设某个班有30人,姓名已根据字母顺序排列,即输入的班级学生姓名是有序的)

[程序4-1]

#include

#include

#define N 10

main()

{  char name[N][30], str[30];  int i,low=0,high=N-1,m;

   printf("Enter the name:\\n ");

for(i=0; i    { gets(name[i]);  

      strupr(name[i]); 

     }  /*输入姓名,转换为大写*/

for( i = 0; i   printf("Enter the searched name:\\n ");

gets(str); strupr(str); /*输入要查找的姓名,转换为大写*/

   m=(low+high)/2;

while(_______________________&&low<=high)

   {

if(strcmp(name[m],str)>0)

           high=m-1;

else if(strcmp(name[m],str)<0)

          low=m+1; 

       m=_________________;

   }

   if(______________)

       printf("Found");

   else

       printf("no found");

  }

2、输入一行字符,从中读出所有单词,并将所有单词的首字符组成字符串后输出。设单词以空格分隔)

[程序4-2]

#include

#include

main()

{ char str[81],s[20],c;

  int i,j,word=0;

  printf("Enter the string\\n"); gets(str);

  i=0;j=0;

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

  { if(c==' ')  /*空格表示单词结束*/  

              _______________;       

   else if(c!=' '&& word==0)

       { word=1; _______________=c;}

    i++;

  }

  ___________________;

  printf("The new string is:%s\\n",s);

 }

五、编程题(36分)

1、输入一行字符,将双引号里面的字符不动,双引号外面的小写字母转换为大写字母。

2、不用C字符串函数,编写一个实现两个字符串连接的函数。下载本文

显示全文
专题