重庆市第二届程序设计大赛题目
- 格式:pdf
- 大小:162.01 KB
- 文档页数:10
二级C语言笔试试卷(A)1注意事项:1.一、二题为客观题,请将答案涂在机读答题卡上2.三、四、五、六题为主观题,请将答案做在答题纸上一、单项选择题。
(每题1分,共20分)1.在C程序旳函数调用时,主调函数中旳实参和被调函数中旳形参()。
(A)个数、次序必须相似,但数据类型可以不考虑(B)个数、次序和对应参数旳数据类型都应当相似(C)个数、次序和数据类型均可以不相似(D)对应参数数据类型应相似,但个数和次序可以不考虑2.如a为int型,则与体现式a等价旳C语言关系体现式是()(A) a>0 (B) a!=0(C) a==0 (D) a<0 3.循环语句for(a=0,b=0;(b!=45)| |(a<5);a++);旳循环次数是()(A) 4 (B) 3 (C) 5(D) 无数多次4.设有字符数组a,则对旳旳输入语句是()。
(A) gets('a');(B) scanf("%c",a);(C) scanf("%s",a);(D) gets("a");5. enumcolor{red,green,yellow=5,white,black};定义了一枚举类型。
编译程序为值表中各标识符分派旳枚举值依次为()。
(A)1、2、3、4、5(B)0、1、5、2、3(C)0、1、5、6、7(D)3、4、5、6、76.运行完下列程序后,在屏幕上旳内容是()。
void main (){ int a=0;a+=(a=12);printf ("%d\n",a);}(A)0 (B)6(C)12 (D)24 7.若x,y为实数类型旳变量,要判断x,y相等,最佳使用下列关系体现式()。
(A)x==y(B)x-y==0(C) fabs(x-y)<1e-8(D)labs(x-y)<1e-88.若有如下旳定义、阐明和语句,则值为101旳体现式是()。
重庆计算机二级c语言试题及答案一、选择题(每题2分,共40分)1. 在C语言中,以下哪个选项是正确的?A. 变量名可以以数字开头B. 变量名可以包含空格C. 变量名区分大小写D. 变量名可以包含特殊字符答案:C2. C语言中,以下哪个关键字用于定义一个函数?A. intB. returnC. voidD. function答案:A3. 下列哪个选项是C语言中的合法整数常量?A. 0x1AB. 0X1AC. 0x1aD. 0X1a答案:D4. C语言中,以下哪个选项不是合法的字符串常量?A. "Hello, World!"B. 'Hello, World!'C. "Hello\" World!"D. "Hello\nWorld!"答案:B5. 在C语言中,以下哪个选项是正确的?A. 所有变量必须在使用前声明B. 所有变量必须在函数开始时声明C. 变量声明可以在任何地方D. 变量声明只能在函数内部答案:A6. C语言中,以下哪个选项是正确的?A. 浮点数不能用于整数运算B. 浮点数的精度总是比整数高C. 浮点数的表示范围比整数小D. 浮点数可以直接与整数进行运算答案:D7. 在C语言中,以下哪个选项是正确的?A. 所有函数都必须有返回值B. 函数可以没有参数C. 函数可以有多个返回值D. 函数可以有多个返回类型答案:B8. C语言中,以下哪个选项是正确的?A. 数组的下标总是从1开始B. 数组的下标总是从0开始C. 数组的大小在运行时确定D. 数组的大小在编译时确定答案:D9. 在C语言中,以下哪个选项是正确的?A. 指针可以存储任何类型的数据B. 指针可以存储函数的地址C. 指针可以存储数组的地址D. 所有选项都是正确的答案:D10. C语言中,以下哪个选项是正确的?A. 所有变量的声明必须在函数的开始B. 变量的声明可以在代码的任何位置C. 变量的声明必须在代码块的开始D. 变量的声明只能在函数的开始或代码块的开始答案:D二、填空题(每题2分,共20分)1. 在C语言中,______关键字用于声明一个变量。
Visual FoxPro数据库程序设计(考试时间90分钟,满分100分)一、选择题(每小题2分,共70分)下列各题A),B),C),D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)程序流程图中指有箭头的线段表示的是[C]A)图元关系 B)数据流 C)控制流 D)调用关系(2)结构化程序设计的基本原则不包括[A]A)多态性 B)自顶向下 C)模块化 D)逐步求精(3)软件设计中模块划分应遵循的准则是[B]A)低内聚低耦合 B)高内聚低耦合C)低内聚高耦合 D)高内聚高耦合(4)在软件开发中,需求分析阶段产生的主要文档是[B]A)可行性分析报告 B)软件需求规格说明书C)概要设计说明书 D)集成测试计划(5)算法的有穷性是指[A]A)算法程序的运行时间是有限的 B)算法程序所处理的数据量是有限的C)算法程序的长度是有限的 D)算法只能被有限的用户使用(6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是[D]A)快速排序 B)冒泡排序C)直接插入排序 D)堆排序(7)下列关于栈的叙述正确的是[B]A)栈按“先进先出”组织数据 B)栈按“先进后出”组织数据C)只能在栈底插入数据 D)不能删除数据(8)在数据库设计中,将E-R图转换成关系数据模型的过程属于[C]A)需求分析阶段 B)概念设计阶段C)逻辑设计阶段 D)物理设计阶段(9)有三个关系R,S和T如下:B C Dh O k1R S TB C Da o k1b 1 n1B C Da o k1a 2 x1由关系R和S通过运算得到关系T,则应使用的运算为[D]A) 并 B) 自然连接 C)笛卡尔积 D)交(10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课程号,课名),选课SC(学号,课号,成绩),列表SC的关键字(键或码)为[C]A)课号,成绩 B)学号,成绩C)学号,课号 D)学号,姓名,成绩(11)在Visual Foxpro中,扩张名为mnx的文件是[D]A) 备注文件 B)项目文件 C) 表单文件 D)菜单文件(12)有如下赋值语句:a=”计算机”,b=”微型”,结果为”微型机”的表达式是[D]A)b+LEFT(a,3) B)b+RIGHT(a,1)C)b+LEFT(a,5,2) D)b+RIGHT(a,2)(13)在Visual Foxpro中,有如下内存变量赋值语句:[B]X={^2001-07-28 10:15:20PM}Y=.F.M=5123.45N=$123.45Z=”123.24”执行上述赋值语句之后,内存变量X,Y,M,N和Z的数据类型分别是A) D、L、Y、N、C B)T、L、Y、N、CC) T、L、M、N、C D)T、L、Y、N、S(14)下列程序的运行结果是[D]SET EXACT ONs="ni"+space(2)IF s=="ni"IF s="ni"?"one"ELSE?"two"ENDIFELSEIF s="ni"?"three"ELSEENDIFENDIFRETURNA) one B) two C)three D)four(15)如果内存变量和字段变量均有变量名“姓名”,那么引用引用内存变量的正确方法是[D]A)M.姓名 B)M->姓名 C)姓名 D)A)和B)都可以(16)要为当前表所有性别为“女”的职工增加100元工资,应使用命令[B]A)REPLACE ALL 工资 WITH 工资+100B)REPLACE 工资 WITH 工资+100 FOR 性别=“女”C)CHANGE ALL 工资 WITH 工资+100D)CHANGE ALL 工资 WITH 工资+100 FOR 性别=“女”(17)MODIFY STRUCTURE命令的功能是[B]A)修改记录值 B)修改表结构C)修改数据库结构 D)修改数据库或表结构(18)可以运行查询文件的命令是[A]A)DO B)BROWSEC)DO QUERY D)CREATE QUERY(19)SQL语句中删除视图的命令是[B]A)DROP TABLE B)DROP VIEWC)ERASE TABLE D)ERASE VIEW(20)设有订单表order(其中包含字段:订单号,客户号,职员号,签订日期,金额),查询2007年所签订单的信息,并按金额降序排序,正确的SQL命令是[A]A) SELECT*FROM order WHERE YEAR(签订日期)=2007 ORDER BY 金额 DESCB) SELECT*FROM order WHILE YEAR(签订日期)=2007 ORDER BY 金额 ASCC) SELECT*FROM order WHERE YEAR(签订日期)=2007 ORDER BY 金额 ASCD) SELECT*FROM order WHILE YEAR(签订日期)=2007 ORDER BY 金额 DESC(21)设有订单表order(其中包含字段:订单号,客户号,职员号,签订日期,金额),删除2002年1月1日以前签订的订单记录,正确的SQL命令是[C]A) DELETE TABLE order WHERE 签订日期<{^2002-1-1}B) DELETE TABLE order WHILE 签订日期>{^2002-1-1}C) DELETE FROM order WHERE 签订日期<{^2002-1-1}D) DELETE FROM order WHILE 签订日期>{^2002-1-1}(22)下面属于表单方法名(非事件名)的是 [B]A) lnit B)Release C)Destroy D)Caption(23)下列表单的哪个属性设置为真时,表单运行时将自动居中[A]A) AutoCenter B) AlwaysOnTop C)ShowCenter D)FormCenter(24)下列关于命令DO FORM XX NAME YY LINKED 的叙述中,正确的是[C]A) 产生表单对象引用变量XX,在释放变量XX时自动关闭表单B) 产生表单对象引用变量XX,在释放变量XX时并不关闭表单C) 产生表单对象引用变量YY,在释放变量YY时自动关闭表单D) 产生表单对象引用变量YY,在释放变量YY时并不关闭表单(25)表单里有一个选项按钮组,包含两个选项按钮Option1和Option2,假设Option2没有设置Click事件代码,而Option1以及选项按钮组和表单都设置了Click事件代码。
2024年等级考试-计算机二级-Java语言程序设计考试历年真题常考点试题带答案(图片大小可任意调节)第1卷一.单选题(共20题)1.编译JavaApplet源程序文件产生的字节码文件的扩展名为()A.javaB.classC.htmlD.exe2.获取 InetAddress 对象的 IP 地址所用到的方法是A.etHostlPAddress()B.getHostlP()C.getHostAddress()D. getHost()3.下列叙述中正确的是哪一个( ) 。
A.在面向对象的程序设计中,各个对象之间具有密切的关系B.在面向对象的程序设计中,各个对象都是公用的C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小D.上述 3种说法都不对4.有整型数组: int[] x={12,35,8,7,2};, 则调用方法 Arrays.sort(x)后,数组 x 中的元素值依次是 ( ).A.2 7 8 12 35B.12 35 8 7 2C.35 12 8 7 2D.8 7 12 35 25.定义类头时能使用的修饰符是A. privateB.staticC.abstractD.protected6.开发软件时对提高开发人员工作效率至关重要的是 ( ) 。
A.操作系统的资源管理功能B.先进的软件开发工具和环境C.程序员的数量D.计算机的并行处理能力7.下列有关Java的叙述错误的是A.是—种强类型语言B.与平台无关C.可以使用汉字变量名D.不检查数组下标越界8.下述概念中不属于面向对象方法的是 () 。
A.对象、消息B.继承、多态C.类、封装D.过程调用9.设 int 型变量 a、b,float 型变量 x、y,char 型变量 ch 均已正确定义并赋值,正确的 switch 语句是A.switch (x + y) { ...... }B.switch ( ch + 1 ) { ...... }C. switch ch D) { ...... }D.switch ( a + b ) { ...... }10.关于包的描述错误的是A.包可以将相关的类和接口组织在一起,便于识别和管理B.包中的类可以访问同一包的其它类的私有成员C.不同包中的相同命名,不会产生冲突D.用修饰的顶级类和接口对包外代码可见11.在 Java 中, 表示换行符的转义字符是 () 。
第⼆届全国⼤学⽣算法设计与编程挑战赛(冬季赛)题解第⼆届全国⼤学⽣算法设计与编程挑战赛(冬季赛)只会做⽔题555 剩下的连题解也没看懂QAQ⽬录A 塔签到#include<iostream>using namespace std;int main(){char c1;int n=26; //设定塔的层数为26for(int i=1;i<=n;i++){ //对塔每⼀层按照规律进⾏构造。
//⾸先进⾏输出空格的操作:对于第i⾏,字符前⾯的空格个数为n-i个。
for(int j = 1;j<=n-i;j++)cout<<" ";for(int j=1;j<=i;j++){ //按照规律1,输出第1~第i个⼤写字母。
c1=j+'A'-1; //第j个⼤写字母为'A'+j-1cout<<c1; //输出第j个⼤写字母}for(int j=i-1;j>=1;j--){ //按照规律1,输出第i-1~第1个⼤写字母,注意是倒序c1=j+'A'-1;cout<<c1;}cout<<endl;//第i⾏输出结束,进⾏换⾏。
}return 0;}B ⽇记签到#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 5;typedef long long LL;string s;int main() {s = "ibti lbtlovebte lbtlibtinbtnkbtkebtezbas jebte dosadnbtna ""ovakbtkebtemibtijaxaszxdbtddbtddbtddbtddbtddbtd";string res;for (int i = 0; i < s.size(); i++) {res.push_back(s[i]);if (s[i] == 'l' || s[i] == 'i' || s[i] == 'n' || s[i] == 'k' ||s[i] == 'e') {i += 3;}}cout << res << endl;return 0;}C 哥布林待补...D 质数区间待补...E 神仙爱采药贪⼼即可,如果背包满了,那么遇到1就把2换掉,否则就⼀直往背包⾥放即可#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 5;typedef long long LL;#define int LLint v, num1, num2, res, now;string s;cin >> v;cin >> s;for (int i = 0; i < s.size(); i++) {if (s[i] == '1') {if (num1 + num2 * 2 < v) {num1++;now++;} else {if (num2) {num2--;num1++;}}} else {if (num1 + num2 * 2 + 2 <= v) {num2++;now++;}}res += now;}cout << res << endl;return 0;}F 但更爱字符串模拟...#include <bits/stdc++.h>using namespace std;typedef long long LL;int const MAXN = 2e5 + 10;int n, m, T;string s = "";string s0 = "";string t = "";string s1 = "";int main() {int len = 0;while (getline(cin, s0)) {int f = 0;int da = 0;int flag = 0;s0.push_back('\n');for (int i = 0; i < s0.size(); i++) {if ((s0[i] >= 'A' && s0[i] <= 'Z') ||(s0[i] >= 'a' && s0[i] <= 'z')) {s = s + s0[i];if (s0[i] >= 'A' && s0[i] <= 'Z') da++;continue;}if (s[0] >= 'a' && s[0] <= 'z' || da > 1 || s.size() <= 1) { if (len <= 1) {f = 1;cout << s1;if (len == 1) cout << " ";t = "";s1 = "";len = 0;} else {f = 1;cout << t;cout << " (" << s1 << ") ";t = "";s1 = "";len = 0;}cout << s;} else {if (s0[i] == ' ') {if (s0[i - 1] == ',' || s0[i - 1] == '.' ||s0[i - 1] == '!') {cout << " ";continue;}t = t + s[0];if (len >= 1) s1 += " ";s1 = s1 + s;len++;f = 0;} else {if (len < 1) {f = 1;cout << s1;if (len == 1) cout << " ";s1 = "";len = 0;cout << s;} else {f = 1;t = t + s[0];cout << t;if (s != "," || s != ".") s1 = s1 + " " + s;cout << " (";cout << s1;cout << ")";t = "";s1 = "";len = 0;}}}if (f) cout << s0[i];if (s0[i] >='a'&&s0[i] <='z'||s0[i] >='A'&&s0[i] <='Z')f = 1;s = "";da = 0;}}return 0;}贴个标程吧,感觉标程写的很清晰:#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<vector>using namespace std;vector <string> word;//存放单词和符号bool bigletter(char c){//判断是不是⼤写字母if(c>='A'&&c<='Z') return true;return false;}bool smallletter(char c){//判断是不是⼩写字母if (c>='a'&&c<='z') return true;return false;}bool bigletterword(string s){//判断是不是wordif (!bigletter(s[0])) return false;if (s.size()<=1) return false;for (int i=1;i<s.size();i++){if (!smallletter(s[i])) return false;}return true;}void work(){//处理每⼀个单词或符号int n=word.size();for (int i=0;i<n;i++){int inow=i;if (!bigletterword(word[i]))//如果不需要缩写则直接输出cout<<word[i];if (bigletterword(word[i])) {if (i!=n-1){//最后⼀位要么跟着前⾯的缩写,要么就是只有⼀个符合的所以不⽤缩写 if (word[i+1]==" "&&bigletterword(word[i+2])){int j;for (j=i;j<n;j++){if ((j-i)%2==0){if (!bigletterword(word[j])){j--;break;}else cout<<word[j][0];}else if (word[j]!=" ") break;}//j停在了最后符合要求的word的最后⼀位的后⾯⼀位cout<<" (";for (int k=i;k<j-1;k+=2)cout<<word[k]<<' ';cout<<word[j-1]<<')';inow=j-1;//i直接跳过缩写的部分}else cout<<word[i];}else cout<<word[i];}i=inow;}int main(){string s;while(getline(cin,s)){if (s.size()==0) break;//如果输⼊为空就停⽌string w="";//存放单词for (int i=0;i<s.size();i++){//循环sif (bigletter(s[i])||smallletter(s[i])) w+=s[i];//如果是字母则直接压到s⾥if (!bigletter(s[i])&&!smallletter(s[i])){//否则把单词压到word了,并把符号也压进去 word.push_back(w);w="";w+=s[i];word.push_back(w);w="";}}word.push_back(w);//把最后⼀个单词压进去work();word.clear();//清空wordcout<<endl;}return 0;//完美结束}G 猫腥草争夺⼤战状压DP,待补...H ⽆限⼭河印的故事倍增+字符串hash 待补...I 奇怪的传输机增加了模拟每⼀天的状态即可#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 5;typedef long long LL;double n, now;int x, y;const double eps = 1e-8;// 和0做⽐较int sgn(double x) {if (fabs(x) < eps) return 0; // =0if (x < 0)return -1; // < 0elsereturn 1; // > 0}int main() {cin >> n >> x >> y;now = n;for (int i = 1; i <= y; i++) {now = 2.0 * now / 3.0;if (i >= x) {now = min(n, now + (n / 2));x = 1e5;}if(sgn(now-n/32)<0){cout << "N0!" << endl;printf("%d %.6lf\n", i, now);return 0;}}cout << "YE5!" << endl;printf("%.6lf\n", now);return 0;}J 奇怪的⼩鸭⼦也增加了数学题#include<bits/stdc++.h>using namespace std;const int N = 1e6 + 5;typedef long long LL;int main(){cin >> A >> B >> a >> b;int x = (A - a) / a / 2 + 1;int y = (B - b) / b / 2 + 1;cout << x * y << endl;return 0;}K 关于哥俩好的数字这件事暴⼒枚举数位和#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 5;typedef long long LL;#define int LLvector<int> res[N];int get(int x) {int res = 0;while (x) {res += x % 10;x /= 10;}return res;}signed main() {for (int i = 1; i <= 1e7; i++) {res[get(i)].push_back(i);}int n;cin >> n;if(n==1)cout << 1 << endl;else if (n <= 10) {LL ress = 0;for (int i = 0; i < n; i++) {ress += res[n - 1][i];}cout << ress << endl;} else if (n >= 11) {LL ress = 1e18;for (int j = 9; j <= 20;j++){LL tmp = 0;for (int i = 0; i < n; i++) tmp += res[j][i];ress = min(ress, tmp);}cout << ress << endl;}return 0;}L 我们仍未知道那窝蛋的名字待补...M 出题⼈说这道题是⼀个签到题签到#include <bits/stdc++.h>using namespace std;int n;signed main() {cin >> n;if (n == 1)cout << "ADPC";elsecout << "12345";return 0;}。
四、读程序写出运行结果(每小题5分,共20分)1.有一表单程序的运行界面如图2所示。
以下是其文本框控件的valid事件代码。
程序运行后,在文本框输入“45673”。
请写出程序运行结果(文本框的新值)。
X=val(Thisform.text1.value)Y=100Do while x>0y=y-x%10x=int(x/10)enddoThisform.text1.value=str(y)2.设有数据表ST.DBF的结构内容如下:记录号编号(C)性别(C)成绩(N)1 001 男 862 122 女 623 225 男 584 220 女 795 010 女 89设计如图3所示表单,将st.dbf添加到表单的数据环境中,表单运行后,单击命令按钮“Command1”,标签Label1将显示什么?“Command1”命令按钮的click事件代码:X=1cj=成绩SCANIF=成绩>cjcj=成绩x=RECNO()ENDIFENDSCANGO xThisform.refreshz=学号+space(2)+性别+space(2)+allt(str(成绩)) bel1.caption=z3.下面程序运行时输入5,请写出程序执行结果。
SET TALK OFFCLEARINPUT “请输入层数” TO NFOR K=1 TO N?? SPACE(N-K)FOR J=1 TO K?? “*”ENDFOR?ENDFOR4.以下程序的运行结果是什么?主程序main.prgCleaa=1b=2c=3do sub1 with a?a,b,cretu*sub1.prgParapriv ca=10b=20c=30?a,b,cdo sub2retu*sub2.prgpriv aa=2b=2*a?a,b,cretu五、程序设计题(每小题10分,共20分)1.编写一个程序计算:S=1+2+3+……+N,N的值由用户确定。
重庆计算机二级c语言试题及答案一、选择题1. 在C语言中,以下哪个是合法的变量名?A. 2VarB. var2C. var_2D. _var2答案:B、C、D2. 下面哪个是正确的C语言语句?A. int a, b = 10;B. int a = 10, b;C. int a = 10, b = a;D. int a, int b = 10;答案:A、B、C3. 关于C语言中的sizeof运算符,下面哪个说法是正确的?A. sizeof(char)的结果是1B. sizeof(int)的结果是4C. sizeof(float)的结果是8D. sizeof(double)的结果是2答案:A、B4. 下面哪个不是C语言中的关键字?A. mainB. ifC. forD. while答案:A5. 下面哪个是C语言中的保留字?A. printfB. scanfC. returnD. continue答案:C、D二、填空题1. 在C语言中,能够表示整数常量的数据类型是______。
答案:int2. 在C语言中,用于定义宏的关键字是______。
答案:#define3. 在C语言中,两个整数相除的结果是______。
答案:整数相除的结果会舍去小数部分,只保留整数部分。
4. 在C语言中,用于声明常量的关键字是______。
答案:const5. 在C语言中,用于定义结构体类型的关键字是______。
答案:struct三、编程题1. 编写一个C语言程序,计算并输出1到100之间所有奇数的和。
```c#include <stdio.h>int main() {int sum = 0;int i;for (i = 1; i <= 100; i += 2) {sum += i;}printf("1到100之间所有奇数的和为:%d\n", sum);return 0;}```2. 编写一个C语言程序,判断一个输入的整数是否为质数。
重庆工学院第二届大学生程序设计大赛说明一、竞赛规则1. 比赛时间共4小时。
试题以中文表述。
考察内容以程序设计、数据结构、算法分析为主,为ACM(美国计算机协会)竞赛的命题形式。
3. 参赛学生可以携带诸如书、手册、程序清单等纸质参考资料。
4. 参赛学生不能携带任何可用计算机处理的软件或数据(如存储设备、计算器或电子辞典等)。
5. 参赛学生不能携带任何类型的通讯工具,包括无线电接收器、移动电话。
6. 在竞赛中,不同小组参赛选手之间不能交谈。
系统支持人员可以回答和系统相关的问题,例如解释系统错误信息。
7.结果上传服务器地址为:ftp:10.0.101.99 ,权限为上传,下载,删除。
用户名:cxxj 密码:3076 二、解题(程序运行)正确的判定裁判系统运行结果分为以下7 种:1. 正确:程序得到了正确的结果。
2. 输出格式错:虽然程序的结果是正确的,但是输出结果的格式与题目要求的不符,一般是由于在某些位置多输出或少输出了空格或空行。
3. 答案错误:程序运行完毕,但没有输出正确的结果。
4. 运行时错误:在程序的执行过程中,出现了堆栈溢出、访问无效内存单元、数组越界、计算中除以零等导致异常结束的情况。
5. 超过时间限制:程序没有在限定时间内执行完。
6. 超过内存设置:程序所使用的内存空间超过了题目的限定。
7. 无法编译:程序有语法错误,没有通过编译,请仔细检查。
注意:只有评测结果为“正确”的题才算正确,其余结果均为错误。
三、成绩(排名)的确定获胜原则:1、解题正确的数量多;2、如果选手解题数量相同,则完成时间少(交卷早);3、如果选手解题数量相同,完成时间少也相同(差距3分钟内),以算法效率高、注释清楚为佳;4、其它情况由校评判小组老师集体决定。
试题编号:重庆邮电大学2011~2012学年2学期C语言程序设计试卷(期末)(A卷)(闭卷)注意:所有试题的答案必须写在答题纸上。
一、基础知识测试题(本大题共16小题,24+24学时的学生请完成第1-15题,32+16学时的学生请完成第2-16题。
每小题4分,共60分)1请写出输出结果。
printf("%d, %d, %d, %d \n", 5%3, -5%3, -5%-3, 5%-3);2读程序,回答问题:#include <stdio.h>#include <math.h>void main(){float a,b,c,s,area; //问题(1):sizeof(float)的值是多少?printf(" Please input a,b,c: ");scanf(“%f,%f,%f”,&a, &b, &c);s=1.0/2*(a+b+c); // 问题(2):将1.0改为1,s的值会发生变化吗?area= sqrt(s*(s-a)*(s-b)*(s-c));printf("area = %f\n", area);}3读程序,回答问题:#include <stdio.h>void main(){ char cl,c2;printf(“请输入一个字符:”);cl=getchar(); //问题(1):getchar()函数的功能是什么?if(c1>=’a’&&c1<=’z’)c2=cl-32;//问题(2):c1>=’a’&&c1<=’z’与’a’<=c1<=’z’是否等价?printf(″%c,%d\n″,c2,c2);}4请写出输出结果。
printf(“%d %c\n”, ‘5’-‘0’, ‘5’-5);5读程序,回答问题:#include <stdio.h>void main(){ char grade;printf(“请输入一个字符:”);grade=getchar();switch(grade){case ‘A’: printf(“85~100\n”); break;//问题(1):break的作用是什么?case ‘B’: printf (“70~84\n”); break;case ‘C’: printf (“60~69\n”); break;case ‘D’: printf (“<60\n”); break;d efault: printf(“error\n”); break;}}//问题(2):输入A,程序的输出结果是什么?输入a,输出结果又是什么?6读程序,回答问题:#include <stdio.h>void main(){ int i;for(i=1;i<=6;i++){ if(i%2){printf(“#”);continue;}//问题(1):continue的含义是什么?printf(“*”);}printf(“\n”);}//问题(2):程序的输出结果是什么?7读程序,回答问题:#include <stdio.h>void main()//问题(1):程序的输出结果是什么?{ int i, j , s ; //问题(2):将下边的s=0移至此行,程序的输出结果又是什么?for(i=1;i<3;i++){ s=0;for (j=i;j<6;j++)s+=j;}printf(“%d\n” ,s);}8读程序,回答问题:void inv(int x[ ],int n){ int temp,i,j,m=(n-1)/2;for(i=0, j=n-1-i; i<=m; i++,j--){ temp=x[i]; x[i]=x[j]; x[j]=temp; }//问题(1):循环体里的语句的含义是什么?}//问题(2):函数的功能是什么?9读程序,回答问题:#include <stdio.h>void Inc_x( ){ int x=0;printf(“ x=%d ”,++x);}void Inc_y( ){ static int y=0;//问题(1):static的含义是什么?printf(“ y=%d ”,++y);}void main(){Inc_x( );Inc_y( );Inc_x( );Inc_y( );}//问题(2):程序的输出结果是什么?10读程序,回答问题:#include <stdio.h>#include <math.h>double S(double x, int n){if(n= =1)return x;elsereturn S(x,n-1)+pow(x,n);}void main(){printf(“%f”, S(2,3)); }//问题(1):程序的输出结果是什么?//问题(2):S函数被调用了几回?11读程序,回答问题:void fun(char s[]) //问题(1):形参char s[]用来存储什么?{int n=0,i;for(i=0;s[i]!=’\0’;i++)if(s[i]>=’0’ && s[i]>=’9’)s[n++]=s[i];s[n]=‘\0’;//问题(2):该语句的含义是什么?}12假设有如下两个定义:char x[]=”abcdefg”;char y[]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’};问题(1):两个数组所需要的内存字节数是否相同?问题(2):puts(x+2)和putchar(x[2])的输出结果分别是什么?13读程序,回答问题:#include <stdio.h>void main(){int x[]={1,2,3,4,5,6,7,8,9}; //问题(1):该语句的含义是什么?int s=0,i,*p=x;for(i=1;i<9;i+=2)s+=*(p+i);printf(“s=%d\n”,s); //问题(2):程序的输出结果是什么?}14读程序,回答问题:int *f(int *x,int *y) //问题(1):返回值是指针类型还是整数类型?{if(*x<*y) //问题(2):此行中,*的含义是什么?return x;elsereturn y;}15假设有定义:int m[3][3]={1,4,7,2,5,8,3,6,9};问题(1):m[1][2]的值是多少?问题(2):m[1]的含义是什么?16假设有定义如下:struct student{int number;char name[20];int score;};读下列程序,并回答问题。
试题1、数学黑洞(程序文件名maths.c/maths.cpp)【问题描述】任给一个4位正整数,其各位数位上的数字不全相同,将数字重新组合成一个最大的数与最小的数相减,重复这个过程,最多7步,必得6174。
对任给的4位正整数(各位数位上的数字不全相同),编程输出掉进黑洞的步数。
【输入】一行,一个4位正整数n(1000< n<9999)【输出】掉进黑洞的步数输入1234输出32、进制转换(程序文件名conver.c/conver.cpp)【问题描述】任给一个十进制整数n,及正整数m(m<=16且m≠10), 将n转换成m进制并输出。
【输入】一行,两个整数n,m(0 ≤ n ≤ 500000,2 ≤ m ≤ 16,且m≠10),中间用一个空格隔开,其中n 表示十进制数。
【输出】转换后的数【输入输出样例】输入255 8输出3773、分数线划定(程序文件名score.c/score.cpp)【问题描述】公务员选拔工作正在 A 市如火如荼的进行。
为了选拔优秀人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。
面试分数线根据计划录取人数的150%划定,即如果计划录取m名公务员,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。
【输入】第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数,m 表示计划录取的人数。
输入数据保证m*150%向下取整后小于等于n。
第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000 ≤ k ≤ 9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)。
数据保证选手的报名号各不相同。
重庆理工大学第二届大学生程序设计大赛题目试题1:【睿睿的随机数】睿睿想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。
然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。
请你协助睿睿完成“去重”与“排序”的工作。
【输入】输入文件名“random.in”输入文件有2行,第1行为1个正整数,表示所生成的随机数的个数:N第2行有N个用空格隔开的正整数,为所产生的随机数。
【输出】输出文件名“estdout.pc2”输出文件也是2行,第1行为1个正整数M,表示不相同的随机数的个数。
第2行为M个用空格隔的正整数,为从小到大排好序的不相同的随机数。
程序运行后结果示例:【样例输入】1020 40 32 67 40 20 89 300 400 15【样例输出】815 20 32 40 67 89 300 400试题2:【问题描述】大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列。
要求给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列1 2 3…n。
比如:n = 3,k=2 给出排列2 3 1,则它的下1个排列为3 1 2,下2个排列为3 2 1,因此答案为3 2 1【输入】输入文件名“permutation.in”第一行是一个正整数m,表示测试数据的个数,下面是m组测试数据,每组测试数据第一行是2个正整数n( 1 <= n < 1024 )和k(1<=k<=64),第二行有n个正整数,是1,2 …n的一个排列。
【输出】输出文件名“estdout.pc2”对于每组输入数据,输出一行,n个数,中间用空格隔开,表示输入排列的下k个排列。
2020-2021年度第⼆届全国⼤学⽣算法设计与编程挑战赛(冬季赛)题解热⾝赛题⽬描述:海的那边是敌⼈!为了夺回⾃由,艾尔迪亚帝国开始筹备起帝国巨⼈军队,利⽤艾伦始祖巨⼈之⼒,来指挥军队征战。
现在有12名巨⼈,他们的个⼦⾮常奇怪,第i i名巨⼈的⾝⾼为i i⽶。
现在,艾伦要将这12名巨⼈排成⼀排。
他想知道这12名巨⼈的排列⽅式有多少种。
例如:对于3名巨⼈的排列⽅式有6种:{1,2,3}、{1,3,2}、{2,3,1}、{2,1,3}、{3,1,2}、{3,2,1}请输出12名巨⼈的排列⽅式有多少种。
题意:输出12的全排列的个数思路1:使⽤全排列秘技:next_permutation#include<bits/stdc++.h>using namespace std;int main(){int sum = 1;int tr[] = {1,2,3,4,5,6,7,8,9,10,11,12};while (next_permutation(tr, tr + 12)) {sum++;}cout<<sum<<endl;}思路2:其实就是⾼中的排列组合⽽已,A(n,n)#include<bits/stdc++.h>using namespace std;int main(){int sum = 1;for(int i = 1; i <= 12; ++i)sum *= i;cout<<sum<<endl;}题⽬描述:在遥远的卡拉迪亚⼤陆,⼈们喜好骑马喜好砍杀。
⼤陆征战向来⾎⾬腥风,但为了社会主义的和谐发展,我们可以通过三⼦棋来决胜负!已知棋盘规模为 S*T ,具体参加三⼦棋的⼈数并不固定,现在你开了上帝之眼,你能看出来,究竟是谁赢下来这场「⾎腥」三⼦棋吗?胜利条件为:某⼀⾏或某⼀列或某⼀个斜⽅向(从左上到右下斜⽅向或从右上到左下斜⽅向)上有连续⾄少三个相同的棋⼦,则这枚棋⼦为获胜玩家的棋⼦。
重庆市第二届程序设计大赛1 数字的游戏输入文件名:gaspar.in 输出文件名:estdout.pc2问题描述:N个教徒和N个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是他们想了一个办法:2N个人围成一圈,从第一个人开始依次循环报数,每数到第9个人就将他扔进大海,如此循环直到只剩下N个人为止。
问怎样的站法,才能使得每次投入大海的都是非教徒。
输入:输入文件由一行构成,就是N的值输出:输出文件是一行字符串,字符串由N个'@'字符(代表教徒)和N个'+'字符(代表非教徒)排列组成。
该排列使得按照提述方法每次投入大海的都是非教徒。
输入样本:15输出样本:@@@@+++++@@+@@@+@++@@+++@++@@+2 翻译输入文件:trans.in 输出文件:estdout.pc2问题描述:小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。
这个软件的原理很简单,他只是从头到尾,一次将每个单词用对应的中文含义来替换。
对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它来翻译;如果内存中没有,软件就会在外存中的词典里查找,查出单词的中文含义然后翻译,并将这个单词和含义放入内存,以备后续查找和翻译。
假设内存中有M个单元,每个单元能存放一个单词和含义。
每当软件将一个新单词存入内存前,如果当前内存中已经存入的单词数不超过M,软件会将新单词存入下一个未使用的内存单元;若内存中已存入M个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。
假设一篇英语文章长度为N个单词,给定这篇待译文章,翻译软件需要去外存查找多少次词典?假设在翻译开始前,内存中没有任何单词。
输入:多组数据,每组数据共2行。
每行中两个数之间用一个空格隔开。
第一行为两个正整数M和N(0<M<=100,0<N<=1000),代表内存容量和文章长度。
编程竞赛知识试题库及答案一、选择题1. 下列哪个不是编程语言的常见特性?A. 语法B. 语义C. 编译D. 界面答案:D2. 在编程中,递归算法的基本原理是什么?A. 重复执行相同的操作B. 将问题分解成更小的问题C. 使用循环结构D. 存储所有可能的解决方案答案:B3. 以下哪个选项是面向对象编程的基本原则之一?A. 继承B. 封装C. 多态D. 所有选项都是答案:D4. 在C++中,以下哪个关键字用于定义类?A. structB. classC. interfaceD. type答案:B5. 以下哪个数据结构最适合实现堆栈?A. 链表B. 数组C. 队列D. 树答案:A二、填空题1. 在编程中,_________ 是一种常见的算法设计技术,它通过将问题分解成更小的子问题来解决。
答案:分治法2. 一个程序的_________ 是指程序中定义的变量和函数的集合。
答案:作用域3. 在数据结构中,_________ 是一种允许在表的任何位置插入和删除元素的数据结构。
答案:链表4. 在面向对象编程中,_________ 是指一个类可以继承另一个类的属性和方法。
答案:继承5. 在数据库中,_________ 是一种特殊的表,用于存储两个表之间的关系。
答案:关联表三、简答题1. 请简述什么是算法的时间复杂度,并给出一个例子。
答案:算法的时间复杂度是指算法执行所需的时间随输入数据规模增长的变化趋势。
例如,对于一个简单的线性搜索算法,其时间复杂度为O(n),意味着搜索时间随着元素数量的增加而线性增长。
2. 解释什么是哈希表,并说明其优点。
答案:哈希表是一种通过哈希函数将键映射到表中一个位置来访问记录的数据结构。
其优点包括快速的查找速度,通常为O(1),以及高效的内存使用。
四、编程题1. 编写一个函数,实现对整数列表进行排序。
答案:(示例代码,使用Python语言)```pythondef sort_list(nums):return sorted(nums)```2. 编写一个函数,实现对字符串进行反转。
计算机能力挑战赛-2023年第二届决赛-java-编程题3计算机能力挑战赛-2023年第二届决赛-java-编程题3》是一道编程题目,旨在测试参赛选手在使用Java编程语言解决问题的能力。
该题目要求选手使用Java编写程序,以实现特定功能。
选手需要根据给定的要求,编写出能够正确运行的程序,并输出符合要求的结果。
参赛选手应该熟悉Java编程语言的基础知识和常用的编码技巧。
通过解决该题目,选手能够提升他们在Java编程方面的能力,同时展示他们的问题解决能力和创造力。
该题目的目标是评估选手在使用Java编程语言解决实际问题时的思考能力、逻辑思维能力和代码实现能力。
参赛选手在回答本题时应该清晰地理解题目要求,并使用适当的编程方法和技巧来解决问题。
他们需要考虑到输入输出规范、边界条件和可能出现的异常情况,并确保程序的正确性和性能。
通过参与这道编程题目,选手能够提高他们的编程能力,并为将来在计算机能力挑战赛或其他编程比赛中取得更好的成绩做好准备。
这一部分应该详细说明题目的要求和限制条件。
可以包括输入输出规范、编程语言要求、算法要求等内容。
该编程题要求提供解题思路和算法设计。
以下是一种可能的解题思路:理解题目要求首先,要清楚题目的具体要求和限制条件。
分析题目中所提到的概念,并弄清楚它们之间的关系和作用。
设计数据结构根据题目要求,确定需要使用的数据结构。
考虑使用哪种数据结构能有效地解决问题,并满足题目的需求。
算法设计设计一个算法来解决问题。
根据题目要求,思考如何使用所学的算法知识来解决问题。
可以进一步分解问题,设计子问题的解决方案,并将其组合成整体的解决方案。
实现步骤将算法转化为具体的程序代码。
将数据结构和算法相结合,实现一个解决问题的完整程序。
测试和调试编写测试用例,验证程序的正确性。
对程序进行调试,并修复可能存在的错误。
优化和扩展优化程序的性能,提高效率。
考虑是否可以对算法进行优化,减少时间或空间复杂度。
如果有必要,扩展程序的功能,处理更多的情况和异常情况。
重庆理工大学程序设计大赛选拔试题试题1:【反转单词】给你一些英文句子,请将这些句子中的每个英语单词反转,然后再将其输出.这里的英语单词仅由大小写英文字母组成.【输入】输入文件名“sentence.in”多个英文句子,每句占一行,且每句不超过80个字符.【输出】输出文件名“estdout.pc2”按题目要求输出。
程序运行后结果示例:【样例输入】Helloworld!Happyprogramming,happylife!【样例输出】olleHdlrow!yppaHgnimmargorp,yppahefil!试题2:【全排列问题】大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列。
要求给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列1 2 3…n。
比如:n = 3,k=2 给出排列2 3 1,则它的下1个排列为3 1 2,下2个排列为3 2 1,因此答案为3 2 1。
【输入】输入文件名“permutation.in”第一行是一个正整数m,表示测试数据的个数,下面是m组测试数据,每组测试数据第一行是2个正整数n( 1 <= n < 1024 )和k(1<=k<=64),第二行有n个正整数,是1,2 …n的一个排列。
【输出】输出文件名“estdout.pc2”对于每组输入数据,输出一行,n个数,中间用空格隔开,表示输入排列的下k个排列。
程序运行后结果示例:【样例输入】33 12 3 13 13 2 110 21 2 3 4 5 6 7 8 9 10【样例输出】3 1 21 2 31 2 3 4 5 6 7 9 8 10试题3:【猜数游戏】猜数游戏在XXX国非常流行,游戏过程大概是这样的……一个裁判,三个路人,路人足够聪明。
<>必选项;[]可选项;…前面内容重复;I任选项1.*将任意一个三位数反向输出x=123x1=int(x/100)x2=int(mod(x,100)/10)x3=mod(x,10)?x1+x2*10+x3*100 ~~~~~3212.x=123y=str(x,3) &&将数值转化为字符串?right(y,1)+subs(y,2,1)+left(y,1) ~~~~~~3213.xb="女"?iif(xb='男',1,iif(xb='女',2,3)) &&条件函数 ~~~~~~24.note () **或^ * / %(求余数) + -从高到低;==(精确等于),<>、#、!(不等于);Not and nor (依次降级)5.*查找姓“张”的学生at("张",姓名)=1;substr(姓名,1,2)=”张”;姓名=”张”&&非精确比较;left(姓名,2)=”张”;6.*20岁以下学生Date()-出生日期<=20*365;Year(date())-year(出生日期)<=20;7.*少数民族学生少数民族否;少数民族否=.T.;Iif(少数民族否,”少数民族”,”汉族”)=”少数民族”*use 学生 &&这是vf语言首先需要做的,以下操作省略此条8~39 8.*显示第五条记录go 5display;list record 5;list for recn()=5;display for recn()=59.*显示记录号为偶数的记录list for mod(recno(),2)=0 &&recno()是记录号函数;list for recno()%2=0;list for int(recno()/2)=recno()/2;list for int(recno()/2)<>recno()/2 &&显示记录号为奇数的记录10.*显示汉族女学生的记录list for 少数民族否=.F. and 性别="女"list for !少数民族否 and 性别="女"11.*显示女学生的姓名、性别、年龄及简历list 姓名,性别,year(date())-year(出生日期),简历 for;性别="女"Use &&关闭表12.*表结构显示list/display structure;表结构修改modify structure;表记录显示list=display all;表记录修改edit/change/browse/replace··with··for/while··13.*将汉族学生数学成绩减少10分,并将外语成绩增加20分replace 数学 with 数学-10,外语 with 外语+20 for 少数民族否14.*将6号记录的出生日期修改为1983年9月7日go 6replace 出生日期 with {^1983/09/07};replace 出生日期 with {^1981/09/07} for recno()=615.*将汉族学生的数学成绩减少20分,将少数民族学生的外语成绩增加20分Replace 数学 with 数学-20 for 少数民族否=.F.Replace 外语 with 外语+20 for 少数民族否 &&必须用两条命令,因条件不同16.绝对定位 go top/bottom;相对定位skip17.* 插入记录Insert/insert blank18.*添加记录append &&用全屏方式进行添加记录append blank &&添加空白记录,在尾部19.*删除记录delete for recno()=3 or recno()=5 &&添加删除标志browset delete on &&做了删除标志的不参与运算recall &&取消删除标志pack &&物理删除记录zap=delete all 和 pack20.*复制表结构copy structure to 学生1 fields 学号,姓名,性别21.*复制表copy to new1 for 数学>=60use new1 &&显示表的记录必须先打开新表listcopy to new2 sdftype new2.txt &&查看新文本文件copy to new3 delimitedtype new3.txt &&查看新文本文件,若为字符型,带有""22.*从其他文件向表添加数据use 学生表copy stru to 学生2use 学生2list &&显示记录为空list struappend from 学生表 &&将学生表记录添加到学生2中list &&显示学生2表记录23.数据表文件的删除delete file new1.dbf &&扩展名不能省略erase 表1.dbf &&删除的文件必须关闭24.*表的排序* A(ascding 升序);D(descding 降序);C(加上忽略大小写),改变物理顺序USE 学生表sort on 数学/DC to sxuse sxlist next 525.*索引文件*种类:单索引文件:.idx;复合索引:.cdx;改变逻辑顺序*用表单设计器建立的索引号都是结构复合索引*To 单索引文件;tag 复合索引文件;compact 压缩的单索引文件*复合索引系统默认升序,单索引只能升序索引,默认普通索引*按年龄降序,年龄相同数学成绩升序(复合索引)index on str(year(date())-year(出生日期),2)+str(100-数学) tag xx desc *按数学降序(单索引)index on -数学 to su*按学号升序,不允许有编号相同的记录index on 学号 tag xh unique*按出生日期升序(非结构复合索引)index on 出生日期 tag cs of ss26.*打开索引文件*打开表后再打开索引文件set index to suset index to &&关闭当前单索引文件*表和索引文件同时打开Use 学生 index su27.*确定主控索引*go top/bottom指向逻辑顺序use 学生set index to su,nameset order to 2 &&设置name 为主索引list next 3set order to 1 &&设置su为主索引,或set order to sulist next 3set order to &&取消主索引28.*关闭索引文件,不能关闭结构索引; use 命令关闭当前表和相关索引close indexset index to29.*删除索引Delete file su &&删除单索引文件Delete tag all;delete tag cs &&删除复合索引文件索引标志30.*更新索引Reindex[compact]31.*顺序查询定位locate for !少数民族否 and 性别='男'disp 姓名,数学,year(date())-year(出生日期)continue &&继续查找下一个?recno(),姓名,数学,year(date())-year(出生日期)?found()32.*索引查询定位 &&继续查找下一个skipindex on 出生日期 tag sy4d={^1983/09/07}seek d &&内存变量,不加&dispindex on 姓名 tag xmfind 王大为 &&查找字符型,不需要加定界符dispseek '张大力' &&查找任意数据,需要加定界符disp33.*统计记录个数count for 性别='女' to x1count for 性别='男' to x2?x1,x2e 学生aver year(date())-year(出生日期) to y?y &&求表达式平均值sum 数学,外语 to a,b?a,b &&求数学,外语总分calculate avg(数学),min(数学),max(数学) to x,y,z?x,y,z &&avg,数值表达式平均值;max,数值,日期或字符35.*分类汇总*按性别、数学和外语成绩进行汇总index on 性别 tag xbhztotal on 性别 to hzuse hz &&先建立索引再分类汇总list在一个工作区只能打开一个表文件,且一个表文件也仅仅在一个工作区打开Select 0选择当前没有被使用的最小工作区为当前工作区36.*在1号工作区打开学生表并取别名use 学生 alias zg in 1;use 学生 alias zg in A &&1~10号别名A~J37.*表的逻辑关联Set relation to…into<工作区号>;选择additive建立一对多关系Set relation to 取消所有关联,取消后仍是两个表38.*表的物理联接Join with …to…for/fields…39.按性别对数学成绩和外语成绩汇总Index on 性别 tag cTotal on 性别 fields 数学,外语 to xbcj分别统计男女生平均年龄Average(date()-出生日期)/365 for 性别=’男’Average(date()-出生日期)/365 for 性别=’女’显示性别为女的学生数学成绩的总分,平均分,最高分和最低分Cal sum(数学),avg(数学),max(数学),min(数学) for 性别=’女’to x1,x2,x3,x4?x1,x2,x3,x440.建立数据库文件:creat database 学生打开数据库:use 学生.dbc &&.dbc不能省略;open database…关闭数据库:close all/database修改数据库:modify database …删除数据库:delete database …41.建立数据库索引父表建立主索引,子表建立普通索引;清理数据库;编辑参照完整性42.数据库表设计器字段有效性规则:性别=’男’ or 性别=‘女’信息:’性别只能为男或者为女’默认值:’女’43.SQL命令动词数据查询:select数据操纵:insert update delete数据定义:creat drop alter44.*用SQL命令建立学生管理数据库,包括学生表、选课表、课程表*用creat建立数据库creat database 学生管理*建立学生表creat table 学生表(学号 c(5) primary key,姓名 c(8),性别 c(2),年龄 i, 数学 n(5,1) check (数学>0) error "成绩应该大于0!" defa 0,外语 n(5,1)) *建立课程表creat table 课程表(课程号 c(5) primary key,课程名 c(10),学分 n(1)) &&primary key 建立主索引*建立选课表creat table 选课(学号 c(5),课程号 c(5),成绩 i check(成绩>=0 and 成绩<=100) error "成绩值范围0~100!" default 60,foreign key 学号 tag 学号reference 学生,foreign key 课程号 tag 课程号 reference 课程号)&&reference 与 foreign key 成对出现,建立普通索引Creat table=creat dbf45.*删除表Open database 学生管理Drop table 课程46.*修改表结构*为课程表增加一个整数型的学时字段alter table 课程 add 学时 i check(学时>=16) error "学时应该大于16!" *讲课程表的课程字段名由10改为20alter table 课程 alter 课程名 C(20)*为学生表外语字段添加有效性规则alter table 学生 alter 外语 set check(外语>=0 and 外语 <=100) error "外语成绩应在0~100之间!"*删除学时字段的有效性规则alter table 课程 alter 学时 drop check*删除课程表中学时字段alter table 课程 drop column 学时*将学生表中数学字段改为数学成绩字段alter table 学生 rename column 数学 to 数学成绩*在学生表中定义学号和姓名为候选索引alter table 学生表 add unique 学号+姓名 tag ran*删除学生表候选索引ranalter table 学生表 drop unique tag ran47.*数据查询Select …from…where…order by/group by…into/to…Top与order by 连用,默认升序Into array:数组;into cursor:临时表;into dbf/table:数据表(先运行再加into)48.*简单查询*列出所有学生名单select * from 学生 &&*表示输出所有字段,以浏览方式显示*列出所有学生去掉重名select distinct 姓名 as 学生名单 from 学生select 姓名 from 学生 distinct*查询数学成绩在80~95分之间的学生select * from 学生 where 数学>=80 and 数学<=95*统计男学生人数select count(*) as 男生人数 from 学生 where 性别='男' &&count(*)求满足条件的数值*将所有学生数学成绩四舍五入,只显示学号,姓名,数学cjselect 学号,姓名,round(数学成绩,0) as 数学cj from 学生*求所有学生的数学平均成绩、最高分和最低分select avg(数学成绩) as 数学平均分,max(数学成绩) as 数学最高分,min(数学成绩) as 数学最低分from 学生49.*带有特殊运算符的条件查询Where 子句中的特殊运算符All:满足子查询中所有值的记录Any:满足子查询中任意一个值的记录Between:字段值在指定范围内Exists:测试子查询中查询结果是否为空,若为空,则返回.f.In:字段值是结果集合或子查询中的内容Like :对字符型数据进行字符串比较,通配符“-”代表一个字符;“%”代表0或多个字符Some:满足集合中某个值*查询数学成绩在80到95分之间的学生select 数学成绩 from 学生 where 数学成绩 between 80 and 95*列出学号第二个字符为7的所有学生,注意学号字段类型为字符型select * from 学生 where 学号 like "-7%"select * from 学生 where left(学号,2)="7"*列出所有姓赵的学生名单select 学号,姓名 from 学生 where 姓名 like"赵%"select 学号,姓名 from 学生 where 姓名=’赵’50.*简单连接查询*等值连接与非等值连接*查询所有学生的成绩单,要求给出学号、姓名、课程号、课程名和成绩select a.学号,a.姓名,b.课程号,c.课程名,b.成绩 from 学生表 a,选课表 b,课程 c where a.学号=b.学号and b.课程号=c.课程号*查询男生的选课情况,要求列出学号,姓名,课程号,课程名和学分数select a.学号,a.姓名,b.课程号,c.课程名,c.学分 from 学生表 a,选课表 b,课程 c where a.学号=b.学号 and b.课程号=c.课程号 and 性别="男"*自连接查询*列出选修01102课的学生中,成绩大于学号为070410的学生该门课成绩的那些学号及成绩select a.学号,a.成绩 from 选课表 a,选课表 b where b.课程号="01102" andb.学号="070410" and a.课程号=b.课程号 and a.成绩>b.成绩51.*嵌套查询*返回单值的子查询*列出选修“数据库原理”的所有学生的学号select 学号 from 选课表 where 课程号=(select 课程号 from 课程 where 课程名="数据库原理")*返回一组值的子查询*列出选修01101课的学生中期末成绩比选修01102课的最低成绩还要高的学生的学号和成绩select 学号,成绩 from 选课表 where 课程号="01101" and 成绩>any(select 成绩 from 选课表 where 课程号="01102") &&any运算符的用法*列出选修01101课的学生的成绩比选修01102课的最高还要高的学生的学号和成绩select 学号,成绩 from 选课表 where 课程号="01101" and 成绩>all(select 成绩 from 选课表 where 课程号="01102") &&all运算符的用法*列出选修“数据库原理”或“软件工程”课程的所有学生的学号select 学号 from 选课表 where 课程号 in(select 课程号 from 课程 where 课程名="数据库原理" or 课程名="软件工程") &&any运算符的用法in等价于=any52.*超连接查询Select…from…inner/left/right/full join…*内部链接*列出男生的学号、课程号及成绩select a.学号,b.课程号,b.成绩 from 学生表 a,选课表 b wherea.学号=b.学号 and a.性别='男'select a.学号,b.课程号,b.成绩 from 学生表 a inner join 选课表 b ona.学号=b.学号 where 性别="男"53.*排序*按性别顺序列出学生的学号、姓名、性别、课程名及成绩,性别相同的再按课程名排序,最后按成绩由高到低排序select a.学号,a.姓名,a.性别,c.课程名,b.成绩 from 学生表 a,课程 c,选课表 b where a.学号=b.学号 and b.课程号=c.课程号ord er by a.性别,c.课程名,b.成绩 desc*输出学生表中数学成绩最高的前5名学生的信息select * top 5 from 学生表 order by 数学 desc54.*查询结果输出Into array 数组;cursor 临时表;dbf/table 表To file 文本文件*输出学生表数学成绩最高的前五名保存到testselect a.学号,b.课程号,b.成绩 from 学生表 a,选课表 b;where a.学号=b.学号 and a.性别='男' to file test*输出合并*列出选修01101或01102的所有学生和学号select 学号 from 选课表 where 课程号="01101" union select 学号 from 选课表 where 课程号="01102"*分组统计查询与筛选*分别统计男女人数select 性别,count(性别) from 学生 group by 性别*分别统计男女学生中数学成绩大于85分的学生人数select 性别,count(性别) from 学生 group by 性别where 数学成绩>85&&where:分组前所有记录满足的条件错误:select 性别,count(性别) from 学生 group by 性别 having 数学>85 &&having:查询后的结果是否满足条件55.*插入记录*向学生表中添加记录insert into 学生表 values("231002","杨阳","男",87.0,88.0)insert into 学生表(学号,姓名) values ("231109","李兵")dimension a(5)a(1)="221013"a(2)="张阳"a(3)="女"a(4)=97.0a(5)=88.0insert into 学生表 from array a56.*删除记录*将学生表中所有男生的记录逻辑删Delete from 学生 where 性别=’男’*删除学生管理里学生表中所有少数民族的学生Delete from 学生管理!学生 where 少数民族否Delete from 无条件删除所有记录57.*更新记录*将学生表中姓名为杨阳的学生的外语成绩改为93分update 学生 set 外语=93 where 姓名="杨阳"*将所有男生的各科成绩加20分update 选课表 set 成绩=成绩+20 where 学号 in (select 学号 from 学生表where 性别="男")update一次只能在单一表中更新记录58.*查询哪些仓库有工资多于1210元的职工Select distinet 仓库号 from 职工 where 工资>1210*给出在仓库WH1或WH2工作,并且工资少于1250元的职工号select 职工号 from 职工 where 工资<1250 and(仓库号="WH1" or 仓库号="WH2")*哪些城市至少有一个仓库的职工工资为1250元select dist a.城市 from 仓库 a,职工 b where 工资=1250 anda.仓库号=b.仓库号*找出和职工E4有相同工资的所有员工select * from 职工 where 工资=(select 工资 from 职工 where 职工号="E4") and 职工号!="E4"*找出供应商所在地数目select count(dist 地址) from 供应商*求所有职工的工资都多于1210元的仓库的平均面积select avg(面积) as 平均面积。