1.插入数据:使用INSERT INTO语句插入数据
语法如下:
插入一行数据
INSERT INTO 数据表名 (字段1,字段2,字段3) values (数据1,数据2,数据3); 插入多行数据
INSERT INTO 数据表名 (字段1,字段2,字段3) values (数据1,数据2,数据3), (数据4,数据5,数据6), ............ , (数据7,数据8,数据9); 2.修改数据:使用UPDATE语句
语法如下:
修改单行
update 表名 set 字段1=数据1; 修改多行
update 表名 set 字段1=数据1,字段2=数据2,....,字段n=数据n; 修改限定行
update 表名 set 字段1=数据1 where 限定行的字段名=数据2; 例1:将name列下的work行中的time列修改为8
结构如下:
name time
work 10
learn 1
motion null
update 表名 set time='8' where name='work'; where name='work'限定了表中的行
set time='8' 修改name='work'行中的time列的数据为8
例2:将某表中的time字段为空的修改为free
结构如下:
name time
work 10
learn 1
1、并发编程三要素?
(1)原子性
原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。
(2)可见性
可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果。
(3)有序性
有序性,即程序的执行顺序按照代码的先后顺序来执行。
2、实现可见性的方法有哪些?
synchronized 或者 Lock:保证同一个时刻只有一个线程获取锁执行代码,锁释放之前把最新的值刷新到主内存,实现可见性。
3、多线程的价值?
(1)发挥多核 CPU 的优势
多线程,可以真正发挥出多核 CPU 的优势来,达到充分利用 CPU 的目的,采用多线程的方式去同时完成几件事情而不互相干扰。
(2)防止阻塞
从程序运行效率的角度来看,单核 CPU 不但不会发挥出多线程的优势,反而会因为在单核 CPU 上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核 CPU 我们还是要应用多线程,就是为了防止阻塞。试想,如果单核 CPU 使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。
(3)便于建模
这是另外一个没有这么明显的优点了。假设有一个大的任务 A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。但是如果把这个大的任务 A 分解成几个小任务,任务 B、任务 C、任务 D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。
4、创建线程的有哪些方式?
(1)继承 Thread 类创建线程类
(2)通过 Runnable 接口创建线程类
(3)通过 Callable 和 Future 创建线程
(4)通过线程池创建
5、创建线程的三种方式的对比?
(1)采用实现 Runnable、Callable 接口的方式创建多线程。
优势是:
标题统计 题目描述 凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大、小写英文字母、数字字符、空格和换行 符。统计标题 字 符数时,空格和换行符不计算在内 输入输出格式 输入格式 输入文件title.in 输入只有一行,包含若干个字符。这串字符串记作s。 输出格式 输出文件title.out 输出只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符) 输入输出样例 输入样例#1: I Have a Dream 输出样例#1: 11 输入样例#2: Xi You Ji 输出样例#2: 7 输入样例#3: 输出样例#3: #include<bits/stdc++.h> using namespace std; int main(){ freopen(title.in, r, stdin); freopen(title.out, w, stdout); char ch; int cnt; while(cin>>ch){ if (ch != ' ') cnt ++; } cout<<cnt<<endl; return 0; } 三的倍数 题目描述 输入一个正整数n,从小到大输出1到n里所有3的倍数。 输入输出格式 输入格式 输入只有一行,包含一个正整数n,3<=n<=10000 输出格式 输出只有一行,包含若干个正整数,由空格隔开。 输入输出样例 输入样例#1: 4 输出样例#1: 3 输入样例#2: 10 输出样例#2: 3 6 9 输入样例#3: 输出样例#3: #include<iostream> using namespace std; int main(){ int i,n; cin>>n; for(i=3;i<=n;i+=3){ cout<<i<< ; } return 0; } 僵尸猎手 题目描述 你是一个僵尸猎杀,攻击力为x。现在共有n个僵尸在你面前,其中第i头僵尸的防守力为d[i]。只有当你的攻击力超过某个僵尸的防守力 时,才能将其 消灭。请问你一共能消灭几头僵尸? 输入输出格式 输入格式 输入第一行为正整数n,n<=10000,第二行为n个非负整数代表d[i]数组,均不超过100.
排队打饭 题目描述 下课了,n个同学排队吃饭,队伍中每人用一个整数表示其学号。餐厅只能同时容纳m个同学就餐。就餐记录是这样的,进入餐厅就餐的同学,记录其学 号,离开餐厅后,记录其学号的负值。例如,5,表示5号同学进入食堂就餐,-5表示他离开餐厅。离开餐厅的顺序是按照就餐先后顺序的,如果1号在5 号之前进入餐厅,也一定会在5号之前离开餐厅。求记录结束时餐厅还有多少人?如果餐厅已经坐满人,还有 同学尝试进入,这种情况是不允许的,一 定是记录出现了错误,此时程序输出Error。 输入输出格式 输入格式 第一行两个正整数,n和m,n表示排队人数,m表示食堂最大容量,n <=10000,m<=500 第二行一个正整数k,表示记录的数量,k<=20000 第三行k个整数,表示学生就餐和离开信息,p表示p同学进入食堂,-p表示p同学离开食堂 输出格式 一个整数,表示食堂中还有多少人在就餐 输入输出样例 输入样例#1: 5 4 8 1 2 3 5 -1 8 -2 -3 输出样例#1: 2 说明: 学号为1,2,3,5的学生进入食堂就餐,1号离开,8号进入食堂,2号离开,3号离开。此时食堂中还有2人就餐,5号和8号。 输入样例#2: 5 3 7 1 2 3 4 5 -1 -2 输出样例#2: Error 说明: 1,2,3号进入食堂就餐,食堂最大容量为3,当4号进入食堂就餐,超出食堂最大人数限制,输出Error。 输入样例#3: 输出样例#3: #include<iostream> using namespace std; int n,m,k,cnt=0,x; int main(){ cin>>n>>m; cin>>k; for(int i=0;i<k;i++){ cin>>x; if(x>0)cnt++; else cnt--; if(cnt>m)break; } if(cnt>m)cout<<Error; else cout<<cnt<<endl; return 0; } 队伍长度(输出时注意:行末不能出现空格) 题目描述 假期出行,高速公路十分拥堵。一条高速路口收费站只开放了两个收费窗口,众多车辆在这两个窗口前的通道排起了长龙。车主都喜欢更短的队伍,因 此每当有新到达车辆,他会选择队列长度短的窗口排队,如果两个队列一样长,选择第一个窗口。现在有一段时间内该收费站的车辆通行记录,车辆按 照到达次序依次编号1,2,3…记录只包含三个单词,arrive和leave1,leave2,arrive表示有车辆到达,leave1表示车辆通过窗口1后离开,leave2表示 车辆通过窗口2后离开。请问记录结束时,两支队伍各有哪些车辆。 输入输出格式 输入格式 第一行,一个正整数n,表示有多少条记录,n<=10000。 第二行,n个字符串,只有arrive,leave1,leave2三种记录,表示车辆到达和离开收费站的情况,保证不会出现队列为空后仍然有车辆leave的情况。 输出格式 两行,第一行表示记录结束时窗口1前的排队车辆序号,第二行表示记录结束时窗口2前的排队车辆序号,序号间由空格隔开。如果队列为空,输出一个 数字0。 注意:行末不能出现空格。 输入输出样例 输入样例#1: 7 arrive arrive arrive arrive leave1 leave1 arrive 输出样例#1: 5 2 4 说明: 前4个arrive,分别是第1辆车排窗口1,第2辆车排窗口2,第3辆排窗口1,第4辆排窗口2。接下来窗口1有2辆车离开,1,3号车离开后队 列为空。第5个arrive,5号车排在窗口1队列。记录结束窗口1前队列中有1辆车,5号,窗口2前队列有两辆车,2号和4号。 输入样例#2: 5 arrive arrive leave1 leave2 arrive 输出样例#2: 3 0 说明: 前4条记录过后,两个窗前都没有排队车辆,最后一个arrive,3号车排在窗口1前。窗口1队列中有1辆车,3号,窗口2队列为空,输出0。 输入样例#3: 输出样例#3: #include<iostream> #include<string> using namespace std; const int N=10000; int n,b1,f1,b2,f2,q1[N],q2[N],id; int main(){ cin>>n; string s; for(int i=0;i<n;i++){ cin>>s; if(s==arrive){ if(b1-f1<=b2-f2) q1[b1++]=id++; else q2[b2++]=id++; } else if(s==leave1) f1++; else f2++; } if(f1==b1) cout<<0<<endl; else{ for(int i=f1;i<=b1-2;i++) cout<<q1[i]+1<< ; cout<<q1[b1-1]+1<<endl; } if(b2==f2) cout<<0<<endl; else{ for(int i=f2;i<=b2-2;i++) cout<<q2[i]+1<< ; cout<<q2[b2-1]+1<<endl; } return 0; } Candy Sharing 分糖果 题目描述 There are 41 candies to be distributed to 7 children.
python提供了一个命令去下载安全的工具包 pip install 由于我们语言是外国人开发的,很多工具包都是在国外的网站上,所以下载很慢 这时候就需要我们去修改下载源 import requests import keyword
定义一个变量 shou_id = 1 print(shou_id)
修改变量的值 shou_id = 2 print(shou_id) shou_id = hello,world print(shou_id)
Python 对变量名的大小写非常敏感,一下表示两个不同的变零 aaa = 12 AAA = 23
import keyword 查看 python 的关键字 print(keyword.kwlist)
shou_id = 10 print(shou_id)
使用python内置函的type方法查看变量的类型 print(type(shou_id))
同一变量可以反复赋值,而且还可以赋不同类型的值 shou_id = '阿涛加油!!' print(shou_id)
使用python的内置type方法查看变量的类型 print(type(shou_id))
如果定义一个常量,常量通常表示“不能变的量” 如过常量由大写字母组成,我们约定俗成的认为它是一个长常量,但是其值依旧是可以给修改的 PI = 3.1415 print(PI) print(type(PI)) PI = 10 print(type(PI))
注释 单行注释 多行注释 ''' 要注释的内容 ''' 多行注释 要注释的内容 ''' 我可以注释多行 ''' 我是多行注释 print shou_id # 在python3.
题目使用python实现九九乘法表 通过预习后,使用python一行实现九九乘法表 for i in range(10): if i == 0: continue else: for j in range(i+1): if j == 0: continue else: print(i, *, j, = , j * i)
print('\n'.join([' '.join([f{j}x{i}={i*j} for j in range(1, i + 1)]) for i in range(1, 10)]))
List 列表 list1 = ['physics', 'chemistry', '1799', '2000'] list2 = [1, 2, 3, 4, 5] list3 = ['a', 'b', 'c', 'd']
访问列表中的值 print(list1) print(list2) print(list3)
更新列表 list4 = [] # 空列表 list4.
range 范围 str = range(10) # 范围是 0 — 9 print(str) ste1 = range(3,9) for i in ste1: print(i)
python 推导式 列表推导格式为: 格式一: 表达式 for 变零 in 列表 格式二: 表达式 for 变零 in 列表 if 条件 需求:过滤掉长度小于 3 的字符串列表,并将剩下的转换成大写字母 names = ['Bob','Jerry','Time','Tom','Smith', 'Alice','Wendy'] new_name = [name.upper() for name in names if len(name) > 3] print(new_name)
需求:计算100以内,能被5整除的数 num = [new_num*2 for new_num in range(101) if new_num % 5 == 0] print(num)
一、实验目的
进程调度是处理机管理的核心内容。本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先数算法和时间片轮转算法的具体实施办法。
二、实验内容和要求
设计进程控制块PCB的结构,通常应包括:进程名、进程优先数(或轮转时间片数)、进程已占用的CPU时间、进程到完成还需要的时间、进程的状态、当前队列指针等。 编写两种调度算法程序: 1) 优先数调度算法程序;
2) 循环轮转调度算法程序。
将程序源代码和运行截图写入实验报告并提交。 三、实验步骤
实验准备 (1) 查阅相关资料;
(2) 初步编写程序;
(3) 准备测试数据;
(4) 设计数据结构
上机调试 主要流程和源代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> // 进程控制块数据结构 typedef struct node { char name[20]; /*进程的名字*/ int prio; /* 进程的优先级*/ int round; /* 分配 CPU 的时间片*/ int cputime; /* CPU 执行时间*/ int needtime; /* 进程执行所需要的时间*/ char state; /* 进程的状态, W——就绪态, R——执行态, F——完成态*/ int count; /* 记录执行的次数*/ struct node *next; /* 链表指针*/ } PCB; PCB *ready = NULL, *run = NULL, *finish = NULL, *tail = NULL; /*定义三个队列,就绪队列头,执行队列头和完成队列头,就绪队列尾*/ int N; void firstin(void); //调度就绪队列的第一个进程投入运行 void print1(char a); //打印表头行信息 void print2(char chose, PCB *p); //打印每一行的状态信息 void insert_prio(PCB *q); //在优先数算法中,将尚未完成的PCB按优先顺序插入到就绪队列中 void prior_init(char chose); //在进程优先级法初始化将进程按优先级插入到就绪队列中 void priority(char chose); //进程优先级算法总函数 void insert_rr(PCB *q); //在轮转法中,将执行了一个时间单位片(为2),但尚未完成的进程的PCB,插入到就绪队列的队尾 void roundrun_init(char chose); //循环轮转法初始化将就绪队列保存为FIFO队列 void roundrun(char chose); //循环轮转法总算法 void main() //主函数 { char chose = ' '; while ((chose !
类的定义 import urllib.request
··· class MyClass: '''一个简单的实例类''' i = 12345 def f(self): return 'hello,world!' ···
实例化类 x = MyClass()
访问类的属性和方法 print(MyClass 类的属性 i 为:,x.i) print(MyClass 类的方法 f 的输出为:,x.f())
构造方法 类有一个名为 init() 的特殊方法(构造方法),该方法在类实例化时会自动调用 class Complex: def init(self,real,ima): self.r = real self.i = ima x = Complex(2,4.4) print(x.r,x.i)
self代表类的实例,而非类 class Text: def prt(self): print(self) print(self.class) l = Text() print(l.prt())
类的方法 定义类 class People: #类的基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = 0 #定义构造方法 def init(self,n,a,w): self.
排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。 同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵 向的通道。 于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。 请你帮忙给小雪编写一个程序,给出最好的通道划分方案。在该方案下,上课时交头接耳的学生的对数最少。 输入输出格式 输入格式 输入文件chair.in 第一行,有5个用空格隔开的整数,分别是M,N,K,L,D(2<=N,M<=1000,0<=K<M,0<=L<N,D<=2000)。 接下来的D行,每行有4个用空格隔开的整数。第i行的4个整数Xi,Yi,Pi,Qi,表示坐在位置(Xi,Yi)与(Pi,Qi)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。 输入数据保证最优方案的唯一性。 输出格式 输出文件chair.out 共两行。 第一行包含K个整数,a1,a2……aK,表示第a1行和a1+1行之间、第a2行和a2+1行之间、…、第aK行和第aK+1行之间要开辟通道,其中ai< ai+1,每两个整数之间用空格隔开(行尾没有空格)。 第二行包含L个整数,b1,b2……bL,表示第b1列和b1+1列之间、第b2列和b2+1列之间、…、第bL列和第bL+1列之间要开辟通道,其中bi< bi+1,每两个整数之间用空格隔开(列尾没有空格)。 输入输出样例 输入样例#1: 4 5 1 2 3 4 2 4 3 2 3 3 3 2 5 2 4 输出样例#1: 2 2 4 输入样例#2: 无 输出样例#2: 无 输入样例#3: 无 输出样例#3: 无 #include<bits/stdc++.h> #define N 1003 using namespace std; int m,n,k,l,d,x[N],y[N],c[N],o[N],res[N],len=1; int main(){ scanf(%d%d%d%d%d,&m,&n,&k,&l,&d); for(int i=1;i<=d;i++){ int xi,yi,pi,qi; scanf(%d%d%d%d,&xi,&yi,&pi,&qi); if(xi==pi)x[min(yi,qi)]++; else y[min(xi,pi)]++; } for(int i=1;i<=k;i++){ int maxn=-1,p; for(int j=1;j<m;j++) if(y[j]>maxn){maxn=y[j];p=j;} y[p]=0;c[p]++; } for(int i=1;i<=l;i++){ int maxn=-1,p; for(int j=1;j<n;j++) if(x[j]>maxn){maxn=x[j];p=j;} x[p]=0;o[p]++; } for(int i=0;i<N;i++)if(c[i]&&i!