21 、函数fun的功能是:不断从终端读入整数k ,用变量a统计大于0的个数 ,用变量b来统计小于0的个数 ,当输入0时结束输入 ,并通过形参px和py把统计的数据传回主函数进行输出 。
注意:部分源程序给出如下 。请勿改动函数main()和其他函数中的任何内容 ,仅在fun()函数的横线上填入所编写的若干表达式或语句 。
【1】a=0,b=0,k
【2】k!=0 (或k)
【3】scanf("%d",&k)
解析:函数中有3个局部变量 ,且a和b需要赋初值0 ,因此 ,【1】处填写“a=0,b=0,k ” 。循环输入数据的结束条件为K==0 ,故【2】处填写“k!=0 ” 。循环中处理了输入的数据后 ,需要再输入下一个数据 ,故【3】处填写“scanf("%d",&k) ” 。
参考答案及解析
22 、请补充main()函数 ,该函数的功能是:输入两个正整数num1和num2,求这两个数的最大公约和最小公倍数 。
例如 ,若输入的两个正整数为12 ,24,则它们的最大公约数为12 ,最小公倍数为4 。
注意:部分源程序给出如下 。请勿改动main()函数和其他函数中的任何内容 ,仅在main()函数的横线上填入所编写的若干表达式或语句 。
#include <stdio.h>
int main()
{
int a,b,num1,num2,t;
printf("\nInput two numbers:\n");
scanf("%d %d",&num1,&num2);
a=num1;
b=num2;
while (________) //【1】
{
t=________; //【2】
a=b;
b=t;
}
printf("Greatest common divisor:%d\n",a);
printf("Least common multiple:%d\n",________); // 【3】
return 0;
}
【1】b!=0
【2】 a%b
【3】num1*num2/a
解析:采用辗转相除法求两个整数a和b的最大公约数 。显然t=a%b ,因此【2】处填写“a%b ” ,由于程序中a=b ,b=t ,且最大公约数保存在a中 ,则结束条件为b==0 ,因此【1】处填写“b!=0 ” 。【3】处填写求最小公倍数的式子“num1*num2/a ”。
参考答案及解析
23 、请补充main()函数 ,该函数的功能是:如果数组arr的前一个元素比后一个元素小 ,则把它保存在数组bb中并输出 。
例如 ,若数组中的元素为:“40 ,68,62 ,33 ,35,52 ,48 ,95 ,66 ,73 ” ,则输出:“40 ,33 ,35 ,48 ,66 ” 。
注意:部分源程序给出如下。请勿改动函数main()和其他函数中的任何内容 ,仅在main()函数的横线上填入所编写的若干表达式或语句 。
#include <stdio.h>
#define M 10
int main()
{
int i,n=0;
int arr[M]={40,68,62,33,35,52,48,95,66,73};
int bb[M];
for (i=0; i<________;i++) // 【1】
if (arr[i]<arr[i+1])
________; // 【2】
printf("\n***displaybb***\n");
for (i=0;i<n;i++)
printf("bb[%d]=%2d ",________); //【3】
return 0;
}
【1】M-1
【2】bb[n++]=arr[i]
【3】i,bb[i]
解析:由整个for循环可知 ,变量i为数组arr的下标 ,题目中要求取出前一个元素比后一个元素小的元素,所以只需要判断前M-1个元素即可 。因此 ,【1】处填“M-1 ”;如果第i个元素比第i+1个元素小 ,将第i个元素放入数组bb中,因此 ,【2】处填“bb[n++]=arr[i] ” 。循环执行完后 ,要输出数组bb中的每一个元素的下标及元素值 。因此 ,【3】处填“i ,bb[i] ” 。
参考答案及解析
24 、函数fun的功能是:根据所给的年 、月 、日 ,计算出该日是这一年的第几天 ,并作为函数值返回 。
例如 ,若输入:2019 10 1 ,则程序输出:2019年10月1日是该年的第274天 。
注意:部分源程序给出如下 。请勿改动函数main()和其他函数中的任何内容 ,仅在fun()函数的横线上填入所编写的若干表达式或语句 。
#include <stdio.h>
int fun(int year,int month,int day)
{
int table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int s=0,i;
for (i=1;i<________; i++) // 【1】
s=s+________; // 【2】
s=s+day;
if ((________________) && month>2) // 【3】
s=s+1;
return s;
}
int main()
{
int year,month,day,days;
scanf("%d%d%d",&year,&month,&day);
days=fun(year,month,day);
printf("%d年%d月%d日是该年第%d天 。\n",year,month,day,days);
return 0;
}
【1】month
【2】table[i]
【3】year%4==0 && year%100!=0 || year%400==0
解析:为计算当前日期是该年的第几天 ,需要先累计前month-1个月的总天数 ,故【1】处填写“month ” ,【2】处填写第i月的天数“table[i]” 。如果是闰年,需要加1天 ,故【3】处填写闰年的判断条件“year%4==0 && year%100!=0 || year%400==0 ” 。
参考答案及解析
25 、函数fun()的功能是:计算并输出给定10个数的方差。n个数的方差的计算公式为:
(其中 ,x为n个数据的平均值)
例如,给定的10个数为12.0 ,9.0 ,26.0 ,5.0 ,6.0 ,31.0 ,9.0 ,3.0 ,8.0 ,18.0 ,输出为S=8.877500 。
注意:部分源程序给出如下 。请勿改动函数main()和其他函数中的任何内容 ,仅在fun()函数的横线上填入所编写的若干表达式或语句。
#include <stdio.h>
#include <math.h>
double fun(double x[],int n)
{
int i;
double fc,avg=0.0,sum=0.0,abs=0.0;
for (i=0;i<n;i++)
sum+=________; // 【1】
avg=sum/n;
for (i=0;i<n;i++)
abs+=________; // 【2】
fc=________; // 【3】
return fc;
}
int main()
{
double x[10]={12.0,9.0,26.0,5.0,6.0,31.0,9.0,3.0,8.0,18.0};
printf("s=%lf\n",fun(x,10));
return 0;
}
【1】x[i]
【2】(x[i]-avg)*(x[i]-avg)
【3】sqrt(abs/n)
解析:由函数fun()可知 ,变量sum中存放n个数的和,因此 ,【1】处填“x[i] ”;然后求其平方差 ,因此,【2】处填“ (x[i]-avg)*(x[i]-avg)”;后求n个数的方差 ,因此 ,【3】处填"sqrt(abs/n) ” 。
参考答案及解析
26 、函数fun()的功能是求n的阶乘 。
注意:部分源程序给出如下 。请勿改动函数main()和其他函数中的任何内容 ,仅在fun()函数的横线上填入所编写的若干表达式或语句 。
#include <stdio.h>
long fun(int n)
{
if (________n>1) // 【1】
return n*fun(________n-1); // 【2】
else if (________n==1) // 【3】
return 1;
}
int main()
{
int n=10;
printf("%d!=%ld\n",n,fun(n));
return 0;
}
【1】n>1
【2】n-1
【3】n==1
解析:本题求阶乘是由函数递归调用来实现的 。阶乘公式为N!=N*(N-1)! ,因此【1】处填“n>1 ”;由递归的性质可知【2】处填“n-1 ”;直到N=1时结束递归调用 ,因此【3】处填“n==1 ” 。
参考答案及解析
27 、给定程序的功能是计算score数组中m个人的平均成绩aver ,将低于aver的成绩放在数组below中 ,通过函数名返回人数 。
例如 ,当score[]={10 ,20 ,30 ,40 ,50,60 ,70 ,80,90} ,m=9时 ,函数返回的人数应该是4 ,below={10 ,20 ,30 ,40} 。
注意:部分源程序给出如下 。请勿改动main()函数和其他函数中的任何内容 ,仅在横线上填入所编写的若干表达式或语句 。
#include <stdio.h>
int fun(int score[],int m,int below[])
{
int i,j=0;
float aver=0.0;
for (i=0; i<m;i++)
aver+=________score[i]; // 【1】
aver/=(float)m;
for (i=0;i<m;i++)
if (score[i]<aver)
________ =score[i]; // 【2】
return j;
}
int main()
{
int i,n,below[9];
int score[9]={10,20,30,40,50,60,70,80,90};
n=fun(score,9,below);
printf("Below the average score are:%d\n",n);
for (i=0; i<n;i++)
printf("%d ",________below[i]); // 【3】
return 0;
}
【1】score[i]或*(score+i)
【2】below[j++]
【3】below[i]或*(below+i)
解析:fun()函数的功能是返回低于平均成绩的人数 ,通过for循环遍历数组score ,求和存入变量aver ,因此第【1】处填“score[i] ”或“*(score+i) ”;然后计算出平均值 。第二个for循环将低于平均成绩的数据赋值数组below ,同时需记录所赋数据的个数j ,因此第【2】处填“below[j++] ” 。在主函数中输出低分考生个数,n值即fun()函数返回值也就是低分考生的人数值。后利用循环输出below中的结果 。因此第【3】处填“below[i] ”或“*(below+i) ”
参考答案及解析
28 、给定程序的功能是:把一个字符串中的所有小写字母字符全部转换成大写字母字符 ,其他字符不变 ,结果保存原来的字符串中 。
例如,当str[M]="abcdef123ABCD" ,结果输出:"ABCDEF123ABCD"。
注意:部分源程序给出如下 。请勿改动main()函数的任何内容 ,仅在横线上填入所编写的若干表达式或语句 。
#include <stdio.h>
#define M 80
int main()
{
int j;
char str[M]="abcdef123ABCD";
char *pf=str;
printf("***originalstring***\n");
puts(str);
________; // 【1】
while(*(pf+j))
{
if(*(pf+j)>=a&&*(pf+j)<=z)
{
*(pf+j)= ________ ; // 【2】
}
________; // 【3】
}
printf("****newstring****\n");
puts(str);
return 0;
}
【1】j=0
【2】*(pf+j)-32
【3】j++
解析:由程序中可知 ,变量j为字符数组的下标 ,其初始值为0 。因此【1】处填“j=0 ”;大写字母的ASCIl码值比小写字母的ASCII码值小32 ,要将小写字母变为大写字母 ,因此 ,【2】处填“*(pf+j)-32 ”;要将字符串数组中的所有小写字母变为大写字母 ,需要检查其中的每一个字符 ,因此 ,【3】处填“j++ ” 。
参考答案及解析
29 、str是一个由数字和字母字符组成的字符串 ,由变量num传入字符串的长度 。
函数proc()的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中 ,函数返回数组bb的长度 。
例如,str="abc123de45f967" ,结果为:1234567 。
注意:部分源程序给出如下 。请勿改动main()函数和其他函数中的任何内容 ,仅在函数proc()的横线上填入所编写的若干表达式或语句 。
#include <stdio.h>
#define M 80
int proc(char str[],int bb[],int num)
{
int i,n=0;
for (i=0; i<num; i++)
{
if (________________) // 【1】
{
bb[n]= ________________; // 【2】
n++;
}
}
return ________; // 【3】
}
int main()
{
char str[M];
int bb[M];
int num=0,n,i;
gets(str);
while (str[num])
num++;
n=proc(str,bb,num);
printf("bb=");
for (i=0; i<n; i++)
printf("%d",bb[i]);
printf("\n");
return 0;
}
【1】str[i]>=0&&str[i]<=9
【2】str[i]-0
【3】n
解析:题目中要求把字符串str中的数字字符转换成数字并存放到整型数组bb中 。首先,应判断字符串str中每个字符是否是数字字符 。因此 ,【1】处填“str[i]>=0&&str[i]<=9”将每一个数字字符转化为数字放在整型数组bb中 ,因此 ,【2】处填“str[i]-0 ”;由函数proc()可知 ,变量n中存放整型数组bb中的元素个数 ,要返回到主函数当中 ,因此 ,【3】处填“n ” 。
参考答案及解析
30 、函数fun的功能是:在有n个元素的结构体数组std中 ,查找有不及格科目的学生 ,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。例如 ,主函数中给出了4名学生的数据 ,则程序运行的结果为:
学号:N1002 学号:N1006
共有2位学生有不及格科目
注意:部分源程序给出如下 。请勿改动函数main()和其他函数中的任何内容 ,仅在fun()函数的横线上填入所编写的若干表达式或语句 。
#include <stdio.h>
typedef struct
{
char num[8];
double score[2];
}STU;
int fun(STU std[],________) // 【1】
{
int i,k=0;
for (i=0;i<n;i++)
if (________________) // 【2】
{
k++;
printf("学号:%s ",std[i].num);
}
return ________; // 【3】
}
int main()
{
STU std[4]={"N1001",76.5,82.0, "N1002",53.5,73.0, "N1005",80.5,66.0, "N1006",81.5,52.0};
printf("\n共有%d位学生有不及格科目。\n",fun(std,4));
return 0;
}
【1】int n
【2】std[i].score[0]<60 || std[i].score[1]<60
【3】k
解析:由main中的调用可知,函数fun有两个参数 ,第2个参数为结构体数组中元素个数 ,故【1】处填写形参定义“int n” 。【2】处填写判断条件,两门功课中至少有1门不及格 。【3】处返回不及格人数k 。
参考答案及解析
声明:本站所有文章 ,如无特殊说明或标注 ,均为本站原创发布 。任何个人或组织 ,在未征得本站同意时 ,禁止复制、盗用 、采集 、发布本站内容到任何网站、书籍等各类媒体平台 。如若本站内容侵犯了原著者的合法权益 ,可联系我们进行处理 。