1、填空题1. 请补充main函数,该函数的功能是:把一个字符串中的所有小写字母字符全部转换成大写字母字符,其他字符不变,结果保存原来的字符串中。
例如:当str[N]“123 abcdef ABCDEF!”,结果输出:
“123ABCDEFABCDEF!”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define N 80
void main()
{
int j;
char str[N]="123abcdef ABCDEF!";
char *pf=str;
clrscr();
printf("*** original string ***\n");
puts(str);
;
while(*(pf+j)).
{
if(*(pf+j)>='a'&&* (pf+j)<='z')
{
*(pf+j)=
;
j++;
}
else
;
}
printf("****** new string ******\n");
puts(str);
system("pause");
}
【1】j=0 【2】*(pf+j)-32 【3】j++
[解析] 填空1:变量j声明时没有初始化,而后面程序用到j,所以在这里对j初始化为0。填空2:将小写字母转换为对应的大写字母的方法是,小写字母的ASCII码减去32,得到对应的大写字母的ASCII码。填空3:如果当前字符不是小写字母,则不做任何处理,使指针指向下一个字符,准备进行判断。
2、改错题1. 下列给定程序中,函数fun()的功能是逐个比较a,b两个字符串对应位置中的字符,把ASCII值小或相等的字符依次存放到c数组中,形成一个新的字符串。
例如:a中的字符串为fshADfg,b中的字符串为sdAEdi,则c中的字符串应为fdAADf。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
#include <strinq.h>
void fun(char *p,char *q,char *c)
{ int k=0;
while(*p || *q)
/**********found**************/
{ if (*p<=*q)
c[k]=*q;
else c[k]:*p;
if(*p) p++;
if(*q) q++;
/**+**********found**************/
k++
}
}
main()
{char a[10]="fshADfg",b[10]="sdAEdi",
c[80]={'\0');
fun(a,b,c);
printf("The string a:");puts(a);
printf("The string b:");puts(b);
printf("The result:");puts(c);
}
(1)错误:{if(*P<=*q) 正确:{if(*p>=*q)
(2)错误:k++ 正确:k++;
[解析] 错误1:依题意,把ASCII值小或相等的字符存放到c数组中,故if语句的关系运算符应为“>=”。错误2:C语言规定,每个语句要用分号结束。
3、编程题1. 请编写函数fun,其功能是将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。
例如,当a=16,b=35,调用该函数后,c=5361。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
void fun(int a,int b/long*c)
{
}
main()
{
int a,b;
long c;
clrscr();
printf("Input a,b;");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("The result is:%ld\n",c);
}
void fun(int a,int b,long*c)
{
*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;
}
[解析] 语句“*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;”是将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。注意“/”和“%”的用法。