2022电子科大《C语言》模拟题

请编写一个函数void fun(cbara [], charb [], int n),其功能是:删除一个字符申中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。

例如,输入一个字符串world,然后输入3,则调用该函数后的结果为word。

注意:部分源程序给出如下。

请勿改动主函数main 和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include <stdio.h>

include <conio.h>

define LEN 20

void fun (char a[], char b [], int n)

{

}

main ()

{

char str1 [LEN], str2 [LEN];

int n ;

clrscr ();

printf ("Enter the string : \n") ;

gets (str1) ;

printf ("Enter the position of the string

deleted: ");

scanf ("%d", &n) ;

fun (str1, str2, n) ;

printf ("The new string is : %s \n",

str2) ;

}


正确答案:void fun {char a[] char b[]int n) { int ik=0; for(i=0;a[i]!=‘\0’;i++) if (i!=n) /*将不是指定下标的字符存入数组b中*/ b[k++]=a[i]; b[k]=‘\0’; /*在字符串最后加上结束标记*/ }
void fun {char a[], char b[],int n) { int i,k=0; for(i=0;a[i]!=‘\0’;i++) if (i!=n) /*将不是指定下标的字符存入数组b中*/ b[k++]=a[i]; b[k]=‘\0’; /*在字符串最后加上结束标记*/ } 解析:本题要求删除字符串中指定下标的字符,即相当于把不是指定下标的字符留下。所以要用if(i!=n),注意不能写成“=”运算。


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

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

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

原始数据文件的存放格式是:每行的宽度均小于80个字符。

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

试题程序:

include<conio.h>

include<stdio.h>

include<string.h>

include<ctype.h>

unsigned char xx[50] [80];

int maxline=0;

int ReadDat(void);

void writeDat(void);

void encryChar()

{

}

void main()

{

clrscr();

if(ReadDat())

{

print f ( "数据文件ENG49.IN 不能打开! \n\007" );

return;

}

encryChar();

WriteDat();

}

int ReadDat(void)

{

FILE *fP;

int i=0;

unsigned char *p;

if((fp=fopen("ENG49.IN","r"))==NULL)

return 1;

while(fgets(xx[i],80,fp)!=NULL)

{

p=strchr(xx[i],'\n');

if(p) *p=0;

i++;

}

maxline=i;

fclose(fp);

return 0;

}

void WriteDat()

{

FILE *fp;

int i;

fp=fopen("ps49.dat","w");

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

{

printf("%s\n",xx[i]);

fprintf(fp,"%s\n",xx[i]);

}

fclose(fp);

}


正确答案:void encryChar () { int i; char *pf; for (i=0; imaxline; i++) { pf=xx [i]; /*指针pf指向该行首地址*/ while (*pf!=0 ) { if( (*pf>= 'A'&& *pf='Z') || *pf*11%256=32) /*如果原字符是大写字母或计算后的值 小于等于32*/ { pf++; /*则此字符不变取下一个字符*/ continue; /*退出些次循环*/ } *pf=*pf*11%256; /*如果不满足条件则用新字符替代原字符*/ pf++; /*取下一个字符*/ } } }
void encryChar () { int i; char *pf; for (i=0; imaxline; i++) { pf=xx [i]; /*指针pf指向该行首地址*/ while (*pf!=0 ) { if( (*pf>= 'A'&& *pf='Z') || *pf*11%256=32) /*如果原字符是大写字母或计算后的值 小于等于32*/ { pf++; /*则此字符不变,取下一个字符*/ continue; /*退出些次循环*/ } *pf=*pf*11%256; /*如果不满足条件,则用新字符替代原字符*/ pf++; /*取下一个字符*/ } } } 解析:本题考查的知识点如下:
(1)字符对应的ASCII码。
(2)判断结构中多个条件的“或”运算。
(3)退出一次循环。
在C语言中,字符可参与任何整数运算。实际上,是字符的ASCII码参与了运算。所以可以直接用字符代入f(p)的关系式中求出替换字符。若原字符是大写字母或f(p)≤32,则该字符不变。只有当字符大于等于A小于等于Z时,才是大写字母,所以这两个条件之间用“与”运算。而字符是大写字母与f(p)≤32之间为或的关系,所以这两个条件之间用“或”运算。若字符不变,则可不必计算替换字符,使用continue退出本次循环,进入下一次循环的条件判断中。因为这里不是直接退出循环结构,所以不能使用break语句。


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

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

原始数据文件存放的格式是:每行的宽度均小于80个字符。

注意:部分程序已经给出。请勿改动主函数main()、读数据函数RData()和输出数据函数 WData()的内容。

include <stdio.h>

include <string.h>

include <conio.h>

include <ctype.h>

unsigned char str[50] [80];

int maxline = 0; /* 文章的总行数 */

int RData (void);

void WData (void);

void encryptChar()

{

}

void main ()

{ if (RData())

{ printf("数据文件 IN. dst 不能打开! \n\007");

return;

}

encryptChar ();

WData ();

}

int RData (void)

{ FILE *fp;

int i = 0;

unsigned char *p;

if ((fp = fopen("IN. dat", "r")) == NULL)

return 1;

while (fgets(str[i], 80, fp) != NULL)

{ p = strchr(str[i], '\n');

if (p)

*p =0;

i++;

}

maxline = i;

fclose (fp);

return 0;

}

void WData(void)

{ FILE *fp;

int i;

fp = fopen("OUT. dat", "w");

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

{ printf ("%s\n", str[i]);

fprintf(fp, "%s\n", str[i]);

}

fclose (fp);

}


正确答案:void encryptChar() { int i; char *pf; for (i=0; imaxline; i++) { pf = str[i]; while (*pf != 0) { if ((*pf>='A' && *pf='Z')||*pf*11%256=32) { pf++; continue; } *pf = *pf * 11 % 256; pf ++; } } } [解题思路] 在for循环语句中对字符串数组str中的每个字符用逻辑表达式(*pf>='A'&& *pf='Z')||*pf*11%256=32进行逻辑判断如果其值为1则该字符不变否则按照给定的替代关系f(p)=p*11 mod 256求出其要替代的字符的ASCII值然后对该字符进行替代。
void encryptChar() { int i; char *pf; for (i=0; imaxline; i++) { pf = str[i]; while (*pf != 0) { if ((*pf>='A' && *pf='Z')||*pf*11%256=32) { pf++; continue; } *pf = *pf * 11 % 256; pf ++; } } } [解题思路] 在for循环语句中对字符串数组str中的每个字符用逻辑表达式(*pf>='A'&& *pf='Z')||*pf*11%256=32进行逻辑判断,如果其值为1,则该字符不变,否则按照给定的替代关系f(p)=p*11 mod 256求出其要替代的字符的ASCII值,然后对该字符进行替代。


[说明1]

函数void convelt(chal *a,int n)是用递归方法将一个正整数n按逆序存放到一个字符数组a中,例如,n=123,在a中的存放为'3'、'2'、'1'。

[C函数1]

void convert(char *a,int n)

{ int i;

if((i=n/10)!=0; convert( (1) ,i);

*a= (2) ;

}

[说明2]

函数int index(char *s,char *t)检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则返回-1。

[C函数2]

int index(char *s,char *t)

{ int i,j=0;k=0;

for(i=0;s[i]!:'\0';i++)

( for( (3) ;(t[k]!='\0')&&(s[j]!='\0')&&( (4) );j++,k++);

if( (5) ) return(i);

}

return(-1);

}


正确答案:(1) A+1 (2) n%10+'\0' (3) j=ik=0 (4) t[k]==s[j] (5) t[k]=='\0'或!t[k]
(1) A+1 (2) n%10+'\0' (3) j=i,k=0 (4) t[k]==s[j] (5) t[k]=='\0'或!t[k] 解析:函数1采用递归方法将一个正整数n按逆序存放到一个字符数组a中,递归调用为convert(a+1,i),所以(1)“a+1”。按逆序输出字符保存在数组a中为*a=n%10+'\0',即(2)填“n%10+'\0'”。
函数2检查字符串s中是否含有字符串t是在for循环中实现的。空(3)应填“j=i,k=0”。如果两个字符串中含有相同的字符,则字符串s和字符串t都指向下一个字符,循环继续,直到字符串t结束。所以空(4)应填“t[k]=s[j]”,空(5)应填“t[k]='\0'”或“!t[k]”。


函数ReadDat()的功能是实现从文件IN74.DAT中读取一篇英文文章存入到字符串数组xx中。请编制 6数StrCharJL(),该函数的功能是:以行为单位把字符串中的所有字符的ASCII值左移4位,如果左移后, (字符的ASCII值小于等于32或大于100,则原字符保持不变,否则就把左移后的字符ASCII值再加上原字符的ASCII值,得到的新字符仍存入到原字符中对应的位置。最后把已处理的字符串仍按行重新存入了符串数组xx中,最后调用函数WritcDat()把结果n输出到文件OUT74.DAT中。

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

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

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

试题程序:

include<stdio. h>

include<string. h>

include<conio. h>

char xx[50][80];

int maxline=0;

int ReadDat(void);

void WriteDat(void);

void StrCharfL(void)

{

}

void main()

{

Clrscr();

if(ReadDat())

{

printf (“数据文件IN74.DAT不能打开\n\007”);

return;

}

StrCharJL();

WriteDat();

}

int ReadDat(void)

{

FILE *fp;

int i=0;

char *p;

if((fp=fopen(“IN74.DAT”,“r”))==NULL) return 1;

while(fgets(xx[i],80,fp)!=NULL)

{

p=strchr(xx[i],'\n');

if (p) *p=0;

i++;

}

maxline=i;

fclose(fp);

return 0;

}

void WriteDat(void )

{

FILE *fp;

int i;

clrscr();

fp=fopen("OUT74.DAt","w");

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

{

printf(”%s\n”,xx[i]);

fprintf(fp,"%s\n",xx[i]);

}

fclose(fp);

}


正确答案:void StrCharJL (void) { int i j strl; for (i=0; imaxline; i++) { strl=strlen (xx [i]); /*求各行的总长度*/ for (j=0; jstrl; j ++) if(xx[i] [j]4 =32 ||xx[i] [j]4 >100); /*如果左移4位后字符的ASCII值小于等于32或大于100则原字符保持不变*/ else xx[i] [j] +=xx[i] [j]4; /*否则就把左移后的字符ASCII值加上原 字符的ASCII*/ } }
void StrCharJL (void) { int i, j, strl; for (i=0; imaxline; i++) { strl=strlen (xx [i]); /*求各行的总长度*/ for (j=0; jstrl; j ++) if(xx[i] [j]4 =32 ||xx[i] [j]4 >100); /*如果左移4位后字符的ASCII值小于等于32或大于100,则原字符保持不变*/ else xx[i] [j] +=xx[i] [j]4; /*否则就把左移后的字符ASCII值加上原 字符的ASCII*/ } } 解析:本题考查的知识点如下:
(1)字符的计算。
(2)左移运算符“”的使用。
(3)二维数组的访问。
(4)判断结构中多条件的布尔运算。
本题中,以行为单位处理字符串,首先要求得每行字符串的长度,才可对每一行的字符依次进行处理。字符可参与任何整数运算,实际上是字符的ASCII码参与了运算。所以,可以直接将字符带入计算。这里要使用到左移运算符“”。“”是双目运算符,左侧是要移动的数,右侧是移动的位数。左移后字符的ASCII码的值小于等于32或大于100,这两个条件满足一个即可,所以两条件之间用“或”运算。使用循环实现对所有行的处理。


有定义:floaty,*p=&y;,假定变量y在内存中所占地址为100103。那么p的值为( )A.100B.101C.102D.103答案:A

若调用一个函数,且此函数中没有return语句,关于该函数则正确的说法是( )A.没有返回值B.返回若干个系统默认值C.能返回一个用户所希望的函数值D.返回一个不确定的值答案:D

在对文件进行操作的过程中,若要求文件的位置回到文件的开头,应当调用的函数是( )A.fopen()B.fseek()C.fclose()D.rewind()答案:D

下面程序的功能是用递归法将一个整数存放到一个字符数组中。存放时按逆序存放。如483存放成384,请选择填空( ) #include void convert(char *a,int n) int i; if(i=n/10)!=0) convert(a+1,i); *a=【2】; main() int number; char str10= ; scanf(%d,&number); convert(str,number);A.n/10B.n%10C.n/10+0D.n%10+0答案:D

下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除。请选择填空( ) #include main() int i=0,j,k; do i+;k=316-13*i; while(【1】);j=k/11; printf( 316=13* %d+11*%d,i,j);A.k/11B.k%11C.k/11=0D.k/11= 0答案:B

以下程序的输出结果是( ) main() int x= 2,y=-1,z=2; if (xy) if(y0) z= 0; else z+ =1; printf(%dn,z);A.3B.2C.1D.0答案:B

对break语句的正确描述是A.break语句在while语句中,立即终止执行while语句B.break语句不能用于循环语句之外的语句C.break语句与continue语句功能相同D.break语句可以带参数,也可以不带答案:A

设C语言中,-个int型数据在内存中占2个字节,则unsigned int型数据的取值范围为( )A.0255B.032767C.065535D.02147483647答案:C

移位运算符”的含义A.从一个变量移动到另一个变量B.移位运算符”可以适合任意类型的数据C.按二进位移位运算,限定为整型数据和字符型数据D.按二进位移位运算,限定为整型数据答案:C

若用数组名作为函数调用的实参,传递给形参的是( )A.数组的首地址B.数组第一个元素的值C.数组中全部元素的值D.数组元素的个数答案:A

.以下关于C源程序文件的说法中正确的是( )A.是一种二进制文件B.是一种文本(ASCII码)文件C.可以用DOS的type命令显示其内容D.文件扩展名一般为c答案:BCD

以下数据类型在内存中占用4个字节的是( )A.intB.unsigned longC.floatD.unsigned char答案:BC13.下列符号中可以用作自定义函数名的是( )A.intB.go_toC.INTD.GetcharE.typedef答案:BCD

在下面C语言的函数说明语句中,正确的是( )A.intfun(int,int);B.intfun(intx,y);C.intfun(x,y);D.intfun(intx;inty);E.intfun(intx,inty);答案:AE

定义char s81; 后,能正确输入一个字符串到数组s的语句是( )A.gets(s);B.scanf (”%c”,s);C.scanf (”%s”,&s0);D.gets(&s0);答案:ACD

函数ReadDat()的功能是实现从文件ENG98.IN中读取一篇英文文章,存入到字符串数组xx中。请编制函数encryChar(),按给定的替代关系对数组xx中所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件ps98.dat中。

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

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

原始数据文件的存放格式是每行的宽度均小于80个字符。

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

试题程序:

include<conio.h>

include<stdio.h>

include<string.h>

include<ctype.h>

unsigned char xx[50][80];

int maxline=0;

int ReadDat(void);

void WriteDat(void);

void encryChar()

{

}

void main(

{

clrscr();

if(ReadDat())

{

printf("数据文件ENG98. IN不能打开!\n\007");

return;

}

encryChar();

WriteDat();

}

int ReadDat(void)

{

FILE *fp;

int i=0;

unsigned char *p;

if((fp=fopen("ENG98.IN","r"))==NULL) return 1;

while(fgets(xx[i],80,fp)!=NULL)

{

p=strchr(xx[i],'\n');

if(p) *p=0;

i++;

}

maxline=i;

fclose(fp);

return 0;

}

void WriteDat()

{

FILE *fp;

int i;

fp= fopen("ps98.dat","w");

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

{

printf("%s\n",xx[i]);

fprintf(fp,"%s\n",xx[i]);

}

fclose(fp);

}


正确答案:void encryChar() { int i; char *pr; for(i=0;imaxline;i++) { pf=xx[i]; /*指针pf指向该行第一个字符*/ while(*pf!=0) { if((*pf*11%256)%2!=O || *pf*11%256=32) { /*如果计算后的值小于等于32或其ASCII值是奇数*/ pf++; /*则不做改变指向下一个字符*/ continue; /*退出本次循环*/ } *pf=*pf*11%256; /*否则用新字符取代原有字符*/ pf++; /*指向下一个字符*/ } } }
void encryChar() { int i; char *pr; for(i=0;imaxline;i++) { pf=xx[i]; /*指针pf指向该行第一个字符*/ while(*pf!=0) { if((*pf*11%256)%2!=O || *pf*11%256=32) { /*如果计算后的值小于等于32或其ASCII值是奇数*/ pf++; /*则不做改变,指向下一个字符*/ continue; /*退出本次循环*/ } *pf=*pf*11%256; /*否则用新字符取代原有字符*/ pf++; /*指向下一个字符*/ } } } 解析:本题考查的知识点如下;
(1)字符对应的ASCII码。
(2)判断结构中多个条件的“或”运算。
(3)退出一次循环。
(4)二维数组的访问。
在C语言中,字符可参与任何整数运算。实际上,是字符的ASCII码参与了运算。所以可以直接用字符代入f(p)的关系式中求出替换字符。若f(p)≤32或其ASCII值为奇数,则该字符不变。两条件满足一个即可,所以这两个条件之间用“或”运算。一个数除以2取余所得的数不为0,则此数为奇数。若字符不变,则可不必计算替换字符,使用continue跳出本次循环,进入下一次循环的条件判断中。因为这里不是直接退出循环结构,所以不能使用break语句。本题中,将数据存放在一个二维数组中,可以定义一个指向数组每一行的指针。初始时,指针指向该行的第一个元素,随着地址增加,指针指向后面的元素。


函数Rdata()实现从文件IN.dat中读取一篇英文文章存入字符串数组string中,请编写函数SortCharA(),其功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新存入字爷串数组string中。最后调用函数Wdata(),把结果string输出到OUT.dat文件中。

例如,原文:dAe, BfC.

CcbbAA

结果:,. ABCdef

AACbbc

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

注意:部分源程序已经给出。请勿改动主函数main()、读数据函数Rdata()和输出数据函数Wdata()的内容。

include <stdio.h>

include <string.h>

include <conio.h>

char string [50] [80];

int maxline = 0; /* 文章的总行数 */

int Rdata (void);

void Wdata (void);

void SortCharA(void)

{

}

void main ()

{ if (Rdata ())

{ printf("数据文件 IN. dat 不能打开! \n\007");

return;

}

SortCharA ();

Wdata ( );

}

int Rdata (void)

{ FILE *fp;

int i = 0;

char *p;

if ((fp = fopen("IN. dat", "r")) == NULL)

return 1;

while (fgets(string[i], 80, fp) != NULL)

{ p = strchr(string[i], '\n');

if (p)

*p = 0;

i++;

}

maxline = i;

fclose (fp);

return 0;

}

void Wdata (void)

{ FILE *fp;

int i;

fp = fopen("OUT. dat", "w");

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

{ printf("%s\n", string[i]);

fprintf(fp, "%s\n", string[i]);

}

fclose (fp);

}


正确答案:void SortCharA (void) { int i j k str1; char ch; for (i=0; imaxline; i++) { str1 = strlen(string[i]); for (j=0; jstr1-1; j++) for (k=j+1; kstr1; k++) if (string[i] [j] > string [i] [k]) { ch = string[i] [j]; string[i] [j] = string[i] [k]; string[i] [k] = ch; } } } [解题思路] 这里采用strlen字符函数获取字符串的长度;对文章中的每一行的字符利用双重循环进行两两比较较小的字符往行前放较大的字符往行后放这样就实现了以行为单位对字符从小到大的排序。在程序中的语句是if(string[i][j]>string[i][k])成立string[i][j]和string[i][k]就交换数据。
void SortCharA (void) { int i, j, k, str1; char ch; for (i=0; imaxline; i++) { str1 = strlen(string[i]); for (j=0; jstr1-1; j++) for (k=j+1; kstr1; k++) if (string[i] [j] > string [i] [k]) { ch = string[i] [j]; string[i] [j] = string[i] [k]; string[i] [k] = ch; } } } [解题思路] 这里采用strlen字符函数获取字符串的长度;对文章中的每一行的字符利用双重循环进行两两比较,较小的字符往行前放,较大的字符往行后放,这样就实现了以行为单位对字符从小到大的排序。在程序中的语句是if(string[i][j]>string[i][k])成立,string[i][j]和string[i][k]就交换数据。


str是一个由数字和字母字符组成的字符串,由变量hum传入字符串长度。请补充函数fun( ),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。

例如:str=“Bcdl23e456hui890”,结果为:123456890。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

include<stdio.h>

define N 80

int bb[N];

int fun(char s[ ],int bb[ ],int num)

{

int i,n=0;

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

{

if(【 】)

{

bb[n]=【 】;

n++;

}

}

return【 】;

}

main()

{

char str[N];

int num=0,n,i;

printf("Enter a string:\n");

gets(str);

while(str[num])

num++;

n=fun(str,bb,num);

printf("\nbb=");

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

printf("%d",bb[i]);

}


正确答案:s[i]>=‘0’&&s[i]=‘9’ s[i]-‘0’ n
s[i]>=‘0’&&s[i]=‘9’ s[i]-‘0’ n 解析:第一空:如果当前字符的ASCII码大于字符‘0’的ASCII码,而小于字符‘9’的ASCII码,则说明当前字符是数字字符。第二空:将数字字符转换为数字的方法是,用当前数字字符的ASCII码减去字符‘0’的ASCII码。第三空:题目要求函数返回数组bb的长度,而变量n记录了数字字符的个数,也就是数组bb的长度,所以函数应该返回n。


函数ReadDat()的功能是实现从文件ENG9.IN中读取一篇英文文章,存入到字符串数组xx中。请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,

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

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

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

试题程序:

include <stdio.h>

include <string.h>

include <conio.h>

include <ctype.h>

unsigned char xx[50] [80];

int maxline = 0; /* 文章的总行数 */

int ReadDat(void);

void WriteDat(void);

void encryptChar()

{

}

main ( )

{

clrscr();

if (ReadDat ())

{

printf ("数据文件ENG9. IN不能打开 ! \n\007 ");

return;

}

encryptChar();

WriteDat();

}

int ReadDat (void)

{

FILE *fp;

int i= 0;

unsigned char *p;

if ((fp = fopen("ENG9.IN","r")) ==NULL) return 1;

while(fgets(xx[i], 80, fp) !=NULL)

{

p = strchr(xx[i], '\n');

if(p) *p = 0;

i++;

}

maxline = i;

fclose (fp);

return 0;

}

void WriteDat (void)

{

FILE *fp;

int i;

fp = fopen("PS9.DAT", "w");

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

{

printf("%s\n", xx[i]);

fprintf(fp, "%s\n", xx[i]); }

fclose (fp);

}


正确答案:void encryptChar() { int i; char*pf; for(i=0;imaxline;i++) pf=xx[i]; /*指针pf指向当前行的首地址*/ whilie(*pf!=0) { if(*pf%2==0 ||*pf*11%256=32); /*如果原字符的ASCII值是偶数或计算后 的值小于等于32则该字符不变*/ else *pf=*pf*11%256; /*否贝Jj将所对应的字符进行替代*/ pf++; /*指针pf指向下一个字符*/ } } }
void encryptChar() { int i; char*pf; for(i=0;imaxline;i++) pf=xx[i]; /*指针pf指向当前行的首地址*/ whilie(*pf!=0) { if(*pf%2==0 ||*pf*11%256=32); /*如果原字符的ASCII值是偶数或计算后 的值小于等于32,则该字符不变*/ else *pf=*pf*11%256; /*否贝Jj将所对应的字符进行替代*/ pf++; /*指针pf指向下一个字符*/ } } } 解析:本题主要考查用指针变量来控制字符数组,由于要对已有二维字符数组的所有元素逐个处理,因此,需要定义一个字符指针变量来控制原二维数组的各行。当前行如果确定下来,用指针的移动就可以依次扫描该行的所有字符元素,每得到一个字符就对它进行条件判断。根据题意,条件用“if(*pf%2++0|| *pf*11%256=32)”来实现,如果该字符不满足上述条件,就用一个新的字符来替代,新的字符是当前字符乘以11的结果再去与256求余数,处理完毕后,指针去取下一个字符。如果该字符满足所给条件,将不做任何操作,指针直接下移,去取下一个字符,对下一个字符进行处理。


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

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

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

原始数据文件存放的格式是:每行的宽度均小于80个字符。

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

试题程序:

include 〈stdio.h>

include 〈string.h>

include 〈conio.h>

include 〈ctype. h>

unsigned char xx[50] [80];

int maxline = 0; /* 文章的总行数 */

int ReadDat (void);

void WriteDat(void);

void encryptChar()

{

}

main ( )

{

clrscr ( );

if (ReadDat ( ))

{

printf("数据文件 ENG28.IN不能打开! \n\007");

return;

}

encryptChar ();

WriteDat ( );

}

int ReadDat(void)

{

FILE *fp;

int i = 0;

unsigned char *p;

if((fp = fopen("ENG28.IN", "r")) ==NULL)

return 1;

while(fgets(xx[i], 80, fp) !=NULL)

{

p = strchr(xx[i], '\n');

if(p) ~p = 0;

i++;

}

maxline = i;

fclose(fp);

return 0;

}

void WriteDat(void)

{

FILE *fp;

int i;

fp = fopen("PS28.DAT", "w");

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

{

printf("%s\n", xx[i]);

fprintf(fp, "%skn", xx[i]);

}

fclose(fp);

}


正确答案:void encryptChar() { int i; char*pf; for(i=0; i〈maxline; i++) { pf=xx[i]; while(*pf!=0) { if ((*pf*11%256>='a' && *pf*11%256〈='z') || *pf*11%256〈=32) { /*如果计算后的值小于等于32或对应的字符是小写字母*/ pf++; /*则不作任何操作取下一个数进行处理*/ continue; } *pf=*pf*11%256; /*否则用新字符来替代这个字符*/ pf++; /*取下一个字符*/ } } }
void encryptChar() { int i; char*pf; for(i=0; i〈maxline; i++) { pf=xx[i]; while(*pf!=0) { if ((*pf*11%256>='a' && *pf*11%256〈='z') || *pf*11%256〈=32) { /*如果计算后的值小于等于32或对应的字符是小写字母*/ pf++; /*则不作任何操作,取下一个数进行处理*/ continue; } *pf=*pf*11%256; /*否则用新字符来替代这个字符*/ pf++; /*取下一个字符*/ } } } 解析:本题主要考查用指针变量来控制字符数组,由于要对已有二维字符数组的所有元素逐个处理,因此,需要定义一个字符指针变量来控制原二维数组的各行。当前行如果确定下来,用指针的移动就可以依次扫描该行的所有字符元素,每得到一个字符就对它进行条件判断。根据题意,条件用“if((*pr*11%256>='a'&&*pf*11%256〈='z')||*pf*11%256〈=32)”语句来实现。如果该字符不满足上述条件,就用一个新的字符来替代,新的字符是当前字符乘以11的结果再去与256取余,处理完毕后,指针去取下一个字符。如果该字符满足所给条件,将不做任何操作,指针直接下移,去取下一个字符,对下一个字符进行处理。

更多 “2022电子科大《C语言》模拟题” 相关考题

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

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

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

试题程序:

include<stdio.h>

include<String.h>

include<conio.h>

char xx [50] [80];

int maxline=0;/* 文章的总行数 */

int ReadDat(void);

void WriteDat(void);

void StrCharJR(void)

{

}

main()

{

Clrscr();

if(ReadDat())

{

printf("数据文件IN8.DAT不能打开!\n\007");

return;

}

StrCharJR();

WriteDat ( );

}

int ReadDat (void)

{

FILE *fp;

int i= 0;

char *p ;

if ( (fp = fopen("IN8.DAT", "r") ) = =NULL) return 1;

while(fgets(xx[i] , 80, fp) !-NULL)

{

p = strchr(xx[i], '\n') ;

if (p) *p = 0;

i++;

}

maxline = i;

fclose (fp);

return 0;

}

void WriteDat (void)

{

FILE *fp;

int i;

clrscr ();

fp = fopen("OUTS.DAT", "w");

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

{

printf("%s\n", xx[i] );

fprintf(fp, "%s\n", xx[i] );

}

fclose(fp);

}


正确答案:void StrCharJR(void) { int ijstrl; for(i=0;imaxline;i++) { strl=strlen(xx[i]); /*计算各行字符串的长度*/ for(i=0;jstrl;i++) xx[i][j]+=xx[i][j]>>4; /*字符的ASCII值右移4位再加上原字符的ASCII 值得到新字符*/ } }
void StrCharJR(void) { int i,j,strl; for(i=0;imaxline;i++) { strl=strlen(xx[i]); /*计算各行字符串的长度*/ for(i=0;jstrl;i++) xx[i][j]+=xx[i][j]>>4; /*字符的ASCII值右移4位再加上原字符的ASCII 值,得到新字符*/ } } 解析:本题考查对二维字符数组元素的操作。注意:字符也可以参与数学运算,只不过用的是其ASCII码值。我们可以利用双重循环按照先行后列的顺序逐个取得数组中的字符(前提是我们需要求得各行字符的总个数),外层循环用来控制行数,内层循环用来依次取得各行中的每一个字符。之后对当前所取得的字符进行右移4位的运算(用到了“>>”右移运算符),然后把右移后得到的字符累加到原来字符中去,这样原来字符就被新的字符所覆盖。


函数ReadDat()的功能是实现从文件ENGl8.IN中读取一篇英文文章,存少、到字符串数组xx中:请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,结果仍存入数纽xx的对应的位置上,最后凋用函数WriteDat()把结果xx输出到文件PS18.DAT中。

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

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

原始数据文件存放的格式是:每行的宽度均小于80个字符。

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

试题程序:

include<conio.h>

include<ctype.h>

unsigned char xx[50] [80];

int maxline = 0; /*文章的总行数 */

int ReadDat(void);

void WriteDat(void);

void encryptChar()

{

}

main ( )

{

clrscr();

if(ReadDat())

{

printf("数据文件ENG18.IN不能打开! \n\007 ");

return;

}

encryptChar();

WriteDat();

}

int ReadDat(void)

{

FILE *fp;

int i=0;

unsigned char *p;

if((fp = fopen("ENG18.IN", "r")) ==NULL)

return 1;

while(fgets(xx[i], 80, fp) !=NULL)

{

p = strchr(xx[i], '\n ');

if(p) *p = 0;

i++;

}

maxline = i;

fclose(fp);

return 0;

}

void WriteDat (void)

{

FILE *fp;

int i;

fp = fopen("PS18.DAT", "w");

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

{

printf("%s\n", xx[i]);

fprintf(fp, "%s\n", xx[i]);

}

fclose(fp);

}


正确答案:void encryptchar ( ) { int i; char *pf; for (i=0; imaxline; i++) { pf=xx [i]; while (*pf ! =0) { if((*pf*11%256>='0' && *pf*11%256='9') || *pf*11%256=32) {pf++;continue; } /*如果计算后的值小于等于32或f(P)对的字符是 数字0至9 则该字符不变*/ *pf=*pf*11%256; /*否则按给定的替代关系进行替代*/ pf++; } } }
void encryptchar ( ) { int i; char *pf; for (i=0; imaxline; i++) { pf=xx [i]; while (*pf ! =0) { if((*pf*11%256>='0' && *pf*11%256='9') || *pf*11%256=32) {pf++;continue; } /*如果计算后的值小于等于32或f(P)对的字符是 数字0至9, 则该字符不变*/ *pf=*pf*11%256; /*否则按给定的替代关系进行替代*/ pf++; } } } 解析:本题主要考查用指针变量来控制字符数组,由于要对已有二维字符数组的所有元素逐个处理,因此,需要定义一个字符指针变量来控制原二维数组的各行,当前行如果确定下来,用指针的移动就可以依次扫描该行的所有字符元素,每得到一个字符就对它行条件判断,根据题意,条件用“if(*pf*11%256>='0' && *pf*11%256='9')||*pf*11%256=32)”语句来实现,如果该字符不满足上述条件,就用一个新的字符来替代,新的字符是当前字符乘以11的结果再去与256求余数。处理完毕后,指针去取下一个字符。如果该字符满足所给条件,将不做任何操作,指针直接下移,去取下一个字符,对下一个字符进行处理。


函数ReadDat()的功能是实现从文件IN32.DAT中读取一篇英文文章存入到字符串数组xx中。请编数StrOR(),该函数的功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移至该串的右边

存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放,最后把已处理的字符串仍按行重新存入字符串数组xx中。最后调用函数WriteDat()把结果输出到文件OUT32.DAT中。

例如, 原文: You can create an index on any field

you have the correct record

结果: n any field Yu can create an index

rd yu have the crrect rec

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

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

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

试题程序:

include<stdio. h>

include<string, h>

include<conio, h>

char xx[50] [80];

int maxline=0;

int ReadDat (void);

void WriteDat (void);

void StrOR (void)

{

}

void main ()

{

clrscr ( );

if (ReadDat ())

{

printf ("数据文件 IN32.DAT 不能打开!\n\007");

return;

}

StrOR ();

WriteDat ();

}

int ReadDat (void)

{

FILE *fp;

iht i=0;

char *p;

if ((fp=fopen("IN32.DAT","r"))==NULL) return 1;

while (fgets (xx [i], 80, fp) !=NULL)

{

p=strchr (xx [i], ' In' );

if (p) *p=0;

i++;

}

maxline=i;

fclose (fp);

return 0;

}

void WriteDat (void)

{

FILE *fp;

int i;

clrscr ();

fp=fopen ( "OUT32. DAT", "w" );

for (i=0;i {

printf ("%s\n", xx [i] );

fprintf (fp, "%s\n", xx[i] );

}

fclose (fp);

}


正确答案:void StrOR(void) { int I j k index strl; char ch; for (I=O; Imaxline; I++) { Strl=s'trlen (xx [ I ] ); /*求各行的长度*/ index=strl; for (j=O; jstrl; j++) /*将一行中所以小写字母o右边的字符依次 向左移一位并删除字母.*/ if (xx[I] [j]=='o') { for (k=j; k xx[I] [k]=xx[I] [k+l]; xx[I] [strl-1]=' '; index=j; /*记录下最后一个o所在的位置* / } for (j=strl-1; j >=index; j--) /*最后一个o右侧的所有字符都移到已处理字 符串的左边*/ ch=xx[I] [strl-1]; for (k=strl-1; k>O; k--) xx[I] [k]=xx[I] [k-l]; xx[I] [O]=ch; } } }
void StrOR(void) { int I, j, k, index, strl; char ch; for (I=O; Imaxline; I++) { Strl=s'trlen (xx [ I ] ); /*求各行的长度*/ index=strl; for (j=O; jstrl; j++) /*将一行中所以小写字母o右边的字符依次 向左移一位,并删除字母.*/ if (xx[I] [j]=='o') { for (k=j; k xx[I] [k]=xx[I] [k+l]; xx[I] [strl-1]=' '; index=j; /*记录下最后一个o所在的位置* / } for (j=strl-1; j >=index; j--) /*最后一个o右侧的所有字符都移到已处理字 符串的左边*/ ch=xx[I] [strl-1]; for (k=strl-1; k>O; k--) xx[I] [k]=xx[I] [k-l]; xx[I] [O]=ch; } } } 解析:本题考查的知识点如下:
(1)循环结构与选择结构的嵌套使用。
(2)字符数组中的元素的移动。
(3)字符串处理函数的使用。
在本题中,以行作为字符串处理的基本单位。首先,要确定该行字符串的长度。然后使用循环结构依次对字符进行处理。先找到字符o,将o右侧的字符依次向左移。这个操作同时能够删除字符o。记录下最后一个。所在的位置,在这个。右侧的所有字符都要移到已处理字符串的左边,这个过程也是使用循环来完成的。最后,对文章中的每一行都进行这一操作即可。`


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

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

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

原始数据文件存放的格式是:每行的宽度均小于80个字符。

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

试题程序:

include〈conio.h>

include〈ctype.h>

unsigned char xx[50] [80];

int maxline = 0; /* 文章的总行数 */

int ReadDat (void);

void WriteDat(void);

void encryptChar()

{

}

main ( )

{

clrscr ( );

if (ReadDat ( ) )

{

printf("数据文件 ENG18.IN不能打开! \n\007");

return;

}

encryptChar();

WriteDat ( );

}

int ReadDat (void)

{

FILE *fp;

int i=0;

unsigned char *p;

if((fp = fopen("ENG18.IN", "r")) ==NULL)

return 1;

while(fgets(xx[i], 80, fp) !=NULL)

{

p = strchr(xx[i], '\n');

if(p) *p = 0;

i++;

}

maxline = i;

fclose(fp);

return 0;

}

void WriteDat(void)

{

FILE *fp;

int i;

fp = fopen("PS18.DAT", "w");

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

{

printf("%s\n", xx[i]);

fprintf(fp, "%s\n", xx[i]);

}

fclose(fp);

}


正确答案:void encryptChar() { int i; char*pf; for(i=0; i〈maxline; i++) { pf=xx[i]; while(*pf!=0) { if((*pf*11%256>='0' && *pf*11%256〈='9') || *pf*11%256〈=32) {pf++; continue;} /*如果计算后的值小于等于32或f(p)对应的字符是数字0至9则该字符不变*/ *pf=*pf*11%256; /*否则按给定的替代关系进行替代*/ pf++; } } }
void encryptChar() { int i; char*pf; for(i=0; i〈maxline; i++) { pf=xx[i]; while(*pf!=0) { if((*pf*11%256>='0' && *pf*11%256〈='9') || *pf*11%256〈=32) {pf++; continue;} /*如果计算后的值小于等于32或f(p)对应的字符是数字0至9,则该字符不变*/ *pf=*pf*11%256; /*否则按给定的替代关系进行替代*/ pf++; } } } 解析:本题主要考查用指针变量来控制字符数组,由于要对已有二维字符数组的所有元素逐个处理,因此,需要定义一个字符指针变量来控制原二维数组的各行,当前行如果确定下来,用指针的移动就可以依次扫描该行的所有字符元素,每得到一个字符就对它行条件判断,根据题意,条件用“if(*pf*11%256>='0'&&*pf*11%256〈='9')||*pf*11%256〈=32)”语句来实现,如果该字符不满足上述条件,就用一个新的字符来替代,新的字符是当前字符乘以11的结果再去与256求余数。处理完毕后,指针去取下一个字符。如果该字符满足所给条件,将不做任何操作,指针直接下移,去取下一个字符,对下一个字符进行处理。


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

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

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

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

include<stdio.h>

include<string.h>

include<conio.h>

include<ctype.h>

unsigned char xx[50][80];

int maxline=0;/*文章的总行数*/

int ReadDat(void)

void WriteDat(void)

void encryptChar()

{

}

void main()

{

clrscr();

if(ReadDat()){

printf ("数据文件 ENG. IN 不能打开! \n\007");

return;

}

encryptChar();

WriteDat();

}

int ReadDat(void)

{

FILE *fp;

int i=0;

unsigned char *p;

if((fp=fopen("eng.in","r"))==NULL) return 1;

while(fgets(xx[i],80,fp)!=NULL){

p=strchr(xx[i],'\n');

if(p) *p=0;

i++;

}

maxline=i;

fclose(fp);

return 0;

}

void WriteDat(void)

{

FILE *fp;

int i;

fp-fopen("ps10.dat","w");

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

printf("%s\n",xx[i]);

fprintf(fp,"%s\n",xx[i]);

}

fclose(fp);

}


正确答案:void encryptChar() { /*字符替换过程中运算的中间结果可能超过256*/ /*因此采用整型存储中间结果*/ int ijt; for(i=0;imaxline;i++) /*遍历每一行*/ { for(j=0;istrlen(xx[i]);j++) { /*用控型变量进行所有运算*/ t=xx[i][j]; t=t*43%256; /*判断替换条件*/ if(t=32 || xx[i][j]%2==0) continue; xx[i][j]=t; } } }
void encryptChar() { /*字符替换过程中,运算的中间结果可能超过256*/ /*因此采用整型存储中间结果*/ int i,j,t; for(i=0;imaxline;i++) /*遍历每一行*/ { for(j=0;istrlen(xx[i]);j++) { /*用控型变量进行所有运算*/ t=xx[i][j]; t=t*43%256; /*判断替换条件*/ if(t=32 || xx[i][j]%2==0) continue; xx[i][j]=t; } } } 解析:关键点:
1.字符串读写。
2.由于fgets()函数读入数据时读入换行符'\n',因而需要在xx数组每一行末尾将换行符'\n'替换成结束符'\0'。本题中此步已经在ReadDat()函数中完成。
3.算法:让字符指针pf指向每一行的开头然后逐一往后移动,在移动过程中按要求进行转换。*pf%2=0用于判断是否为偶数。If()条件语句用于控制不替代字符。
4.中间变量的类型选择整型。


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

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

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

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

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

试题程序:

include <stdio.h>

include <string.h>

include <conio.h>

include <ctype.h>

unsigned char xx[50][80];

int maxline = 0;/* 文章的总行数 */

int ReadDat (void);

void WriteDat(void);

void encryptChar()

{

main ( )

{

clrscr ();

if (ReadDat ())

{

printf ("数据文件ENG4.IN不能打开! \n\007");

return;

}

encryptChar ();

WriteDat ();

}

int ReadDat (void)

{

FILE *fp;

int i = 0;

unsigned char *p;

if((fp = fopen("ENG4.IN", "r")) ==NULL) return 1;

while(fgets(xx[i], 80, fp) !=NULL)

{

p = strchr(xx[i], '\n');

if (p) *p = 0;

i++;

}

maxline = i;

fclose (fp);

return 0;

}

void WriteDat(void)

{

FILE *fp;

int i;

fp = fopen("PS4.DAT", "w");

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

{

printf("%s\n", xx[i]);

fprintf(fp, "%s\n", xx[i]);

}

fclose (fp);

}


正确答案:void encryptChar() { int i; char *pf; for (i=O; imaxline; i++) { pf=xx [i]; /*指针pf指向各行的首地址*/ while (*pf !=0) { if(*pf*11%256>130 || *pf*11%256=32); /*如果广计算后的值小于等于32或大于130*/ /*则该字符不变*/ else *pf=*pf*11%256; /* 否则将所对应的字符进行替代* / pf++; /*指针pf指向下一个字符*/ } } }
void encryptChar() { int i; char *pf; for (i=O; imaxline; i++) { pf=xx [i]; /*指针pf指向各行的首地址*/ while (*pf !=0) { if(*pf*11%256>130 || *pf*11%256=32); /*如果广计算后的值小于等于32或大于130*/ /*则该字符不变*/ else *pf=*pf*11%256; /* 否则将所对应的字符进行替代* / pf++; /*指针pf指向下一个字符*/ } } } 解析:本题主要考查用指针变量来控制字符数组,由于要对已有二维字符数组的所有元素逐个处理,因此,需要定义一个字符指针变量来控制原二维数组的各行,当前行如果确定下来,用指针的移动就可以依次扫描该行的所有字符元素,每得到一个字符就对它进行条件判断。根据题意,条件用“if(*pf*11%256>130||*pf*11%256=32)”语句米实现,如果该字符不满足上述条件,就用一个新的字符来替代,新的字符是当前的字符乘以11的结果再去与256求余数。处理完毕后,指针去取下一个字符。如果该字符满足所给条件,将不做任何操作,指针直接下移,去取下一个字符,对下一个字符进行处理。


函数ReadDat()的功能是实现从文件IN32.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数StrOR(),该函数的功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移至该串的右边存放,然后把小写字母。删除,余下的字符串内容移到已处理字符串的左边存放,最后把已处理的字符串仍按行重新存入字符串数组xx中。最后调用函数WriteDat()把结果输出到文件OUT32.DAT中。

例如,原文:You can create an index on any field

you have the correct record

结果:n any field Yu can create an index

rd yu have the crrect rec

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

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

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

试题程序:

include<stdio. h>

include<string. h>

include<conio. h>

char xx[50] [80];

int maxline=0;

int ReadDat (void);

void WriteDat(void);

void StrOR (void)

{

void main ()

{

clrscr ( );

if (ReadDat ( ) )

{

printf ("数据文件IN32.DAT不能打开! \n\007");

return;

}

StrOR ( );

WriteDat ( );

}

int ReadDat (void)

{

FILE *fp;

int i=0;

char *p;

if ( (fp= fopen ( "IN32. DAT", "r" ) ) ==NULL) return 1;

while (fgets (xx [i] , 80, fp) ! =NULL)

{

p=strchr [xx[i] , '\n');

if (p) *p=0;

i++;

}

maxline=i;

fclose(fp);

return 0;

}

void WriteDat (void)

{

FILE *fp;

int i;

ctrscr ( );

fp=fopen ("OUT32 .DAT", "w");

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

{

printf("%s\n",xx[i]);

fprint f (fp, "%s\n", xx [i]);

}

fclose(fp);

}


正确答案:void StrOR(void) { int I j k index str1; char ch; for (I=0; Imaxline; I++) { str1=strlen (xx [I] ); /*求各行的长度*/ index=str1; for (j =0; jstr1; j ++) /*将一行中所以小写字母o右边的字符依次向左移一位 删除字母o*/ if(xx[I] [j]=='o') { for (k=j ;kstr1-1;k++) xx[I] [k]=xx[I] [k+1]; xx[I] [str1-1]=' '; index= j; /*记录下最后一个o所在的位置*/ } for [j=strl-1; j>=index; j--) /*最后一个o右侧的所有字符都移到已处理字 符串的左边*/ { ch=xx[I] [str1-1]; for (k=str1-1 ;k>0; k--) xx[I] [k]=xx[I] [k-1]; xx[I] [0] =ch; } } }
void StrOR(void) { int I, j, k, index, str1; char ch; for (I=0; Imaxline; I++) { str1=strlen (xx [I] ); /*求各行的长度*/ index=str1; for (j =0; jstr1; j ++) /*将一行中所以小写字母o右边的字符依次向左移一位, 删除字母o*/ if(xx[I] [j]=='o') { for (k=j ;kstr1-1;k++) xx[I] [k]=xx[I] [k+1]; xx[I] [str1-1]=' '; index= j; /*记录下最后一个o所在的位置*/ } for [j=strl-1; j>=index; j--) /*最后一个o右侧的所有字符都移到已处理字 符串的左边*/ { ch=xx[I] [str1-1]; for (k=str1-1 ;k>0; k--) xx[I] [k]=xx[I] [k-1]; xx[I] [0] =ch; } } } 解析:本题考查的知识点如下:
(1)循环结构与选择结构的嵌套使用。
(2)字符数组中的元素的移动。
(3)字符串处理函数的使用。
在本题中,以行作为字符串处理的基本单位。首先,要确定该行字符串的长度。然后使用循环结构依次对字符进行处理。先找到字符o,将o右侧的字符依次向左移。这个操作同时能够删除字符o。记录下最后一个。所在的位置,在这个。右侧的所有字符都要移到已处理字符串的左边,这个过程也是使用循环来完成的。最后,对文章中的每一行都进行这一操作即可。


函数ReadDat()的功能是实现从文件IN35.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数SortCharD(),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT35.DAT中。

例如,原文:dAe,BfC

CCbbAA

结果:fedCBA,

bbCCAA

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

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

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

试题程序:

include<Stdio.h>

include<String.h>

include<conio.h>

char xx[50][80];

int maxline=0;

int ReadDat(void);

void WriteDat(void);

void SortCharD()

{

}

void main()

{

Clrscr();

if (ReadDat())

{

printf("数据文件 IN35.DAT不能打开!\n\007");

return;

}

SortChar D();

WriteDat();

}

int ReadDat(void)

{

FILE *fp;

int i=0;

Char*p;

if((fp:fOpen("IN35.DAT","r"))==NULL)

return 1;

while (fgets(xX[i],80,fp)!=NULL)

{

p=strchr(xX[i],"\n");

if (p) *p:0;

i++;

}

maxline=i;

fclose(fp);

return 0;

}

void WriteDat()

{

FILE *fp;

int i;

Clrscr();

fp:fopen("OUT35.DAT","w");

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

{

printf("%s\",xx[i]);

fprintf(fp,"%s\n",xx[i]);

}

fclose(fp);

}


正确答案:void SortCharD() { int i j k strl; char ch; for (i=0;i { strl=strlen (xx [i] ); /*求各行的长度*/ for (j=0; j for (k=j+l; k if (xx[i] [j] { ch=xx[i] [j]; xx[i] [j]=xx[i] [k]; xx[i] [k] =ch; } } }
void SortCharD() { int i, j, k, strl; char ch; for (i=0;i { strl=strlen (xx [i] ); /*求各行的长度*/ for (j=0; j for (k=j+l; k if (xx[i] [j] { ch=xx[i] [j]; xx[i] [j]=xx[i] [k]; xx[i] [k] =ch; } } } 解析:本题考查的知识点如下:
(1)循环结构的嵌套。
(2)字符的大小比较。
(3)字符排序。
本题以行为单位对文章进行处理,首先要确定每一行中字符的个数。这个操作可使用字符串处理函数
strlen(char*str)来完成。对字符从大到小排序依据的是字符的ASCII码,在C语言中,字符量可参与任何整
型运算,所以可以直接使用比较运算符进行比较。排序使用前面介绍的“选择排序法”。最后使用循环结构对文章中的每一行都进行以上的操作。


请编写一个函数maxofarray(atype*p,int count),该函数从一个数组中找出其中的最大元素,并且数组中可以存放多种数据类型的元素。

注意:部分源程序己存在文件test42_2.cpp中。

请勿修改主函数main和其他函数中的任何内容,仅在函数maxofarray的花括号中填写若干语句。

文件test42_2.cpp清单如下:

include<iostream.h>

include<string.h>

include<conio.h>

template<class atype>

void maxofarray(atype* p,int count)

{

}

void main ()

{

int len=5;

char *p1;

cout<<"the char type array and it's length is 5:\n";

cout<<"the array element is a b c d e\n";

p1=new char[len];

for (int i=0;i<len;i++)

p1[i]='a'+i;

maxofarray(p1,len);

}


正确答案:void maxofarray(atype*pint count) { for (int j=0;jcount-1;j++) { for (int k=0;kcount-1-j;k++) if(p[k]>p[k+1]) { atype temp; temp=p[k]; p[k]=p[k+1]; p[k+1]=temp; } } cout"\nthe max element of this array is: "p[count-1]endl; }
void maxofarray(atype*p,int count) { for (int j=0;jcount-1;j++) { for (int k=0;kcount-1-j;k++) if(p[k]>p[k+1]) { atype temp; temp=p[k]; p[k]=p[k+1]; p[k+1]=temp; } } cout"\nthe max element of this array is: "p[count-1]endl; } 解析:本题考查的是考生对模板函数和简单的排序方法的综合应用。为了对于任何数据类型都能进行比较,应该使用模板类进行函数的参数的定义,而函数内部则使用了冒泡排序法得到最大的元素,实际上只需要一次两两比较就可以得到正确的答案了,考生可以自己试试看。


函数ReadDat()的功能是实现从文件IN35.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数$ortCharD(),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,捧序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT35.DAT中。

例如,原文:dAe,BfC

CCbbAA

结果:fedCBA,

bbCCAA

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

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

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

试题程序:

include<stdio.h>

include<string.h>

include<conio.h>

char xx[50] [80];

int maxline=0;

int ReadDat(void);

void WriteDat(void);

void SortCharD()

{

}

void main()

{

clrscr();

if (ReadDat())

{

printf ("数据文件 IN35.DAT 不能打开!\n\007 ");

return;

}

SortCharD();

WriteDat();

}

int ReadDat(void)

{

FILE *fp;

int i=0;

char *p;

if((fp=fopen("IN35.DAT","r"))==NULL)

return 1;

while (fgets(xx[i],80,fp)!=NULL)

{

p=strchr(xx[i],'\n');

if (p) *p=0;

i++;

}

maxline=i;

fclose(fp);

return 0;

}

void WriteDat()

{

FILE *fp;

int i;

clrscr();

fp=fopen("OUT35.DAT","w");

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

{

printf ("%s\n",xx[i]);

fprintf(fp,"%s\n',xx[i]);

}

fclose(fp);

}


正确答案:void SortCharD() { int ijkstr1; char ch; for (i=O;imaxline;i++) { str1=strlen(xx[i]); /*求各行的长度*/ for(j=0;jstr1-1;j++) /*对字符按从大到小的顺序进行排序*/ for(k=j+1;kstr1;k++) if (xx[i][j]xx[i][k]) { ch=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=ch; } } }
void SortCharD() { int i,j,k,str1; char ch; for (i=O;imaxline;i++) { str1=strlen(xx[i]); /*求各行的长度*/ for(j=0;jstr1-1;j++) /*对字符按从大到小的顺序进行排序*/ for(k=j+1;kstr1;k++) if (xx[i][j]xx[i][k]) { ch=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=ch; } } } 解析:本题考查的知识点如下:
(1) 循环结构的嵌套。
(2) 字符的大小比较。
(3) 字符排序。
本题以行为单位对文章进行处理,首先要确定每一行中字符的个数。这个操作可使用字符串处理函数strlen(char*str)来完成。对字符从大到小排序依据的是字符的ASCII码,在C语言中,字符量可参与任何整型运算,所以可以直接使用比较运算符进行比较。排序使用前面介绍的“选择排序法”。最后使用循环结构对文章中的每一行都进行以上的操作。