周报

学习内容

1IP地址

基本概念:IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据报传输服务。

2广域网

广域网(英语:Wide Area Network,缩写为 WAN),又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个地区、城市和国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。广域网并不等同于互联网。
在一个区域范围里超过集线器所连接的距离时,必须要通过路由器来连接,这种网上类型称为广域网。如果有北、中、南等分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即称为“广域网”。
广域网的发送介质主要是利用电话线或光纤,由ISP业者将企业间做连线,这些线是ISP业者预先埋在马路下的线路,因为工程浩大,维修不易,而且带宽是可以被保证的,所以在成本上就会比较为昂贵。
一般所指的互联网是属于一种公共型的广域网,公共型的广域网的成本会较低,为一种较便宜的网上环境,但跟广域网比较来说,是没办法管理带宽,走公共型网上系统,任何一段的带宽都无法被保证。

局域网

局域网(Local Area Network(LAN))是一个可连接住宅,学校,实验室,大学校园或办公大楼等有限区域内计算机的计算机网络。相比之下,广域网(WAN)不仅覆盖较大的地理距离,而且还通常涉及固接专线和对于互联网的链接。 相比来说互联网则更为广阔,是连接全球商业和个人计算机的系统。
这些只是了解,说实话,不知道该从什么地方系统学起,有点迷茫,还好最近主要学C语言。

C语言指针

1数组与指针的

数组的数组名其实可以看作一个指针。看下例:例九:int array[10]={0,1,2,3,4,5,6,7,8,9},value; value=array[0]; //也可写成:value=array; value=array[3]; //也可写成:value=(array+3); value=array[4]; //也可写成:value=(array+4);上例中,一般而言数组名array 代表数组本身,类型是int[10],但如果把array 看做指针的话,它指向数组的第0 个单元,类型是int 所指向的类型是数组单元的类型即int。因此array 等于0 就一点也不奇怪了。同理,array+3 是一个指向数组第3 个单元的指针,所以(array+3)等于3。其它依此类推。

2结构体与指针

可以声明一个指向结构类型对象的指针。例十二: struct MyStruct { int a; int b; int c; }; struct MyStruct ss={20,30,40}; //声明了结构对象ss,并把ss 的成员初始化为20,30 和40。 struct MyStruct *ptr=&ss; //声明了一个指向结构对象ss 的指针。它的类型是 //MyStruct *,它指向的类型是MyStruct。 int pstr=(int)&ss; //声明了一个指向结构对象ss 的指针。但是pstr 和 //它被指向的类型ptr 是不同的。 请问怎样通过指针ptr 来访问ss 的三个成员变量?答案:ptr->a; //指向运算符,或者可以这们(ptr).a,建议使用前者ptr->b;ptr->c;又请问怎样通过指针pstr 来访问ss 的三个成员变量?答案:pstr; //访问了ss 的成员a。(pstr+1); //访问了ss 的成员b。(pstr+2) //访问了ss 的成员c。虽然我在我的MSVC++6.0 上调式过上述代码,但是要知道,这样使用pstr 来访问结构成员是不正规的,为了说明为什么不正规,让我们看看怎样通过指针来访问数组的各个单元: (将结构体换成数组)

3函数与指针

可以把一个指针声明成为一个指向函数的指针。int fun1(char *,int);int (*pfun1)(char *,int);pfun1=fun1;int a=(*pfun1)(“abcdefg”,7); //通过函数指针调用函数。可以把指针作为函数的形参。在函数调用语句中,可以用指针表达式来作为实参。例十四: int fun(char *); inta; char str[]=“abcdefghijklmn”; a=fun(str); int fun(char *s) { int num=0; for(int i=0;😉 { num+=*s;s++; } return num; } 这个例子中的函数fun 统计一个字符串中各个字符的ASCII 码值之和。前面说了,数组的名字也是一个指针。在函数调用中,当把str作为实参传递给形参s 后,实际是把str 的值传递给了s,s 所指向的地址就和str 所指向的地址一致,但是str 和s 各自占用各自的存储空间。在函数体内对s 进行自加1 运算,并不意味着同时对str 进行了自加1 运算。

C语言结构体

这周课堂细讲结构体,完善了许多自己以前自学的漏洞,独立完成了结构体有关的问题,学生成绩。

#include<stdio.h>
struct student
{
 char name[10];
 char num[8];
 char sex[6];
 float grades[5];
}ads[30],t;
float average(float asd[])
{
 float sum=0.0;
 for(int i=0;i<4;i++)
 {
  sum+=asd[i];
 }
 return (sum/4);
}
main()
{
 for(int i=0;i<30;i++)
 {
  scanf("%s",ads[i].num);
  scanf("%s",ads[i].name );
  scanf("%s",ads[i].sex );
  for(int j=0;j<4;j++)
  {
   scanf("%f",&ads[i].grades[j] );
  }
  ads[i].grades[4]=average(ads[i].grades);
 }
 for(int i=0;i<30;i++)
  {
   for(int j=0;j<30-i-1;j++)
   {
    if(ads[j].grades[4] <ads[j+1].grades[4])
    {
   
       t=ads[j];
       ads[j]=ads[j+1];
       ads[j+1]=t;
       }
  }
  }
    for(int i=0;i<30;i++)
    {
     printf("%s  ",ads[i].num);
     printf("%s  ",ads[i].name);
     printf("%s\n",ads[i].sex);
     for(int j=0;j<5;j++)
     printf("%f\n",ads[i].grades[j]);
 }
}

