c语言练习题目.docx

上传人:b****5 文档编号:28496506 上传时间:2023-07-15 格式:DOCX 页数:19 大小:1.99MB
下载 相关 举报
c语言练习题目.docx_第1页
第1页 / 共19页
c语言练习题目.docx_第2页
第2页 / 共19页
c语言练习题目.docx_第3页
第3页 / 共19页
c语言练习题目.docx_第4页
第4页 / 共19页
c语言练习题目.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

c语言练习题目.docx

《c语言练习题目.docx》由会员分享,可在线阅读,更多相关《c语言练习题目.docx(19页珍藏版)》请在冰豆网上搜索。

c语言练习题目.docx

c语言练习题目

(1)ASCLL码

字符

ASCLL码

‘0’~’9’

48~57

‘A’~’Z’

65~90

‘a’~’z’

97~122

(2)数值类型和字符类型之间的彼此转换

当一个浮点数转换为一个字符类型的时候,浮点数先转换为int类型,然后再转换为char类型。

charc=65.25;

cout<

当一个char类型转换为1个数值类型时候,字符的ASCLL码被转换到指定的数值变量中。

inti=’A’;

cout<

(3)字符的比较(>,<,!

=,=)

‘a’>’b’为假;

‘1’<’8’为真;

‘a’<’A’为假;

说明:

字符之间的比较是比较其ASCLL码的大小。

字符的输入与输出与一般的变量的输入输出方式一样。

二、字符串的简单操作

(1)赋值

字符串常量能够用字符串常量或变量来赋值。

例如:

S1=”sssz”

S2=S1;

(2)输入输出

strings;

cin>>s;

cout<

(3)访问字符串中某个字符。

