第一周9.14

本文介绍了算法的基本概念及其描述工具,包括自然语言、流程图和伪代码等,并通过实例讲解了程序=算法+数据结构的关系。同时,文章还探讨了循环控制结构的应用,如求平方和、奇数和及输出星号等。

1 算法的基本概念

程序=算法+数据结构

 用数据结构描述数据   用算法描述对数据的操作

算法:是由一系列规则组成的过程,这些规则确定了一个操作的顺序,  以便能在有限步骤内得到特定问题的解


2算法的描述工具 

  自然语言   流程图:程序流程图、N-S图   伪代码

“程序=算法+数据结构”的体现 

 #include <stdio.h>  

int main() 

 {   int a,b,r;  

 scanf("%d %d", &a, &b); 

  while (b!= 0)  

 {   r=a%b;   a=b;   b=r;  

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

 return 0;  

}



3体会算法的概念 

  算法:把需要解决的问题用计算机语言梳理出来  /把问题拆解了,拆解成计算机语言能识别,按顺序执行出来的过程

为解决问题而采取的方法和步骤  

一个问题可以有多种算法

常见问题的算法有很多现成的举例和代码,多看看

求最大公约数的三种算法链接(转载他人链接)

http://blog.youkuaiyun.com/iwm_next/article/details/7450424


 乐谱是乐队演奏的算法  

 菜谱是做菜肴的算法 

  珠算口诀是使用算盘的算法  

 图纸是施工的算法

   编程序解决问题需要算法 

  算法要说明如何得到解,而不是给出问题的解。  

 在学习程序设计过程中,学会语言,提高算法能力。


4循环控制结构和流程图

画出实现下面求解任务的流程图【提示:m是一个变量,在程序中输入】

 求1到m的平方和

int main()
{
    int n,m,sun=0;
    printf("请输入m的值");
    scanf("%d",&m);
    for(n=1;n<=m;n++)
    {
        sun+=n*n;
    }
    printf("%d",sun);
    return 0;
}

 求1到m间所有奇数的和


5循环的嵌套

思考与实践

 求s=1!+2!+……10!,即求1到10的阶乘和

 求s=1+22+33+44+55+66,要求nn不能用求幂的运算直接计算


6循环思维启蒙

a 输出50个星号

int main()
{
 int i;
 for(i=0;i<50;++i)
 {
 printf("*");
 }
 printf("\n");
 return 0;
}

b用循环改造任务3:用单层循环
#include <stdio.h>
int main() {
 int i;
 for(i=0; i<7; ++i)
 {
 printf("********\n");
 }
 return 0; }

 用循环嵌套改造任务3:
#include <stdio.h>
int main() {
 int i,j;
 for(i=0; i<7; ++i)
 {
 for(j=0; j<8; ++j)
 {
 printf("*");
 }
 printf("\n");
 }
 return 0; }

### 关于《C++ Primer》第五版第9章练习14 在《C++ Primer》第五版中,第九章主要涉及指针、数组以及字符串的内容。对于练习题9.14而言,该题目旨在加深读者对动态分配字符数组的理解并掌握如何安全处理这些资源。 #### 练习描述 题目要编写一段程序来读取一系列名字到由`new`运算符创建的字符数组中去,并确保每个输入的名字长度不超过给定的最大值。当遇到文件结束标志或是超过指定数量的名字时停止读入操作。最后释放所有已分配内存[^1]。 #### 解决方案分析 为了完成这项任务,可以按照以下思路构建解决方案: - 定义两个常量分别表示单个名字最大允许长度(含终止符)和最多能存储多少个这样的名字; - 动态申请一块足够大的空间用于保存多个名字数据; - 循环接收用户输入直到达到预设条件之一为止; - 对每一个成功录入的名字都要检查其实际占用字节数是否超出界限; - 如果一切正常,则继续等待下一个输入;反之则给出提示信息告知当前条目被跳过; - 结束循环后遍历整个列表打印出所有有效项; - 清理工作包括但不限于删除先前通过`new[]`获得的对象实例以防止发生泄漏现象。 下面是一份可能实现此功能的代码片段: ```cpp #include <iostream> using namespace std; int main() { const unsigned int MAX_NAME_LENGTH = 20; // 单名最长可达19个字母加上&#39;\0&#39; const unsigned int NAME_COUNT_LIMIT = 10; char **names = new char*[NAME_COUNT_LIMIT]; for (unsigned int i = 0; i < NAME_COUNT_LIMIT; ++i){ names[i] = nullptr; } try{ cout << "请输入不多于" << NAME_COUNT_LIMIT << "个姓名(每行限" << MAX_NAME_LENGTH - 1 << "个字符),按Ctrl+D结束:" << endl; string tempName; unsigned int count = 0; while(getline(cin,tempName)){ if(tempName.length()>MAX_NAME_LENGTH-1 || count>=NAME_COUNT_LIMIT) break; names[count]=new char[MAX_NAME_LENGTH]; strncpy(names[count],tempName.c_str(),MAX_NAME_LENGTH); names[count][MAX_NAME_LENGTH-1]=&#39;\0&#39;; ++count; } cout<<"\n您输入的有效姓名有:"<<endl; for(unsigned int j=0;j<count;++j){ if(names[j]!=nullptr && strlen(names[j])>0) cout<<names[j]<<endl; } }catch(...){ cerr<<"发生了异常情况!"<<endl; } //清理资源 for(int k=0;k<NAME_COUNT_LIMIT;++k){ delete [] names[k]; } delete [] names; return 0; } ``` 这段代码实现了上述逻辑结构,并加入了基本的错误捕捉机制以便更好地应对潜在问题的发生。需要注意的是,在真实环境中应当更加严谨地对待边界条件和其他可能出现的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值