搜档网
当前位置:搜档网 › 上机填空题41-44

上机填空题41-44

41

题目:

请补充main函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。

例如,输入:-12345678,结果为:12345678。

注意:部分源程序如blank.c给出。

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

#include

#include



main()

{

long int n;

clrscr() ;

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

scanf(___1___);

printf("****** the origial data ********\n");

if(n<0)

___2___;

printf("\n\n");

printf(___3___);

printf("\n");

}





42

题目:

请补充main函数,该函数的功能是:从字符串str中取出所有数字字符,并分别计数,并把结果保存在数组b中并输出,把其它字符保存在b[10]。

例如,当str1="de123456789abc0908"时,结果为:0:2 1:1 2:1 3:1 4:1 5:1 6:1 7:1 8:2 9:2 other character:5。

注意:部分源程序如blank.c给出。

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

#include

#include



main()

{

int i,b[11];

char *str="de123456789abc0908";

char *p=str;

clrscr() ;

printf("****** the origial data ********\n");

puts(str);

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

b[i]=0;

while(*p)

{

switch(___1___)

{

case '0':b[0]++;break;

case '1':b[1]++;break;

case '2':b[2]++;break;

case '3':b[3]++;break;

case '4':b[4]++;break;

case '5':b[5]++;break;

case '6':b[6]++;break;

case '7':b[7]++;break;

case '8':b[8]++;break;

case '9':b[9]++;break;

___2___;

}

___3___;

}

printf("****** the result ********\n");

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

printf("\n%d:%d",i,b[i]);

printf("\nother character:%d",b[i]);

printf("\n");

}





43

题目:

请补充fun函数,该函数的功能是:按‘0’到‘9’统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。

例如,输入:"x=1123.456+0.909*bc",结果为:1=2,3=1,5=1,7=0,9=2。

注意:部分源程序如blank.c给出。

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

#include

#include

#define N 1000



void fun(char *tt,int num[])

{

int i,j;

int bb[10];

char *p=tt;

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

{

num[i]=0;


bb[i]=0;

}

while (___1___)

{

if(*p>='0'&&*p<='9')

___2___;

p++;

}

for(i=1,j=0;i<10;i=i+2,j++)

___3___;

}

main()

{

char str[N];

int num[10], k ;

clrscr() ;

printf("\nPlease enter a char string:");

gets(str);

printf("\n*******The original string******\n");

puts(str);

fun(str,num);

printf("\n*******The number of letter******\n");

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

{

printf("\n");

printf("%d= %d ",2*k+1,num[k]);

}

printf("\n");

return;

}





44

题目:

请补充fun函数,该函数的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放在到c数组,形成一个新的字符串。

例如,若a中的字符串为aBCDeFgH,b中的字符串为ABcd,则c中的字符串应为:aBcdeFgH。

注意:部分源程序如blank.c给出。

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

#include

#include



void fun(char *p,char *q,char *c)

{

int k=___1___;

while(___2___)

{

if(*p<*q)

c[k]=*q;

else

c[k]=*p;

if(*p)

p++;

if(*q)

q++;

k++;

}

}

main()

{

char a[10]="aBCDeFgH",b[10]="ABcd",c[80]={'\0'};

fun(a,b,c);

printf("The string a:");

puts(a);

printf("The string b:");

puts(b);

printf("The result:");

puts(c);

}

走进淘宝,时时刻刻都充满关怀和希望

 


解答

41

分析:

第一个填空处要注意输入的是一个长整数,所以要使用"%ld"格式。另外,这个长整数保存在n变量中,所以写&n。

第二个填空处根据题目要求如果这个数是负数,则取它的绝对值,所以取负数的相反数。

第三个填空处输出n保存的长整数的值,所以填写"%ld",n。

程序注解如下:

#include

#include



main()

{

long int n;

/* clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容 */

/* clrscr函数定义在conio.h中,所以需要#include */

clrscr() ;

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

/* 由于输入一个长整数,所以使用%ld */

scanf("%ld",&n);

printf("****** the origial data ********\n");

/* 如果是负数,则取它的正数 */

if(n<0)

n=-n;

printf("\n\n");

/* 输出n变量保存的长整数值 */

printf("%ld",n);

printf("\n");

}





