饭饭TXT > 学习管理 > 《南开三级网络技术100题题型整理总结》作者:茅于轼【完结】 > 三级网络技术南开100题.txt

文章简介

作者:茅于轼 当前章节:15352 字 更新时间:2026-6-22 22:39

《南开三级网络技术100题题型整理总结》

作者:茅于轼【完结】

茅于轼,1929年出生于南京,著名经济学家。中国最有影响的经济学家之一,是中国民间经济学者的重要代表。1993年从中国社会科学院退休。

100题题型

茅于轼事件真相揭秘

100题题型

类型一:英文文章字母ASCII值变换

替代关系:f(p)=p*11 mod 256,同时限定部分替换条件。

一 例题:题目96:函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS8.DAT中。

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

注意:部分源程序已给出。原始数据文件存放的格式是:每行的宽度均小于80个字符。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

------------------------------

void encryptChar() 定义函数encryptchar()

{int i,j,t; 定义i,j,t

for(i=0;i<maxline;i++) 行数i循环

 {for(j=0;j<strlen(xx[i]);j++) 列数j循环

{t=xx[i][j]*11%256; 替换ASCII值

if(t<=32 || (xx[i][j]>='a' && xx[i][j]<='z')) continue; 替换后处理continue

xx[i][j]=t;}}

}

※内嵌的for函数来表达行列:

for(i=0;i<maxline;i++)

{for(j=0;j<strlen(xx[i]);j++)

……}

※用if表达额外条件

※利用continue函数跳过改轮循环后面的语句,而继续进入下一次循环;

比较:break语句则跳过剩下的语句,而且跳出循环;

二 变形题目

(4)题目36:函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS6.DAT中。

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

注意:部分源程序已给出。原始数据文件存放的格式是:每行的宽度均小于80个字符。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

------------------------------

void encryptChar()

{int i,j,t;

for (i=0;i<maxline;i++)

{for(j=0;j< strlen(xx[i];j++)

{t=xx[i][j]*11%256;

if (t<=32 || (t>='0' && t<= '9')) continue;

xx[i][j]=t;}}

}

(8)题目95:函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS4.DAT中。

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

注意:部分源程序已给出。原始数据文件存放的格式是:每行的宽度均小于80个字符。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

------------------------------

void encryptChar()

{int i,j,t;

for(i=0;i<maxline;i++)

{for(j=0;j<strlen(xx[i]);j++)

{t=xx[i][j]*11%256;

if(t<=32 ||( xx[i][j]%2==0)) continue;

xx[i][j]=t;}}

}

类型二: 英文文章以行为单位进行字符变化

一 例题:题目73:函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中; 请编制函数ConvertCharD(), 其函数的功能是: 以行为单位把字符串中的所有小写字母改写成该字母的上一个字母, 如果是字母a, 则改写成字母z,大写字母和其它字符保持不变。把已处理的字符串仍按行重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT4.DAT中。原始数据文件存放的格式是: 每行的宽度均小于80个字符, 含标点符号和空格。

注意: 部分源程序存放在PROG1.C中。

请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

-----------------

类型:字符串(单词)的倒置和删除。

答案:

void ConvertCharD(void)

{ int i,j;

char c;

for(i=0;i<maxline;i++) 千万注意,此时用<,而不是<=,因为是从0开始数的

{ for(j=0;j<strlen(xx[i]);j++) 一定要注意变量的真实位置

if(xx[i][j]=='a') 我们通常写的xx[i][j]是ASCII值,与‘a’对应。

xx[i][j]='z';

else

if(xx[i][j]>='b'&&xx[i][j]<='z')

xx[i][j]--; } xx[i][j]—表示xx[i][j]-=1即xx[i][j]= xx[i][j]-1

}

用两个for函数表达行列:

for(i=0;i<maxline;i++)

{for(j=0;j<strlen(xx[i]);j++)}

二 变形

(1)题目63:下列程序的功能是:把S字符串中的所有字符左移一个位置,串中的第一个字符移到最后.请编写函数CHG(CHAR *S)实现程序要求,最后调用函数READWRITEDAT()把结果输出到OUT.DAT文件中.

例如:S字符串中原有内容为:Mn.123xyZ,则调用函数后,结果为:n.123xyZM.

注意:部分源程序已给出。

请勿改动主函数main()和输出数据函数readwriteDat()的内容。

-----------------------

void chg(char *s)

{ int i;

char c;

c=s[0];

for(i=0;i<strlen(s)-1;i++)

s[i]=s[i+1];

s[strlen(s)-1]=c;

}

(2)题目11:下列程序的功能是:把s字符串中的所有字母改写成该字母的下一个字符,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。请编写函数chg(char *s)实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。

例如:s字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为No.123Ayz。

注意:部分源程序已给出。

请勿改动主函数main()和输出数据函数readwriteDat()的内容。

-----------------------

void chg(char *s)

{ int i,k;

k=strlen(s);

for(i=0;i<k;i++)

{ if(s[i]=='z'||s[i]=='Z')

s[i]-=25;

else

if(isalpha(s[i]))

s[i]++; }

}

(3)题目10:请编制函数ConvertCharA(), 其函数的功能是: 以行为单位把字符串中的所有小写字母改写成该字母的下一个字母, 如果是字母z, 则改写成字母a,大写字母和其它字符保持不变。把已处理的字符串仍按行重新存入字符串数组xx中。。最后main()函数调用函数WriteDat()把结果xx输出到文件OUT3.DAT中。

例: 原文: Adb.Bcdza

abck.LLhj

结果: Aec.Bdeab

bcdl.LLik

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

注意: 部分源程序存放在PROG1.C中。

请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

-----------------

类型:字符串(单词)的倒置和删除。

答案:

void ConvertCharA(void) /*标准答案*/

{int I,j,str;

for(I=0;I<maxline;I++)

{str =strlen(xx[I]);

for(j=0;j<str;j++)

if(xx[I][j]=='z')xx[I][j]='a';

else if(xx[I][j]>='a'&&xx[I][j]<='y') xx[I][j]+=1;

}

}

类型三 产品排列 按序号,按代码

一 例题 题目99:已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)四部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按金额从小到大进行排列, 若金额相等, 则按产品代码从小到大进行排列 最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT1.DAT中。

