C Primer Plus 11.12 复习题

1、

答:字符串是以空字符('\0')结尾的一系列字符,故上述声明的是一个字符数组,不是字符串。

2、

3、

4、

5、

a.

b.

指向 char 类型的指针

c.

字符串 "Ho Ho Ho!" 的首地址。

d.

*--pc : 表示指针先前移动一位,然后取指针指向的值。

--*pc : 先取指针指向的值,然后值减1.

e.

f.

第 1 个 while 循环用来测试是否到达字符串末尾的空字符('\0') ;

第 2 个 do{}while 循环用来测试是否到达该字符串的首字符.

g.

由于 *pc 为空字符('\0'),不会进入第 1 个 while 循环,第二个 do{}while 循环先对 pc 递减,则表达式 pc - str 永远为负,循环一直进行下去。

h.

主调函数需调用pr()前要声明函数 char *pr(char *str);

主调函数需要声明指针 char 类型变量 x,即 char *x 。

6、

sign 是 char 类型变量,占 1 个字节的内存。

'$' 是 char 字面值常量,占 1 个字节的内存。

"$" 是字符串字面值,末尾还有空字符('\0'),占 2 个字节的内存。

7、

8、

9、

复制代码
char *s_gets(char *st, int n)
{
	
	char *ret_val;
	
	char *ptr;
	
	ret_val = fgets(st, n, stdin);
	
	if(ret_val)
	{
		
		ptr = st;
			
		while(*ptr != '\n' && *ptr != '\0')
			
			ptr++;
			
		if(*ptr == '\n')
		
			*ptr = '\0';
			
		else
		
			while(getchar() != '\n')
			
				continue;
						
	}
	
	return ret_val;
}

10、

复制代码
int strlen(char *st)
{
	int i = 0;
	
	while(*st++)
	
		i++;
	
	return i;
}

11、

复制代码
#include <string.h>  // 有 strchr() 函数

char *s_gets(char *st, int n)
{
	char *ret_val;
	
	char *find;

	ret_val = fgets(st, n, stdin);
	
	if (ret_val)
	{
		
		find = strchr(st, '\n');
		
		if (find)
			
			*find = '\0';
		
		else
			
			while (getchar() != '\n')
				
				continue;
	}
	
	return ret_val;
}	

12、

复制代码
#include <stdio.h>

char *find_first_space(const char *str)
{
 
    if (str == NULL)
        
		return NULL;
    
    while (*str != '\0') 
	{
        if (*str == ' ') 
	
          	return (char *)str;
        
        str++;
    }
    

    return NULL;
}


/*

括号 (char *) 是 C 语言类型转换操作符的固定语法格式。它告诉编译器:"将 str 从 const char * 类型转换为 char * 类型"。

*/

13、

复制代码
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define ANSWER "Grant"
#define SIZE 40

char *s_gets(char *st, int n);

void upper(char *str);

int main()
{
	char try[SIZE];

	puts("Who is buried in Grant's tomb?");
	
	s_gets(try, SIZE);
	
	upper(try);
	
	while(strcmp(try, ANSWER) != 0)
	{
		
		puts("No, that's wrong. Try again.");
		
		s_gets(try, SIZE);
		
		upper(try);
	
	}
	
	puts("That's right);

	return 0;
}

char *s_gets(char *st, int n)
{
	char *ret_val;
	
	char *find;

	ret_val = fgets(st, n, stdin);
	
	if (ret_val)
	{
		
		find = strchr(st, '\n');
		
		if(find)
		
			*find = '\0';
		
		else
		
			while(getchar() != '\n')
		
				continue;
	}
	
	return ret_val;
}

void upper(char *str)
{
	while(*str)
	{
		*str = toupper(*str);
		
		++str;
	}
}	
相关推荐
事圆则缓1 小时前
Kotlin 协程完全指南
开发语言·kotlin
我爱写代码i1 小时前
BeLink - 支持生成多种URL 缩短网址PHP源码
开发语言·php·短网址php源码
Java后端的Ai之路1 小时前
20、Python - 备忘录模式
开发语言·人工智能·python·外观模式·备忘录模式
统计学小王子2 小时前
数学建模国赛倒计时4天——《统计模型精讲(混合效应模型R语言实现)》
开发语言·数学建模·r语言
知无不研2 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
郝学胜-神的一滴2 小时前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
dsyyyyy11013 小时前
JS复习,难点,易错点总结
开发语言·javascript·ecmascript
HRTOS4 小时前
HRTOS 4.0 驱动库:06_Storage 存储设备驱动——24C02 EEPROM与I²C驱动开发
c语言·驱动开发·嵌入式硬件·51单片机
“AI国潮设计-小江”4 小时前
Python实战 | SDXL精准控制“普宁英歌舞×星空蛋糕”IP落地,附核心Prompt与商用授权思路
开发语言·人工智能·python·prompt·aigc
小刘在重生~5 小时前
Java常用类|String类详解 + BigDecimal精准计算(含面试题)
java·开发语言·python