42

分析:

题目要求从字符

串str中取出所有数字字符,并分别计数,并把结果保存在数组b中并输出,把其它字符保存在b[10]。程序使用p指针首先指向str字符串第一个字符,然后使用while循环将p指针不断往后移动,判断p指针在移动过程中指向的每一个字符,然后将对应的b数组中的成员增加一。

程序注解如下:

#include

#include



main()

{

int i,b[11];

char *str="de123456789abc0908";

/* p指针指向str字符串第一个字符 */

char *p=str;

/* clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容 */

/* clrscr函数定义在conio.h中,所以需要#include */

clrscr() ;

printf("****** the origial data ********\n");

/* puts函数的作用是在输出窗口中输出参数str的内容 */

/* puts函数定义在stdio.h中,所以需要#include */

puts(str);

/* 将保存个数的b数组各成员初始化为0 */

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

b[i]=0;

/* while(*p)是while(*p!= '\0')的简写方式 */

/* while循环逐个检查p指针指向的字符,同时p指针不断向后移动 */

while(*p)

{

/* 判断p指针指向的字符是哪种字符 */

switch(*p)

{

case '0':b[0]++;break;

case '1':b[1]++;break;

case '2':b[2]++;break;

case '3':b[3]++;break;

case '4':b[4]++;break;

case '5':b[5]++;break;

case '6':b[6]++;break;

case '7':b[7]++;break;

case '8':b[8]++;break;

case '9':b[9]++;break;

/* 除了以上情况,剩下的就是其他字符了,所以b[10]加一 */

/* 根据题意,其他字符的个数保存在b[10] */

default: b[10]++;

}

/* 检查p指针当前指向的字符之后,p指针往后移动,以便判断下一个字符 */

p++;

}

printf("****** the result ********\n");

/* 输出各个数字字符及其对应的个数 */

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

printf("\n%d:%d",i,b[i]);

/* 输出其他字符以及对应的个数 */

printf("\nother character:%d",b[i]);

printf("\n");

}







43

分析:

题目要求在fun函数中按‘0’到‘9’统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。为了实现以上要求,程序采用了以下思路。

首先定义了两个数组,即num数组和bb数组。bb数组是用于存放‘0’到‘9’10个数字字符在tt字符串中出现的个数,而num数组则只存放‘0’到‘9’中奇数数字字符各自出现的次数。为什么要定义bb数组呢?关键之处在于程序使用p指针在while循环中移动从而逐个检查tt字符串中的每一个字符。如果发现p指针所

指的字符为数字字符,则在bb数组对应的成员加一。例如发现p指针所指的字符为'8',则将bb[8]增加一。如果发现p指针所指的字符为'0',则将bb[0]增加一。当p指针检查完tt字符串中所有字符,bb数组bb[0]至bb[9]10个成员分别保存了tt字符串中'0'至'9'10个数字字符的个数。最后,从bb数组中提取奇数字符的个数复制到num数组就可以达到题目的要求。

在程序中,需要判断某一个字符是否是非数字字符还是数字字符。判断方法就是检查该字符的ASCII码是否大于"0"字符的ASCII码而小于"9"的ASCII码。也就是说只要某字符的ASCII码值在"0"字符和"9"字符两个ASCII码值之间,该字符就是数字字符。

ASCII全称是美国标准信息交换码(American Standard Code for Information Interchange)。在这张表中,小写字母"0"的ASCII码值为48,小写字母"1"的ASCII码值为49,小写字母"2"的ASCII码值为50,后面的数字字符的ASCII码值依次类推,最后的"9"的ASCII码值为57。所有的数字字符在ASCII码表中是按顺序排列的,它们在ASCII表的码值开始于48,结束于57。

而根据C语言的语法,判断两个字符之间的大小实际上是比较两个字符在ASCII表中的码值大小。例如"7"字符大于"6"字符,因为"7"的ASCII码值为55,"6"的ASCII码值为54,"7"的ASCII码值大于"6"的ASCII码值。使用C语言描述就是'7'>'6'这个表达式成立。