注意: 部分源程序存放在PROG1.C中。

请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

----------------------------------

void SortDat() /*标准答案*/ 定义sortdat()

{int i,j; 定义i,j

PRO xy; ?????

for(i=0;i<99;i++) for循环各个产品

for(j=i+1;j<100;j++) for循环表达下一个产品

if(sell[i].je>sell[j].je) 比较je

{xy=sell[i];sell [i]=sell[j];sell[j]=xy;} 交换出较大的一个继续比较

else if(sell[i].je==sell[j].je) 如果相同

if(strcmp(sell[i].dm,sell[j].dm)>0) 比较dm

{xy=sell[i];sell[i]=sell[j];sell[j]=xy;} 交换出较大的一个继续比较

}

※表达行列

for(i=0;i<=99;i++)

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

※用i,j=i+1,表达相邻的两个量

※排列的基本方法“如果”if(x[i]>x[j])

“交换”{t=x[j];x[j]=x[i];x[i]=t}

※字母顺序比较:strcmp( sell[i].dm,sell[j].dm)>0 大于0则表示sell[i].dm比sell[j].dm的ASCII值大

类型四 英文文章 按行 ASCII值 排列

一简单排列

例题 题目88:函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编制函数SORTCHARA(),其函数功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组XX中,最后调用函数WRITEDAT()把结果XX输出到文件OUT1.DAT .

例:原文:dAe,BfC.

CCbbAA

结果:,.ABCdef

AACCbb

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

注意: 部分源程序存放在PROG1.C中。

请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

-----------------

类型:字符串(单词)的倒置和删除。

答案:

void ConvertCharA(void)/*标准答案*/

{int I,j,k,strl;

char ch;

for(I=0;I<maxline;I++) 列

{strl=strlen(xx[I]);

for(j=0;j<strl-1;j++) 行 某个字母

for(k=j+1;k<strl;k++) 某个相邻字母

if(xx[I][j]>xx[I][k]) 按行对字母进行比较

{ch=xx[I][j]; xx[I][j]=xx[I][k];xx[I][k]=ch;} 交换排序

}

}

二 一分为二排列