for(i=0;i

cout<

(3)加法运算

它的作用是将两个字符串联接到一路。

例如:

s1=”aaa”+”bbb”;

cout<

现在在屏幕上会输出aaabbb。

(4)关系运算(>,<,<=,>=,!

=,=)

‘ab’<’abc’为真;’abc’<’abs’为真;’12’<’2’为真;

说明:

比较方式:

逐位比较,第一个和第一个比较,相同继续比较下一个,不同,返回结果!

知识点3:

一维数组的大体操作

下面的实例利用了上面的函数:

#include

#include

usingnamespacestd;

intmain()

{

charstr1[11]="Hello";

charstr2[11]="World";

charstr3[11];

intlen;

//复制str1到str3

strcpy(str3,str1);

cout<<"strcpy(str3,str1):

"<

//连接str1和str2

strcat(str1,str2);

cout<<"strcat(str1,str2):

"<

//连接后,str1的总长度

len=strlen(str1);

cout<<"strlen(str1):

"<

return0;

}

运行结果:

strcpy(str3,str1):

Hello

strcat(str1,str2):

HelloWorld

strlen(str1):

10

做题的常见操作:

国王有一个魔镜,能够把任何接触镜面的东西变成原先的两倍——只是,因为是镜子嘛,增加的那部份是反的。

比如一条项链,咱们用AB来表示,不同的字母表示不同颜色的珍珠。

若是把B端接触镜面的话,魔镜会把这条项链变成ABBA。

若是再用一端接触的话,那么会变成ABBAABBA(假定国王只用项链的某一端接触魔镜)。

给定最终的项链,请编写程序输出国王没利用魔镜之前,最初的项链可能的最小长度。

样例输入:

AABBBBAAAABBBBAA

样例输出:

4

#include

#include

intmain(){

chars[105];

scanf("%s",s);

intl=strlen(s);

while(l!

=1){

intok=1;

for(inti=0;i

if(s[i]!

=s[l-1-i]){

ok=0;

break;

}

}

if(ok)l=l/2;

if(!

ok)break;

}

printf("%d",l);

}

字符串

1.概念  

  用双引号引发来的确实是字符串

"astring"

//C语言编译器会将两个并列的字符串自动拼接成一个字符串

"astring""anotherastring"

//折行符'\'是代码换行连接的标记(一行不够写)

"alooooooooooong\

 string" 

  常见ASCII编码:

  'A'==65   'a'==97   '0'==48   '\0'==0

int a[10]; //表示在栈中分派了40Bytes的内存空间,空间的首地址是a

char a[10]; //表示在栈中分派了10Bytes的内存空间,空间的首地址是a

   

  如何表示和保留字符串:

  C语言中没有字符串类型,用一片内存空间保留一串字符,约定用整数0(或字符'\0')来表示一个字符串的终止。

   利用字符串时只需要记录字符串的开始位置。

  C语言中的字符串用字符数组表示:

char a[6] = {'h','e','l','l','o','\0'};//特殊的字符数组(字符串)

char a[6] = "hello"; //简化版写法(这种写法 \0省略)

char *a= "hello"; //概念一个字符串的另一种写法

2.初始化

char str[]= "hello"; //常用

char str[]={'h', 'e', 'l', 'l', 'o', '\0'};

// 部分初始化, 部分初始化中, 没有被初始化的元素默认是0(\0对应的ASCII0)

char str[8]= {'h', 'e', 'l', 'l', 'o'}; //hello000

char str[5]={'h', 'e', 'l', 'l', 'o'}; //该方式不是字符串, 而是字符数组, 因为没有\0

char str[]={'h', 'e', 'l', 'l', 'o'}; //同上,是字符数组

   

""; //包含一个空格

""; //空字符串,什么东西都没有

   

  字符串的赋值:

∙给char*类型的字符串赋值,能够直接利用"="号

∙给char[]类型的字符串赋值,需要利用strcpy函数

  字符串的特点:

∙需要明白的一点确实是字符串以\0结尾,没有\0就不是字符串

∙只若是用双引号括起来的都是字符串

∙字符串的本质确实是数组(字符数组)

char str[]= "hello";

str[1]= 'y';

printf("%s",str);//hyllo

 

  注意:

 字符串变量 和 一般的字符数组 有必然的区别

 

C语言规定, 字符串必须以\0结尾(作为字符串的结束符号), 所以字符串变量的元素个数比字符数组的元素个数多一个'\0'(0)

char a[5]={'h', 'e', 'l', 'l', 'o'}; //普通的字符数组(不是字符串,因为没有\0)

char a[8]={'h', 'e', 'l', 'l', 'o'}; //部分初始化(未初始化的部分都为0),以0结尾(是字符串)

char a[6]={'h', 'e', 'l', 'l', 'o', '\0'}; //以\0结尾(是字符串)

char a[6]={'h', 'e', 'l', 'l', 'o', 0}; //以0结尾(是字符串)

注意:

'0' = 48;//"abc0d" 双引号里是字符'0'不是数值0

'\0'=0;

3.输出

  %s的原理,从传入的"地址"开始逐个掏出,直到碰到"\0"位置  

  如何输出字符串:

∙利用printf的%s占位符来输出

∙利用puts函数来输出(自动换行,原样输出)

char str[]= "howareyou";

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

puts(str); //howareyou

 4.输入

∙利用scanf函数接收字符串

   

∙利用gets函数接收字符串

  

∙利用fgets函数接收字符串(推荐经常使用!

  

/** 给字符数组赋值的三种方式 */

#include 

#include 

voidmystrcpy(char*str1, constchar*str2){

   //*str2对*str1逐个字符进行赋值

   //*str2直到把'\0'赋值给*str1时,*str1的结果就是0,循环就结束!

   while((*str1++=*str2++));

}

intmain(){

   charstr[10]= "abc";

//1.使用循环给字符数组赋值

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

    str[i]= "ABC"[i]; //等价于 *("ABC"+i),"ABC"返回的是A的地址(即首地址)

  }

   printf("str=%s\n",str);//str=ABC

//2.使用标准库函数给字符数组赋值

   strcpy(str, "XYZ");

   printf("str=%s\n",str);//str=XYZ

//3.使用自定义函数给字符数组赋值

   mystrcpy(str, "OKOK");

   printf("str=%s\n",str);//str=OKOK

   return 0;

}

5.库函数

∙计算字符串的长度(strlen):

(计算字符串中有多少个字符,注意不包括\0)

    strlen的原理:

从传入的地址开始逐个掏出字符串,每掏出一个就让计数器+1.直到碰到\0为止。

    

∙字符串拼接(strcat)

    原理:

第一遍历第一个字符串,直到碰到\0为止,然后掏出第二个字符串中的字符,从\0的位置开始添加,添加完毕以后再在最后添加一个\0

    

 

∙字符串拷贝(strcpy)

    strcpy函数会将源的数据拷贝到目标中,而且会覆盖掉目标中原有的数据,目标的容积必需能够寄存拷贝的数据, 若是容积不够会报错。

    

∙字符串比较(strcmp)

 原理:

 掏出字符串中的每一个字符进行逐个比较, 若是发觉不相等就可不能继续往下比较

#include 

#include 

#include 

/**strcpy 字符串赋值函数 */

voidtest1(){

   char str[6]={0};//表示在栈中分配了6个字节的内存空间,空间的首地址是str(数组名)

   strcpy(str, "abc");//给字符数组赋值,str[10]="abc";

   strncpy(str, "AABBCC", sizeof(str)-2);//只赋值前4个字符(AABB);str[6]="AABB";

}

/**strcat 给一个字符串追加内容 */

voidtest2(){

   charstr[8]= "abc";

   strcat(str, "def"); //str[8]="abcdef";

   strncat(str, "kkkkkk", 3);//只追加前3个字符;str[8]="abckkk";

}

/**strcmp 比较字符串内容的大小 */

voidtest3(){

   char*str1= "abcd.c";

   char*str2= "abcf.m";

   strcmp(str1,str2); //返回值为:

-2(表示 str1

   strncmp(str1,str2, 3); //比较前3个字符的大小; 返回值为:

0(表示 str1==str2)

   bool r=str1>str2;//比较地址大小(str1和str2都是地址)

}

/**memset 内存清理函数(清空)*/

voidtest4(){

   charstr[8]= "abcd";

   memset(str, 0, sizeof(str));//清理内存空间(开始位置, 清零, 空间大小/长度);

   strcpy(str, "ABCD");//清空后重新赋值

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

}

intmain(){

   test4();

   return 0;

}

   

//strcmp函数实际应用(判断字符串是否相等),验证登录密码!

#include 

#include 

intmain(){

   charpwd[20]={0};

   do{

     printf("请输入密码:

");

     scanf("%s",pwd);

  } while(strcmp(pwd, "abc123"));

   printf("密码正确,登录成功!

\n");

   return 0;

}

   

  

  

指针变量本身在栈中,指针变量能够指向任何地址。

(指针和指针指向的空间是两个空间)

指针修改值的两种情形:

1)修改指针本身的值(也确实是改变指针的指向);

2)修改指针所指向的空间的值

字符串数组

1.概念

  字符串数组:

一个数组中的所有的元素都是字符串。

  

  若是想存储一堆字符串那么能够利用字符串数组,说白了字符串数组确实是二维数组

  字符串数组两种表示:

   第一种:

charstr[4][6]={"aaa","bbb","ccc"}; //char类型的二维数组

   第二种:

char*str[4]={"aaa","bbb","ccc"}; //char*类型的一维数组

  

  

2.应用

   

  

  

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

当前位置:首页 > 总结汇报 > 学习总结

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

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