c语言习题

写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过100个字符),然后用柱状图输出每个字符在输入文件中出现的次数。严格地按照输出样例来安排你的输出格式。

输入格式

四行字符,由大写字母组成,每行不超过100个字符

输出格式

由若干行组成,前几行由空格和星号组成,最后一行则是由空格和字母组成的。在任何一行末尾不要打印不需要的多余空格。不要打印任何空行。

输入输出样例

输入 #1 复制
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!
输出 #1 复制
*
*
* *
* * * *
* * * *






A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
说明/提示

每行输出后面不允许出现多余的空格。

#include<stdio.h>
#include<string.h>
int main()
{
    char a[100];
    int b[26]={0};
    int i,j,t;
    for(i=0;i<4;i++)
    {
        gets(a);
        for(j=0;j<strlen(a);j++)
        {
            if(a[j]>='A'&&a[j]<='Z')
            {
                t=a[j]-'A';  
                b[t]++;     \\计数:每个大写字母出现的次数
            }
        }
    }
    t=b[0];
    for(i=1;i<26;i++)
    {
        if(t<b[i])
        {
            t=b[i];   \\找到最大值
        }
    }
    for(i=t;i>=1;i--)
    {
        for(j=0;j<26;j++)
        {
            if(b[j]>=i)
            {
                printf("* ");
            }
            else
            printf("  ");
        }
        printf("\n");
    }
    for(i=0;i<26;i++)
    printf("%c ",'A'+i);
    printf("\n");
}

这个题关键在于理解输出行好事的情况。理解方法很多,但是基本的思路都差不多,即从最高输出*。
某蒟蒻迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你。

题目描述

蒟蒻虽然忘记密码,但他还记得密码是由一个字符串组成。密码是由原文字符串(由不超过 50 个小写字母组成)中每个字母向后移动 nn 位形成的。z 的下一个字母是 a,如此循环。他现在找到了移动前的原文字符串及 nn,请你求出密码。

输入格式

第一行:n。第二行:未移动前的一串字母

输出格式

一行,是此蒟蒻的密码

输入输出样例

输入 #1 复制
1
qwe
输出 #1 复制
rxf
说明/提示

字符串长度<=50

#include<stdio.h>
#include<string.h>
int main()
{
    char a[50];
    int i,n,t;
    scanf("%d",&n);
    scanf("%s",a);
    for(i=0;i<strlen(a);i++)
    {
       printf("%c",(a[i]-'a'+n)%26+'a');
    }
}

我们要求找出具有下列性质数的个数(包含输入的自然数nnn):
先输入一个自然数nnn(n≤1000n \le 1000n≤1000),然后对此自然数按照如下方法进行处理:

不作任何处理;

在它的左边加上一个自然数,但该自然数不能超过原数的一半;

加上数后,继续按此规则进行处理,直到不能再加自然数为止.

输入格式 111个自然数nnn(n≤1000n \le 1000n≤1000)
输出格式 111个整数,表示具有该性质数的个数。
输入输出样例 输入 #1
复制
6
输出 #1
复制
6
说明/提示 满足条件的数为
6,16,26,126,36,136

#include<cstdio>
int n,cnt=1;
void func(int x)
{
    for(int i=1;i<=x/2;i++)
    {
        cnt++;
        func(i);
    }
}
int main()
{
    scanf("%d",&n);
    func(n);
    printf("%d\n",cnt);
}

这段代码没啥说的,暴力递归,但是问题就是如果n过大,运行就会超时,递归嵌套太多。所以我查找资料,学习一种新的方式。

#include<stdio.h>
int main()
{
    int n,i,f[1010];
    f[0]=f[1]=1;
    scanf("%d",&n);
    for(i=2;i<=n;i++)
    {
        if(i%2==0)
        {
            f[i]=f[i-1]+f[i/2];
        }
        else
        {
            f[i]=f[i-1];
        }
    }
    printf("%d\n",f[n]);
}

2n与2n+1(n为非负整数)的答案是一样的
这就是第一个规律
然后我们以n=8为例,手动模拟一下
一共有10组解
8
1 8 2 8 3 8 4 8
1 2 8 1 3 8 1 4 8 2 4 8
1 2 4 8
我打出的东西很像一棵搜索树。。。
当我们把8和8下面的左三棵子树放在一起(即8和下面三列),并将所有的8都改成7,我们能发现,我们得到了n=7时的所有解;
我们再把最右端的子树(即剩下的部分)中的所有8删去,我们得到了n=4时的所有解
就这样,我们可以得到一个递推式,
f(n)=f(n-1) //7=8-1

    +f(n/2)                //4=8/2

再结合之前发现的规律
就能得到:
n%20时
f(n)=f(n-1)+f(n/2)
n%2
1时
f(n)=f(n-1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值