例题 题目71:函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(第行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。

条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,右边部分按字符的ASCII值升序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。

类型:字符串左右排序和比较。

注:要注意当要进行右半部分排序时,一定要判断原字符串个数是否为奇数,若是则要

half加1,本题对右半部分采用选择法对其进行升序排序。

void jsSort() /*标准答案*/

{int I,j,k,strl,half;

char ch;

for(I=0;I<20;I++) 按行

{strl=strlen(xx[I]);

half=strl/2; 定义half

for(j=0;j<half-1;j++) 左半部分进行排列

for(k=j+1;k<half;k++)

if (xx[I][j]<xx[I][k])

{ch=xx[I][j];xx[I][j]=xx[I][k];xx[I][k]=ch;}

if (strl%2) half++; 判断原字符串长度为奇为偶

for(j=half;j<strl-1;j++) 右半部分进行排列

for(k=j+1;k<strl;k++)

if (xx[I][j]>xx[I][k])

{ch=xx[I][j];xx[I][j]=xx[I][k];xx[I][k]=ch;}

}

}

变形(1)题目50:函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。

条件:从字符串中间一分为二,左边部分按字符的ASCII值升序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。

例如:位置   0 1 2 3 4 5 6 7 8

   源字符串 d c b a h g f e

4 3 2 1 9 8 7 6 5

则处理后字符串 h g f e a b c d

8 7 6 5 9 1 2 3 4

部分源程序已给出。

请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

----------------------------

类型:字符串左右排序和比较.

注:先采用冒泡法对左边部分进行升序排序,然后将排序后的左半与右半按对应位进行

调换。

void jsSort()

{int i,strl,half,j,k;

char ch; /*注意:用以交换的ch,必须是char型的!*/

for(i=0;i<20;i++) /*行循环*/

{strl=strlen(xx[i]); /*每行长度*/

half=strl/2;

for(j=0;j<half-1;j++) /*每行的第j个位置*/

for(k=j+1;k<half;k++)

if(xx[i][j]>xx[i][k])

{ch=xx[i][j];/*每次将最小数赋给xx[i][j]*/

xx[i][j]=xx[i][k]; xx[i][k]=ch;}

for(j=half-1,k=strl-1;j>=0;j--,k--)/*左右部分进行交换*/

{ch=xx[i][j];xx[i][j]=xx[i][k];xx[i][k]=ch;}

}

}

题43: 函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(第行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串变量的下标为奇数的字符按其ASCII值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。

例如:位置   0 1 2 3 4 5 6 7 

   源字符串 h g f e d c b a

则处理后字符串 h a f c d e b g

部分源程序已给出。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

-------------------------

类型:字符串左右排序和比较。

void jsSort() /*标准答案*/

{int I,j,k,strl;

char ch;

for(I=0;I<20;I++)

{strl=strlen(xx[I]);

for(j=1;j<strl-2;j=j+2) /*下标从0,1,2…其中为奇数就是1,3…*/

for(k=j+2;k<strl;k=k+2) /*相邻的数就是j+2了*/

if (xx[I][j]>xx[I][k])

{ch=xx[I][j];xx[I][j]=xx[I][k];xx[I][k]=ch;}

}}

※ 下标为奇数的数据的表达

※ for(j=1;j<strl-2;j=j+2)

※ for (k=j+2;k<strl;k=k+2)

题目16:函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrCharJR(),其函数的功能是:以行为单位把字符串中所有字符的ASCII值右移4位,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT8.DAT中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。

注意:部分源程序已给出。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。

-----------------------

void StrCharJR(void) /*标准答案*/

{int I,j,strl;

for(I=0;I<maxline;I++)

{strl=strlen(xx[I]);

for(j=0;j<strl;j++)

xx[I][j]+=xx[I][j]>>4;

}

}

注:这个编程题比二级考得还简单。

void StrCharJR(void)

{int i,j;

for(i=0;i<maxline;i++)

for(j=0;xx[i][j]!='\0';j++)

xx[i][j]+=xx[i][j]>>4;

}

题目17:函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编制函数CHA(),其函数功能是:以行为单位把字符串中的第一个字符的ASCII值加第二个字符的ASCII值,得到第一个亲朋字符,第二个字符的ASCII值加第三个字符的ASCII值,得到第二个新字符,依此类推一直处理到最后第二个字符,最后一个字符的ASCII值加原第一个字符的ASCII值,得到最后一个新的字符,得到的新字符分别存放在原字符串对应的位置上。最后把已处理的字符串逆转后按行重新存入字符串数组XX中,最后调用函数WRITEDAT()把结果XX输出到文件OUT9.DAT中.原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.

注意:部分源程序已给出。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。

-----------------------

void ChA(void) /*标准答案*/

{int I,j,k,str;

char ch;

for(I=0;I<maxline;I++)

{str=strlen(xx[I]);

ch=xx[I][0];

for(j=0;j<str-1;j++)

xx[I][j]+=xx[I][j+1];

xx[I][str-1]+=ch;

for(j=0,k=str-1;j<str/2;j++,k--)/*逆转 对头调动*/

{ch=xx[I][j];xx[I][j]=xx[I][k];xx[I][k]=ch;}}

}

类型五 两百个数的简单计算

题目91:请编制程序,从文件in.dat中读取200个整数至数组xx中,求出奇数的个数cnt1和偶数的个数cnt2以及数组xx值为偶数的元素值的算术平均值pj(保留2位小数)。

结果cnt1,cnt2,pj输出到out.dat中。部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。

--------------------

cnt1=0;cnt2=0;pj=0.0;

for(i=0;i<N;i++) 200个数据循环处理

if(xx[i]%2==1) cnt1++; %2为1即为奇数

else

{ cnt2++; pj+=xx[i]; } pj+=xx[i]求和的极好方法

pj/=cnt2;

题目92:请编制程序,从文件in.dat中读取200个整数至数组xx中,求出最大数max及最大数的个数cnt和数组xx中值能被3整除或能被7整除的算术平均值pj(保留2位小数)。结果cnt1,cnt2,pj输出到out.dat中。

部分程序、读数据函数read_dat(int xx[200])及输出格式已给出。

--------------------

max=xx[0]; /*求最大数的办法*/

for(I=1,k=0;I<N;I++)

{if (xx[I]>max) max=xx[I];

if (xx[I]%3==0||xx[I]%7==0)

{j+=xx[I];k++;}

}

for(I=0,cnt=0;I<N;I++)

if (xx[I]==max) cnt++;

pj=(float)(j*100/k)/100; /*保留两位小数的办法*/

※ 求最大数的办法:假定max=xx[0];然后逐个比较:比xx[0]大,就重新定义max即可。

※ 保留两位小数的办法:pj=(float)(j*100/k)/100

题目6:在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行升序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。

例:处理前 9012 5099 6012 7025 8088

处理后 5099 8088 7025 6012 9012

注意:部分源程序已给出。

请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。

--------------------

void jsSort() /*标准答案*/

{int I,j,data;

for(I=0;I<199;I++)

for(j=I+1;j<200;j++)

{if (aa[I]%1000<aa[j]%1000) /*就是把后面的三位看成一个百位数来看,只需要%1000即可

{data=aa[I];aa[I]=aa[j];aa[j]=data;}

else if(aa[I]%1000==aa[j]%1000)

if(aa[I]>aa[j])

{data=aa[I];aa[I]=aa[j];aa[j]=data;}

}

for(I=0;I<10;I++)/*当排列完成以后,取其前十个即可 */

bb[I]=aa[I];

}

题目5(完全同上):

题目22:请编写函数countvalue(),它的功能是:求n以内(不包括n)同时能被3和7整数的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.dat中。

例如若n为1000时,函数值应为:s=153.909064。

注意:部分源程序已给出。

请勿改动主函数main()和输入输出数据函数progreadwrite()的内容。

----------------------------

double countvalue(int n)

{ int i,j=0;

double k;

for(i=0;i<n;i++)

if(i%3==0&&i%7==0)

j+=i;

k=sqrt(j);/*平方根的求法*/

return k; }

题目93请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;再编制函数COMPUTE()分别计算出XX中奇数的个数ODD,偶数的个数EVEN,平均值AVER以及方差TOTFE的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。计算方差的公式如下:totfc=1/N∑(xx[i]-ave1)2

设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。

原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000)

注意:部分源程序已给出。

请勿改动主函数main()和输出数据函数writeDat()的内容。

------------------------------

void Compute(void)

{int I;

for(I=0;I<1000;I++)

{if(xx[I]%2) odd++; }/*表达偶数这样就可以了吗?*/

else {even++;

aver=aver+xx[I];}}/*要注意使用题目已知的变量,尽可能减少变量*/

aver/=even;

for(I=0;I<1000;I++)

totfc+=(xx[I]-aver)*(xx[I]-aver)/MAX;/*方差公式一直都没有看明白*/

}

totfc/=MAX;

}

题目23:已知在文件in.dat中存有N个(个数<200)四位数字的正整数,函数readdat()读取这N个正整数并存入数组xx中。请编制函数calvalue(),其功能要求:1、求出这N个实数的平均值aver;2、分别求出这N个实数的整数部分之和sumint以及小数部分之和sumdec,最后调用函数writedat()把所求的结果输出到文件out.dat中。

注意:部分源程序已给出。

请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。

----------------------------

void CalValue(void) /*标准答案*/

{int I;

double x,sum=0;/*到底什么时候用double噢?*/

for (I=0;I<MAXNUM;I++)

{sumint=sumint+(int)xx[I]; /*在前面补充类型(int)就可以表达整数部分了了*/

x=xx[I]-(int)xx[I]; /*小数部分=整体-整数部分*/

sumdec=sumdec+x;

目录
设置
设置
阅读主题
字体风格
雅黑 宋体 楷书 卡通
字体大小
适中 偏大 超大
保存设置
恢复默认
手机
手机阅读
扫码获取链接,使用浏览器打开
书架同步,随时随地,手机阅读
首 页 < 上一章 章节列表 下一章 > 尾 页