1.填空题
下列给定程序中,函数fun()的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。
【答案】
【1】long d 【2】d%2==0
2.改错题
下列给定程序中,fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。
例如,给字符串s输入:AaaaBBb123CCccccD,则应输出结果:upper=6,lower=8。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include <conio.h>
#include <stdio.h>
void fun(char *s,int a,int b)
{
while(*s)
{
if(*s>='A'&&*s<='Z')
a++;
if(*s>='a'&&*s<='z')
b++;
s++;
}
}
main()
{
char s[100];
int upper=0,lower=0;
clrscr();
printf("\nPlease enter a string:");
gets(s);
fun(s,&upper,&lower);
printf("\nupper=%d lower=%d\n",upper,lower);
}
【答案】
第1处:void fun(char *s,int a,int b)应改为void fun(char *s,int *a,int *b)
第2处:a++;应改为(*a)++;
第3处:b++;应改为(*b)++;
【考点】函数定义、参数传递及指针运用。
【解析】
(1)由于main函数中调用的fun函数参数是按指针传递的,因此在fun函数的定义参数表中应将形参定义成指针,即将int a和int b分别改为int*a和int*b。
(2)因为a和b是指向upper和lower的两个指针,所以在执行a++和b++后,a、b不再指向upper和lower,而是分别指向upper和lower的下一个单元,而upper和lower的值不会发生变化。但程序要求upper和lower的值递增,因此必须使指针所指的变量发生变化,而不是指针自己变化。所以应改为:(*a)++;(*b)++;。
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |