您的当前位置:首页正文

全国计算机三级考试数据库技术上机练习题及答案

2021-09-18 来源:易榕旅网
全国计算机三级考试数据库技术上机练习题及答案(1)

1.调用函数rwdata(),从IN.dat文件中读取10组数据(m和k值),并嵌套调用primenum函数分别得出array[]数组。请编写函数primenum(int m,int k,int array[]),该函数的功能是:将紧靠m的k个素数存入数组array并在屏幕上显示。最后把结果输出到文件OUT.dat中。

例如,若输入3 9,则应输出5 7 11 13 17 19 23 29 31。

注意:部分程序已经给出。请勿改动主函数main()和输出数据函数rwdata()的内容。 【答案】void primenum(int m, int k, int array[]) { int value = m+1; int half, n = 0, i; while(1)

{ half = value/2;

for (i=2; i<=half; i++) if (value%i == 0) break; if (i > half)

{ array[n] = value; n++; }

if (n >= k) break; value++; } }

2.在文件IN.dat中有200个正整数,且每个数均在1000~9999之间。函数RData()读取这200个数存放到数组original中。请编写函数numAscend(),其功能是:要求按每个数的后3位的大小进行升序排列,然后取出满足此条件的前10个数依次存入数组result中,如果后3位的数值相等,则按原先的数值进行降序排列。最后调用函数WData(),把结果result输出到文件OUT.dat中。

例如,处理前:6012 5099 9012 7025 8088

处理后:9012 6012 7025 8088 5099 【答案】void numascend() { int i, j, data;

for (i=0; i<199; i++) for (j=i+1; j<200; j++)

{ if (original[i]%1000 > original[j]%1000) { data = original[i]; original[i] = original[j]; original[j] = data; }

else if (original[i]%1000 == original[j]%1000) { if (original[i] < original[j]) { data = original[i]; original[i] = original[j]; original[j] = data; } } }

for (i=0; i<10; i++) result[i] = original[i]; }

3.已知文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数RData()读取这100个销售记录并存入结构数组sell中。请编写函数DescSort(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WData(),把结果输出到文件OUT.dat中。 【答案】void DescSort() { int i, j; PRO temp;

for (i=0; i<99; i++) for (j=i+1; j<100; j++)

if (strcmp(sell[i].code, sell[j].code) < 0) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; }

else if (strcmp(sell[i].code, sell[j].code) == 0) { if (sell[i].sum < sell[j].sum) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } }

}

4.函数RData()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组str中;请编写encryptChar()函数,其功能是:按给定的替代关系对数组str中的所有字符进行替代,仍存入数组str对应的位置上,最后调用函数WData(),把结果str输出到文件OUT.dat中。

替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于1等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。

原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】void encryptChar() { int i; char *pf; for (i=0; i { pf = str[i]; while (*pf != 0)

{ if (*pf*11%256<=130 && *pf*11%256>32) *pf = *pf*11%256; pf++; } } }

5.函数RData()实现从文件IN.dat中读取一篇英文文章存入到字符串数组str中,请编写函数DescSort(),其功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组str中,最后调用函数WData(),把结果str输出到文件OUT.dat中。原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。

例如,原文:dAeBfC. CcbbAA

结果:fedCBA. cbbCAA

【答案】void DescSort(void)

{ int i, j, k, strl; char ch; for (i=0; i

{ strl = strlen(str[i]); for (j=0; j for (k=j+1; k

if (str[i][j] < str[i][k]) { ch = str[i][j]; str[i][j] = str[i][k]; str[i][k] = ch; } } }

6函数RData()实现从文件IN.dat中读取一篇英文文章存入字符串数组original中,请编写StrCharMove()函数,其功能是:以行为单位把字符串中所有字符的ASCII值右移4位,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组original中。最后调用函数WData(),把结果original输出到文件OUT.dat中。

原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。 【答案】void StrCharMove(void) { int i, j, strl; for (i=0; i

{ strl = strlen(original[i]); for (j=0; j

original[i][j] += original[i][j]>>4; } }

7.编写函数findStr(),其功能是:统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为\"asd asasdfg asd as zx67 asd mklo\",子字符串为\"as\",函数返回值是6。

函数ReadWrite()实现从文件IN.dat中读取两个字符串,并调用函数findStr(),最后,把结果输出到文件OUT.dat中。

【答案】int findStr(char *str, char *substr) { int n;

char *p, *r; n = 0;

while (*str) { p = str; r = substr; while (*r) if (*r == *p) { r++; p++; } else { break; }

if (*r == '\\0') n++; str++; }

return n;

}

8.请编写函数CountValue(),它的功能是:求n以内(不包括n),同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。

主函数最后调用函数progReadWrite()从IN.dat文件中读取10组数据,分别得出结果,且把结果输出到文件OUT.dat中。

例如,若n为1000时,函数值应为:s=153.909064。 【答案】double countValue(int n) { double xy = 0.0; int i;

for (i=1; i

if (i%3==0 && i%7==0) xy += i;

xy = sqrt((double)xy); return xy; }

9已知在文件IN.dat中存有N个(N<200)实数,函数RData()读取这N个实数并存入数组original中。请编写函数CalValue(),要求实现的功能有:①求出这N个实数的平均值(aver);②分别求出这N个实数的整数部分之和(sumint)以及小数部分之和(sumdec),最后调用函数WData()把所求的结果输出到文件OUT.dat中。 【答案】void CalValue(void) { int i;

double x, sum = 0; for (i=0; i

{ sumint = sumint+(int)original[i]; x = original[i]-(int)original[i]; sumdec = sumdec+x; sum = sum+original[i]; }

aver = sum/MAXNUM; }

10.已知数据文件IN.dat中存有300个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数primeNum(),其功能是:求出所有这些四位数中素数的个数count,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序。最后调用写函数Wdata(),把结果输出到OUT.dat文件中。

例如,5591是素数,则该数满足条件存入数组b中,且个数count=count+1。9812是非素数,则该数不满足条件,不存入数组b中,count值也不加1。 【答案】void primeNum() { int j, i, value;

for (i=0; i<300; i++) if (isP(a[i]))

{ b[count] = a[i]; count++; }

for (i=0; i for (j=i+1; j if (b[i] > b[j]) { value = b[i]; b[i] = b[j]; b[j] = value; } }

11.下列程序的功能是:把s字符串中的所有字符左移一个位置,字符串中的第一个字符移到最后。请编写函数

change(char*s)实现程序要求,最后调用函数readwriteDAT()从IN.dat文件中读取50组数据,分别得出结果,且把结果输出到OUT.dat文件中。

例如,s字符串中原有内容为:Mn.123xyZ,调用该函数后结果为:n.123xyZM。 【答案】void change(char*s) { int i, strl; char ch;

strl = strlen(s); ch = *s; for (i=0; i

*(s+i) = *(s+i+1); *(s+strl-1) = ch; }

12.下列程序的功能是:找出所有100以内(含100)满足i、i+4、i+10都是素数的整数i(i+10也在100以内)的个数count以及这些i之和sum。请编写函数primeNum()实现程序要求的功能,最后调用函数writeDat(),把结果count和sum输出到文件OUT.dat中。 【答案】void primeNum() { int i;

for(i=2;i<=90;i++)

if(isPrime(i) && isPrime(i+4) && isPrime(i+10)) { count++; sum+=i; } }

13.函数Rdata()实现从文件IN.dat中读取一篇英文文章存入到字符串数组string中,请编写ConvertCharD()函数,其功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变,最后把已处理的字符串仍按行重新存入字符串数组string中。最后调用函数Wdata(),把结果string输出到文件OUT.dat中。 例如,原文:Adb.Bcdza abck.LLhj

结果:Aca.Bbcyz zabj.LLgi

原始数据文件存放的格式是:每行的宽度均小于80个字符。 【答案】void ConvertCharD(void) { int i; char *pf; for (i=0; i

{ pf = string[i]; while (*pf) { if (*pf == 'a') *pf = 'z';

else if (*pf>='b' && *pf<='z') *pf -= 1; pf++; } } }

14.请编写函数countValue(),它的功能是:求出1~1000之内能被7或11整除但不能同时被7或11整除的所有整数,将它们放在数组a中,并通过n返回这些数的个数。主函数最后调用函数Wdata()把计算结果输出到OUT.dat中。 【答案】void countValue(int *a, int *n) { int i;

*n = 0;

for (i=1; i<=1000; i++) if (i%7==0 && i%11) { *a = i; *n = *n+1; a++; }

else if (i%7 && i%11==0) { *a = i; *n = *n+1; a++; } }

15.已知数据文件IN.dat中存有300个四位数,并已调用读函数Rdata()把这些数存入数组a中,请编写函数primeCal(),其功能是:求出这些四位数中素数的个数count,再求出所有满足此条件的四位数的平均值Ave1以及不满足此条件的四位数的平均值Ave2。最后调用写函数Wdata(),把结果count、Ave1、Ave2输出到OUT.dat文件中。 例如,5591是素数,则该数满足条件计算平均值Ave1,且个数count=count+1。9812是非素数,则该数不满足条件计算平均值Ave2。 【答案】void primeCal() { int i;

for (i=0; i<300; i++) if (isP(a[i])) { Ave1 += a[i]; count++; } else

{ Ave2 += a[i]; }

Ave1 = Ave1/count;

Ave2 = Ave2/(300-count); }

16.下列程序的功能是:寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。所谓回文数是指各位数字左右对称的整数,例如121、676、94249等。满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。请编写函数int palindromevalue(long n)实现功能:如果是回文数,则函数返回1,反之则返回0。最后,把结果输出到文件OUT.dat中。

【答案】int palindromevalue(long n) { int i, strl, half; char temp[20]; ltoa(n, temp, 10); strl = strlen(temp); half = strl/2; for (i=0; i

if (temp[i] != temp[--strl]) break;

if (i >= half) return 1; else return 0; }

17请补充程序,使得程序能实现以下功能:

从文件IN.dat中读取200个整数至数组number中,求出奇数的个数cnt1和偶数的个数cnt2以及数组number下标为偶数的元素值的算术平均值ave(保留2位小数)。把结果cnt1、cnt2、ave输出到OUT.dat中。 【答案】for (i=0, j=0, cnt1=0, cnt2=0; i { if (number[i]%2) cnt1++; else cnt2++;

if (i%2 == 0) j += number[i]; }

ave = (float)j/(N/2);

18.函数Rdata()实现从文件IN.dat中读取一篇英文文章,存入到字符串数组string中,请编写函数CharRight(),其功能是:以行为单位把字符串中的最后一个字符的ASCII值右移4位后加倒数第二个字符的ASCII值,得到最后一个新的字符;倒数第二个字符的ASCII值右移4位后加倒数第三个字符的ASCII值,得到倒数第二个新的字符;依此类推,一直处理到第二个字符;第一个字符的ASCII值加原最后一个字符的ASCII值,得到第一个新的字符。得到的新字符分别存放在原字符串对应的位置上,最后已处理的字符串仍按行重新存入字符串数组string中。最后调用函数Wdata(),把结果string输出到文件OUT.dat中。

原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。 【答案】

void CharRight(void) { int i, j, strl; char ch; for (i=0; i

{ strl = strlen(string[i]); ch = string[i][strl-1]; for (j=strl-1; j>0; j--) { string[i][j] >>= 4;

string[i][j] += string[i][j-1]; }

string[i][0] += ch; } }

19.已知数据文件IN.dat中存有200个四位数,并已调用读函数rdata()把这些数存入数组a中,请编写函数evenvalue(),其功能是:如果四位数每位上的数字均是0、2、4、6或8,则统计出满足此条件的四位数的个数count,并把这些四位数按从大到小的顺序存入数组b中。最后main()函数调用写函数wdata(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 【答案】void evenvalue() { int bb[4]; int i, j, k, flag;

for (i=0; i<200; i++) { bb[0] = a[i]/1000; bb[1] = a[i]%1000/100; bb[2] = a[i]%100/10; bb[3] = a[i]%10; for (j=0; j<4; j++) { if (bb[j]%2 == 0) { flag = 1; } else

{ flag = 0;

break; } }

if (flag == 1) { b[count] = a[i]; count++; } }

for (i=0; i for (j=i+1; j if (b[i] < b[j]) { k = b[i]; b[i] = b[j]; b[j] = k; } }

20.函数RData()实现从文件IN.dat中读取一篇英文文章存入字符串数组StrResult中;请编写Strmove()函数,其功能是:以行为单位,依次把字符串中所有小写字母\"o\"左边的字符串内容移到该字符串的右边存放,然后把小写字母\"o\"删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组StrResult中。最后main()函数调用函数WData(),把结果StrResult输出到文件OUT.dat中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 例如,原文:n any field.Yu can create an index you have the corlrectrecord.

结果:n any field.Yu can create an index rd.yu have the crlrectrec 【答案】void Strmove(void) { int i, j, k; char buf[80]; for (i=0; i

{ j = strlen(StrResult[i])-1;

while (StrResult[i][j]!='o' && j>=0) j--;

if (j < 0) continue;

StrResult[i][j] = 0;

strcpy(buf, &StrResult[i][j+1]); k = j = 0;

while (StrResult[i][j])

{ while (StrResult[i][j]!='o' && StrResult[i][j]) j++;

if (!StrResult[i][j])

{ strcat(buf, &StrResult[i][k]); break; }

StrResult[i][j] = 0;

strcat(buf, &StrResult[i][k]); j++; k = j; }

strcpy(StrResult[i], buf);

} }

21.函数RData()实现从文件IN.dat中读取一篇英文文章并存入到字符串数组StrResult中,请编写函数StrRes(),其功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组StrResult中,最后调用函数WData(),把结果StrResult输出到文件OUT.dat中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 例如,原文:You He Me I am a student. 结果:Me He You student a am I

【答案】char StrRes(void) { int i, j, k, strl, l; for (i=0; i

for (j=0; j<(int)strlen(StrResult[i]); j++)

if (!isalpha(StrResult[i][j]) && StrResult[i][j]!=' ') StrResult[i][j] = ' '; for (l=0; l

{ char ch[80] = {0}; char pp[80] = {0};

strl = strlen(StrResult[l]); i = strl-1; k = 0; while(1)

{ while (isalpha(StrResult[l][i]) && i >= 0) { for (j=k; j>=0; j--) pp[j+1] = pp[j];

pp[0] = StrResult[l][i]; k++; i--; }

strcat(ch, pp); strcpy(pp, \"\"); k = 0; if (i < 0) break;

while (!isalpha(StrResult[l][i]) && i >= 0) { for (j=k; j>=0; j--) pp[j+1] = pp[j];

pp[0] = StrResult[l][i]; k++; i--; }

strcat(ch, pp); strcpy(pp, \"\"); k = 0; if (i < 0) break; }

strcpy(StrResult[l], ch); }

}

22.下列程序的功能是:把str字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。

请编写函数CharChange(char*str)实现程序要求,最后调用函数RWData()从IN.dat文件中读取50组数据,分别得出结果,并把结果输出到文件OUT.dat中。

例如,str字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为:No.123Ayz。 【答案】void CharChange(char *str) { while (*str)

{ if (*str=='z' || *str=='Z') *str -= 25;

else if (isalpha(*str)) *str += 1; str++; } }

23.已知在文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中,金额=单价×数量。函数RData()读取这100个销售记录并存入结构数组sell中。请编写AscendSort()函数,其功能是:按产品名称从小到大进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中。最后调用函数WData(),把结果输出到文件OUT.dat中。 【答案】void AscendSort() { int i, j; PRO temp;

for (i=0; i<99; i++) for (j=i+1; j<100; j++)

if (strcmp(sell[i].name, sell[j].name) > 0) { temp = sell[i]; sell [i] = sell[j]; sell[j] = temp; }

else if (strcmp(sell[i].name, sell[j].name) == 0) { if (sell[i].sum > sell[j].sum) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } } }

24.已知数据文件IN.dat中存有200个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数evenVal(),其功能是:若一个四位数的千位上的数字值小于等于百位上的数字值,百位上的数字值小于等于十位上的数字值,以及十位上的数字值小于等于个位上的数字值,并且该四位数是偶数,则统计出满足此条件的个数count,并把这些四位数按从小到大的顺序存入数组b中。最后调用写函数WData(),把结果count以及数组b中符合条件的四位数输出到OUT.dat文件中。 程序中已定义数组a[200],、b[200],已定义变量count。 【答案】void evenVal() { int i, j;

int a1, a2, a3, a4, k; for (i=0; i

{ a1 = a[i]/1000; a2 = a[i]%1000/100;

a3 = a[i]%100/10; a4 = a[i]%10;

if ((a1 <= a2) && (a2 <= a3) && (a3 <= a4) && (a[i]%2 == 0)) { b[count] = a[i]; count++; } }

for (i=0; i for (j=i+1; j if (b[i] > b[j]) { k = b[i]; b[i] = b[j]; b[j] = k; } }

25.已知a1 <= a2、a2 <= a3、a3 <= a4、a[i]%2 == 0这4个条件同时成立,则a[i]就是要求下列程序的功能是:在三位整数(100~999)中寻找符合条件的整数并依次从小到大存入数组中;该整数既是完全平方数,又有两个数字相同,例如144、676等。请编写函数SearchVal()实现此功能,满足该条件的整数的个数通过所编写的函数返回。最后调用函数WData(),把结果输出到文件OUT.dat中。

注意:部分源程序已给出。请勿改动主函数main()和写函数WData()的内容。 【答案】searchVal(int bb[]) { int i, a, b, c, cnt = 0; for (i=10; i*i<1000; i++) { a = i*i/100; b = i*i/10%10; c = i*i%10;

if (a==b || b==c || c==a) bb[cnt++] = i*i; }

return cnt; }

26.已知数据文件IN.dat中存有300个四位数,并已调用读函数RData()把这些数存入数组a中,请编写函数jsValue(),其功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于0的数的个数count,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序。最后调用写函数WData(),把结果输出到OUT.dat文件中。

例如,9123,9-1-2-3>0,则该数满足条件存入数组b中,且个数count=count+1。9812,9-8-1-2<0,则该数不满足条件,忽略。

程序中已定义数组a[300],b[300];已定义变量count。 【答案】void jsValue()

{ int i, thou, hun, ten, data, j; for (i=0; i<300; i++) { thou = a[i]/1000; hun = a[i]%1000/100; ten = a[i]%100/10; data = a[i]%10;

if (thou-hun-ten-data > 0) { b[count] = a[i]; count++; } }

for (i=0; i for (j=i+1; j if (b[i] > b[j]) { data = b[i]; b[i] = b[j]; b[j] = data; } }

27函数Rdata()实现从文件IN.dat中读取一篇英文文章存入到字符串数组string中,请编写函数CharLeft(),其功能是:以行为单位把字符串中所有字符的ASCII值左移4位,如果左移后,其字符的ASCII值小于等于32或大于100,则原字符保持不变,否则就把左移后的字符ASCII值再加上原字符ASCII值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组string中,最后调用函数Wdata(),把结果string输出到文件OUT.dat中。

原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。 【答案】void CharLeft(void) { int i, j, str; char ch; for (i=0; i

{ str = strlen(string[i]); for (j=0; j

{ ch = string[i][j]<<4; if (ch>32 && ch<=100) string[i][j] += ch; } }

}

因篇幅问题不能全部显示,请点此查看更多更全内容