课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759
【项目1-体会函数参数传递】
1、下面三段程序都试图通过定义函数,实现实际参数在必要时的交换,哪些能够实现,哪些不能实现?通过运行程序和单步执行,让自己对这一过程更加清楚,然后请在博文中给出明确的回答,并用你自己的话展开描述。)
(1)
#include <iostream>
using namespace std;
void jiaohuan(int x, int y);
int main()
{
int a,b;
cin>>a>>b;
if (a<b) jiaohuan(a, b);
cout<<"a,b="a<<","<<b;
return 0;
}
void jiaohuan(int x, int y)
{
int t;
t=x;
x=y;
y=t;
}
(2)
#include <iostream>
using namespace std;
void jiaohuan(int *x, int *y);
int main()
{
int a,b;
cin>>a>>b;
if (a<b) jiaohuan(&a, &b);
cout<<"a,b="a<<","<<b;
return 0;
}
void jiaohuan(int *x, int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
(3)
#include <iostream>
using namespace std;
void jiaohuan(int &x, int &y);
int main()
{
int a,b;
cin>>a>>b;
if (a<b) jiaohuan(a, b);
cout<<"a,b="a<<","<<b;
return 0;
}
void jiaohuan(int &x, int &y)
{
int t;
t=x;
x=y;
y=t;
}
2、设计一个程序,输入3个整数,将其按从大到小的顺序输出,要求
(1)排序功能通过函数实现
(2)写出两个版本的函数,一个采用传地址值的方法,另一个采用引用类型作参数
注意:不要一看排序就冒泡法、选择法,那是给大规模数据的排序而定的,此处不定义数组,只简单实现即可;不要只盯着完成任务,而更应该知道其中的机理,当编程(本项目第2个要求)难以完成时,通过读程序(本项目第1个要求)并领悟找到启发。
【项目2-用指针玩字符串】指针是神奇的,指向整型的指针int*p1,可以操作整型数组inta[];指向字符型的指针char*p2,可以操作字符数组(字符串)charstr[];指向指针的指针可以操作二维数组。更灵活的是,在函数的传递中,指针、数组名在一定程度上可以互换。
本项目试图通过编制操作字符串的函数,实现字符串的操作。
请编制函数,其功能是对字符串的进行操作(任务1作为示例给出,3、7必做,其余选做)。
序 |
功能 |
用数组名作形参 |
用指针作形参 |
1 |
字符串str1和str2连接,连接后的结果存放到str1中 |
voidastrcat(charstr1[],constcharstr2[]) |
voidpstrcat(char*str1,constchar*str2) |
2 |
去除字符串str中的特定字符c(如空格),结果仍保存到原字符串中 |
voidadelchar(charstr[],constcharc) |
voidpdelchar(char*str,constcharc) |
3 |
求字符串str的长度并返回 |
intastrlen(charstr[]) |
intpstrlen(char*str) |
4 |
统计句子str中单词的个数 |
intawordnum(charstr[]) |
intpwordnum(char*str) |
5 |
去除句子中第一个单词前的空格 |
voidatrim(charstr[]) |
voidptrim(char*str) |
6 |
去除句子中所有多余的空格 |
voidaalltrim(charstr[]) |
voidpalltrim(charstr[]) |
7 |
比较两个字符串,返回值同strcmp() |
intastrcmp(constcharstr1[],constcharstr2[]) |
intpstrcmp(constchar*str1,constchar*str2) |
提示:
(1)不少函数中的参数用了const限定符,如voidastrcat(charstr1[],constcharstr2[])中的str2,其意义在于指定str2数组(或称str2指针指向的值)可以视为常变量,是不可改变的,从而有效的“保护”了数据,免得出现意外的修改;
(2)在完成任务时,自编main函数进行测试,测试中,给出的的实际参数可以是以’\0’结束的字符数组,也可以是指向字符的指针。
(3)在实际项目中,通过包括string.h头文件,可以调用C语言中操作字符串的函数完成相关操作,而不必专门定义。另外C++中加入的string类是更强大的支撑。不过,此处的练习,更利于同学们从微观理解,这也是专业人员要体会到的。
示例:字符串连接(任务1)的完成
(1)用数组名作形参
其核心是实现voidastrcat(charstr1[],constcharstr2[])
编制的程序可以是:
//字符串连接函数实现和测试示例
#include <iostream>
using namespace std;
void astrcat(char str1[], const char str2[]);
int main()
{
char s1[50]="Hello world. ";
char s2[50]="Good morning! ";
astrcat(s1,s2);
cout<<"连接后:"<<s1<<endl;
return 0;
}
//作为示例,本函数采用了形参为数组,在实现中,直接用下标法进行访问
//实际上,在实现中,完全可以用指针法访问
void astrcat(char str1[], const char str2[])
{
int i,j;
//请理解:以下所有str1[i]可以替换为*(str1+i),str2[j]可以……
for(i=0; str1[i]!='\0'; i++); //找到str1的结束
for(j=0; str2[j]!='\0'; i++,j++)
{
str1[i]=str2[j];
}
str1[i]='\0';//切记!!
return;
}
(
2)用指针作形参 其核心是实现voidpstrcat(char*str1,constchar*str2)函数。
pstrcat函数的实现如下所示,main函数作为测试函数,请自行设计。
//在下面的实现中,str1用指针法访问,而str2用下标法访问
//在实际工程中,这种风格并不好,要尽可以用同一种方式,一般而言,指针法效率更高
//此处str2用下标法访问,除了作为示例的考虑外,还有一个难言之隐
//如果声明char *q,并用q=str2、q++等操作非法,因为str2有const的限制,从而赋值不兼容。
//如何修改,请思考
void pstrcat(char *str1, const char *str2)
{
char *p;
//char *q=str2; //如果这样会出现错误,如何改程序,可有多种改法
int i;
for(p=str1; *p!='\0'; p++); //找到str1的结束
for(i=0; *(str2+i)!='\0'; i++,p++) //如果q的定义通过,可以用*(q+i)代替*(str2+i)
{
*p=*(str2+i);
}
*p='\0';//切记!!
return;
}
【项目3-
数组的排序】按给定部分程序的要求,用指向数组的指针变量作为形式参数编写函数,完成排序。重点体会:(1)排序算法,可以是冒泡,也可以是选择;(2)用指向数组的指针变量作为形式参数,用数组名(即数组的地址)作为实际参数,函数中对于形参的改变实质上也就是对实参对应内存单元的改变;(3)形式参数中不指定数组大小,实际数组的大小也一并作为参数传递。
#include <iostream>
using namespace std;
void sort(int *p, int num); //不要对自定义函数的声明有任何改动
void output(int*, int);
int main( ) //不要对main函数有任何改动
{
int a[20]= {86,46,22,18,77,45,32,80,26,88,57,67,20,18,28,17,54,49,11,16};
int b[15]= {27,61,49,88,4,20,28,31,42,62,64,14,88,27,73};
sort(a,20); //用冒泡法按降序排序a中元素
output(a,20); //输出排序后的数组
sort(b,15); //用冒泡法按降序排序b中元素
output(b,15); //输出排序后的数组
return 0;
}
//下面定义自定义函数
【项目
4】数组用于进制转换:编一个程序,其中调用函数voidtran(intn,intd)用于将十进制数n转换为d进制数输出,并输出d进制数中最大位值是多少,在第几位。d的取值在2-32之间,数制d超过10时,依次用ABC...代表其基本符号,如对17进制而言,G代表其最大符号,对应十进制的16。 提示:用递归函数完成十进制向d进制的转换是需要掌握的,但对于本题而言,由于要在转换后的各位数上进行查找,建议用数组存放转换后的各位数值。右边是运行示例:

【项目5:穷举法解决组合问题】本项目只需要用到第3章控制结构部分。临近期末,通过这组题目,再用“循环”活动活动思维。
具体内容请看2012级第11周项目2,链接:http://blog.csdn.net/sxhelijian/article/details/8141924
==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章分类目录(不定期更新) ==|
|== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==|
========为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =======
分享到:
相关推荐
第七章“指针与引用”深入讨论了指针变量,包括其定义、动态内存分配、指针运算、指针与常量的结合,以及指针在函数参数和数组中的应用。此外,还介绍了引用这一特殊的别名机制。 第八章“结构与链表”介绍了自定义...
第4章 数组和字符串 第5章 特殊类型变量——指针 第6章 函数提高程序模块化 第7章 预处理器和宏 第8章 自定义数据类型 第9章 对象和类 第10章 构造函数和类成员 第11章 类继承和友元关系 第12章 多态与...
第17讲 指针的定义与使用 第18讲 指针与数组 第19讲 指针与函数 第20讲 动态分配内存 第21讲 掌握三种自定义数据类型 第22讲 自定义数据类型的应用——链表 第23讲 预处理命令 第24讲 习题解析 第25讲 类的定义 第26...
11. 字符串处理(Strings):C++/CLI提供了两种字符串类型——本地字符串和托管字符串。本地字符串是C风格的char或wchar_t类型,而托管字符串则是System::String类型。教程将解释如何进行字符串转换和格式化。 12. ...
第4章 数组、字符串和指针 141 4.1 处理多个相同类型的数据值 141 4.1.1 数组 142 4.1.2 声明数组 142 4.1.3 初始化数组 145 4.1.4 字符数组和字符串处理 147 4.1.5 多维数组 150 4.2 间接数据存取 ...
C++的clib库是标准C库的一部分,它包含了大量的基本输入/输出、数学、字符串处理、内存管理等功能。例如,`stdio.h`头文件提供了读写标准输入输出的函数,如`printf`和`scanf`;`math.h`提供了数学函数,如平方根`...
第17章 文件I/O 第18章 文件管理 第19章 目录操作 第20章 特殊文件 第21章 基于流的I/O 第5篇 Linux网络编程 第22章 TCP和UDP协议 第23章 网络编程基础 第24章 网络编程进阶 第25章 网络编程实例——实现文件传输...
第六章“数组、指针与字符串”介绍了C++中处理数据集合的方式,数组和指针是C++处理内存和数据的重要工具,而字符串则是常用的数据类型。 第七章“继承”是面向对象的一个关键特性,它允许创建新的类(子类)来扩展...
*5.6 C++处理字符串的方法——字符串类与字符串变量 5.6.1 字符串变量的定义和引用 5.6.2 字符串变量的运算 5.6.3 字符串数组 5.6.4 字符串运算举例 习题 第6章 指针 6.1 指针的概念 6.2 变量与指针 6.2.1 定义...
第十七讲至第十九讲:异常处理 讲解了C++的异常处理机制,如何抛出和捕获异常,以及在编写健壮程序时异常处理的重要性。 第二十讲:文件操作 介绍了输入/输出流的概念,如何使用fstream库进行文件读写操作,以及...
第4章 数组、字符串和指针 139 4.1 处理多个相同类型的数据值 139 4.1.1 数组 140 4.1.2 声明数组 140 4.1.3 初始化数组 143 4.1.4 字符数组和字符串处理 144 4.1.5 多维数组 147 4.2 间接数据访问 150 ...
字符串是字符数组的特殊形式,C++提供了标准库std::string来处理字符串。本章会讲解如何创建、初始化和操作数组,以及字符串的基本操作。 第四章:指针 指针是C++中的重要特性,可以存储其他变量的地址。理解指针...
- **第4章:数组、字符串与指针**:讲解数组、字符串的概念及操作,以及指针的基本概念和用途。 3. **高级篇**: - **第5章:引入程序结构**:介绍函数的概念、定义和调用方式,以及如何通过函数提高代码复用性。...
字符串在C++中通常用字符数组表示,可以利用指针来操作字符串。 - **示例代码**: ```cpp char str[] = "Hello"; char *p = str; // p 指向字符串的第一个字符 while(*p != '\0') { cout *p ; p++; } ``` ...
*5.6 C++处理字符串的方法——字符串类与字符串变量 5.6.1 字符串变量的定义和引用 5.6.2 字符串变量的运算 5.6.3 字符串数组 5.6.4 字符串运算举例 习题 第6章 指针 6.1 指针的概念 6.2 变量与指针 6.2.1 定义...
注意:由于上传大小限制,此电子书分为两个压缩包,此压缩包part1为第一部分,需下载part2后同时进行解压!...第17章 创建文档和改进视图 第18章 使用对话框和控件 第19章 存储和打印文档 第20章 编写自己的dll
visualC++2010入门经典源代码 第1章 使用visual c++ 2010编程 1.1 .net framework 1 1.2 clr 2 ...第17章 创建文档和改进视图 第18章 使用对话框和控件 第19章 存储和打印文档 第20章 编写自己的dll