程序填空题一1. 下面C语言程序将两个递增有序的数值a和b 合并一个数组c,并保持递增次序,最后输出数组c. #include < stodio.h>#define M6#define N5main( ){int a[M]={1,3,5,7,9,11} b[N]={2,4,6,8,10}int c[M+N]int i ,j, k;i=j=k=0while( 1 )if a[i]<b[j]c[k++]=a[i++];else c[k++]=b[j++];while( 2 )c[k++]=a[i++];while(j<N)c[k++]=( 3 )for(k=0;k<( 4 );k[++])printf(%dxt,c[k]; )其中(1)(2)(3)(4)处分别填一数据,使程序达到其功能。
答案:1:i<M&&j<N2:i<M;3:b[j++];4:M+N2.下面h函数的功能是计算如下数学函数H的值。
请填空。
double fgh(double(*f)(double a),double (* g)(double b),double x,double y){return(【1】);}double h(double a,double b)return(fgh(sin,cos,a,b)* fgh(【2】));}解:(1)(*f)(x+y)/(*g)(y-x)(2)cos,sin,a,b[解析]本题考察的是函数的声明。
要填写的两个空都出现在return语句中,所以要仔细分析函数的返回值。
本题的第二个空相对要容易一些,只要根据题干和乘号前面的调用语句对比一下即可得到调用语句的四个参数。
第一个空相对要难一些,函数fgh定义时用到了函数指针(*f)和(*g)是为了增加函数的灵活性。
根据函数h的定义以及题干要求,可以看出函数fgh应该表示的是乘号两边的某一项。
(*f)和(*g)用来表示sin或cos,参数x 和y的加减法运算作为sin或cos函数的参数,故应填写(*f)(x+y)/ (*g)(y-x)。
3.下面程序的作用是将以下给出的字符按其格式读入数组ss中,然后输出行、列号之和为3的数组元素,请在____处填入正确内容。
A a fc B de b cg f Dmain(){static char ss[4][3]={'A','a','f','c','B','d','e','b','C','g','f','D'};int x,y,z;for(x=0;【1】;x++)for(y=0;【2】;y++){z=x+y;if(【3】)printf("%c\n",ss[x][y]);}}解:(1)x<4(2)y<3(3)z==3[解析]本题应用穷举法找到满足要求的值。
第一个空:变量x为行数所以是x<4;第二个空:变量y为列数所以是y<3;第三个空:判断x+y是否为3所以是z==3。
4.下面程序的作用是将以下给出的字符按其格式读入数组ss中,然后输出行、列号之和为3的数组元素,请在____处填入正确内容。
A a fc B de b cg f Dmain(){static char ss[4][3]={'A','a','f','c','B','d','e','b','C','g','f','D'};int x,y,z;for(x=0;【1】;x++)for(y=0;【2】;y++){z=x+y;if(【3】)printf("%c\n",ss[x][y]);}}解:(1)x<4(2)y<3(3)z==3[解析]本题应用穷举法找到满足要求的值。
第一个空:变量x为行数所以是x<4;第二个空:变量y为列数所以是y<3;第三个空:判断x+y是否为3所以是z==3。
程序填空题二【3.1】下面程序的功能是不用第三个变量,实现两个数的对调操作。
#include <stdio.h>main(){ int a,b;scanf("%d%d",&a,&b);printf("a=%d,b=%d\n",a,b);a= ①;b= ②;a= ③;printf("a=%d,b=%d\n",a,b);}答案: ① a+b ② a-b ③ a-b 或者① a^b ② b^a ③ a^b【3.2】下面程序的功能是根据近似公式:π2/6≈ 1/12+1/22+1/32+ …… +1/n2,求π值。
#include <math.h> /*数学函数数包含在头函数math.h 中*/double pi(long n){ double s=0.0;long i;for(i=1;i<=n;i++)s=s+ ①;return( ② );}答案:① 1.0/(float)(i*i) ② sqrt(6*s) /* sqrt()是求平方根函数*/【3.3】下面程序的功能是计算1-3+5-7+ …… -99+101的值。
main(){ int i,t=1,s=0;for(i=1;i<=101;i+=2){ ①;s=s+t;②;}printf("%d\n",s);}答案:① t=t*i ② t=t>0?-1:1【3.4】下面程序的功能是从键盘上输入若干学生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。
main(){ float x,amax,amin;scanf("%f",&x);amax=x;amin=x;while( ① ){ if(x>amax) amax=x;if( ② ) amin=x;scanf("%f",&x);}printf("\namax=%f\namin=%f\n",amax,amin);}答案: ① x>=0 ② x<amin【3.5】下面程序的功能是将形参x的值转换为二进制数,所得的二进制数放在一个一维数组中返回,二进制数的最低位放在下标为0的元素中。
fun(int x,int b[]){ int k=0,r;do{ r=x% ①;b[k++]=r;x/= ②;}while(x);}答案: ① 2 ② 2【3.6】下面程序的功能是输出100以内的个位数为6、且能被3整除的所有数。
main(){ int i,j;for(i=0;①;i++){ j=i*10+6;if( ② ) countinue;printf("%d",j);}}答案:① i<=9 ② j%3!=0说明:100以内的个位数为6的数有10个,即6、16、26、36、46、56、66、76、86、96【3.7】下面程序的功能是用辗转相除法求两个正整数m和n的最大公约数。
hcf(int m,int n){ int r;if(m<n){ r=m;①;n=r;}r=m%n;while( ② ){ m=n;n=r;r=m%n;}③;}答案:① m=n ② r!=0 ③ return(n)【3.8】下面程序的功能是使用冒泡法对输入的10个浮点数从小到大进行排序。
排好序的10个数分两行输出。
程序如下:#include <stdio.h>main(){ ①;int i,j;printf("Input 10 numbers please\n");for(i=0;②;i++ )scanf("%f", &a[i]);printf("\n");for(i=2;③;i++ )for(j=0;④;j++ )if( ⑤ ){ x=a[j];⑥;a[j+1]=x;}printf("The sorted 10 numbers;\n");for(i=0;⑦;i++ ){ if( ⑧ )printf("\n");printf("%f\t",a[i]);}printf("\n");}答案:① float a[10],x ② i<=9 ③ i<=8 ④ j<=9-i⑤ a[j]>a[j+1] ⑥ a[j]=a[j+1] ⑦ i<=9 ⑧i%5==0【3.9】下面程序的功能是读入20个整数,统计非负数个数,并计算非负数之和。
#include "stdio.h"main(){ int i,a[20],s,count;s=count=0;for(i=0;i<20;i++ )scanf("%d", ① );for(i=0;i<20;i++){ if(a[i]<0)②;s+=a[i];count++;}printf("s=%d\t count=%d\n",s,count);}答案:① &a[i] ② continue注释:①是基本概念,使用scanf函数输入数组元素的值。
当输入的元素值小于0时,应当跳过后面的语句,取下一个数,所以②要填入continue。
【3.10】下面程序的功能是删除字符串s中的空格。
#include <stdio.h>main(){ char *s="Beijing ligong daxue";int i,j;for(i=j=0;s[i]!='\0';i++)if(s[i]!= ' ') ①;else ②;s[j]= '\0';printf("%s",s);}答案:① s[j++]=s[i] ② s[j]=s[i]【3.11】下面程序的功能是将字符串s中所有的字符'c'删除。
请选择填空。
#include<stdio.h>main( ){ char s[80];int i,j;gets(s);for(i=j=0;s[i]!= '\0';i++ )if(s[i]!= 'c') ①;s[j]= '\0';puts(s);}答案:① s[j++]=s[i]【3.12】下面程序的功能是输出两个字符串中对应相等的字符。