综上所述,判断某个字符是否为数字字符只要判断该字符的ASCII码值是否在"0"和"9"之间即可。如果在这范围之内,该字符就是数字字符,否则不是。

程序注解如下:

#include

#include

#define N 1000



/* fun函数统计tt字符串中奇数数字字符各自出现的次数,结果保存在数组num中 */

void fun(char *tt,int num[])

{

int i,j;

int bb[10];

/* p指针指向tt字符串第一个字符,准备在循环中往后移动 */

char *p=tt;

/* 作为保存个数的num数组和bb数组各成员初始化为0 */

/* num数组将要保存'0'至'9'10个数字字符的个数*/

/* bb数组将要保存'0'至'9'之间5个奇数数字字符的个数*/

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

{

num[i]=0;

bb[i]=0;

}

/* while (*p)是while (*p!= '\0')的简写方式 */

while (*p)

{

/* 判断p指针当前指向的字符的ASCII值是否在'0'和'9'的ASCII值之间 */

/* 也就是判断p指针当前指向的字符是否为数字字符 */

if(*p>='0'&&*p<='9')

/* 如果是数字字符,则将bb数组中对应的成员增加一 */

/* *p-'0'取得p指针指向的数字字符与'0'之间的差距 */

bb[*p-'0']++;

/* p指针向后移动一个字符位置 */

p++;

}

/* 将奇数位置的数字字

符的个数复制到num数组中 */

/* 也就是将奇数数字字符各自出现的次数复制到num数组中,达到题目要求 */

for(i=1,j=0;i<10;i=i+2,j++)

num[j]=bb[i];

}

main()

{

char str[N];

int num[10], k ;

/* clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容 */

/* clrscr函数定义在conio.h中,所以需要#include */

clrscr() ;

printf("\nPlease enter a char string:");

/* gets函数的作用是接收键盘输入的字符串,将其放入str参数中 */

/* gets函数定义在stdio.h中,所以需要#include */

gets(str);

printf("\n*******The original string******\n");

/* puts函数的作用是在输出窗口中输出参数str的内容 */

/* puts函数定义在stdio.h中,所以需要#include */

puts(str);

fun(str,num);

printf("\n*******The number of letter******\n");

/* 输出奇数和保存在num数组中的各个奇数出现的次数*/

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

{

printf("\n");

printf("%d= %d ",2*k+1,num[k]);

}

printf("\n");

return;

}







44

分析:

此题目的关键之处就是如何判断两个字符的大小。根据C语言的语法,两个字符进行比较大小实际上是比较这两个字符的ASCII码的大小。题目的程序使用while循环逐一检查两个字符串a和b。在fun函数中,p指针和q指针分别指向字符串a和b的第一个字符。

程序注解如下:

#include

#include



void fun(char *p,char *q,char *c)

{

/* k指示数据放入c数组的位置,由于数组从0开始的,所以k初始值设置为0 */

int k=0;

/* while(*p || *q)是while(*p!= '\0' || *q!= '\0')的简写方式 */

/* 只要p、q之间某个指针移动到字符串结尾处就结束循环 */

while(*p || *q)

{

/* 比较p、q两个指针当前所指的字符,将大的字符放入c数组 */

if(*p<*q)

c[k]=*q;

else

c[k]=*p;

/* if(*p)是if(*p!= '\0')的简写方式 */

/* p指针是否移动到了字符串结束之处,如果不是,p指针往后移动 */

if(*p)

p++;

/* q指针是否移动到了字符串结束之处,如果不是,q指针往后移动 */

if(*q)

q++;

/* c数组中放入一个新字符之后,指示放入位置的k需要增加一 */

/* 这样才能指示下一个存放位置 */

k++;

}

}

main()

{

char a[10]="aBCDeFgH",b[10]="ABcd",c[80]={'\0'};

fun(a,b,c);

printf("The string a:");

/* puts函数的作用是在输出窗口中输出参数的内容 */

/* puts函数定义在stdio.h中,所以需要#include */

puts(a);

prin

tf("The string b:");

puts(b);

printf("The result:");

puts(c);

}

相关主题