最新2018年3月全国计算机等级考试二级C语言上机题库100套(最新光碟拷贝版)

时间:2019-05-14 19:28:46下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《最新2018年3月全国计算机等级考试二级C语言上机题库100套(最新光碟拷贝版)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《最新2018年3月全国计算机等级考试二级C语言上机题库100套(最新光碟拷贝版)》。

第一篇:最新2018年3月全国计算机等级考试二级C语言上机题库100套(最新光碟拷贝版)

最新最全的题库,刚买的光盘

2018年3月全国计算机等级考试 二级C语言上机题库100套

(从光碟拷贝出来的最完整版)

(可以拷贝在U盘里,然后ctrl+F搜索,百分百有答案,祝考试成功)

第一套

1.程序填空

给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。例如:当形参n的值为10 的时,函数返回:9.6125588。第一处 s=0;

第二处 for(i=1;i<=n;i++)第三处 s=s+(2.0*i-1)*(2.0*i+1)/(t*t);2.程序修改

给定程序MODI1.C中函数fun的功能是:统计substr所指字符串在str所指字符串中出现伯次数。/**found**/ for(i=0;str[i];i++)/**found**/ if(substr[k+1]==’’)3.程序设计

请编写一个函数fun,它的功能是:根据以下公式求JI的值(要求满足精度0.0005,即某项小于0.0005时停止送代):程序运行后,如果输入精度为0.0005,则程序输出为3.14…。double fun(double eps){ double s=1,t=1./3;int n=1;while(t>=eps){s+=t;n++;t=t*n/(2.0*n+1);} return(s*2.0);}

第二套

1.程序填空

给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序连接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。

第一处 free(q);第二处 q=p->next;第三处 q=q->next;2.程序修改

给定程序MODI1.C中函数fun的功能是:用选择法对数组中的n各元素按从小到大的顺序进行排序。/**found**/ p=j;/**found**/ p=i;3.程序设计

请编写一个fun函数,它的功能是:求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。void fun(int m,int *a,int *n){ int i;*n=0;

for(i=7;i<=m;i++)

if((i%7==0)||(i%11==0))a[(*n)++]=i;} 第三套

1.程序填空

函数fun的功能是:逆置数组元素是的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数组中数据的个数。第一处 for(i=0;i

给定程序MODI1.C中函数fun的功能是:将一个由八进制数字字符串组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。/**found**/ n=*p-‘0’;/**found**/ n=n*8+*p-‘0’;3.程序设计

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:函数返回指定学号的学生数据,指定的学生号在主函数中输入,若没有找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。(用于字符串比较的函数是strcmp)。STREC fun(STREC*a,char *b){

STREC c;Int i;

c.num[0]=’’;c.s=-1;

for(i=0;i

if(strcmp(a[i].num,b)==0){strcpy(c.num,a[i].num);c.s=a[i].s;break;} return c;}

第四套

1.程序填空

给定程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号:若不存在值为ch的结点,函数值返回0.第一处 while(p!=0)第1处max=min=a[i];第2处if(maxa[j])2 程序修改

给定程序MODI1.C中函数fun的功能是:用递归算法计算列中第n项的值。从第一项起,斐波拉契数列为:1、1、2、3、5、8、13、21、…… /**found**/ switch(g)/**found**/ case 1:return 1;case 2:return 1;3 程序设计

某学生的记录由学号、8门课程和平均分组成,学号和8门课程成绩已在主函数中给出。请编写函数fun,它的功能是;求出该学生的平均分放在记录的ave成员中。void fun(STREC *a){ int i;for(i=0;i

a->ave=a->ave+a->s[i];a->ave/=N } 第六十套 1 程序填空

给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素来。第1处 void fun(int)(*t)[N] 第2处 t[i][j]=t[i][j]+t[j][i];第3处 t[j][i]=0;2程序修改

给定程序MODI1.C中函数fun的功能是:计算函数值,F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)其中x和y的值不等,z和y的值不等。例如,当x的值为

9、y的值为

11、z的值为15时,函数值为-3.50。

/**found**/ #define FU(m,n)((m)/(n))

/**found**/ return(value);} 3程序设计

规定输入的字符串中只包含字母和*号。请编写函数fun ,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。void fun(char *a){ int j=0;char *p=a;while(*p=='*')p++;while(*p){ a[j++]=*p;p++;}

a[j]=0;}

第六十一套 1 程序填空

人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指出的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。

第1处if(std[i].year==year)

第2处 k[n++]=std[i];

第3处 return(n);1 程序修改

给定程序MODI1.C中函数fun的功能是:读入一个整数k(2≤k≤10000)打印它的所有质因子(即所有为素数的因子)。

/**found**/

IsPrime(int n)/**found**/ if(!(n%i))2 程序设计

已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a中。请编写给函数fun,函数的功能是:找出成绩最高的学生的记录,通过形参指针传回主函数(规定只有一个最高分),已给出函数的首部,请完成函数。

fun(STU a[],STU *s){

int i, max = a[0].s, j=0;for(i=1;i

max =a[i].s;

}

*s=a[j];} 第六十二套 1程序填空

给定程序中,函数fun的功能是:将N×N矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如:若N=3有下列矩阵: 1 4 7

交换后:

第二处if(p->data==ch)return n;第三处 k=fun(head,ch);2.程序修改

给定程序MODI1.C中函数fun的功能是:删除p所指字符串的所有空白字符(包括制表符、回车符及换行符)。输入字符串时用‘#’结束输入。/**found**/ for(i=0,t=0;p[i];i++)/**found**/ c[t]=’’;3.程序设计

请编写一个函数fun,将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。void fun(char *ss){ int i;for(i=1;i=’a’&&ss[i]<=’z’)ss[i]-=32;} } 第五套

1.程序填空

程序通过定义学生结构体数组,存储了若干个学生的学号、姓名和三门课的成绩。函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大排序)。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。第一处 struct student t;第二处 for(i=0;i0)2 程序修改

给定程序MODI1.C中函数fun的功能是:在p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向上顺序移动。/**found**/ q=p+i;/**found**/ while(q>p)3程序设计

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。int fun(STREC *a,STREC *b,int l,int h){int i,j=0;for(i=0;i=1&&a[i].s<=h)b[j++]=a[i];return j;} 第六套

1.程序填空

给定程序中,函数fun的功能是:将形参s所指定字符串中所有的字母字符顺序前移,其他字母顺序后

移,处理后字符串的首地址作为函数值返回。第一处 t[j]=s[i];j++;第二处 for(i=0;i

第三处 t[j+k]=0;2.程序修改

给定程序MODI1.C中函数fun的功能是:将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指定字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。/**found**/ while(*w)/**found**/ if(*r==*p)3.程序设计

函数fun的功能是:将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指定的数组中。

void fun(char *s,char t[])

{ int i,j=0;定程序MODI1.C中函数fun的功能是:读入一个整数k(2≤k≤10000)打印它的所有质因子(即所有为素数的因子)。

/**found**/

IsPrime(int n)/**found**/ if(!(n%i))3 程序设计

已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a中。请编写给函数fun,函数的功能是:找出成绩最高的学生的记录,通过形参指针传回主函数(规定只有一个最高分),已给出函数的首部,请完成函数。

fun(STU a[],STU *s)

for(i=0;i

1.程序填空

程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。函数fun的功能是将形参a所指结构体变量s中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。第一处 struct student *

fun(struct student*a)第二处 for(i=0;i<3;i++)a->score[i]+=1;第三处 return a;2.程序修改

给定程序MODI1.C中函数fun的功能是:从N

个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放在一个字符串数组中。

/**found**/ char *fun(char(*sq)[M])/**found**/ return sp;3.程序设计

函数fun的功能是:将a、b中的两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的十位和千位上。#include void fun(int a,int b,long *c){ *c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10;} 第八套

1.程序填空

函数fun的功能是:将形参观者工所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇书,则中间元素不动。

第一处 p=(n%2==0)?n/2:n/2+1;第二处 a[i]=a[p+i];第三处 a[p+i]=t;2.程序修改

给定程序MODI1.C中函数fun的功能是:把主函数中输入的三个数,最大的放在a中,最小的放在c中,中间的放在b中。/**found**/ float k;/**found**/ if(*a<*c)3.程序设计

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。

int fun(STREC *a,STREC *b){ int i,max=a[0].s,n=0;for(i=1;i

1.程序填空

给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值,(规定所有数均为正数),将所指数组中小于平均值的数据移至数据的前部,大于等于平均数的移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。第一处 for(i=0;i

av+=x[i]/N

第二处 y[j]=x[i];x[i]=-1;j++;} 第三处 i++;2.程序修改

给定程序MODI1.C中函数fun的功能是:统计字符串各元音字母(即:A、E、I、O、U)的个数。注意字母不分大小写。/**found**/ num[k]=0;/**found**/ switch(*s)3.程序设计

请编写函数fun,函数的功能是:求出二级数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。

int fun(int a [M][N]){

int tot=0,i,j;

for(i=0;i

tot +=a[0][i];tot +=a[M-1][i];

}定程序MODI1.C中函数fun的功能是:读入一个整数k(2≤k≤10000)打印它的所有质因子(即所有为素数的因子)。

/**found**/

IsPrime(int n)/**found**/ if(!(n%i))4 程序设计

已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a中。请编写给函数fun,函数的功能是:找出成绩最高的学生的记录,通过形参指针传回主函数(规定只有一个最高分),已给出函数的首部,请完成函数。

fun(STU a[],STU *s)

for(i=1;i

return tot;}

第十套

1.程序填空

程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。函数fun的功能是将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。

第一处 struct student fun(struct student a)

第二处 strcpy(a.name,”LiSi”);第三处 a.score[i]+=1;2程序修改

假定整数数列中的数不重复,并存放在数组中。给定程序MODI1.C中函数fun的功能是:删除数列中值为x的元素。N中存放的是数列中元素的个数。/**found**/ if(p==n)return-1’ /**found**/ a[i]=a[i+1];3.程序设计

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。

int fun(STREC *a,STREC *b){ int i,j=0,min=a[0].s;for(i=0;ia[i].s){ j=0;b[j++]=a[i];min=a[i].s;} else if(min==a[i].s)b[j++]=a[i];} return j;} 第十一套 1.程序填空

给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值,(规定所有数均为正数),将所指数组中大于平均值的数据移至数据的前部,小于等于平均数的移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。第一处 av=s/N;第二处 y[j++]=x[i];x[i]=-1;} 第三处 if(x[i]!=-1)仅供参考。

#include #define MAX100 int fun(int lim,int aa[MAX]){int i,j,k=0;for(i=2;i<=lim;i++){ for(j=2;j<=(i/2);j++)if(i%j==0)break;if(j>(i/2))aa[k++]=i;} return k;} 第十四套 1.程序填空

函数fun的功能是进行字母转换。若形参ch中小写英文字母,则转换成相应的大写英文字母;若形参ch中是大写英文字母,则转换成相应的小写英文字母;并将转换的结果作为函数值返回。

第一处 if((ch>=’a’)&&(ch<=’z’))第二处 return ch+’a’-‘A’

第三处 return ch;2.程序修改

给定程序MODI1.C中函数fun的功能是:给一维数组a输入任意四个整数并按下列的规律输出。例如输出1、2、3、4,程序输出一下方阵。

a)1 2 3 3 4 2 2 4 1 1 4 /**found**/ void fun(int *a)/**found**/ a[j]=a[j-1];3.程序设计

请编写函数fun,函数的功能是:计算并输出给定整数n的所有因子(不包过1和n本身)之和。规定n的值不大于1000.int fun(int n){

int s=0,i;

for(i=2;i

第十五套 1.程序填空

给定程序中,函数的功能是:把形参s所指字符串下标为奇数的字符右移到下一个奇书位置,最右边呗移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedg。

第一处 if(n%2==0)k=n-1;第二处 c=s[k];第三处 s[1]=c;2.程序修改

给定程序MODI1.C中函数fun的功能是:求 s=aa…aa—…—aaa—aa—a(此处aa…aa表示n个a,a和n的值在1至9之间)。/**found**/ long s=0,t=0;/**found**/ t=t/10;

3.程序设计

请编写一个函数void fun(char*tt,int pp[ ]),统计在tt所指字符串中‘a’至‘z’26个小写字母各自出现在的次数,并依次放在pp数组中。void fun(char*tt, int pp[ ]){

char *p=tt;int i;for(i=0;i<26;i++)pp[i]=0;while(*p){if(*p>=’a’&&*p<=’z’)pp[*p-‘a’]+=1;p++;} } 第十六套 1.程序填空

人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中编号为空串。

第1处 STU fun(STU *std, char *num)第2处 if(strcmp(std[i].num, num)= =0)第3处 return(std[i]);2.程序修改

给定程序MODI1.C中函数fun的功能是:从s所指字符串中,找出与t所指字符串相同的子串的个数作为函数值返回。/**found**/ r++;p++;/**found**/ if(*r= =0)3.程序设计

函数fun的功能是:将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指数组中。

#include #include void fun(char*s, char t[]){ int i, j=0;for(i=0;i

给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,形参s所指的字符串为:abcdef35adgh3kjsdf7。输出结果为:4。第1处 for(i=0;s[i]!=NULL;i++)第2处 if(s[i]>=’0’&&s[i]<=’9’)n++;第3处 *t=n;2.程序修改

给定程序MODI1.C中函数fun的功能是:通过某种方式实现两个变量的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中值为3,b中的值为8./**found**/ t=*x;*x=y;/**found**/ return(t);3.程序设计

请编写函数fun,函数的功能是:求出1到1000之间能被7或11整除,但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。

#include viod fun(int *a,int *n){int i;*n=0;

for(i=7;i<1000;i++)

if(((i%7)= =0││(i%11)= =0 &&(i%77)!=0)a[(*n)++]=i;}

第十八套 1.程序填空

给定程序中,函数fun的功能是:有N×N矩阵,根据给定的m(m<=n)值,将每行元素中的值均右移m个位置,左边值为0.第1处 for(i=0;i

给定程序MODI1.C中函数fun的功能是:计算并输出high以内最大的10个素数之和。high的值由主函数传给fun函数。/**found**/

while((2<=high)&&(n<10))/**found**/ yes=0;break;3.程序设计

请编写函数fun,函数的功能是:利用一下所示的简单迭代方法求方程求方程:cos(x)-x=0的一个实根。xn+1=cos(xn)迭代步骤如下:(1)取x1的初值为0.0;(2)x0=x1,把x1的值赋给x0;(3)x1=cos(x0),求出一个新的x1;(4)若x0-x1的绝对值小于0.000001执行步骤(5)否则执行步骤(2);(5)所求x1就是方程cos(x)-x=0的一个实根作为函数值返回。程序将输出结果为:Root=0.739058。float fun(){

float x0,x1=0.0;do{ x0=x1;

x1=cos(x0);

}while(fabs(x0-x1)>0.000001);return x1;}

第十九套 1.程序填空

给定程序中,函数fun的功能是:将a所指的3×5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。第1处for(p=1;p<=k;p++)第2处for(j=0;j

给定程序MODI1.C中函数fun的功能是:根据形参m的值(2<=m<=9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。例如,若输入2则输出: 1 2 2 4 /**found**/ fun(int a[][M],int m)/**found**/ a[j][k]=(k+1)*(j+1);3.程序设计

函数fun的功能是:将a、b中的两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。void fun(int a,int b,int*c){ *c=(a%10)*1000+(b%10)*100 +(a/10)*10+(b/10);} 第二十套

给定程序MODI1.C中函数fun的功能是:从s所指字符串中删除所有小写字母c。请改正程序中的错误,使它能计算出正确的结果。/**found**/ s[j++]=s[i];/**found**/ s[j]=’’;3.程序设计

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串的前导*号全部移到字符串的尾部。函数fun中给出的函数仅供参考。void fun(char *a){ char *p,*q;int n=0;p=a;while(*p==’*’){n++;p++;} q=a;while(*p){ *q=*p;p++;q++;} for(;n>0;n--)*q++=’*’;*q=’’;

}

第二十五套 1.程序填空

用筛选法可得到2—n(n<10000)之间的所有

素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数,依此类推,直到所找的下一个数等于n为止。这样会得到一个序列:2、3、5、7、11、13、17、19、23……函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。第一处 for(j=a[i]*2;j<=n;j+=a[i])第二处 while(a[i]= =0)第三处 if(a[i]!=0)2.程序修改

给定程序MODI1.C中函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。/**found**/ y=1;

/**foune**/ d=a-i;

3.程序设计

请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。double fun(int n){ int i;

double sum=0.0;for(i=1;i

if(i%5= =0||i%9==0)sum+=1.0/i;return sum;}

第二十六套 1.程序填空

给定程序中,函数fun的功能是建立一个N×N的矩阵。矩阵元素的构成规律是:最外层元素的值全部是1;从外向内第二层元素的值全部为2;第三层元素的值全部是3,…依此类推。第一处void fun(int(*a)[N])第二处for(j=i;j

第二处a[k][i]=a[k][N-i-1]=i+1;2.程序修改

给定程序MODI1.C中函数fun的功能是:将十进制正整数m转换成k(2<=k

<=9)进制数,并按高位到低位顺序输出。/**found**/ aa[i]=m%k;/**found**/

printf(“%d”,aa[i-1]);3.程序设计

编写一个函数,从num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。(注意:主函数中用****作为结束输入的标志,函数fun中给出的语句仅供参考)。

fun(char(*a)[81],int num,char **max){ int i,k=0,maxlen;maxlen=strlen(a[k]);for(i=1;imaxlen){maxlen=strlen(a[i]);k=i;} } *max=a[k];} 第二十七套 1.程序填空

函数fun的功能是计算(fx)=1+x-2/2!+3/3!-4/4!+……的前n项和。若x=2.5,n=15时,函数值为1.917914。第一处 f=1;第二处 t*=(-1)*x/i;第三处 f+=t;2.程序修改

给定程序MODI1.C中函数fun的功能是:从三个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在没组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15.程序中i的值代表红球数,j代表白球数,k代表黑球数。/**found**/ for(i=1;i<=3;i++)/**found**/ if(k>=0&&k<=6)3.程序设计

请编写函数fun,它的功能是:计算并输出下列多项式的值:sn=1+1/1!+1/2!+1/3!+1/4!+……1/n!。例如:在主函数中从键盘给n输入15,则输出为:s=2.718282。注意:要求n的值大于1但不大于100。double fun(int n){ double s=1’ long t=1;int i;for(i=1;i<=n;i++){ t=t*i;s+=1.0/t;} return s;} 第二十八套 1.程序填空

给定程序中,函数fun的功能是:计算N*N矩阵的主对角线元素和方向对角线元素之和,并作为函数值返回。注意:要求先累加主对角线元素中的值,然后

累加反响对角线元素的值。第一处 sum=0;

第二处 sum+=t[i][i];

第三处 sum+=t[i][n-i-1];2.程序修改

给定程序MODI1.C中函数fun和funx的功能是:用二分法求方程2x3-4x2+3x-6=0的一个根,并要求绝对误差不超过0.001。/**found**/ double r;/**found**/

while(fabs(n-m)>0.001)3.程序设计

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串中的第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用c语言提供的字符串函数。void fun(char *a,char *h,char *p){

int j=0;char *q=a;

while(*q&&qif(*h!=’*’)a[j++]=*h;h++;}

while(*p)a[j++]=*p++;a[j]=0;}

第二十九套 1.程序填空

给定程序中,函数fun的功能是:有N*N矩阵,将矩阵的外围元素顺时针旋转。操作的顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为第一行,临时数组中和元素成为最后一列。第一处 t[0][N-j-1]=t[j][0];第二处 for(j=N-1;j>=0;j--)第三处 t[j][N-1]=r[j];2.程序修改

给定程序MODI1.C中函数fun的功能是:计算s=f(-n)+f(-n+1)+……+f(0)+f(1)+f(2)+……f(n)的值。例如,当n为5时,函数值应该是:10.407143。/**found**/

double f(double x)/**found**/ return s;3.程序设计

编写一个函数fun,它的功能是计算:s=根号下(ln(1)+ln(2)+ln(3)+……ln(m))S作为函数返回,在C语言中可以调用log(n)求ln(n)。log函数引用说明是:Double log(double x)例如,若m的值为:20,fun函数值为:60506583。double fun(int m){ double s=0.0;int i;for(i=0;i<=m;i++)s+=log(1.0*i);s=sqrt(s);return s;} 第三十套 1.程序填空

函数fun的功能是:反形参a所指数组中的奇数按原顺序依次存放到a[0]、a[1]、a [2]……中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后a所指数组中的数据为:9、1、3、5、7,返回值为5。第一处 if(a[i]%2==1)第二处 j++;第三处 return j;2.程序修改

给定程序MODI1.C中函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。/**found**/ t=a;a=b;b=t;/**found**/ return(b);3.程序设计

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。void fun(char *a){ int j=0;char *p=a;while(*p){ if(*p!=’*’)a[j++]=*p;p++;} a[j]=0;} 第三十一套 1.程序填空

给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串的个数。Ss所指字符串数组中共有N个字符串,且串长小于M。第一处 for(i=0;i

strcpy(ss[j++],ss[i]);2.程序修改

给定程序MODI1.C中函数fun的功能是:逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值或相等的字符依次存放在c所指数组中,形成一个新的字符串。/**found**/ int k=0;/**found**/ while(*p||*q)3.程序设计

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导*号之外,将串中其它*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。void fun(char *a){

int i=0,k;

while(a[i]!==’*’)i++;k=i;

while(a[i]!=’’){

if(a[i]!=’*’)a[k++]=a[i];i++;}

a[k]=’’;}

第三十二套 1.程序填空

给定程序中已建立一个带头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。第一处 s->data=x;第二处 q=p;

第三处 q->next=s;2.程序修改

给定程序MODI1.C中函数fun的功能是:计算正整数num的各位上的数字之积。/**found**/ long k=1;/**found**/ num/=10 3.程序设计

请编写函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数返回。float fun(float *a,int n){ int i;

float ave=0.0;for(i=0;i

给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含有形参substr所指子串的所有字符串并输出,若没找到输出相应信息。Ss所指字符串数组中共有N个字符,且串长小于M。程序中库函数strstr(s1、s2)的功能是早s1串中查找s2子串,若没有,函数值为0,若有,为非0。第一处 for(i=0;i

给定程序MODI1.C中函数fun的功能是:求三个数的最小公倍数。/**found**/ fun(int x,int y,int z)/**found**/ return j;3.程序设计

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数。在编写函数时,不得使用C语言提供的字符串函数。void fun(char *a,int n,int h,int e){ char *p=a;int j=0,len=0;while(*p){p++;len++;} while(j

第三十四套 1.程序填空

给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t所指字符串相同的串,找到后返回该串在字符串中的位置(下标值),未找到则返回-1。ss所指字符串数组中共有N个内容不同的字符串,且串长小于M。

第一处 for(i=0;i

if(strcmp ss[i],t)==0

return i;第三处 if(n==-1)

printf(“nDon’t found!n”);2.程序修改

给定程序MODI1.C中函数fun的功能是:从整数1到55之间,选出能被3整除、且有一位上的数是5的那些事,并且把这些数放在b所指的数组中,这些数作为函数值返回。规定,函数中a1放个位数,a2

放十位数。/**found**/ a2=k/10;/**found**/ return i;3.程序设计

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。void fun(char *a){

char *p=a;

while(*p)p++;p--;while(*p==’*’)p--;p++;*p=0;}

第三十五套 1.程序填空

给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。第一处 *n=0;

第二处 p=p->next;

第三处 fun(head,&num); 2.程序修改

给定程序MODI1.C中函数fun的功能是:求出s所指字符串最后一次出现的t所指字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值NULL。/**found**/ a=NULL; /**found**/ if(*r==*p)3.程序设计

函数fun的功能是:将s所指字符串中除了下标为偶数,同时ASCII指也为偶数的字符外,其余的全部都删除:串中剩余字符所形成的一个新串放在t所指的数组中。

void fun(char *s,char t[ ]){

int i,j=0;

for(i=0;i

第三十六套 1.程序填空

函数fun的功能是:进行数字字符转换。若形参ch中是数字字符‘0’—‘9’,则‘0’转换成‘9’,‘1’转换成‘8’,‘2’转换成‘7’,……‘9’转换成‘0’;若是其他字符则保持不变,并将转换后的结果做函数值返回。第一处 char fun(char ch)第二处 if(ch>=’0’&&ch<=’9’)第三处 return ‘9’-(ch-‘0’);2.程序修改

给定程序MODI1.C中函数fun的功能是:将p所指字符串中所有字符复制到b中,要求复制第三个字符之后插入一个空格。/**found**/ b[k]=*p;/**found**/ b[k++]=’ ‘;3.程序设计

N名学生的成绩已在主函数中放入一个带头结点的链表结构中,h指向链表的头结点。请编写函数fun,它的功能是:求出平均分,有函数值返回。double fun(STREC *h){ STREC *p=h->next;double av=0.0;int n=o;while(p!=NULL){ av=av+p->s;p=p->next;n++;} av/=n;return av;} 第三十七套 1.程序填空

函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放a[0]、a[1]、a[2]……中,把奇数从数组中删除,偶数个数通过函数值返回。第一处 if(a[i]%2==0){ 第二处 a[j]=a[i];j++;第三处 return j;2.程序修改

给定程序MODI1.C中函数fun的功能是:按以下递推公式求函数值。例如,当给n输出5时,函数值为18;当给n输入3时,函数值为14./**found**/ fun(int n)/**found**/ if(n==1)3.程序设计

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。void fun(char *a,int n){ char *p=a;int j=0;while(*p)p++;p--;while(*p==’*’)p--;

p++;

while(j

*p=0;}

第三十八套 1.程序填空

给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排列,并输入排序结果。ss所指定字符串数组中共有N个字符串,且串长小于M。第一处 k=i 第二

if(strlen(ps[k])

第三处 tp=ps[i];ps[i]=ps[k];ps[k]=tp;2.程序修改

已知一个数列从第0项开始的前三项分别是0、0、1以后的各项都是它相邻的前三项之和。给定程序MODI1.C中函数fun的功能是:计算并输出该数列前n项的平方根之和。n的值通过形参传入。/**found**/

double fun(int n)/**found**/ return sum;3.程序设计

请编写函数fun,它的功能是:计算下列级数和,和值由函数值返回。例如,当n=10,x=0.3时,函数值为1.349859。

double fun(double x,int n){double s=1.0,y=x;int i;

for(i=1;i<=n;i++){

s+=y/(double)jc(i);y*=x;}

return s;}

第三十九套 1.程序填空

给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。第一处 *av=s/N;

第二处 d=*av-x[i];j=i;} 第三处 return x[j];2.程序修改

给定程序MODI1.C中函数fun的功能是:根据整型形参n计算如下公式的值。例如:若n=10,则应输出:0.617977./**found**/ float fun(int n)/**found**/ for(i=2;i<=n;i++)3.程序设计

程序定义了N×N的二维数组,并在主函数中自动赋值,请编写函数fun,它的功能是:使数组右上三角元素中的值乘以m。int fun(int a[][N],int m){ int i,j;for(i=0;i

for(j=i;j

给定程序中,函数fun的功能是:将s所指字符串所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。第一处 j++;第二处 s[i]=t1[i];第三处 for(i=0;i

给定程序MODI1.C中函数fun的功能是:用冒泡法对6个字符串按由小到大的顺序排列。/**found**/ for(j=i+1;j<6;j++)/**found**/ *(pstr+i)=*(pstr+j);3.程序设计

请编写函数fun,它的功能是:求出ss所指字符串中指定字符个数,并返回次值。int fun(char *ss,char c){ int cnt=0;char *p=ss;while(*p){ if(*p==c)cnt++;p++;} return cnt;} 第四十一套 1.程序填空

给定程序中,函数fun的功能是:将形参s所指定字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。第1处

if(isdigit(*s))sum+=*s-48;第2处s++;第3处return sum;2.程序修改

给定程序MODI1.C中函数fun的功能是:计算小于形参k的最大的10个能被13或17整除的自然数之和。K的值由主函数传入,若K的值为500.则主函数为4622。/**found**/

if((k%13= =0││(k%17= =0))/**found**/ }

3.程序设计

请编写函数fun,它的功能是:求小于形参n同时能被3和7整除的所有自然数之和的平方根,并作函数的返回值。double fun(int n){

double sum=0.0;int i;

for(i=21;i<=n;i++)

if((i%3= =0)&&(i%7= =0))sum +=i;

return sqrt(sum);}

第四十二套 1 程序填空

给定程序中,函数fun的功能是:将不带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表节点数据域从头到位的数据为10、4、2、8、6,排序后链表结点数据域从头至尾的数据为2、4、6、8、10.第1处q=p->next;第2处while(q)第3处 p=p->next;2 程序修改

给定程序MODI1.C中函数fun的功能是:将s所指字符串中的字母转换为按字母顺序的后续字母(但Z转化成A,z转换为a),其它字符不变。/**found**/ while(*s)/**found**/ s++;

3程序设计

void fun(int*w, int p, int n){

int i,j=0,b[N];

for(i=p+1;i

for(i=0;i

第四十三套 1 程序填空

给定程序中,函数fun的功能是:判定形参a所指的N乘以N(规定N为奇数)的矩阵是否是“幻方”,若是,函数返回值是1;不是,函数返回值为0.“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。

第1处row=colum=0;第2处

if((row!=colum)││(row!=m1))return 0;第3处return 1;2 程序修改

给定程序MODI1.C中函数fun的功能是:根据整型形参m计算如下公式的值。/**found**/ t=t-1.0/i;/**found**/ return t;3 程序设计

请编写一个函数,函数的功能是:删除字符串中所有的空格。

int fun(char *str){ char *p=str; int i=0;while(*p){

if(*p!=’ ’)str[i++]=*p;

p++;

}

str[i]=0;} 第四十四套 1 程序填空

给定程序中,函数fun的功能是:将N乘以N矩阵中元素的值按列右移一个位置,右边被移出矩阵的元素绕回左边。

第1处for(i=0;i

给定程序MODI1.C中函数fun的功能是:计算并输出下列级数的前n项的和Sn,直到Sn+1大于q为止,q的值通过形参传入。/**found**/ s=s+(n+1.0)/n;/**found**/ return t;3程序编写

编写函数fun,它的功能是:求Fibonacci数列中大于t的最小一个数,结果由函数返回。其中Fibonacci数列F(n)定义为F(0)=0,F(1)=1,F(n)。。int fun(int t){ int f0=0,f1=1,f;do {f=f0+f1;f0=f1;f1=f;}while(f

}

第四十五套 1 程序填空

给定程序中,函数fun的功能是将带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2.。

第1处p=h->next;

第2处if(p= =0)return;第3处p=q;q=r;2 程序修改

给定MODI1.Cfun函数的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。/**found**/ r=t;

/**found**/ if(*r= =0)3 程序设计

请编写函数fun,函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串,函数fun中给出的语句提供参考。void fun(char a[M][N]),char *b){int i;*b=0;

for(i=0;i

第四十六套 1 程序填空

给定程序中,函数fun的功能是:将形参s所指字符串所有ASCII码小于97的字符存入形 第1处*(t+n)=*s;n++;} 第2处s++;第3处return n;2 程序修改

给定程序MODI1.C中函数fun的功能是:由形参给定n个实数,输出平均值以上(含平均值)的实数个数。/**found**/

int j,c=0;float xa=0.0;/**found**/ if(x[j]>=xa)3 程序设计

编写函数fun,其功能是:根据以下公式求p的值,结果由函数值带回。m与n为两个正整数且要求m>n。p=m!/(n!*(m-n)!)float fun(int m, int n){

float p;

p=1.0*jc(m)/jc(n)/jc(m-n);return p;}

第四十七套 1 程序填空

函数fun的功能是:计算f(x)=1+x-x2∕2!+x3∕3!-X4/4!直到∣xn/n!∣<10-6 若x=2.5,函数值为:1.917915。第1处t=x 第2处t*=(-1.0)*x/n;第3处while(fabs(t)>=1e-6)2 程序修改

给定程序MODI1.C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。/**found**/ for(i=1;i<=y;i++)/**found**/ t=t%1000; 3程序设计

请编写函数fun,其功能是:计算并输出当x﹤0.97时下列多项式的值,直到Sn-Sn-1<0.000001为止。double fun(double x){ int n=1;double sn=1;double xn=1,xn1=0;while(fabs(xn-xn1)>=0.000001)

{

xn=xn*x*(0.5-n+1)/n;

n+=1;

sn+=xn;

}

return(sn);} 第四十八套 1 程序填空

给定程序中,函数fun的功能是:计算出带有头节点的单向链表中各节点数据域中值之和作为函数值带回。第1处s+=p->data;第2处p=p->next;第3处printf(“nsum=%dn”,fun(head));2 程序修改

给定程序MODI1.C中函数fun的功能是:将s所指字符串中出现的与t1所指字符串相同的子串全部替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。/**found**/ while(*r)/**found**/ *a=*r;a++;r++;3 程序设计

函数fun的功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。void fun(char *s,char t[]){ int i,j=0;

for(i=1;i

给定程序中,函数fun的功能是:把形参s所知字符串中最左边的n个字符复制到形参t所指字符数组中,形成一个新串,若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。第1处if(n>=len)strcpy(t,s);第2处t[j++]=s[i];第3处t[j]=0;2 程序修改

给定程序MODI1.C中函数fun的功能是:找出一个大于形参m且紧随m的素数,并作为函数值带回。/**found**/ if(i%k= =0)/**found**/ if(k>=i)3 程序设计

编写函数fun,它的功能是:求出能整除形参x切不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。void fun(int x,int pp[],int*n){ int i;*n=0;

for(i=1;i<=x;i++)

if((x%i==0)&&(i%2))pp[(*n)++]=i;}

第五十套 1 程序填空

给定程序中,函数fun的功能是:将形参s所知字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。第1处p[j]=s[i];j++;}

第2处for(i=0;i

给定程序MODI1.C中函数fun的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。

/**found**/ while(i

函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s 所指串中剩余的字符形成的新串放在 t所指的数组中。void fun(char *s,char t[]){

int i,j=0;

for(i=0;i

给定程序中,函数fun的功能是:计算下式s=1/22+3/42+5/62…+(2×n-1)/(2×n)2直到︱(2×2n-1)/(2×n)︱《10-3并把计算结果作为函数值返回。例如,若形参e的值le-3,函数值的返回值为2.735678。第1处i=0; 第2处i++;

第3处x=(2.0*i-1)/((2.0*i)*(2.0*i));程序修改

给定程序MODI1.C中函数fun的功能是:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。/**found**/ void fun(char*s, char *t)/**found**/ t[2*d]=’’;3 程序设计

函数fun的功能是:将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。

viod fun(char*s, chat t[]){ int i,j=0;for(i=1;i

给定程序中,函数fun的功能是:在3×4的矩阵中找出在行上最大,列上最小的那个元素,若没有符合条件的元素则输出相应信息。第1处max=a[i][j];c=j;} 第2处find=0;第3处i++;2 程序修改

给定程序MODI1.C中函数fun的功能是:根据整形形参m的值:计算如下公式的值?……例如:若m中的值为5,则应输出:0.536389。/**found**/ for(i=2;i<=m;i++)/**found**/ y-=1.0/(i*i);3 程序设计

m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。int fun(int score[],int m,int below[])

{

float av=0.0;int i,j=0;

for(i=0;i

for(i=0;iscore[i])

below[j++]=score[i];return j;}

第五十三套 1 程序填空

给定程序中,函数fun的功能是将形参指针所指结构体数组中的三个元素按num成员进行升序排列。第1处void fun(PERSON*std)第2处PERSON temp;第3处fun(std);2 程序修改

给定程序MODI1.C中函数fun的功能是:将m(1≦m≦10)个字符串连接起来,组成一个新串,放入pt所指存储区中。/**found**/ int k,q,i;/**found**/ pt[i]=str[k][i];3 程序设计

程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[ ][N]),函数的功能是:使数组左下三角元素中的值全部置成0。int fun(int a[][N]){

int i,j;

for(i=0;i

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

a[i][j]=0;}

第五十四套 1 程序填空

给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回,并将大于平均值的数放在形参Y所指数组中,在主函数中输出。第1处av=0;

第2处av=av+x[i]/N;第3处y[j++]=x[i];2 程序修改

给定程序MODI1.C中函数fun的功能是:根据整形形参m,计算如下公式的值。/**found**/

double fun(int m)/**found**/

for(i=100;i<=m;i+=100)3 程序设计+]=s[i];/**found**/ s[j]=’’;3.程序设计

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串的前导*号全部移到字符串的尾部。函数fun中给出的函数仅供参考。void fun(char *a){ char *p,*q;int n=0;p=a;while(*p==’*’){n++;p++;} q=a;while(*p){ *q=*p;p++;q++;} for(;n>0;n--)*q++=’*’;*q=’’;} 第二十五套 1.程序填空

用筛选法可得到2—n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数,依此类推,直到所找的下一个数等于n为止。这样会得到一个序列:2、3、5、7、11、13、17、19、23……函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。第一处 for(j=a[i]*2;j<=n;j+=a[i])第二处 while(a[i]= =0)第三处 if(a[i]!=0)2.程序修改

给定程序MODI1.C中函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。/**found**/ y=1;/**foune**/ d=a-i;3.程序设计

请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。double fun(int n){ int i;double sum=0.0;for(i=1;i

第二十六套 1.程序填空

给定程序中,函数fun的功能是建立一个N×N的矩阵。矩阵元素的构成规律是:最外层元素的值全部是1;从外向内第二层元素的值全部为2;第三层元素的值全部是3,…依此类推。第一处void fun(int(*a)[N])第二处for(j=i;j

第二处a[k][i]=a[k][N-i-1]=i+1;2.程序修改

给定程序MODI1.C中函数fun的功能是:将十进制正整数m转换成k(2<=k

<=9)进制数,并按高位到低位顺序输出。/**found**/ aa[i]=m%k;/**found**/

printf(“%d”,aa[i-1]);

已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a 结构体数组中,轻便鞋函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)

fun(STU a[],STU *s){

int i,min=a[0],s,j=0;for(i=1;ia[i].s){ j=i;

min=a[i].s;}

*s=a[j];}

第五十五套 1程序填空

给定程序中,函数fun的功能是:判断形参s所指字符串是否是“回去”(Palindrome)若是,函数返回值为1;不是,函数返回值为0,“回文”是正读和反读都是一样的字母串(不区分大小写字母)。第1处1p=s;

第2处1p++;rp--;}

第3处if(1p

给定程序MODI1.C中函数fun的功能是:求出以下分数序列的前n项之和。

2/1+3/2+5/3+8/5+13/8+21/13+……和值通过函数值返回main函数。例如n=5,则应输出:8.391667。/**found**/

double fun(int n)/**found**/ c=a;a+=b;b=c;3程序设计

请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指的数组中。19,23,29,31,37,函数fun中给出的语句仅供参考。void fun(int m,int k,int xx[]){ int i,j=1,t=m+1;while(j<=k){ for(i=2;i

给定程序的功能是:从键盘输入若干行文本(每行不得超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。

第1处void WriteText(FILE*fw)第2处fputs(str,fw);fputs(“n”,fw);第3处printf(“%s”,str);2 程序修改

给定程序MODI1.C中函数fun的功能是:从低位开始取出长整形变量s中奇数位上的数,依次构成一个新数t中。高位仍在高位,低位仍在低位。/**found**/ void fun(long s,long*t)/**found**/ s1=s1*10;3 程序设计

函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c 数的十位和百位上,b数的十位和个位数依次放在c数的千位和十位上。void fun(int a,int b,long*c){ *c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10);} 第五十七套 1 程序填空

给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。第1处n++;flag=1;} 第2处if(*s= =’ ’)flag=0;第3处s++;2 程序修改

给定程序MODI1.C中函数fun的功能是:从n(形参)个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver 所指的存储单元中。

/**found**/ t+=s[k];/**found**/ *aver=ave;3程序设计

请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元。int fun(int *s,int t,int *k){

int i,pos=0,max=*s;for(i=1;i

if(max<*(s+i)){ max=*(s+i);pos=i;}}

*k=pos;}

第五十八套 1 程序填空 给定程序中,函数fun的功能是计算下式s=3/22- 5/42 +7/62-…+(-1)n-1(2×n-1)/(2×n)2直到︱(2×n-1)/(2×n2)︱≤10-3并把计算结果作为函数值返回,例如:若形参e的值为-le-3,函数的返回值为0.551690。第1处x=3.0/4;第2处while(x>e)

第3处x=(2*i+1)/(t*t);2 程序修改

给定程序MODI1.C中函数fun的功能是:求出以下分数序列的前n项之和。2/1,3/2,5/2,8/5,13/8,31/13…和值通过函数值返回到main函数。/**found**/

double fun(int n)/**found**/

s=s+(double)a/b;3 程序设计

请编写函数fun,它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调有函数。fun(int a[][M]){

int i,j,max=a[0][0];for(i=0;i<2;i++)for(j=0;j

第五十九套 1 程序填空

函数fun的功能是:把形参a所指数组中的的最小值放在元素a[0],接着把形参a所指数组中的最大值放a[1]元素中;再把a所指数组中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3];其余以此类推。第1处max=min=a[i];第2处if(maxa[j])2 程序修改

给定程序MODI1.C中函数fun的功能是:用递归算法计算列中第n项的值。从第一项起,斐波拉契数列为:1、1、2、3、5、8、13、21、…… /**found**/ switch(g)/**found**/ case 1:return 1;case 2:return 1;3 程序设计

某学生的记录由学号、8门课程和平均分组成,学号和8门课程成绩已在主函数中给出。请编写函数fun,它的功能是;求出该学生的平均分放在记录的ave成员中。void fun(STREC *a){ int i;for(i=0;i

a->ave=a->ave+a->s[i];a->ave/=N } 第六十套 1 程序填空

给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素来。第1处 void fun(int)(*t)[N] 第2处 t[i][j]=t[i][j]+t[j][i];第3处 t[j][i]=0;2程序修改

给定程序MODI1.C中函数fun的功能是:计算函数值,F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)其中x和y的值不等,z和y的值不等。例如,当x的值为

9、y的值为

11、z的值为15时,函数值为-3.50。

/**found**/ #define FU(m,n)((m)/(n))

/**found**/ return(value);} 3程序设计

规定输入的字符串中只包含字母和*号。请编写函数fun ,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。void fun(char *a){ int j=0;char *p=a;while(*p=='*')p++;while(*p){ a[j++]=*p;p++;} a[j]=0;

}

第六十一套 1 程序填空

人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指出的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。

第1处if(std[i].year==year)

第2处 k[n++]=std[i];

第3处 return(n);5 程序修改

给定程序MODI1.C中函数fun的功能是:读入一个整数k(2≤k≤10000)打印它的所有质因子(即所有为素数的因子)。

/**found**/

IsPrime(int n)/**found**/ if(!(n%i))6 程序设计

已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a中。请编写给函数fun,函数的功能是:找出成绩最高的学生的记录,通过形参指针传回主函数(规定只有一个最高分),已给出函数的首部,请完成函数。

fun(STU a[],STU *s){

int i, max = a[0].s, j=0;for(i=1;i

max =a[i].s;

}

*s=a[j];} 第六十二套 1程序填空

给定程序中,函数fun的功能是:将N×N矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如:若N=3有下列矩阵: 1 4 7 交换后: 3 4 给定程序MODI1.C中函数fun的功能是:判断ch中的字符是否与str所指串中的某个字符相同:若相同,什么也不做,则将其插在串的最后。2 /**found**/

if(*str!=ch)

/**found**/

str [1]=0;3 程序设计

请编写一个函数fun(chae*s),函数的功能是把s所指的字符串中的内容逆置。

fun(char *s)

{

char b[N];

int i=0, j;

meset(b,0,N);

for(j=strlen(s)-1;j>=0;j--)

b [i++]=s[j];

strcpy(s,b);

} 第六十五套

1程序填空

给定程序中,函数fun的功能是:计算下式前5项的和作为函数值返回。S=1×3/22-3×5/42+5×7/62-……+(-1)n-1(2×n-1)×(2×n+1)/(2×n)2例如,当形参n的值为10时,函数返回:-0.204491。

第1处 k=1;

第2处 t=2*j;

第3处 k=k*(-1);2 程序修改

给定程序MODI1.C中函数fun的功能是:判断一个整数是否是素数,若是返回1,否则返回0./**found**/

K++;

/**found**/

if(m==k)3 程序设计

请编写一个函授fun,它的功能是:找出一维整数组元素中最大的值和他所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x 是数组名,n是x中的数据个数,max存放在大值,index存放最大值所在元素的下标。void fun(int a[], int n, int *max, int *d)

{

int i;

*max=a[0];*d=0;

for(i=1;i

if(*max

{ *max=a[ i ];

*d=i;

}

}

第六十六套 1程序填空

给定程序中,函数fun的功能是:在形参s所知字符串中的每个数字字符之后插入一个*号。

第1处 if(s[ i ]>=' 0' &&s [ i ]<=' 9')

第2处 while(s[i+1+n]!=0)n++;

第3处

s[j+1]=s [j];2 程序修改

给定程序MODI1.C中函数fun的功能是:根据整形形参m=1,计算如下公式的值。

m=1+1/2*2+1/3*3+1/4*4…1/m*m

例如,若m中的值为5,则应输出1.463611 2 /**found**/

for(i =2;i<= m;i++)

/**found**/

y+=1.0/(i* i);3 程序设计

编写函数fun,函数的功能是:实现B=A+A’即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。

void fun(int a [3] [3], int b [3] [3])

{

Int c [3] [3];

int i,j;

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

for(j=0;j<3;j++)

{

c [i][j]=a [j] [i];

b [i] [j]=a[i] [j] +c [i] [j];

}

}

第六十七套 1 程序填空

给定程序中,函数fun的功能是:找出100~999之间(含100和999)所有整数中个位上数字之和为x(x为一正整数)的整数,然后输出:符合条件的整数个数作为函数值返回。

第1处 while(t<=999)

第2处 s1=t%10;s2=(t/10)%10;s3=t/100;

第3处 if(s1+s2+s3==x)2 程序修改

给定程序MODI1.C中函数fun的功能是:低位开始取出长整形变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。

/**found**/

void fun(long s, long *t)

/**found**/

while(s>0)3程序设计

学生的记录由学号和学生成家组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是;按分数的高低排列学生的记录,高分在前。

int fun(STREC a[])

{

STREC tmp;

int i,j;

for(i=0;i

for(j=0;j

if(a [i].s

{ tmp =a [i];

a [i]=a [j];

a[j] =tmp;

}} 第六十八套 1 程序填空

给定程序中,函数fun的功能是:将形参n中,个位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数。并作为函数值返回。1 第1处 if(t%2==0)

第2处 x=10*x+t;

第3处 n=n/10;2 程序修改

给定程序MODI1.C中函数fun的功能是:将长整数中每一位上为奇数的数依次取出,构成一个心数放在t中。高位仍在高位,低位仍在低位。

/**found**/

*t=0;

/**found**/

if(d%2!=0)3 程序设计

编写一个函数fun,它的功能是:实现两个字符串的连续(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。

void fun(char

p[], char p2[])

{

char *p=p1;

while(*p)p++;

while(*p2)*p++=*p2++;

*p=0;

} 第六十九套 1 程序填空

甲乙丙丁四人同时开始放鞭炮,甲每隔t1秒放一个,乙每隔t2秒放一个,丙每隔t3秒放一个,丁每隔t4秒放一个,每人各放n次。函数fun的功能是通过形参提供的信息,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时炸响,只算一声响声,第一声响是在第0秒。第1处 max t =t1;

第2处 for(t=1;t< max t*(n-1);t++)

第3处 return count;2 程序修改

给定程序MODI1.C中函数fun的功能是:根据输入的三个边长(整值型),判断能否构成三角形,还是等腰三

角形。若能够构成等边三角形函数返回3,若能构成等

腰三角形,函数返回2,若构成一般三角形,则函数返回1,若不能构成三角形,则函数返回0./**found**/

int fun(int a,int b, int c)

/**found**/

else return 1;程序设计

编写一个函数fun,它的功能是:计算并输出3到n之间(含3和n)所有素数平方根之和。

double fun(int n)

{

int i, j=0;

double s=0;

for(i=3;i<=n;i++){

for(j=2;j

if(i %j==0)break;

if(j==i)

s =s+sqrt(i);

}

return s;

}

第七十套 1 程序填空

给定程序中,函数fun的功能是:统计长整数n的各个位数上出现数1、2、3的次数,并通过外部(全局)变量c1、c2、c3返回主函数。

第1处 switch(n%10)

第2处 case 1: c1++;break;第3处 case 2: c2++;break;2 程序修改

给定程序modi1.c中函数fun函数功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数并把该整数中各位上最大的数字值作为函数值返回。/**found**/

if(t==0)

/**found**/

*zero =count;3 程序设计

请编写一个函数fun,它的功能是:计算并输出下列多项式的值:

double fun(int n)

{

double s=0, t=1;

int i;

for(i=1;i<=n;i++)

{ t*=1;

s+=1.0/t;

}

return s;

}

第七十一套 1 程序填空 给定程序中,函数fun的功能是:反形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,吧a组元素中的次小值放在a[3]中,依此类推。第1处 void fun(int *a, int n)

第2处 for(i=0;i

第3处 for(j=i+1;j

给定程序modi1.c中函数fun函数功能是:按顺序给s所指数组中元素赋予从2开始的偶数,然后再按顺序对每五个元素求平均值,并将这些值依次存放在w所指的数组中,若s所指数组中元素个数不是5的倍数,多余部分忽略不计。/**found**/

sum=0.0;

/**found**/

if((i+1)%5==0)3 程序编写

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,低于平均分的学生人数通过形参n传回。平均分通过函数值返回。

double fun(STREC *a, STREC *b, int *n)

{

int i;

double ave=0.0;

*n=0;for(i=0;i

ave =ave=a[ i ].S;ave /=N;for(i=0;i

if(a [i].s

(*n)++;} return ave;} 第七十二套 1 程序填空

给定程序中,函数fun的功能是:统计所有<=n(n>2)的素数的个数,素数的个数作为函数值返回。第1处 for(j=2;j

第3处 if(j>=i)2 程序修改

数列中,第一项值为3,后一项都比前一项的增5;给定程序modi1.c中函数fun函数功能是:计算前n(4

/**found**/

if(sum %4==2)程序设计

请编写一个函数fun,它的功能是:计算并输出下列多项式的值:……例如,在主函数中从键盘给n输入8后,输出为s=0.662872。注意:要求n的值大于1但不大于10.double fun(int n){

int i;

double sum=0.0;if(n>1&&n<=100)

{ for(i=1;i<=n;i++)

sum +=1.0/(2*i')

{ t=48 +(*p++);

return x*t;

} 第七十八套 1 给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到的文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。请在程序的下划线处填入正确的内容分并把下划线删除,使得程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

第1处 FILE * fp;

第2处 while(!feof(fp)){ 第3处

putchar(ch);ch= fgetc(fp);} 2 程序修改

给点那个程序MODI1.C中函数fun的功能是:依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。/**found**/

s [j++]=s [ i ];

/**found**/

s [ j ]= ' 0 ';3 程序设计题

请编写函数fun,函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。void fun(char s[] [N] , char *b)

{

int i, j, n=0;

for(i=0;i

/*请填写其相应语句完成其功能*/

{

for(j=0;j

b [n] =s [j ] [i ];

n= i *M+j+1;

}

}

b [n] = ' ';

} 第七十九套 1 程序填空

给定程序中,函数fun的功能是将带头结点的单项链表结点数据域中的数据从小到大排序,即若原链表节点数

据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确结果。

第1处 p = h> next;

第3处 if(p>data))2 程序修改

给定程序MODI1.C是建立一个带头结点的单项链表,并用随机函数为各节点数据赋值。函数fun的作用是求出单项链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。请改正函数fun中所指部位的错误,使它能得出正确结果。/**found**/

p= h>next;

/**found**/

p= p1])

return 0;

return 1;

}

第八十一套 1 程序填空

给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atof和atof将字符串换成相应的整数和浮点数,然后将其显示在屏幕上。第1处 FILE * fp;

第2处 fclose(fp);

第3处

fscanf(fp , “%s % s % s” ,str, str1 ,str2);2 程序修改

给定程序MODI1.C中函数fun的功能是:对N名学生的学生成绩,按从高到低的顺序找出前m(m<10)名学生来,将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。/**found**/

t=(STU *)calloc(sizeof(STU),m);

/**found**/ t [k] =b [ j ];3 程序设计 请编写函数fun,函数的功能是,删去一维数组中所有相同的数,使之只剩一个。数组中的数已按从小到大的顺序排序,函数返回删除后数组中数据的个数。int fun(int a [ ] , int n)

{

int i , j =1 , k=a [0];

for(i = 1;i

if(k!=a [ i ]){

a [j++] =a [ i ];

k = a [ i ];}

a [ j ] = 0;

return j;

} 第八十二套 1 程序填空

给定程序中,函数 fun的功能是根据形参i的值返回某个函数年值。当调用正确时,程序输出:x1=5.000000 第1处 double fun(int i , double x , double y)

第2处 renturn f1(x);

第3处 return f2(x, y);2 程序修改

给定程序MODI1.C中函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。/**found**/

char *fun(char *s ,char *t)

/**found**/

ss++;

/**found**/

tt++;3 程序设计

请编写函数fun,函数的功能是,移动字符串中的内容,移动的规则如下:把第一到m个字符,平均移到字符串的醉最后,把m+1个到最后的字符移到字符串的前部。void fun(char *w, int m)

{

int i;

for(i=0;i

fun 1(w);

} 第八十三套 程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息,函数fun的功能是输出这位学生的信息。

第1处 void show(STU tt)

第2处 printf(“%5.if ” , tt.score [ i ]);

第3处

show(std)2 程序修改

给定程序MODI1.C中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。/**found**/

m= i;

/**found**/

if(a [k]>a [m])m=k;程序设计

请编写一个unsigned fun(unsigned w),w是一个大雨于10的无符号整数,若w是n(n>=2)位的整数,函数求出w的后n-1位的数作为函数值返回。

例如:w值为5923,则函数返回923;w值为923,则函数返回23.unsigned fun(unsigned w)

{

if(w >=10000)return w%10000;

if(w >=1000)return w%1000;

if(w >=100)return w%100;

return w%10;

}

第八十四套 1 程序填空

程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指的文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。第1处 fp =fopen(filename , “ rb+”)

第2处 fseek(fp ,-1L*sizeof(STU), SEEK_END);

第3处 fwrite(&n, sizeof(STU), 1, fp);2 程序修改

给定程序MODI1.C中函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。/**found**/

p=(NODE

*)malloc(sizeof(NODE));

/**found**/

return h;3 程序设计 请编写函数fun,函数的功能是,统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入规定所有单词有小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。int fun(char *s)

{

int k=1;

while(*s)

{ if(*s==' ')k++;s++;}

return k;

}

第八十五套 1 程序填空

程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生书数据,并按照从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。第1处 fp =fopen(filename , “ rb”);

第2处 if(s [ i ].sno >s [ j ].sno)

第3处 fwrite(s,sizeof(STU), N, fp);2 程序修改

给定程序MODI1.C中函数fun的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原串。注意:字符串的长度最长允许为79./**found**/

p=s;

/**found**/ while(*p++)3程序设计

请编写函数fun,函数的功能是:统计各年龄段的人数,N个年龄能通过调用随机函数获得,并放在主函数的age数组中:要求函数把0到9岁的年龄段的人数放在d[0]zhong 把10—19岁的年龄段的人数放在d[1]中,其余依此类推,把100岁(含100岁)的年龄段的人数放在d[10]中。结果在主函数中输出。void fun(int *a , int *b)

{

int i , j;

for(i=0;i

for(i=0;i

{

j=a [ i ]/10;

if(j>10)b [M-1]++;

else b [j ]++;

}

} 第八十六套 1 程序填空

给定程序中,函数fun的功能是将不代头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2.请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。第1处 NODE * fun(NODE *h)

第2处 r=q>next;

第3处 q=r;2 程序修改

给定程序MODI1.C中函数fun的功能是:将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)/**found**/

if(i % 2 || s [ i ]%2==0)

/**found**/

t [ j ]= ' ';3程序设计

请编写函数fun,函数的功能是:将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。函数fun中给出的语句仅供参考。# include

void fun(int(*s)[10] , int *b , int *n, int mm, int nn)

{

int i, j, np=0;

for(i=0;i

for(j=0;j

{

b[np] = s [ j ] [ i ];np=i*mm+j+1;

}

*n=np;

}

第八十七套 1程序填空

程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到student.dat文件中。函数fun的功能是从指定文件中找出指定学号的学生数据,读入此学生数据,对该生的分数进行修改,使每门的分数加3分,修改后重写文件中该学生的数据,即用该学生背后的数据覆盖原数据,其他学生数据不变;若找不到,则什么都不做。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

第1处 while(!feof(fp))

第2处 if(n.sno ==sno)break;

第3处 fseek(fp,-1L*sizeof(STU),SEEK CUR);2 程序修改

给定程序MODI1.C中函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序,插入法的基本算法是:先对字符串中的头两个元素进行排序,然后把第三个字符插入到前两个字符中,插入后前三个字符依然有序;再把第四个字符插入到前三个字符中,……。待排序的字符串已在主函数中赋予。请改正函数fun中指定部位的错误,使它能得出真确结果。/**found**/

n=strlen(aa);

/**found**/

ch =aa [i];3程序设计

N名学生的成绩已在主函数中放入一个带头结点的链表结构中,h指向链表的头结点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。double fun(STREC *h)

{

double max=h->s;

STREC *p;

p=h->next;

while(p)

{ if(p-s>max)

max=p->s;

p=p->nest;

}

return max;

}

第八十八套 1程序填空

给定程序中,函数fun的功能是调用随机函数产生的20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。第1处 while(n

第2处 if(x==a[ i ])break;

第3处 if(i==n){ a[n] =x;n++;} 4 程序修改

给定程序MODI1.C中函数fun的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之和。/**found**/

sum=0

/**found**/

scanf(“%d” , &a [ i ] [ j ]);5 程序设计

编写程序,实现矩阵(3行3列)的转置(即行列互换)int fun(int array[3] [3])

{

int i, j, arr [3] [3];

memcpy(arr,array,9*sizeof(int));

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

for(j=0;j<3;j++)

array [ i ] [ j ] =arr [ j ] [ i ];第八十九套 1 程序填空

给定程序中,函数fun的功能是:求ss所知字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。Ss所指字符串数组中共m个字符串,且串长>N。

第1处 int fun(char(*ss)[N], int *n)

第2处 if(i==0)*n=len;

第3处 *n=len;2 程序修改

给定程序MODI1.C中函数fun的功能是:根据形参m计算如下公式的值。例如,若输入5,则应输出2.283333 /**found**/

t+=1.0/ i;

/**found**/

return t;3程序设计

编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。

int fun(char *str, char *substr)

{

int cnt =0;

char *p =str, *q;

while(*p){

q=strstr(p,substr);

if(q==NULL)break;

p=q +strlen(substr);

cnt++;

}

第九十套 1 程序填空

给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符*补齐,使其与最长的字符串等长。Ss所指字符串数组中有M个字符串,且串长

给定程序MODI1.C中函数fun的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。请改正程序中错误之处,使它能得出正确结果。/**found**/ if(*p= =’ ’)/**found**/

*(p-1)=toupper(*(p-1));

3请编写函数fun对长度为7个字符的字符串,除首、尾字符外,将其余5个字符ASCII码降序排列。int fun(char *s,int num){

char ch;int i,j;

for(i=1;i<6;i++)for(j=i+1;j<6;j++){

if(*(s+i)<(s+j)){

ch=*(s+j);*(s+j)=*(s+i);*(s+i)=ch;}}}

第九十一套 1程序填空

给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。

第一处 max=*std;

第二处 if(max.age

max=std[i];第三处

printf(“nName:%s,Age:%dn”,max.name,max.age);程序修改

给定程序MODI1.C中函数fun的功能是:实现两个整数的交换。例如给a和b分别输入:60和65,输出为:a=65 b=60 /**found**/

void fun(int *a,int *b)/**found**/ t=*b;*b=*a;*a=t;3程序编写

请编写一个函数void fun(int t t[M] [N],int pp [N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指唯一数组中。二维数组中的数已在主函数中赋予。

void fun(int tt[M][N],int pp[N]){ int i,j,min,k;for(i=0;itt[j][i]){min=tt[j][i];k=j;} pp[i]=tt[k][i];} } 第九十二套 1 程序填空

给定程序中,函数fun的功能是:将a和b所指的两字符串转达换成面值相同的整数,并进行相加作为函数值返回,规定字符串只含9个以下数字字符。第一处 d=d*10+*s-‘0’;第二处 s++;第三处 return ctod(a)+ctod(b);2 程序修改

给定程序MODI1.C中函数fun的功能是:分别统计字符串大写字母和小写字母的个数和。/**found**/ *a=*a+1;/**found**/ *b=*b+1;3程序设计

请编写函数fun,函数的功能是:使用实型整数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)float fun(float h){ long w;w=h*100+1.5; return(float)w/100;} 第九十三套 1 程序填空 给定程序中,函数fun的功能是:找出100—x(x<=999)之间各位上的数字之和为15的所有整数,然后输出,符合条件的整数个数作为函数值返回。第一处 n=0;第二处 while(t<=x)第三处 t++; 2 程序修改

给定程序MODI1.C中函数fun的功能是:先将s所指

字符串中的字符按逆序放到t所指字符串中,然后把s所指的字符串中的字符按正序连接到t所指串的后面。/**found**/ int i,s1;/**found**/ t[i]=s[s1-i-1];3程序设计

请编写函数fun,函数的功能是:将a、b中的两个两位整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位依次放在变量c的千位和十位上。void fun(int a,int b,int *c){

*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);}

第九十四套 1 程序填空

给定程序中,函数fun的功能是:从三个形参a、b、c中找出中间那个数,作为函数值返回。第一处 t=a>b?(b>c?b:(a>c?c:a)):((ac)?c:b));2 程序修改

给定程序MODI1.C中函数fun的功能是:首先将大写字母转换为对应的小写字母:若小写字母为a—u,则将其转换为其后的第五个字母;若小写字母为v—z,使其值减21。转换后的小写字母作为函数值返回。/**found**/ c=c+32;/**found**/ c=c+5;3程序设计

请编写函数fun,函数的功能是:计算并输出……例如,在主函数中从键盘给n输入20后,输出为s=534.188884。注意:要求n的值大于1但不大于100.double fun(int n){ int i;

double fac=1.0;double sum=1.0;for(i=2;i<=n;i++){fac+=sqrt(i);sum+=fac;}

return sum;}

第九十五章 1 程序填空

给定程序中函数fun的功能是:调用fun函数建立班级通讯录。通讯录中记录每位同学的编号、姓名和电话号码。班级的人数和学生信息从键盘读入,每个人的信息作为一个数据块写到名为mylife5.dat的二进制文件中。第一处 int fun(STYPE *std)第二处 FILE *fp;int i;

第三处 fwrite(&std{i},sizeof(STYPE),1,fp);2 程序修改

给定程序MODI1.C中函数fun的功能是:先将在字符串s中的字符按正顺序放到t串中,然后把s中的字符按逆顺序放到他串后面。/**found**/ for(i=0;i

请编写函数fun,函数的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位和个位数依次放在c位的千位和十位上,b的十位和个位数依次放在c的百位和个位上。void fun(int a,int b,long *c){ *c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10);} 第九十六套 1 程序填空

程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。函数fun的功能是:对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。

第一处 b->sno=10004;第二处 strcpy(b->name,”LiJie”);第三处 fun(&t);2 程序修改

给定程序MODI1.C中函数fun的功能是:应用递归算法求形参a的平方根。求平方根的迭代公式如下:例如:a为2时平方根值为1.414214 /**found**/ double fun(double a,double x0)/**found**/ if(fabs(x1-x0)>0.00001)3 程序设计

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分数的学生数据放在b所指的数组中,并把人数通过形参n传回。

double fun(STREC *a,STREC *b,int *n){ double t=0;int i;*n=0;for(i=0;it)b[(*n)++]=a[i];return t;} 第九十七套 1 程序填空

给定程序中函数fun的功能是:找出形参s所指字符串

中出现频率最高的字母(不区分大小写),并统计其出现的次数。

第一处 ch=tolower(*s);第二处 k[n]+=1;

第三处 if(max

给定程序MODI1.C中函数fun的功能是:求s的值。例如:当K为10时,函数应为1.533852./**found**/ float fun(int k)/**found**/ return s;3程序设计

请编写函数fun,函数fun的功能是:计算并输出下列级数和:例如,当n=10时,函数值为0.909091.double fun(int n){

double s=0.0;int i;

for(i=1;i<=n;i++)s=s+1.0/(i*(i+1));rerurn s;}

第九十八套 1 程序填空

给定程序中函数fun的功能是:将形参n中个位上为偶数的取出,并按原来从高位到低位的顺序组成一个新的数。并作为函数值返回。第一处 i=1; 第二处 while(s)

第三处 x=x+t*i;i=i*10;2 程序修改

给定程序MODI1.C中函数fun的功能是:输出M行N列的整数方阵,然后求两条对角线上元素之和,返回此和数。

/**found**/

int fun(int n,int xx[][M])/**found**/

printf(“%d”,xx[i][j]);3程序设计

请编写函数fun,函数fun的功能是:将a、b中的两位正整数合并形成一个新的整数放在c中。合并的方式为:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的各位和百位上。void fun(int a,int b,long *c){

*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);第九十九套 1 程序填空

给定程序中函数fun的功能是:求出形参aa所指字符串数组中最长的字符串长度,其余字符串左边用字符*补齐,使其与最长字符串等长。字符串数组中共有M个字符串,且串长=0;j--)第三处 ss[i][j]=’*’;2 程序修改

给定程序MODI1.C中函数fun的功能是:计算整数n的阶乘。请改正程序中错误或在下划线处填上适当内容,删掉下划线,使它能计算出正确结果。/**found**/ result *=n--;/**found**/ return result;3程序设计

请编写函数fun,函数fun的功能是:从s所指的字符串删除给定的字符。同一字母的大小写按不同字符处理。int fun(char s[],char c){ char *p=s;int i=0;while(*p){ if(*p!=c)s[i++]=*p;p++;} s[i]=0;} 第一百套 1程序填空

给定程序通过定义并赋值的方式,利用结构体变量存储了一名学生的学号姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系统a。第一处 void modify(STU *ss,float a)第二处 ss->score[i]*=a;第三处 modify(&std,a);2 程序修改

给定程序MODI1.C中函数fun的功能是:求K<13>,所求阶乘的值作为函数值返回。例如,若 K=10,则应输出3628800 /**found**/

if(k>0)/**found**/ else if(k= =0)3程序设计

程序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[ ] [N],int n),函数的功能是:使数组左下三角元素中的值乘以n。int fun(int a[][N],int n){int i,j;for(i=0;i

二级C语言上机题库100套

(从光碟拷贝出来的最完整版)

(可以拷贝在U盘里,然后ctrl+F搜索,百分百

有答案,祝考试成功)

2018年3月全国计算机等级考试

第二篇:计算机等级考试二级C语言上机改错题考点汇总

计算机等级考试二级C语言上机改错题考点汇总

青年人网站小编发现很多考生对上机考试存在很大的问题,现在小编将在教学当中对二级C语言上机考试题库总结的经验和大家分享,希望能对我们考生的考试有所帮助,顺利通过考试!以下是对上机考试改错题的做题方法和总结,改错题的错误主要分为以下几类:

1、if或while语句

若错误行是if或者while语句,则要注意以下点:

1)首先判断是否正确书写if或while关键字;

2)然后看有没有用小括号把整个表达式括起来,若没有则加上小括号;

3)若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符;

4)若if条件表达式中只有一个等于号即数学等号(=),则要改写成两个等于号即逻辑等号(= =);

5)若if条件表达式为其他的比较运算符,则一般是进行逆转或加一个等于号;

2、for语句

若错误行是for语句,则要注意以下几点:

1)首先判断for有没有书写正确;

2)然后看for中的表达式是不是用分号(;)隔开,若不是则改为分号。

记住是分号(;),不是逗号(,)!

3)再者,分析for中的三个表达式,是否符合题意;

第一个表达式表示起始条件,第二个表达式表示终止条件,第三个表达式表示循环变量的变化。

3、return语句

若错误行为return语句,则要注意以下几点:

1)首先看是不是正确书写return关键字;

2)然后看是不是缺少分号,若是则加上分号即可;

3)再者判断return后的变量或表达式是否正确;

这种错误需要根据题意来分析,分析返回变量或表达式的值和类型。

4、赋值语句

若错误行是赋值语句,则要看赋值是否正确,然后看赋值运算符是否写正确。

5、定义语句

若错误行是定义语句,则要注意:

1)首先分析变量类型名是否写对;

2)然后分析给变量赋初值是否正确;

3)若以上均不是,则看是不是少定义了某个变量或少了花括号;

第三篇:《全国计算机等级考试二级教程C语言程序设计》

《全国计算机等级考试二级教程——C语言程序设计》

课后题及参考答案

第一章 程序设计基本概念

1.1 在TRUBO C环境中用RUN命令运行一个C程序时,所运行的程序的后缀是______。答案:.exe 1.2 C语言源程序文件的后缀是_____,经过编译后,生成文件的后缀是_____,经过连接后,生成文件的后缀是_____。

答案:.c.obj.exe 1.3 结构化程序由_____、_____、_____三种基本结构组成。答案:顺序、选择、循环 第二章 C程序设计的初步知识

一、选择题

2.1 以下选项中正确的整型常量是

A)12.B)-20

C)1,000

D)4 5 6

答案:B 2.2 以下选项中正确的实型常量是

A)0

B)3.1415

C)0.329×10(2)(10的2次方)

D).871

答案:D 2.3 以下选项中不正确的实型常量是

A)2.607E-1

B)0.8103e 2

C)-77.77

D)456e-2

答案:B 2.4 以下选项中不合法的用户标识符是

A)abc.c

B)file

C)Main

D)PRINTF

答案:A 2.5 以下选项中不合法的用户标识符是

A)_123

B)printf

C)A$

D)Dim

答案:C 2.6 C语言中运算对象必需是整型的运算符是

A)%

B)/

C)!

D)**

答案:A 2.7 可在C程序中用作用户标识符的一组标识符是

A)void

define

WORD

B)as_b3

_123

If

C)For

-abc

case

D)2c

DO

SIG

答案:B 2.8 若变量已正确定义并赋值,符合C语言语法的表达式是

A)a=a+7;

B)a=7+b+c,a++

C)int(12.3%4)

D)a=a+7=c+b

答案:B 2.9 以下叙述中正确的是

A)a是实型变量,C允许进行以下赋值a=10,因此可以这样说:实型变量中允许存放整型值。

B)在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。

C)执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为0。

D)已有a=3,b=5。当执行了表达式a=b,b=a之后,已使a中的值为5,b中的值为3。

答案:B 2.10 以下叙述中正确的是

A)在C程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示。

B)C程序由主函数组成。

C)C程序由函数组成。

D)C程序由函数和过程组成。

答案:C 2.11 TURBO C中int类型变量所占字节数是

A)1

B)2

C)3

D)4

答案:B 2.12 不合法的八进制数是

A)0

B)028

C)077

D)01

答案:B 2.13 不合法的十六进制数是

A)oxff

B)0Xabc

C)0x11

D)0x19

答案:A

二、填空题

2.14 若k为int整型变量且赋值11。请写出运算k++后表达式的值A)_____和变量的值B)_____。

答案:

11、12 2.15 若x为double型变量,请写出运算x=3.2,++x后表达式的值A)_____和变量的值B)_____。

答案:4.2、4.2 2.16 函数体由符号____开始,用符号____结束。函数体的前面是____部分,其后是____部分。

答案:{、}、定义、执行

2.17 C语言中的标识符可分为____、____、和预定义标识符三类。

答案:关键字、用户标识符

2.18 在C语言程序中,用关键字____定义基本整型量,用关键字____定义单精度实型变量,用关键字___定义双精度实型变量。

答案:int、float、double 2.19 把a1、a2定义成单精度实型变量,并赋初值1的定义语句是____。

答案:float a1=1.0,a2=1.0;

2.20 C程序中定义的变量,代表内存中的一个____。

答案:存储单元

2.21 表达式3.5+1/2的计算结果是____。

答案:3.5 2.22 对以下数学式,写出三个等价的C语言表达式____、____、____。

a×b

——

c

答案:a*b/c、a/c*b、b/c*a 2.23 表达式s=10应当读做“____”。

答案:将10赋给变量s 2.24 计算机中内存储器的最小存储单位称____,其中能容纳的数是____。

答案:位、0或1 2.25 通常一个字节包含____个二进制位。在一个字节中能存放的最大(十进制)整数是____,它的二进制数的形式是____;最小(十进制)整数是____,它的二进制数的形式是____。

答案:8、255、1111 1111、-128、1000 0000 2.26 当计算机用两个字节存放一个整数时,其中能存放的最大(十进制)整数是____、最小(十进制)整数是____,它的二进制数的形式是____。

答案:65535、-32768、1000 0000 0000 0000 2.27 在C语言中整数可用____进制数、____进制数和____进制数三种数制表示。

答案:十、八、十六

三、上机改错题

2.24 【分析与解答】

 第1行的错误:

(1)include是一个程序行,因此在此行的最后不应当有分号(;)。

(2)include程序行中后面的stdio.h是一个文件名,按规定,文件名应当放在一对双引号(″ ″)内,或放在一对尖括号(< >)内。 第2行的错误:

(1)main()是主函数的起始行,不是语句,因此最后不应当有分号(;)。

(2)在同一行上的/ * main function * / 显然是注释;C语言规定:注释由/*开头,由*/结束,但在*号和/之间不得插入任何空格,而在此处“/

*”和“/

*”之间存在空格,因此,/ * main function * /的写法式是错误的,而应写成:/* main function */。

第3行的错误:

(1)在主函数的起始行main()的后面是函数体,函数体由左花括号({)开始。但在函数体的第一行:float的前面缺少了左花括号({)。

(2)在同一行上的/* /*r is radius*/, /* s is area of circular*/ */ 显然是注释;C语言规定:注释由/*开头,由*/结束,并且开头的/*将去找最近的*/去配对,因此在/* /*r is radius*/中,第一个/*与最后的那个*/配上了对,结果紧跟在后面的那个逗号(,)落在了注释的外面,而构成了一个多余符号,为此,在编译时将报告“语法错”。

第6行的错误:

(1)printf(″%f \[KG-*3]n″,s)应当是一条输出语句,但在最后缺少了一个分号。

(2)printf(″%f \[KG-*3]n″,s);是程序的最后一条语句,程序应当结束;但缺少了程序体结束所需的右花括号(});此右花括号可以放在printf(″%f \[KG-*3]n″,s);的后面,也可以放在printf(″%f \[KG-*3]n″,s);的下一行上。

2.25 【分析与解答】

第1行的错误:在include行中的文件名应该是stdio.h,而不是stdio.a。 第2行的错误:在main的后面缺少一对圆括号。 第4行的错误:在c=40的后面缺少分号。

第6行的错误:在printf(″%f \〖KG-*3〗n″,v)的后面缺少分号。

第三章、顺序结构

一、选择题

3.1 若a、b、c、d都是int类型变量且初值为0,以下选项中不正确的赋值语句是

A)a=b=c=100;

B)d++;

C)c+b;

D)d=(c=22)-(b++);

答案:C 3.2 以下选项中不是C语句的是

A){int i;i++;printf(“%d”, i);}

B);

C)a=5,c=10

D){;}

答案:C 3.3 以下合法的C语言赋值语句是

A)A=B=58

B)k=int(a+b);

C)a=58,b=58

D)--i;

答案:D 3.4 以下程序的输出结果是

A)0

B)1

C)3

D)不确定的值

main()

{

int x=10,y=3;

printf(“%d”, y=x/y);

}

答案:C 3.5 若变量已正确说明为int类型,要给a、b、c输入数据,以下不正确的输入语句是

A)read(a,b,c);

B)scanf(“%d%d%d”,a,b,c);

C)scanf(“%D%D%D”,&a,&b,&c);

D)scanf(“%d%d%d”,&a,&b,&c);

答案:D 3.6 若变量已正确说明为float类型,要通过以下赋值语句给a赋予

10、b赋予

22、c赋予33,以下不正确的输入形式是

A)10 22 33

B)10.0,22.0,33.0

C)10.0 22.0 33.0

D)10 22 33

scanf(“%f %f %f”, &a, &b, &c);

答案:B 3.7 若变量以正确定义,要将a和b中的数进行交换,下面不正确的语句组是

A)a=a+b,b=a-b,a=a-b;

B)t=a,a=b,b=t;

C)a=t;t=b;b=a;

D)t=b;b=a;a=t;

答案:C 3.8 若变量已正确定义,以下程序段的输出结果是

A)输出格式说明与输出项不匹配,输出无定值

B)5.17000

C)5.168000

D)5.169000

x=5.16894;

printf(“%f”,(int)(x*1000+0.5)/(float)1000);

答案:D 3.9 若有以下程序段,c3中的值是

A)0

B)1/2

C)0.5

D)1

int c1=1,c2=2,c3;

c3=c1/c2;

答案:A 3.10 若有以下程序段,其输出结果是

A)0,0,-10

B)0,0,5

C)-10,3,-10

D)3,3,-10

int a=0,b=0,c=0;

c=(a-=a-5),(a=b,b+3);

printf(“%d,%d,%d”,a,b,c);

答案:B 3.11 当运行以下程序时,在键盘上从第一列开始输入9876543210(此处代表Enter),则程序的输出结果是

A)a=98,b=765,c=4321

B)a=10,b=432,c=8765

C)a=98,b=765.000000,c=4321.000000

D)a=98,b=765,c=4321.0

main(){

int a;float b,c;

scanf(“%2d%3f%4f”,&a,&b,&c);

printf(“a=%d,b=%f,c=%f”,a,b,c);}

答案:C 3.12 以下程序的输出结果是

A)a=%2,b=%5

B)a=2,b=5

C)a=%%d,b=%%d

D)a=%d,b=%d

main(){ int a=2,b=5;

printf(“a=%%d,b=%%d”,a,b);}

答案:D 3.13 若int类型占两个字节,则以下程序段的输出是

A)-1,-1

B)-1,32767

C)-1,32768

D)-1,65535

int a=-1;

printf(“%d,%u”,a,a);

答案:D 3.14 以下程序段的输出是

A)*496 *

B)* 496*

C)*000496* D)输出格式符不合法

int x=496;

printf(“*%-06d*”,x);

答案:A 3.15 以下程序段的输出是

A)|3.1415|

B)| 3.0|

C)|

3|

D)|

3.|

float a=3.1415;

printf(“|%6.0f|”,a);

答案:C 3.16 以下程序段的输出是

A)|2345.67800|

B)|12345.6780|

C)|12345.67800|

D)|12345.678|

printf(“|%10.5f|”,12345.678);

答案:C 3.17 以下程序段的输出是

A)*0000057.66*

B)*

57.66*

C)*0000057.67*

D)*

57.67*

float a=57.666;

printf(“*%010.2f*”,a);

答案:C 3.18 若从终端输入以下数据,要给变量C赋以283.19,则正确的输入语句是

A)scanf(“%f”,c);

B)scanf(“%8.4f”,&c);

C)scanf(“%6.2f”,&c);

D)scanf(“%8”,&c);

283.1900 表示Enter键

答案:由于印刷错误,本题没有正确答案。改正意见:

把选项A改为:scanf(“%f”,&c);或者把选项D改为:scanf(“%8f”,&c);则可分别选择A或者D为正确答案。

3.19 若变量已正确说明,要求用以下语句给a赋予3.12、给b赋予9.0,则正确的输入形式是(□代表空格)

A)3.12□□9.0

B)a=□□3.12b=□□□9

C)a=3.12,b=9

D)a=3.12□□,b=9□□□□

scanf(“a=%f,b=%f”,&a,&b);表示Enter键

答案:C 3.20 以下程序的输出结果是

A)9 8

B)8 9

C)6 6

D)以上三个都不对

#include “math.h” main(){ double a=-3.0, b=2;

printf(“%3.0f %3.0f”,pow(b,fabs(a)),pow(fabs(a),b));}

答案:B

二、填空题

3.21 若有以下定义,请写出以下程序段中输出语句执行后的输出结果。(1)____(2)____(3)____

int i=-200,j=2500;

printf(“(1)%d %d”,i,j);

printf(“(2)i=%d, j=%d”,i,j);

printf(“(3)i=%d j=%d”,i,j);

答案:

-200 2500

i=-200, j=2500

i=-200 j=2500 3.22 变量i、j、k已定义为int类型并有初值0,用以下语句进行输入时

scanf(“%d”,&i);scanf(“%d”,&j);scanf(“%d”,&k);当执行第一个输入语句,从键盘输入:

12.3 表示Enter键

则变量i、j、k的值分别是____、____、____。

答案:12、0、0 3.23 复合语句在语法上被认为是____。空语句的形式是____。

答案:一条语句、; 3.24 C语句的最后用____结束。

答案:;

3.25 以下程序段,要求通过scanf语句给变量赋值,然后输出变量的值。写出运行时给k输入100,给a输入25.81,给x输入1.89234时的三种可能的输入形式____、_____、____。

int k;float a;double x;

scanf(“%d%f%lf”,&k,&a,&x);

printf(“k=%d,a=%f,x=%f”,k,a,x);

答案:

(1)100 25.81 1.89234

(2)100 25.811.89234

(3)100 25.81 1.89234 3.26 以下程序段的输出结果是____。

int x=0177;

printf(“x=%3d,x=%6d,x=$%6o,x=%6x,x=%6u”,x,x,x,x,x);

答案:x=127,x= 127,x= 177,x=

7f,x= 127 3.27 以下程序段的输出结果是____。

int x=0177;

printf(“x=%-3d,x=%-6d,x=$%-06d,x=$%06d,x=%%06d”,x,x,x,x,x);

答案:

27、x=127,x=127,x=$127,x=$000127,x=%06d 3.28 以下程序段的输出结果是____。

double a=513.789215;

printf(“a=%8.6f,a=%8.2f,a=%14.8f,a=%14.8lf”,a,a,a,a);答案:a=513.789215,a= 513.79,a= 513.78921500,a= 513.78921500

三、编程题和改错题

3.16 【分析与解答】

(1)主函数名main后应有一对圆括号。(2)变量定义语句中,v的前面缺逗号。

(3)第三行的printf语句用以提示输入,但是原样输出的字符串没有用双引号括起来;另外,从输入的形式看,输入的数据紧跟在提示之后,因此,printf格式串中最后不应该有换行符——\n。

(4)因为输入项a、b、c从定义和计算结果来看都是double类型,因此,第四行scanf语句格式串中的格式说明不应当用%d而应当用%lf;且每一个变量之前应该加地址运算符&。

(5)第七行的printf语句中应当把%d都改成%lf或%f;按输出要求在格式串中应添加相应的原样输出的字符;因为下一个printf的输出从新的一行开始,因此在本输出语句的格式串的最后应当加换行符——\n。

(6)第八行的printf语句中应当把格式串整理合并放在输出项的前面,输出项放在后面,%d都改成%lf或%f;中间的\n删去。

(7)请读者自己写出修改后的程序,并上机调试。

3.17【分析与解答】

(1)分析:可用算术式560÷60把分钟换算成小时和分钟,商数就是小时数,余数就是分钟数。

(2)确定变量的名字和定义变量的类型:在程序中把小时数放在变量h中,把分钟数放在变量m中。这两个变量的类型可以是整型(本题中采用整型),也可以是实型。

(3)确定所用算法:求〖SX()560〖〗60〖SX〗〗的商数,在C语言中可以用整除的算法,语句是h=560/60。求余数可用求余运算符 %:560%60,其值放入变量m中的语句是:m=560%60。(4)设计输出格式。若输出的形式定为:小时:分钟,则按此形式设计输出语句。(5)把以上内容放在主函数的一对花括号中。(6)编写程序如下:

main() {

int h, m;

h=560/60;

m=560%60;

printf(″The result: %3d : %3d\n″, h,m);

 } 

运行结果是:

The result:

: 20

3.18 【分析与解答】

(1)确定变量的名字和定义变量的类型。若用a存放1500,用b存放350;用q存放商数,用r存放余数,所有变量应定义成int类型。

(2)设计输入语句从终端输入1500和350;在输入语句之前,应当设计一个输出语句,用以提示输入。(3)可用整除求商数,结果放在变量q中。可用求余运算符%求两数之余数,结果放在变量r中。(4)设计输出语句。输出a、b、q、r。

(5)把以上内容放在主函数的一对花括号中。

本题的程序与3.30相似,请读者参考上题并根据本题的解释自己编程,并上机调试。

3.19 【分析与解答】

(1)定义4个双精度变量a、b、c和ave,变量a、b、c分别存放读入的3个双精度数,ave存放它们的平均值。

(2)设计输入语句,以及在此之前用于提示输入的(printf)语句。(3)设计求平均值的算法,把所求得的平均值放入变量ave中。

(4)设计把变量ave中的数,从小数点后第二位数进行四舍五入的算法。现举例说明:若ave中的数为123.4644,为了保留此值小数点后一位,可用表达式:(int)(123.4644*10)/10.0;依次推算,为了保留此值小数点后二位,可用表达式:(int)(123.4644*100)/100.0;其他依此类推。

(5)若要求对小数点后第二位数进行四舍五入,则可对原数加0.05后再进行以上运算。如要求保留123.4644小数点后一位且对第二位数进行四舍五入,可用表达式:(int)((123.467+0.05)*10)/10.0。注意:分母一定要用实数10.0而不能用整数10,否则就变成整除了;若要求保留123.4644小数点后两位且对第三位数进行四舍五入,可用表达式:(int)((123.467+0.005)*100)/100.0;其他依此类推。(6)设计输出语句。输出a、b、c和ave。(7)把以上内容放在主函数的一对花括号中。(8)编写程序如下: main()

{

double a,b,c,ave; printf(″Enter a ,b ,c : ″);

scanf(″%lf%lf%lf″, &a, &b, &c); ave=(a+b+c)/3; printf(″ave=%f\n″, ave);

/*用以比较四舍五入前后的数据*/ ave=(int)((ave+0.05)*10)/10.0;

printf(″a=%f, b=%f, c=%f, ave=%f\n″, a,b,c,ave);

 } 

3.20 【分析与解答】

(1)关于对变量中的数进行交换的算法请参考3.7题中的解释和《教程》中有关的例题。

(2)定义4个整型变量a、b、c和t,变量a、b、c分别存放读入的3个整数,t用作临时存储单元。(3)设计输入语句,以及在此之前用于提示输入的(printf)语句。(4)输出a、b、c中的值,以便于比较。(5)交换的步骤如下: ① 把c中的值赋给t。 ② 把b中的值赋给c。 ③ 把a中的值赋给b。 ④ 把t中的值赋给a。

经过以上步骤,已按要求进行了交换。(6)输出a、b、c中的值。(7)编写程序如下: main()

{

int a, b, c, t;

printf(″Enter a, b, c :\n″); scanf(″%d%d%d″,&a,&b,&c);

printf(″(1)a=%d,b=%d,c=%d\n″,a,b ,c); t=c;c=b;b=a;a=t;

printf(″(2)a=%d,b=%d,c=%d\n″,a,b,c);

 } 

第四章、选择结构

一、选择题

4.1 下列运算符中优先级最高的运算符是

A)!

B)%

C)-=

D)&&

答案:A 4.2 下列运算符中优先级最低的运算符是

A)||

B)!=

C)<=

D)+

答案:A 4.3 为表示关系x≥y≥z,应使用的C语言表达式是

A)(x>=y)&&(y>=z)

B)(x>=y)AND(y>=z)

C)(x>=y>=z)

D)(x>=y)&(y>=z)

答案:A 4.4 设a、b和c都是int型变量,且a=3,b=4,c=5;则以下的表达式中,值为0的表达式是

A)a&&b

B)a<=b

C)a||b+c&&b-c

|1)

答案:D 4.5 以下程序的输出结果是

A)0

B)1

C)2

D)3

main()

{ int a=2,b=-1,c=2;

if(a

if(b<0)c=0;

else c+=1;

printf(“%d”,c);

}

D)!((a

答案:C 4.6 以下程序的输出结果是

A)1

B)2

C)3

D)4

main(){ int w=4,x=3,y=2,z=1;

printf(“%d”,(w

答案:A 4.7 若执行以下程序时从键盘上输入3和4,则输出结果是

A)14

B)16

C)18

D)20

main(){ int a,b,s;

scanf(“%d%d”,&a,&b);

s=a;

if(a

s*=s;

printf(“%d”,s);}

答案:B 4.8 下面的程序片段所表示的数学函数关系是

-1(x<0)A)y= 0(x=0)

1(x>0)

1(x<0)B)y=-1(x=0)

0(x>0)

0(x<0)C)y=-1(x=0)

1(x>0)

-1(x<0)D)y= 1(x=0)

0(x>0)

y=-1;if(x!=0)y=1;

if(x>0)y=1;else y=0;答案:A 4.9 运行以下程序后,输出

A)****

B)&&&&

C)####&&&&

D)有语法错误不能通过编译

main(){ int k=-3;

if(k<=0)printf(“****”)

else printf(“&&&&”);}

答案:D 4.10 若a和b均是正整型变量,以下正确的switch语句是 A)switch(pow(a,2)+pow(b,2))

{ case 1: case 3: y=a+b;break;

case 0: case 5: y=a-b;

} B)switch(a*a+b*b);

{ case 3:

case 1: y=a+b;break;

case 0: y=b-a;break;

} C)switch a

{ default: x=a+b;

case 10: y=a-b;break;

case 11: x=a*d;break;

} D)switch(a+b)

{ case10 : x=a+b;break;

case11 : y=a-b;break;

}

答案:没有正确答案。如果C选项改为: switch(a){ default: x=a+b;

case 10: y=a-b;break;

case 11: x=a*b;break;} 则答案可以选择C

二、填空题

4.11 C语言中用____表示逻辑值“真”,用____表示逻辑值“假”。

答案:非0、0 4.12 C语言中的关系运算符按优先级别是____、____、____、____。

答案:>、<、>=、<=、==、!= 4.13 C语言中的逻辑运算符按优先级别是____、____、____。

答案:!、&&、|| 4.14 C语言中的关系运算符和逻辑运算符的优先级别是____、____、____、____、____、____、____。

答案:!、<、>、==、!=、&&、|| 4.15 C语言中逻辑运算符____的优先级高于算术运算符。

答案:!

4.16 将下列数学式改写成C语言的关系表达式或逻辑表达式A)____B)____。

A)a=b或a

B)|x|>4

答案:A)a==b||a4||x<-4 4.17 请写出以下程序的 输出结果____。

main(){ int a=100;

if(a>100)printf(“%d”,a>100);

else

printf(“%d”,a<=100);}

答案:1 4.18 请写出与以下表达式等价的表达式A)____B)____。A)!(x>0)

B)!0

答案:A)x<=0 B)1 4.19 当a=1,b=2,c=3时,以下if语句执行后,a、b、c中的值分别为____、____、____。

if(a>c)

b=a;a=c;c=b;

答案:3、2、2 4.20 若变量已正确定义,以下语句段的输出结果是____。

x=0;y=2;z=3;

switch(x)

{ case 0: switch(y==2)

{ case 1: printf(“*”);break;

case 2: printf(“%”);break;

}

case 1: switch(z)

{ case

1: printf(“$”);

case

2: printf(“*”);break;

default : printf(“#”);

}

} 答案:*#

三、编程题

4.21 【分析与解答】

相关内容请参考《教程》4.2节和4.4节。(1)改写如下: switch(a/10)

{ default : m=5;break;

case 0 : case 1 : case 2 : m=1;break; case 3 : m=2;break; case 4 : m=3;break; case 5 : m=4;break; };

(2)本题中对a的判断条件有一定的规律可寻;关键是,在switch语句后的表达式中利用了a/10,从而简化了case标号。

4.22 【分析与解答】

编写本题的程序,首先要解决如何计算学生当前的年龄(设存放实足年龄的变量是age)。(1)如果当前的月份大于生日的月份,则学生的实足年龄age=y1-y0。

(2)如果当前的月份等于生日的月份,就要看日数,当前的日数大于或等于生日的日数,则学生的实足年龄age=y1-y0。

(3)如果不满足以上的条件,就可断定当前的日期没有超过生日日期,就是说学生的年龄应当是age=y1-y0-1。 以上3条,用C语言可以描述如下:

if((m1>m0)[JB>1|][JB>1|](m1==m0&&d1>=d0))age=y1-y0;

else age=y1-y0-1;

读者可以参考以上语句写出程序,也可以根据分析写出与此形式不同的语句和程序。 4.23【分析与解答】

(1)若输入的整数a是奇数,输出 dd number,是偶数输出:even number。

(2)若一个a是偶数,它就能被2除尽,即a%2==0,输出even number;若是奇数,它就不能被2除尽,即a%2!〖KG-*2〗=0,输出odd number。

读者可以参考以上给出的算法,写出相应的C语句,并编写出完整的程序。 4.24 【分析与解答】

本题的主要算法是从3个数中找出最大的那个数。假定始终把最大的数放在变量max中。(1)假定a中的数最大,把a赋给max。

(2)用b去和max比较,若b大于max,则把b赋给max;若不大于max,则什么也不做。(3)用c去和max比较,若c大于max,则把c赋给max;若不大于max,则什么也不做。(4)经过以上操作,max中已放入了a、b、c三个数中的最大数,输出max即可。 读者可以参考以上给出的算法,写出相应的C语句,并编写出完整的程序。 4.25 【分析与解答】

(1)本题已给出了非常明确的条件,只要写出正确的条件判断语句就可基本完成程序的编写。

(2)由给出的函数可知,只有x的值在规定的范围内时,才求出y的值,因此程序应当对输入的x进行判断,若超过范围就不求y的值。

(3)现以使用if[CD#*2]else语句为例写出程序供参考。

main() {

int x,y;printf(″Enter x : ″);scanf(″%d″, &x); if(x>-5&&x<10)

{

if(x==0)y=x-1;

else if(x<10 && x>0)y=x+1; else if(x<0 && x>-5)y=x;

printf(″x=%d y=%d\n″, x,y);

 }

printf(″***END***\n\n″);

 } 

第五章、循环结构

一、选择题

5.1 以下程序段的输出结果是

A)9

B)1

C)11

int k,j,s;

for(k=2;k<6;k++,k++)

{ s=1;

for(j=k;j<6;j++)s+=j;

}

printf(“%d”, s);

答案:D 5.2 以下程序段的输出结果是

A)12

B)15

C)20

int i,j,m=0;

for(i=1;i<=15;i+=4)

for(j=3;j<=19;j+=4)m++;

printf(“%d”, m);

答案:C 5.3 以下程序段的输出结果是

A)10

B)9

C)10

D)9

D)10 D)25

int n=10;

while(n>7)

{ n--;

printf(“%d”, n);

}

答案:B 5.4 以下程序段的输出结果是

A)1

B)3 0

C)1-2

int x=3;

do

{ printf(“%3d”,x-=2);}

while(!(--x));

答案:C 5.5 以下程序段的输出结果是

A)15

B)14

C)不确定

main()

{ int i,sum;

for(i=1;i<6;i++)sum+=sum;

printf(“%d”,sum);

}

答案:C 5.6 以下程序段的输出结果是

A)741

B)852

C)963

main()

{ int y=10;

for(;y>0;y--)

if(y%3==0)

{ printf(“%d”,--y);continue;

}

答案:B 5.7 若x是int型变量,以下程序段的输出结果是

A)**3

##4

**5

B)##3

**4

##5

C)##3

**4##5

D)**3##4

**5

for(x=3;x<6;x++)

printf((x%2)?(“**%d”):(##%d“),x);

D)死循环

D)0 D)875421 }

答案:D 5.8 以下程序的输出结果是

A)*#*#*#$

B)#*#*#*$

C)*#*#$

D)#*#*$

main(){ int i;

for(i=1;i<=5;i++)

{ if(i%2)printf(”*“);

else

contionue;

printf(”#“);

}

printf(”$“);}

答案:A 5.9 以下叙述正确的是

A)do_while语句构成的循环不能用其它语句构成的循环来代替。

B)do_while语句构成的循环只能用break语句退出。

C)用do_while语句构成循环时,只有在while后的表达式为非零时结束循环。

D)用do_while语句构成循环时,只有在while后的表达式为零时结束循环。

答案:D 5.10 以下程序的输出结果是

A)39 81

B)42 84

C)26 68

D)28 70

main(){ int x,i;

for(i=1;i<=100;i++)

{ x=i;

if(++x%2==0)

if(++x%3==0)

if(++x%7==0)

printf(”%d “, x);

}

printf(”“);}

答案:D

二、填空题

5.11 当执行以下程序段后,i的值是____、j的值是____、k的值是____。

int a,b,c,d,i,j,k;a=10;b=c=d=5;i=j=k=0;for(;a>b;++b)i++;while(a>++c)j++;do k++;while(a>d++);

答案:5、4、6 5.12 以下程序段的输出结果是____。

int k,n,m;n=10;m=1;k=1;while(k<=n)m*=2;printf(”%d“,m);

答案:死循环

5.13 以下程序的输出结果是____。

main(){ int x=2;

while(x--);

printf(”%d“,x);}

答案:-1 5.14 以下程序段的输出结果是____。

int i=0,sum=1;

do { sum+=i++;}while(i<5);

printf(”%d“,sum);

答案:11 5.15 有以下程序段:

s=1.0;

for(k=1;k<=n;k++)s=s+1.0/(k*(k+1));

printf(”%f“,s);请填空,使下面的程序段的功能完全与之等同。

s=0.0;

____;

k=0;

do

{ s=s+d;

____;

d=1.0/(k*(k+1));

}

while(____);

printf(”%f“,s);

答案:d=1.0、k++、k<=n 5.16 以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。

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(”amax=%famin=%f“,amax,amin);

}

答案:x>=0、x

三、编程题

5.17【分析与解答】

(1)本题的基本算法是求累加值。累加项的值有规律的递增,每一项的绝对值比前一项增2,因此可以利用循环的控制变量的递增来得到累加项的绝对值。例如:

for(i=1;i<=101;i+=2)„

(2)按所给的算式可以看到,累加项的符号是在交叉改变的,为此应当在循环体内设

置一个变量,使它的符号按此规律交叉改变,这可用:s=-s;来实现,s的初值为1;当s的值为1时,赋值后s中新的值为-1,当s的值为-1时,赋值后s中新的值为1。用s去乘累加项,将使累加项的符号也随之有规律地改变。(3)若累加和放在变量sum中,累加项放在变量t中,按照以上叙述,for循环体内的语句可以设计如下:

s=-s;t=s*i;sum=sum+t;(4)sum的值是51。

(5)请读者自己对变量做出正确的定义并赋初值,设计输出语句,完善程序。

5.18 【分析与解答】

(1)本题的基本算法是求累加值。累加项的分子部分都是1;分母的值有规律的递增,依次为1!、2!、„、n!,即,若第i-1项的累加项为

t(i-1),则第i项的累加项是 t(i-1)*i,在程序中可用表达式:t=t/i(i从1变化到n)来表示。(2)根据以上分析,若用变量t来存放累加项,当i的值从1变化到n时,可用以下语句来实现累加:

t=t/i;e+=t;

(3)为了实现累加过程,以上语句应当放在循环内,循环控制变量从1变化到n。

(4)若用for循环,按题目要求已指定n的值是50。若用while循环,并没有指定n的值,但已指定了循环结束的条件,当t的值小于10-4结束循环。(5)现例示用while循环来求e值的部分程序: i=1;e=1.0;t=1.0; while(t>=1e-4) {

t=t/i; e+=t; i++; } 

(6)请读者自己对变量做出正确的定义,设计输出语句,完善程序;也可以参考此程序段,按照自己的思路独立地完成程序。(7)e的值应当是:2.71828。

(8)根据以上分析,读者已不难用for循环来实现求e值的计算。

(9)注意:在完成此程序时,不要对分母中的阶乘值进行单独计算,因为17!的值已超过long类型的最大值,更无法求到50!。

5.19【分析与解答】

(1)从1880年至2000年的年数可用一个for循环来取得。

(2)对每一年,用以上指定的条件来进行判断,若满足条件即为闰年,进行输出。

(3)按输出的要求,需要设一个变量用于统计一行中输出的个数,若在一行上已连续输出了5个年数,就需输出一个换行符,使下一个输出项在新的一行上开始;若用变量n来做此统计,则当表达式n%5==0时就应输出一个换行符,同时使n重新置0值。

(4)若变量y代表年数,if语句的逻辑表达式可以写成如下:

(y%4==0 && y%100!=0[JB>1|][JB>1|]y%400==0)(5)以下程序段供参考:

for(y=1880;y<=2000;y++)

if(y%4==0 && y%100![KG-*2]=0[JB>1|][JB>1|]y%400==0) {

printf(″%d ″,y); n++;

if(n%5==0)

{ printf(″\n″);n=0;} }

(6)请读者自己对变量做出正确的定义并赋初值,完善程序;也可以参考此程序段,按照自己的思路独立地完成程序。从1880年至2000年有30个闰年。

5.20 【分析与解答】

(1)不难理解利用以下的for循环可以在一行上连续输出n个*号:

for(i=1;i<=n;i++)printf(″*″);

printf(″\n″);

若n的值是6,则连续输出6个*号。

(2)以上图形是在各行上输出数目不等的*号,只是*号的数目依次有规律地变化。在上半部分各行依次是1、3、5、7个,因此可以用以下的程序段来实现这样的输出:

for(k=1;k<=7;k++,k++)

{

for(i=1;i<=k;i++)printf(″*″); printf(″\n″);

 } 

在下半部依次是5、3、1个;因此可以用以下的程序段来实现这样的输出:

for(k=5;k>=1;k--,k--)

{

for(i=1;i<=k;i++)printf(″*″); printf(″\n″);

 } 

以上程序段从第一列起输出的结果如下: * *** ***** ******* ***** *** * 

现在我们已完成了在每行输出指定数目的*号。

(3)输出结果与题目要求不同,它们的区别是:按题目每一行之前有不同的空格,而这里则是所有的行都在第一列上开始输出*号;所以接着就应当解决这一问题。(4)分析题目要求,每行第一个*号位置的缩进是有规律的,假定中间这一行第一个*号位置是在第一列,则可看出,第一至第三行的缩进分别是3、2、1个空格;而图形下半部的缩进数则刚好相反。这可在以上循环中添加输出连续空格的for循环来实现,对于上半部程序如下:

b=3; for(k=1;k<=7;k++,k++)

{

for(j=1;j<=b;j++)printf(″ ″);b--;

for(i=1;i<=k;i++)printf(″*″); printf(″\n″);

 } 

(5)请读者在理解以上给出的示例的基础上,自己添加下半部空格的输出。

第六章、字符型数据

一、选择题

6.1 C语言中的简单数据类型有

A)整型、实型、逻辑型

B)整型、实型、字符型

C)整型、字符型、逻辑型

D)整型、实型、逻辑型、字符型

答案:B 6.2 C语言中,字符(char)型数据在微机内存中的存储形式是

A)反码

B)补码

C)EBCDIC码

D)ASCII码

答案:D 6.3 设有语句char a=''72'';,则变量a

A)包含1个字符

B)包含2个字符

C)包含3个字符

D)说明不合法

答案:A 6.4 C语言中不合法的字符常量是

A)''xff''

B)''65''

C)''&''

D)''28''

答案:本题A)和D)选项都是不合法的字符常量。若A)选项改为''ÿ'',则正确。6.5 C语言中不合法的字符串常量是

A)”121“

B)''y=''

C)” “

D)”ABCDm“

答案:B 6.6 判断char型变量c是否为大写字母的最简单且正确的表达式是

A)''A''<=c<=''Z''

B)(c>=''A'')&(c<=''Z'')

C)(''A''<=c)AND(''Z''>=c)

D)(c>=''A'')&&(c<=''Z'')

答案:D 6.7 以下程序的输出结果是

A)因输出格式不合法,无正确输出

B)65,90

C)A,Y

D)65,89

main(){ char c1=''A'',c2=''Y'';

printf(”%d,%d“,c1,c2);}

答案:D 6.8 以下程序段的输出结果是

A)A

B)a

C)Z

D)z

main(){ char x=''A'';

x=(x>=''A''&&x<=''Z'')?(x+32):x;

printf(”%c“,x);}

答案:B 6.9 以下程序的输出结果是

A)67,C

B)B,C

C)C,D

D)不确定的值

main(){ char ch1,ch2;

ch1=''A''+''5''-''3'';

ch2=''A''+''5''-''3'';

printf(”%d,%c“,ch1,ch2);}

答案:A 6.10 对以下程序,从第一列开始输入数据:2473代表Enter。程序的输出结果是

A)668977

B)668966

C)66778777

D)6688766

#include ”stdio.h“ main(){ int c;

while((c=getchar())!='''')

{ switch(c-''2'')

{ case 0 :

case 1 : putchar(c+4);

case 2 : putchar(c+4);break;

case 3 : putchar(c+3);

default : putchar(c+2);break;

}

printf(”“);

} }

答案:A 6.11 若变量已正确说明,要求用以下语句给c1赋予字符%、给c2赋予字符#、给a赋予2.0、给b赋予4.0,则正确的输入形式是(□代表空格)

A)2.0□%□4.0□#

B)2.0%4.0#

C)2%□□4#

D)2□%□4□

scanf(”%f%c%f%c“,&a,&c1,&b,&c2);

代表Enter键)

答案:B

二、填空题

6.12 EOF的十进制值是____。

答案:-1 6.13 C语言中,字符占内存____个字节。

答案:1 6.14 调用C语言对字符处理的库函数时,在#include命令行中应包括的头文件是____。

答案:string.h 6.15 若输入字符A,在以下while语句执行后ch的值是____。

while(ch=getchar()==''A'');

答案:1 6.16 若要通过以下语句给a、b、c、d分别输入字符A、B、C、D,给w、x、y、z分别输入10、20、30、40,正确的输入形式是____,请用代表Enter键。

scanf(”%d%c%d%c%d%c%d%c“,&w,&a,&x,&b,&y,&c,&z,&d);

答案:10A20B30C40D 6.17 若有以下说明和输入语句,要求给c1、c2输入字符A和B,给a1、a2输入7.29和101.298,从键盘正确输入数据的形式是____。

char c1,c2;

float a1,a2;

scanf(”%f%f“,&a1,&a2);

scanf(”%c%c“,&c1,&c2);

答案:7.29101.298AB 6.18 若有以下说明和输入语句,要求给c1、c2输入字符A和B,给a1、a2输入7.29和101.298,从键盘正确输入数据的形式是____。

char c1,c2;

float a1,a2;

scanf(”%c%f%c%f“,&c1,&a1,&c2,&a2);

答案:A7.29B101.298 6.19 若有以下说明和输入语句,要求给c1、c2、c3输入字符A、B和C,请写出各种从键盘正确输入数据的形式。

char c1,c2,c;

scanf(”%4c“,&c1);

scanf(”%4c“,&c2);

scanf(”%4c“,&c3);答案:A□□□B□□□C□□□

三、编程题

6.20【分析与解答】

(1)在进行字符输入时,即使一次输入了一行字符(最后用回车结束输入),字符也只能一个一个地读入。若ch已定义为char型变量,可以用以下的程序段来完成操作:

ch=getchar(); while(ch![KG-*2]=′\n′) {

„„ ch=getchar(); } 

当读入的是一个回车符时,循环就结束。循环体内的“„„”符号表示需要在循环体内完成的其他操作。

(2)在循环内要求进行的操作之一是:输出每个字符以及与之对应的ASCII代码值。因此可用以下语句来实现。 printf(″%c : %d ″,ch,ch);

(3)在循环内要求进行的另一个操作是:每行只能输出3对字符和与之对应的ASCII代码值。若n已定义为int型变量,则可用来作计数器;使n的初值为0,每输出一次,n的值增1,当n的值为3的整数倍时,额外输出一个换行符。例如: n++;

if(n%3==0)putchar(′\n′);

(4)把(2)和(3)中给出的语句放在循环体内,并按要求给出正确的定义和初值,就可完成题目所要求的操作。(5)也可以在while后的一对括号中来完成字符的读入,如while((ch=getchar())![KG-*2]=′\n′)。这时,循环内、外的“ch=getchar();”语句应当去掉。

6.21【分析与解答】

(1)一行字符的读入,请参照题6.20(1)和(5)中的解释。循环体内的“„„”符号表示需要在循环体内完成的其他操作。

ch=getchar(); while(ch![KG-*2]=′\n′) {

„„ ch=getchar(); } 

(2)在本题中循环体内需要把读入的所有数字字符转换成一个整数。若用变量n来存放这个整数,为了保证有效的存放,应当把它定义成long类型。

(3)要把输入的一串数字字符转换成一个整数,首先需要判断当前读入的字符是否是数字字符,若不是则什么也不做;若是,则进行以下操作:

① 把当前读入的一个字符转换成一个一位整数,这可由语句“d=ch-′0′;”来实现,在这里d是一个整型变量; ② 把d中的一位数归并到n的低位中,这可用语句“n=n*10+d;”来实现。这里所述的操作可由以下语句来完成:

if(ch>=′0′&&ch<=′9′){ d=ch-′0′;n=n*10+d;} if语句后一对括号中的判断表达式可以调用字符函数isdigit来实现:

if(isdigit(ch)){ d=ch-′0′;n=n*10+d;} if子句的两个语句可以合并成:n=n*10+ch-′0′。(4)把(3)中的语句放入循环中: ch=getchar();

while(ch![KG-*2]=′\n′)

{

if(ch>=′0′&&ch<=′9′)n=n*10+ ch-′0′; ch=getchar(); } 

(5)请自己写出定义语句并赋初值。注意,最后输出n时,应当使用格式说明%ld,而不能使用%d。

6.22【分析与解答】

(1)行数的统计可通过统计输入的′\n′符的个数来完成。

(2)统计的过程应当放在一个while循环体中;判断循环是否进行的条件可以用:((ch=getchar())==EOF)。若用整型变量n作为计数器对′\n′符进行统计,只要读入的字符是′\n′,则n增1。如:

while((ch=getchar())![KG-*2]=EOF) if(ch==′\n′)n++;

(3)EOF是在stdio.h中预定义了的标识符,在TURBO C的环境下,键入Ctrl+Z(即按住键盘上的Ctrl键,同时按字母Z键)后,敲Enter键,即输入了EOF。

6.23【分析与解答】

(1)本题要求的操作同样可在while循环中完成:

while((ch=getchar())!=′\n′)

{

„„

}

(2)若用整型变量n作为计数器对小写字母进行统计,只要读入的字符是小写字母,则n增1。如:

if(ch>=′a′ && ch<=′z′)n++;(3)在退出循环后,输出n的值。(4)请自己完善程序。

6.24【分析与解答】

(1)若图案的行数输入到变量L中。

(2)按要求L决定了图形的行数,因此可通过循环来实现L行的输出:

for(i=1;i<=L;i++)

{ „„ }

循环体中的“„„”号,代表输出L行的操作。

(3)假定ch中存放了一个字符,我们知道,通过以下循环可以在一行上输出n个字符:

for(j=1;j<=n;j++)putchar(ch);

putchar(′\n′);

注意,在循环后putchar(′\n′);语句不可少,它用以换行。

(4)现在应当解决如何按要求给出每行输出的字符。由图分析,行数(或行号)为1时输出字符A,行数为2时输出字母B„„若输出的字母放在变量ch中,行号取决于外循环的控制变量i,则输出的字母和行号的关系可用表达式:ch=′A′+i-1来表示。当i为1时ch中被赋予字母A,当i为2时ch中被赋予了字母B,其他依此类推。因此,在此表达式后,利用(3)中的循环就解决了各行上输出的字母。(5)按要求每行输出的字母的个数不同,第二行输出3个字母,第三行输出5个字母,第四行输出7个字母„„(3)中for循环体的执行次数取决于n的值,也就是说n的值决定了每行输出字母的个数。其实,n的值与行号有着密切的关系:n=2*i-1,当i为1时n的值是

1、当i的2时n的值是

3、当i的3时n的值是

5、当i的4时n的值是7。因此在(3)中for循环之前可用此表达式求出n的值。(6)总结以上分析,我们可得到以下的程序段: for(i=1;i<=L;i++) {

ch=′A′+i-1; n=2*i-1;

for(j=1;j<=n;j++)putchar(ch); putchar(′\n′);

 } 

若所用的变量都已正确定义,通过输入L的值为5,则程序段在第一列起有以下的输出结果: 

A

BBB

CCCCC

DDDDDDD

EEEEEEEEE

和题目的要求比较已趋接近,不同的是在每行没有适当的缩进。

(7)现在来解决每行的缩进问题。由题中给出的图形可知,若指定输出5行,第一行缩进5个空格,第二行则缩进4个空格,第三行则缩进3个空格,第四行则缩进2个空格,第五行则缩进1个空格。这同样可以由以下的for循环来实现:

for(k=L;k>=i;k--)putchar(′ ′);

把此循环放在i控制的循环体内、输出每行字符的循环之前即可。

(8)请读者自己补充有关的include行、语句和变量的定义,以完成整个程序。注意,如果有能力可在某些地方作些简化。

第七章、函数

一、选择题

7.1 以下说法中正确的是

A)C语言程序总是从第一个定义的函数开始执行

B)在C语言程序中,要调用的函数必须在main函数中定义

C)C语言程序总是从main函数开始执行

D)C语言程序中的main函数必须放在程序的开始部分

答案:C 7.2 以下函数的类型是

A)与参数x的类型相同

B)void类型

C)int类型

D)无法确定

fff(float x)

{ printf(”%d“,x*x);}

答案:C 7.3 以下函数调用语句中,含有的实参个数是

A)1

B)2

C)4

D)5

func((exp1,exp2),(exp3,exp4,exp5));

答案:B 7.4 以下程序的输出结果是

A)11

B)20

C)21

D)31

fun(int a,int b){ int c;

c=a+b;

return c;

} main(){ int x=6,y=7,z=8,r;

r=func((x--,y++,x+y),z--);

printf(”%d“,r);}

答案:C 7.5 以下程序的输出结果是

A)-1

B)0

C)1

D)2

main(){ int i=2,p;

p=f(i,i+1);

printf(”%d“,p);} int f(int a, int b){ int c;

c=a;

if(a>b)c=1;

else if(a==b)c=0;

else c=-1;

return(c);}

答案:A 7.6 以下程序的输出结果是

A)0

B)1

C)6

D)无定值

fun(int a,int b,int c){ c=a*b;

} main(){ int c;

fun(2,3,c);

printf(”%d“,c);}

答案:D 7.7 以下程序的输出结果是

A)5.500000

B)3.000000

C)4.000000 D)8.25

double f(int n){ int i;

double s;

s=1.0;

for(i=1;i<=n;i++)s+=1.0/i;

return s;} main(){ int i,m=3;float a=0.0;

for(i=0;i

printf(”%f“,a);}

答案:A

二、填空题

7.8 以下程序的输出结果是____。

unsigned fun6(unsigned num){ unsigned k=1;

do

{ k*=num%10;

num/=10;}

while(num);

return k;} main(){ unsigned n=26;

printf(”%d“,fun6(n);}

答案:12 7.9 以下程序的输出结果是____。

double sub(double x,double y,double z){ y-=1.0;

z=z+x;

return z;} main(){ double a=2.5,b=9.0;

printf(”%f“,sub(b-a,a,a));}

答案:9.000000 7.10 以下程序的输出结果是____。

fun1(int a,int b){ int c;

a+=a;b+=b;

c=fun2(a,b);

return c*c;} fun2(int a,int b){ int c;

c=a*b%3;

return c;} main(){ int x=11,y=19;

printf(”%d“,fun1(x,y));}

答案:4 7.11 下面pi函数的功能是,根据以下公式返回满足精度ε要求的π的值。请填空。

π/2 = 1 + 1/3 +(1/3)*(2/5)+(1/3)*(2/5)*(3/7)+(1/3)*(2/5)*(3/7)*(4/9)+...double pi(double eps){ double s=0.0,t=1.0;

int n;

for(_____;t>eps;n++)

{ s+=t;

t=n*t/(2*n+1);

}

return(2.0*_____);}

答案:n=

1、s 7.12 以下函数用以求x的y次方。请填空。

double fun(double x, int y){ int i;double z;

for(i=1;i_____;i++)

z=_____;

return z;}

答案:<=y、z*x 7.13 以下程序的功能是计算s=0!+1!+2!+3!+...+n!。请填空。

long f(int n){ int i;long s;

s=_____;

for(i=1;i<=n;i++)s=_____;

return s;} main(){ long s;int k,n;

scanf(”%d“,&n);

s=_____;

for(k=0;k<=n;k++)s=s+_____;

printf(”%ld“, s);}

答案:1L、s*i、0、f(k)

三、程序调试和编程题

7.14 【分析与解答】

(1)fun函数判断传给形参n的数是否为素数,若是函数返回1,否则返回0。

(2)函数的原意是用变量yes作为判断n是否为素数的标志,是素数,其值为1,否则为0。而所给函数的实际流程却不能实现这一功能,例如,若n的值为15(明显不是素数)时,在for循环中,当k的值为3时,就会执行if子句,yes得0,但for循环并没有终止,接着k为4时就会执行else子句,又使yes得1,由此可见此程序段并不能准确地判断一个数是否为素数;最后确定yes为何值的是for循环的终止值n/2,当n为15时,k的值为n/2等于7,在循环体内将又一次执行else子句,使yes得1,这时循环结束,函数返回1。由此可见所给fun函数不能起到预想的作用。

(3)由上分析可知,对于n的值为15时而言,问题是在一旦yes的值为0,已判断n中的值不是素数时,没有及时退出循环,返回0;因此,若在if子句中添加一条语句:break;就能解决这一问题,把if语句改写如下:

if(n%k==0){ yes=0;break;}

else yes=1;

(4)在所给fun函数中,当n的值为2、3时(都是素数),因为n/2的值为1(大于k中的2),所以不会进入for循环,而直接执行return语句,细心的读者应该可以发现,这时yes没有赋过值,也就是说,返回的是一个不确定的值,这将会导致错误;因此,应当在定义语句中给yes赋初值1:

int k,yes=1; 至此fun函数能正确运行。

(5)总结:因为一旦if语句中的表达式:n%k==0的值为1(即可被某数整除),则可以确定n不是素数,因此即可返回,不必再执行函数其他部分,if子句可改成:

if(n%k==0){ yes=0;return yes;}

else yes=1; 也可简化成:

if(n%k==0)return 0;

else yes=1;

又可进一步不用变量yes,并去掉else,简化成(请参考例7.4):

for(k=2;k<=n/2;k++) if(n%k==0)return 0;

return 1;

7.15【分析与解答】

(1)若用整型变量c存放余数,则求a被b除后的余数可用表达式:

c=a%b。

(2)本题要求编写函数mymod用以求a被b除后的余数即:

c=mymod(a,b);

(3)只要把a%b作为函数值返回即可完成操作(请参考例7.1):

int mymod(int a, int b)

{ return a%b;}

(4)总结:本题在算法上十分简单,只是要求读者能够掌握编写函数的基本知识。

7.16【分析与解答】

(1)本题所要采用的算法是累加。分析可见,所有累加项的分子都是1,而分母部分逐项增1;只是累加项的符号交叉变化。因此处理好符号的变化是完成操作的关键之一。

(2)若函数名为funa,传送到函数的参数是整型值,假定形参命名为n;函数的返回值应当是浮点型,为此函数的首部可以是:

double funa(int n)

(3)接着写函数体。累加放在一个for循环中来完成,若循环控制变量为k,可利用循环控制变量作为累加项t的分母,累加值放在add中:

for(k=1;k<=n;k++) {

„„

 t=s*1.0/k; add=add+t; } 

此处,s用作符号变量,在1和-1之间交叉变化,乘以1.0/k后,t的值也将按要求变化符号。注意,表达式1.0/k不可以写成1/k,因为每一项的绝对值必定是小于1的小数。

(4)现在需要确定s的值。最简单的可用表达式:s=-s来实现(请参考例5.2),若赋

值号右边s中的值为-1,则赋值号左边s中的值就得1;若赋值号右边s中的值为1,则赋值号左边s中的值就会得-1;则每循环一次就使s改变了一次符号。当然还可有多种方法。把以上表达式添加到循环体中:

for(k=1;k<=n;k++) {

s=-s; t=s*1.0/k; add=add+t; } 

(5)最后注意应当给各变量赋以适当的初值,并返回函数值。

(6)请编写主函数。当传给形参的值为10时,函数的返回值应当是:0.645635。

(7)总结:本题的算法并不复杂,但是需要读者掌握编写函数的基本知识。掌握需要传入函。

数的参数及其类型,掌握需要返回的值及其类型。在此基础上,其他方面与先前在主函数中编写的程序没有什么区别。

7.17 【分析与解答】

(1)此题与7.18相似。函数的返回值为浮点型,函数只有一个形参,为整型。

(2)函数的基本算法是累加,只是除第一项外其余各项都用减法;每一项的分子都是1,分母部分为k2,k的值逐项增1,由2变化到m。因此,算法可以用一个循环来实现。(3)当m的值为12时,函数值应是:0.435023。

7.18【分析与解答】

(1)若函数取名为fun,按题意,x作为形参,由调用函数传入,其类型不应当用整型;表达式x2-5x+4的值作为函数值返回,函数值的类型应为浮点型。因此,很容易写出函数:

double fun(double x)

{ return x*x-5*x+4;}

(2)若在调用函数时,x和y2已正确定义,且x已有确定的值,则可用以下函数调用语句得到y2的值:

y2=fun(x+15);

(3)同样,若在调用函数时,x和y3已正确定义,且x已有确定的值,则可用以下函数调用语句得到y3的值:

y3=fun(sin(x)); 注意,因为在程序中调用了C语言提供的库函数sin,因此应当在程序的最前面包含以下命令行:

#i nclude

″math.h″

(4)参考(2)和(3)应不难写出求y1的语句,请读者自己完成。

(5)y1的值应是:-2.0。当x的值为5时,y2的值应是:304.0。当x的值为0.5时,y3的值应是:1.832721。

(6)总结:

① 本题已给出了函数需要求值的表达式,读者只需确定函数的类型和形参的类型,就可以写出函数,就像例7.1中求两数之和的函数一样简单。

② 在给定了函数之后,调用函数时,函数的实参应当是一个与形参类型一致的任意合法的

表达式。例如,可以是常量、算术表达式,也可以是函数等。就像例7.1中求两数之和的add函数一样,可以用add(3,4);来求3+4;当x、y有确定值时,可以用add(x*x,y*y);来求x2+y2;当x、y有确定值时,可以用add(sin(x+y),cos(x+y));来求sin(x+y)+cos(x+y),这同样可以通过add(sin(add(x,y)),cos((add(x,y)));来求得。

第八章

指针

一、选择题

8.1 若有定义:int x,*pb;则以下正确的赋值表达式是

A)pb=&x

B)pb=x

C)*pb=&x

答案: A

8.2 以下程序的输出结果是

A)因变量无定义输出不定值

B)0

C)-1

#include

main()

{ printf(”%d“,NULL);

}

答案: B

8.3 以下程序的输出结果是

A)5,2,3

B)-5,-12,-7

C)-5,-12,-17

void sub(int x,int y,int *z)

{ *z=y-x;

}

main()

{ int a,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf(”%d,%d,%d“,a,b,c);

}

答案: B

8.4 以下程序的输出结果是

A)4

B)6

C)8

D)10

main()

{ int k=2,m=4,n=6;int *pb=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);

D)*pb=*x

D)1

D)5,-2,-7 printf(”%d“,n);

}

答案: C

8.5 已知指针p的指向如图8.5所示,则执行语句*p++;后,*p的值是

A)20

B)30

C)21

D)31

答案: B

8.6 已知指针p的指向如图8.5所示,则表达式*++p的值是

A)20

B)30

C)21

答案: B 8.7 已知指针p的指向如图8.5所示,则表达式++*p的值是

A)20

B)30

C)21

答案: C

8.8 以下程序的输出结果是

A)23

B)24

C)25

D)26

void prtv(int *x)

{ printf(”%d“,++*x);

}

main()

{ int a=25;prtv(&a);

}

答案: D

8.9 以下程序的输出结果是

A)运行出错

B)100

C)a的地址

main()

{ int **k, *a b=100;a=&b;k=&a;printf(”%d“,**k);

}

答案: B

8.10 以下程序的输出结果是

A)4,3

B)2,3

C)3,4

D)3,2

void fun(float *a,float *b)

{ float w;*a=*a+*a;w=*a;*a=*b;

D)31

D)31 D)b的地址

*b=w;

}

main()

{ float x=2.0,y=3.0;float *px=&x,*py=&y;fun(px,py);printf(”%2.0f,%2.0f“,x,y);

}

答案: C

8.11 以下程序的输出结果是

A)9.000000

B)1.500000

10.500000

void sub(float x,float *y,float *z)

{ *y=*y-1.0;*z=*z+x;

}

main()

{ float a=2.5,b=9.0,*pa,*pb;pa=&a,pb=&b;sub(b-a,pa,pa);printf(”%f“,a);

}

答案: C

8.12 以下四个程序中不能对两个整形值进行交换的是

A)main(){ int a=10,b=20;

swap(&a,&b);

printf(”%d%d“,a,b);} swap(int *p, int *q){ int *t,a;

t=&a;

*t=*p;*p=*q;*q=*t;}

B)main(){ int a=10,b=20;

swap(&a,&b);

printf(”%d%d“,a,b);} swap(int *p, int *q){ int t;

t=*p;*p=*q;*q=t;

C)8.000000

D)

}

C)main(){ int *a,*b;

*a=10,*b=20;

swap(a,b);

printf(”%d%d“,*a,*b);} swap(int *p, int *q){ int t;

t=*p;*p=*q;*q=t;}

D)main(){ int a=10,b=20;

int *x=&a,*y=&b;

swap(x,y);

printf(”%d%d“,a,b);} swap(int *p, int *q){ int t;

t=*p;*p=*q;*q=st;}

答案:C

二、填空题

8.13 以下程序段的输出结果是_____。

int *var,ab;

ab=100;

var=&ab;

printf(”%d“,*var);答案:100

8.14 以下程序的输出结果是_____。

int ast(int x,int y,int *cp,int *dp)

{ *cp=x+y;*dp=x-y;

}

main()

{ int a,b,c,d;a=4;b=3;ast(a,b,&c,&d);

printf(”%d %d“,c,d);

}

答案:7 1 8.15 若有定义:char ch;

ab=*var+10;

(1)使指针p可以指向变量ch的定义语句是_____。

答案:char *p=&ch;

(2)使指针p可以指向变量ch的赋值语句是_____。

答案:p=&ch;

(3)通过指针p给变量ch读入字符scanf函数调用语句是_____。

答案:scanf(”%c“,*p);

(4)通过指针p给变量ch的赋字符的语句是_____。

答案:ch=*p;

5)通过指针p输出ch中字符的语句是_____。

答案: printf(”%c“,*p);

8.16 若有如图8.5所示五个连续的int类型的存储单元并赋值如图,且p和s的基类型皆为int,p已指向存储单元a[1]。

(1)通过指针p,给s赋值,使其指向最后一个存储单元a[4]的语句是____。

答案: s=p+3;

(2)用以移动指针s,使之指向中间的存储单元a[2]的表达式是____。

答案: s=s-2;

(3)已知k=2,指针s已指向存储单元a[2],表达式*(s+k)的值是____。

答案: 50

(4)指针s已指向存储单元a[2],不移动指针s,通过s引用存储单元a[3]的表达式是____。

答案: *(a+1)

5)指针s已指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是____。

答案: 2

6)若p指向存储单元a[0],则以下语句的输出结果是____。

for(i=0;i<5;i++)printf(”%d “,*(p+i));

printf(”“);

答案:10 20 30 40 50

三、编程题

8.17【分析与解答】

(1)若函数名为fun,按题意,函数不返回函数值;函数的形参需要接受传送过来的两个浮点数,因此需要有两个double类型的形参;另外要把它们的和值与差值,通过形参传送回去,这就要求有两个double类型的形参指针,接受传送过来的地址,以便通过指针把和值与差值传送给所指的主函数中的变量。因此函数的首部应当是:

void fun(double a, double b, double *p1, double *p2) 这里,a、b、p1、p2是自己取的名。

(2)假设把a、b的和值传送给p1所指的存储单元,可用语句:*p1=a+b;把a、b的差值传送给p2所指的存储单元,可用语句:*p2=a-b。(3)因此函数可写成:

void fun(double a,double b,double *p1,double *p2)

{ *p1=a+b;*p2=a-b;}

(4)在主函数中,若有定义语句:double x,y,z1,z2;,且x、y已赋值,则调用fun函数的语句可以是:fun(x,y,&z1,&z2)。

(5)总结:本题所要求的算法极简单,但它要求有两个值返回,用return语句就不可能返回两个函数值。要求读者能利用形参指针把要求的值间接地传回调用函数。

8.18【参考答案】

(1)若函数名为maxandmin,按题意,函数不返回函数值;函数将接受3个数(假定为int类型),并需要通过指针指向主函数中的两个int型变量,以便把最大值和最小值放入指针所指的存储单元中。因此函数的首部应当是:

void maxandmin(int a,int b,int c,int *pmax,int *pmin)

(2)函数体中需要实现求3个数的最大值和最小值的算法,此算法应当在学习第四章时已经掌握(可参考例4.2和习题4.24)。如果把a、b、c中的最大值暂时放在max中,把最小值放在min中,可用以下算法找到最大值: ① 假定a中的数最大,把a赋给max。

② 用b去和max比较,若b大于max,则把b赋给max;若不大于max,则什么也不做。 ③ 用c去和max比较,若c大于max,则把c赋给max;若不大于max,则什么也不做。 ④ 经过以上操作,max中已放入了a、b、c三个数中的最大数。 ⑤ 可模仿以上算法找到最小值:

min=a; if(b

(3)若最大值已放入max中,最小值已放入min中,则可用以下语句把最大和最小值放入指针pmax和pmin所指的存储单元中:

*pmax=max;*pmin=min;

(4)若主函数中已把3个数放入x、y、z中,要求把最大值放入m中,把最小值放在n中,则调用语句应当是:

maxandmin(x,y,x,&m,&n);

(5)总结:本题要求的算法在第四章应当已掌握,本题的主要目的是要求读者掌握如何通过指针把函数中的多个结果传回主函数。

第九章 数组

一、选择题 9.1 若已定义:

int a[ ]={0,1,2,3,4,5,6,7,8,9},*p=a,i;

其中0≤i≤9,则对a数组元素的引用不正确的是

A)a[p-a]

B)*(&a[i])C)p[i]

D)*(*(a+i))

答案:D

9.2 以下程序段给数组所有元素输入数据,应在下划线处填入的是

A)a+(i++)B)&a(i+1)

C)a+i

D)&a[++i]

main()

{ int a[10],i=0;while(i<10)scanf(”%d“,_________);

...}

答案:D 9.3 以下程序的输出结果是

A)3

B)4

C)1

D)2

main()

{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;printf(”%d“,*(p+2));

}

答案:A

9.4、以下程序的输出结果是

A)不确定的值 B)3

C)2

D)1

main()

{ int n[2]={0},i,j,k=2;for(i=0;i

for(j=0;j

}

答案: A

9.5 以下程序的输出结果是

A)17

B)18

C)19

D)20

main()

{ int a[ ]={2,4,6,8,10},y=1,x,*p;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);printf(”%d“,y);

}

答案: C 9.6 以下程序的输出结果是

A)6

B)8

C)4

D)2

main()

{ int a[10]={2,4,6,8},*p=a,i;for(i=0;i<4;i++)a[i]=*p++;printf(”%d“,a[2]);

}

答案:A 9.7 以下程序的输出结果是

A)720

B)120

C)24

D)6

f(int b[ ],int n)

{ int i,r=1;for(i=0;i<=n;i++)r=r*b[i];return r;

}

main()

{ int x,a[]={2,3,4,5,6,7,8,9};x=f(a,3);printf(”%d“,x);

}

答案:B 9.8 以下程序中若第一个printf语句输出的是194,则第二个printf语句的输出结果是

A)212

B)204

C)1a4

D)1a6

main()

{ int a[]={1,2,3,4,5,6,7,8,9,0},*p;p=a;printf(”%x“,p);printf(”%x“,p+9);

}

答案:D 9.9 以下程序的输出结果是

A)0987654321

B)4321098765 C)5678901234 D)0987651234

fun(int *s,int n1,int n2)

{ int i,j,t;i=n1;j=n2;while(i

t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;

i++;j--;}

}

main()

{ int a[10]={1,2,3,4,5,6,7,8,9,0},*p=a,i;fun(p,0,3);fun(p,4,9);fun(p,0,9);for(i=0;i<10;i++)printf(”%d“,*(a+i));

}

答案: C 9.10 以下程序的输出结果是

A)4 4

B)2 2

C)2 4

D)4 6

main()

{ int a[5]={2,4,6,8,10},*p,**k;p=a;

k=&p;printf(”%d “,*(p++));printf(”%d“,**k);

}

答案: C 9.11 当运行以下程序时输入三行,每行都是在第一列上开始,代表Enter键:

a

b

cdef

则程序的输出结果是

A)abcdef

B)a

C)a

D)a

b

b

b

c

cd

cdef

d

e

f

#include ”stdio.h“

#define N 6

main()

{ char c[N];

int i=0;for(i=0;i

}

答案: C 9.12 若有定义和语句:

int c[4][5],(*cp)[5];

cp=c;

则对c数组元素的引用正确的是

A)cp+1

B)*(cp+3)

C)*(cp+1)+3

D)*(cp+2)

答案: D 9.13 若已定义:

int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},(*prt)[3]=a,*p=a[0];

则能正确表示数组元素a[1][2]的表达式是

A)*((*prt+1)[2] B)*(*(p+5))C)(*prt+1)+2 D)*(*(a+1)+2)

答案: D 9.14 若有定义和语句:

int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},(*prt)[3]=a,*p[4],i;

for(i=0;i<4;i++)p[i]=a[i];

则不能够正确表示a数组元素的表达式是

A)a[4][3]

B)p[0][0]

C)prt[2][2]

D)(*(p+1))[1]

答案: A 9.15 以下程序的输出结果是

A)23

B)26

C)33

D)36

main()

{ int aa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];for(i=0;i<2;i++){ if(i==0)

aa[i][i+1]=*p+1;

else ++p;

printf(”%d“,*p);} printf(”“);

}

答案: A 9.16 以下程序的输出结果是

A)60

B)68

C)99

D)108

main()

{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};int(*p)[4]=a,i,j,k=0;for(i=0;i<3;i++)

for(j=0;j<2;j++)

k+=*(*(p+i)+j);printf(”%d“,k);

}

答案: A 9.17 以下程序的输出结果是

A)1,5,9,B)1,4,7,C)3,5,7,D)3,6,9,main()

{ int i,x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)printf(”%d,“,x[i][2-i]);

}

答案: C 9.18 若有定义语句 int(*p)[M];其中的标识符p是

A)M个指向整型变量的指针

B)指向M个整型变量的函数指针

C)一个指向具有M个整型元素的一维数组指针

D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量

答案: C

二、填空题

9.19 若有以下定义:

double w[10];

则w数组元素下标的上限是____,下限是____。

答案: 9 0

9.20 以下程序的输出结果是____。

main()

{ int a[]={2,4,6},*prt=&a[0],x=8,y,z;for(y=0;y<3;y++)

z=(*(prt+y)

}

答案:6 9.21 以下程序的输出结果是____。

main()

{ int arr[10],i,k=0;for(i=0;i<10;i++)arr[i]=i;for(i=0;i<4;i++)k+=arr[i]+i;printf(”%d“,k);

}

答案:12

9.22 以下程序的输出结果是____。

#define N 5

fun(char *s,char a,int n)

{ int j;*s=a;j=n;while(a

}

main()

{ char s[N+1];int k,p;for(k=1;k<=N;k++)s[k]=''''A''''+k+1;printf(”%d“,fun(s,''''E'''',N));

}

答案:3 9.23 若输入3个整数3,2,1,则以下程序的输出结果是____.void sub(int n,int uu[])

{ int t;t=uu[n--];t+=3*uu[n];n++;if(t>=10){ uu[n++]=t/10;uu[n]=t%10;} else uu[n]=t;

}

main()

{ int i,n,aa[10]={0};scanf(”%d%d%d“,&n,&aa[0],&aa[1]);for(i=1;i

}

答案: 2721

9.24 以下程序的输出结果是____.main()

{ int i,j,row,col,m;int arr[3][3]={{100,200,300},{28,72,-30},{-850,2,6}};m=arr[0][0];for(i=0;i<3;i++)

for(j=0;j<3;j++)

if(arr[i][j]

{ m=arr[i][j];row=i;col=j;} printf(”%d,%d,%d“,m,row,col);

}

答案:-850,2,0 9.25 以下findmax返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空。

findmax(int s[],int t)

{ int k,p;for(p=0,k=p;p

if(s[p]>s[k])____;return ____;

}

答案: k=p k

9.26 以下程序统计从终端输入的字符中每个大写字母的个数,num[0]中统计字母A的个数, 其它依次类推.用#号结束输入,请填空.#include

”stdio.h“

#include

”ctype.h“

main()

{ int num[26]={0},i;char c;while(____!=''''#'''')

if(isupper(c))

num[___]+=1;for(i=0;i<26;i++)

if(num[i])printf(”%c: %d“,i+''''A'''',num[i]);

}

答案:(c=getchar())c-''''A'''

三、上机题

9.27【分析与解答】

(1)对于字符的输入可参考教材例6.3和习题9.26中的while循环,只是要注意,循环的终止条件是:等于′\[KG-*3]n′。

(2)在while循环体中,用if条件来判断是否为数字字符,若是,就使对应的元素增1;if中的条件表达式可用C的库函数:isdigit(ch),这时要在程序前加:#i nclude 行;也可用:ch>[KG-*3]=′0′&&ch<[KG-*3]=′9′。

(3)若用num数组元素来进行统计,当ch中是数字“0”时,使num[0]增

1、当ch中是数字 “1”时,使num[1]增1„„num的下标表达式可用:ch-′0′。

(4)注意,在定义数组时,数组的大小应符合使用的要求。在利用数组元素作为计数器时,不要忘记首先应该给数组元素赋0值。

(5)总结:通过本题的编程,要求掌握利用数组元素作为计数器的基本算法。

9.28【分析与解答】

本题的编程请参考例9.8。(1)若有以下10个整数:

0 1 2 3 4 5 6 7 8 9 要求从第5个元素依次向前移,则移动之后的数列应该是:

0 1 2 4 5 6 7 8 9

第5个元素不是指下标为5的元素,而是指排列的顺序,对此数列而言是指数值为4的那个。(2)完成移动后,数列中的数据个数减1。

(3)若进行指定操作的函数名为moves,则函数的首部可如下:

void moves(int *a,int n,int *m) 这里a用以指向一维数组的首地址,n接受开始移动的元素的位置,m指向主函数中存放元素个数的变量,因为没有函数值返回,因此函数的类型定义为void。(4)可用以下for循环完成指定的移动:

for(i=n-1;i<*m;i[KG-*3]+[KG-*3]+)a[i-1]=a[i];

注意,应当先把第n个元素(下标为n-1)移到第n-1个元素(下标为n-2)的位置上,依次葱馨到后向前移动。(5)完成移动之后,应使m所指变量中的值减1,表示数列中的数据少了一个;这可由于句: *m=*m-1;来完成。

(6)可设计一个输出函数,在移动前、后调用此函数输出数组中的数据,以便验证操作是否正确。若输出函数名为:outarr,则函数首部可写成:

void outarr(int a[], int num)

形参a指向待输出的数组,num接受数组中元素的个数。输出操作可由一个for循环来完成:

for(i=0;i

printf(″\[KG-*3]n\[KG-*3]n″); 退出循环后的printf语句使上面的输出行结束。

(7)在主函数中定义所需的数组和变量。数组中的值可以在主函数中输入,也可定义一个函数用于输入数据。n的值在主函数中输入,然后调用以上函数。需要注意的是,给n输入的值不能是1,因为第一个元素(下标为0)再向前移,下标就越界了,同时,n的值也不可大于10,因为已指定只有10个元素。(8)总结:

① 对于需要进行多次的操作,如本程序中输出数组元素中的值,应当编写一个独立的函数多次调用,而不应重复地编写代码。虽然该函数中只是一个for循环,似乎在主函数中书写两次也不麻烦,但养成良好的模块化程序设计的风格却是十分重要的。

② 分析以上例子可见,所规定的操作,实际上删除了数列中的第n-1个元素,因此可见删除操作是由移动操作来完成的。

9.29【分析与解答】

(1)程序要求定义两个数组以便存放原始数据和从中选出的所有奇数。(2)若把函数命名为oods,则函数首部可写成:

void odds(int *a,int an,int *b,int *bn)

形参a指向存放原始数据的数组,an存放此数组中数据的个数;b指向另一个数组,此数组中将存放将选出的所有奇数,指针bn指向存放奇数个数的存储单元,因为将通过此指针,把奇数的个数传回主函数。(3)在odds函数中,可通过一个for循环选出所有的奇数:

for(i=0;i

if(a[i]%2){ b[j]=a[i];j[KG-*3]+[KG-*3]+;}

在for循环中逐个引用原始的数组元素,若元素中的值不能被2除尽(不为0),则把它放入b所指的数组中;j用作b的下标,每放入一个奇数后,j的值加1;注意,j的初值应该置0。

(4)当完成以上操作退出循环时,因为在循环内最后进行了一次j[KG-*3]+[KG-*3]+的操作,所以j的值就是奇数的个数,最后应当把它赋给*bn,以便通过指针bn把奇数的个数传回主函数。

(5)程序需要两次输出数组中元素的值,一次是输出原始数组中的值,一次是输出奇数数组中的值。因此可以使用题9.28中的outarr函数,进行两次调用。

(6)在主函数中应当定义所需的数组和变量,可以在主函数中给数组元素输入数据。

(7)总结:本题的算法很简单,要求读者能够编写独立的模块,并在函数之间熟练地传送数据。

9.30【分析与解答】

(1)例9.9完成了对整数由小到大的排序,而本题是对字符数组中的元素进行由大到小的排序;两者之间并无大的区别,只是数组的类型不同,字符数组中每个元素存放一个字符,字符的大小依据每个字符的ASCII码值的大小。

(2)若函数形参a指向主函数中待排序的数组,由大到小的排序只需改变内循环中if语句的条件表达式即可:

if(a[p]

(3)排序前后可以调用一个输出函数,输出原始数据和排序后的数据,可参考习题9.28的outarr函数,但注意,这里是对字符数组进行输出。

(4)总结:读者可以参考例9.9,程序基本相同,但在掌握排序算法的基础上,必须独立完成此程序,不要照抄。

9.31【分析与解答】

(1)我们把插入操作命名为函数insert,若待插入的数据放在形参x中,指针a指向主函数中的数组,指针n指向存放数组中元素的个数变量,因为插入后,数组中的数据会增加。函数的首部如下:

void insert(int *a,int x,int *n)(2)若数组中原有的有序数列按由小到大排列如下,共12个数:

14 17 18 19 20 22 24 26 29 30 33

若x中的数为21,我们立刻知道应插在何处,插入后数列如下,则插入后变成有13个数:

14 17 18 19 20 21 22 24 26 29 30 33 因此,对于程序来说应当做以下4件事:

① 能根据待插的数据,按“仍然有序的要求”判断出插入的位置。 ② 把位置腾出来,以便放入插入的数据,但原有的数据不能缺少。 ③ 把x中的数放入腾出来的位置中。 ④ 使原有数组中的数据个数增1。

(3)现在来做第一个步骤:确定插入的位置。用变量j来放置该位置在数组中的下标,以下while循环将完成此任务:

j=0;

while(j<*n && a[j]

因为已经假定数列按由小到大排列,当x的值大于当前的元素a[j]时,应当接着与下一个元素比较(执行j[KG-*3]+[KG-*3]+),直到x的值小于或等于当前的元素a[j]时,x就应当插入到下标为j的元素中,在此之前的所有值都比x小。当x的值小于a[0]时,不进入while循环,j的值为0。x就应当插入到下标为0的元素中。当x的值大于数组中所有的元素时,由条件:j<*n 可知,这时j的值将等于*n并退出循环。x就应当插入到下标为j的元素中。

(4)第二个步骤是要把下标为j的元素后原有的数据移走,但不能改变原来的顺序。那么只能把下标为j至下标为*n-1中的数据依次向后平移;这种平移,应当先把最后的、下标为*n-1的元素中的数据移到下标为*n的元素中,其他依次后移一个单元,直到把a[j]中的值放入a[j+1]中。这可由以下for循环来完成:

for(i=*n-1;i>[KG-*3]=j;i--)a[i+1]=a[i];(5)第三个步骤是把x放入a[j]中:a[j]=x;

(6)第四步是使存放数据个数的变量中的数增1:*n=*n+1;插入过程到此结束。

(7)可利用习题9.28中的outarr函数,在插入前和插入后两次输出数组元素,以判断操作是否正确。(8)请编写主函数,定义所需的数组和变量,给数组输入一组有序数,正确调用函数。(9)请按题目要求至少对程序运行3次,判断程序是否在各种情况下都能得到正确的结果。

(10)总结:插入算法是程序设计中的一种最基本的算法,希望读者在理解的基础上编写程序。

9.32【分析与解答】

(1)若函数名为change,函数首部如下: 

void change(int x,int *a, int *n)

形参x中存放一个待转换的十进制数,指针a指向一个一维数组,数组中每一个元素中存放一个0或1代表一位二进制数,指针变量n指向一个整型变量,其中存放在一维数组中二进制位的个数。

(2)函数中定义一个指针变量s,并把a所指的数组的首地址赋给它以便保留。把x每次被2除后的余数放在a当前所指的数组元素中,然后移动指针a指向下一个元素,并使x的值除2;重复此过程,直到x的值为0。可用以下的while循环来进行转换:

s=a;

while(x)

{ *a=x%2;a+[KG-*3]+;x=x/2;}

退出循环时,已把转换后的二进制数的每一位上的数放入主函数的数组元素中,但是应当注意,在a[0]中放的是二进制数的最低位,最后放入的是最高位。例如,整数8转换成的二进制数为100,则在a[0]、a[1]中存放的是0,而a[2]中存放的是1。

(3)函数中最后用:*n=a-s;把存放在一维数组中二进制位的个数放入n所指的变量中。因为s已指向主函数中数组的第一个元素(下标为0);在循环中,指针a不断后移,最后指向存放二进制数最高位的元素;所以a-s的值就是已存入数据的元素的个数。

(4)在主函数中输入待转换的十进制数,调用change函数后输出数组元素中的值,注意,因为在a[0]中放的是二进制数的最低位,因此输出的顺序应该从a[n]到a[0]。

9.33【分析与解答】

(1)若函数名为getone,形参指针a指向主函数中存放指定数据的数组。函数的首部如下:

void getone(int a[])

(2)函数中变量x用来存放得到的一个随机数,变量n用来存放数组中已放入的不同的随机数的个数,变量i用作下标变量。

(3)所有的工作在一个while循环中完成:

while(n<15){„„}

当不同的随机数的个数n的值等于15时退出循环。(4)在以上while循环中需要进行以下4项步骤: ① x=rand()%20;得到一个小于20的随机整数。

② i=0;准备从下标为0的元素开始去查找数组中是否有与x相同的数,若没有,就把x中的数加入到数组中(放在最后),若有,就什么也不做。

③ 用以下while循环从头到尾去检查数组中是否有与x值相同的元素:

while(i

a.当x不等于a[i]时,i[KG-*3]+[KG-*3]+,x再去与下一个元素进行比较,当遇到x等于a[i]时,说明在数组中已经有此数,因此不必再去比较,应当退出循环。

b.当x不等于a[i]时,i的值不断增1;当i的值等于n时,说明x已与数组中所有元素都比较过且都不相同,这时也应退出循环。

④ 如果i的值等于n时,数组中没有与x相同的元素,因此需要把新的值放入数组中,可用以下语句来实现:

if(i==n){ a[n]=x;n[KG-*3]+[KG-*3]+;}

因为已有的数据放在下标为0到n-1的元素中,因此新的数放在a[n]中,然后n[KG-*3]+[ KG-*3]+;即数组中不同数据的个数增1。

(5)接着重新循环,再去产生一个新的随机数,重复以上过程,直到n的值等于15时退出外循环。这时在数组中已放入了15个不同的随机整数。

(6)请在主函数中定义所需的数组和变量。调用getone函数后,可在主函数中输出所得的数据。(7)总结:

① getone函数的主要部分是查找,没有找到才进行下一步操作。

② C语言提供的库函数rand()每调用一次产生一个0到32767的随机整数,因此ran 9.34【分析与解答】

(1)本题可参考例9.11。

(2)本题可用define命令行定义N来代表一个常量(参考2.2.3节)。可定义4个独立的函数来实现所要求的操作。

第一个函数:

void getm(int(*[KG-*3]p)[N])

用于给二维数组元素赋随机数。形参p是一个行指针,N是二维数组的列数。 第二个函数:

void sum(int a[][N],int *rows,int *[KG-*3]cols)

用于求出二维数组每一行元素的和值放在形参指针rows所指的一维数组中,求出二维数组每一列元素的和值放在形参指针cols所指的一维数组中。形参a是一个行指针,N是二维数组的列数。 第三个函数:

void diagsum(int a[][N],int *dg1, int *dg2)

用于求出方阵的两个对角线上元素的和值,分别放在形参指针dg1和dg2所指的变量中。形参a是一个行指针,N是二维数组的列数。

第四个函数用于必要的输出,请读者自己设计。

(3)在getm函数中,利用一个双重循环,调用rand函数给二维数组赋值:

for(i=0;i

(4)在sum函数中,利用一个双重循环,分别求出每行的和值放入rows所指数组中,每列的和值放入cols所指数组中:

for(i=0;i

{ rows[i]+[KG-*3]=a[i][j];cols[i]+[KG-*3]=a[j][i];}

当i=0时,rows[i]+[KG-*3]=a[i][j];通过内循环控制变量j从0到N-1的变化,把下标为0行上的每一个元素的值累加,放入rows所指的、下标为0的数组元素中;而cols[i]+[KG-*3] =a[j][i];通过内循环控制变量j从0到N-1的变化,把下标为0列上的每一个元素的值累加,放入cols所指的、下标为0的数组元素中。其他依次类推。

因为进行累加运算,注意要给每个一维数组置初值0。

(5)在diagsum函数中,通过一个for循环来求得两对角线上元素之和:

for(i=0;i

在主对角线上的元素行下标和列下标相同。而在从右到左对角线上的元素,行下标从0变化到N-1;对于列下标,当行下标为0时,列下标为N-i-1,当行下标为1时,列下标也可用表达式N-i-1求得,其他依此类推。(6)请参考例9.11的outdata函数对二维数组和有关数据的输出。

(7)总结:对二维数组的操作,一般可利用一个双重循环来进行。本题虽然有多个任务,但可用函数,每个函数完成一个任务,每个函数都很简单,且都很容易读懂;一定要避免把所有的任务混在一起。 9.35【分析与解答】

(1)要进行相加的两个矩阵(假定为a和b)的行数应当相等,列数应当相等。两个矩阵相加就是把两个矩阵中下标相同的两个元素相加,相加的和值放在第三个矩阵(假定为c)、相同下标的元素中。即:c[i][j]=a[i][j]+b[i][j]。

(2)可以定义一个函数getms(参考题9.34),利用rand()函数给两个矩阵赋值。(3)定义addm函数,对两个矩阵相加:

void addm(int(*a)[M], int(*b)[M], int(*[KG-*3]c)[M])

这里a、b、c是行指针,分别指向三个二维数组(N行M列),要求这三个数组的行和列数相同。和值放在c所指数组中。矩阵相加的操作放在一个双重循环中:

for(i=0;i

void output(int(*a)[M]) 用双重循环来实现

for(i=0;i

{ for(j=0;j

可调用三次分别输出a、b、c三个矩阵。

(5)请在主函数中定义数组和所需的变量。调用getms函数得到原始数据,调用addm函数实现矩阵相加,调用输出函数输出三个矩阵。

9.36【分析与解答】

(1)为了输出以上表格,需要定义一个9×9的二维数组。在其中存入九九表中的数据。(2)定义函数gettab,在二维数组中存入九九表中的数据:

void gettab(int a[][N]) 形参a是一个指向9×9二维数组的行指针。

(3)在gettab函数中,可用以下for循环把九九表中的数据放入数组中:

for(i=0;i

for(j=0;j

(4)请读者参照前面的习题,设计output函数,输出九九表。表格的第二行:

(1)(2)(3)(4)(5)(6)(7)(8)(9) 可用以下语句输出:

for(i=1;i<[KG-*3]=9;i[KG-*3]+[KG-*3]+)printf(″(%d)″,i);

printf(″\[KG-*3]n″); 在二维数组每一行输出前(即内循环之前)加语句:printf(″(%d)″,i+1);就可得到每一行最前面的(1)、(2)、„、(9)。

(5)输出的格式不可能在第一次调试时就合适,一般需运行几次进行调整。(6)请读者自己完成主函数,定义所需的数组和变量,调用以上的函数。(7)总结:本题的算法很简单,只包含给二维数组的赋值和表格的输出,对于表格的格式,可以通过对程序的运行,逐步进行调整。

9.37【分析与解答】

(1)假定程序定义了M行N列的二维数组。可用define命令行定义N和M来分别代表两个常量(参考2.2.3节)。

(2)程序的功能可由几个独立的函数来实现。

① void getm(int(*[KG-*3]p)[N])形参p是一个行指针,指向M×N的数组首地址。getm函数的功能是通过调用rand函数给二维数组赋值。请参考习题9.34中的同名函数。

② void suml(int a[][N],int *rows)形参a是一个行指针,指向M×N的数组首地址,指针rows指向一个一维数组,在此数组元素中将存放每行元素之和。suml函数的功能是求出a所指二维数组中每一行元素之和并依次放在rows所指数组中。请参考习题9.34中的sum函数。

③ int getmax(int *rows)形参指针rows指向存放每行元素之和的一维数组,在此函数中将求出最大值所在的下标作为函数值返回。请参考习题9.25。

④ void change(int a[][N],int k)形参行指针a,指向M×N的数组首地址,k接受一维数组中最大值所在的下标。此函数的功能是把二维数组中下标为k的那一行、与下标为0的行的所有元素进行对调。对调可用一个for循环来实现:

for(i=0;i

{ t=a[0][i];a[0][i]=a[k][i];a[k][i]=t;}

⑤ void output(int a[][N])此函数的功能是输出a所指的二维数组。可在数组改变前后分别调用它,以判断程序的操作是否正确。请参考习题9.35中的同名函数。

(4)请在主函数中定义所需的数据结构:如数组、变量,并调用各函数。

(5)总结:交换数据的算法应当已很熟悉,本题只是交换两行中的数据,这时被交换的两个元素的行下标不同,而列下标相同。读者不妨对两列中的数据进行交换。本题中,除对二维数组中的两行进行对调外,其他的算法在此之前都已介绍过,由此可知,应当积累一些基本的算法知识,程序的完成都是由一些基本算法来实现的。 9.38【分析与解答】

(1)在定义数组时应该注意,进行逆置操作的矩阵必须是一个方阵,行、列数相同。

(2)在本题中给二维数组置数以及对二维数组进行输出,请参考习题9.37,在此不再重复。(3)对矩阵进行逆置的操作可由以下函数完成:

void transpose(int p[][N])

形参p指向一个二维数组。逆置的过程可由双重循环来完成:

for(i=0;i

{ t=p[i][j];p[i][j]=p[j][i];p[j][i]=t;}

内循环的控制变量j的变化范围从0到i,以对角线为界,把对称位置上的元素值进行对调。(4)请编写主函数,定义所需的数据结构,并调用函数来实现规定的操作。(5)总结:本题主要的算法也是交换算法,关键是需要正确确定交换的范围。

第十章 字符串

一、选择题

10.1 以下能正确进行字符串赋值,赋初值的语句是

A)char s[5]={''a'',''e'',''i'',''o'',''u''};

B)char *s;s=”good!“;

C)char s[5]=”good!“;

D)char s[5];s=”good!“;

答案: B

10.2 以下程序段的输出结果是

A)68

B)0

C)字符D的地址

D)不确定的值

char str[]=”ABCD“,*p=str;

printf(”%d“,*(p+4));

答案: B

10.3 以下程序段的输出结果是

A)11

B)10

C)9

D)8

printf(”%d“,strlen(”ATS0121“));

答案: C

10.4 当运行以下程序时输入OPEN T H E DOOR(此处代表Enter键),则输出结果是

A)oPEN tHE dOOR

B)open the door

C)OPEN T H E DOOR D)Open The Door

#include ”stdio.h“

char fun(char *c)

{ if(*c<=''Z''&&*c>=''A'')*c-=''A''-''a'';return *c;

}

main()

{ char s[81],*p=s;gets(s);while(*p){ *p=fun(p);putchar(*p);p++;} putchar('''');

}

答案: B

10.5 以下程序的输出结果是

A)GFEDCBA

B)AGADAGA

C)AGAAGAG

D)GAGGAGA

#include ”stdio.h“

#include ”string.h“

void fun(char *w,int m)

{ char s,*p1,*p2;p1=w;p2=w+m-1;while(p1

}

main()

{ char a[]=”ABCDEFG“;fun(a,strlen(a));puts(a);

}

答案: C

10.6 以下程序的输出结果是

A)ABCD

B)A

C)D

D)ABCD

BCD

B

C

ABC

CD

C

B

AB

D

D

A

A

main()

{ char s[]=”ABCD“,*p;for(p=s;p

}

答案: A 10.7 设有如下定义:

char *aa[2]={”abcd“,”ABCD“};

则以下说法中正确的是

A)aa数组元素的值分别是”abcd“和”ABCD“

B)aa是指针变量,它指向含有两个数组元素的字符型一维数组

C)aa数组的两个元素分别存放的是含有四个字符的一维数组的首地址

D)aa数组的两个元素中各自存放了字符''a''和''A''的地址

答案: C

10.8 以下程序的输出结果是

A)6385

B)69825

C)63825

D)693825

main()

{ char ch[2][5]={”6937“,”8254“},*p[2];int i,j,s=0;for(i=0;i<2;i++)p[i]=ch[i];for(i=0;i<2;i++)

for(j=0;p[i][j]>''''&&p[i][j]<=''9'';j+=2)

s=10*s+p[i][j]-''0'';printf(”%d“,s);

}

答案: A

10.9 以下程序的输出结果是

A)ABCDEFGHIJKL B)ABCD C)ABCDEFGHIJKLMNOP D)AELM

main()

{ char *alpha[6]={”ABCD“,”EFGH“,”IJKL“,”MNOP“,”QRST“,”UVWX“};char **p;int i;p=alpha;for(i=0;i<4;i++)printf(”%s“,p[i]);printf(”“);

}

答案: C

10.10 库函数strcpy用以复制字符串。若有以下定义和语句:

char str1[]=”string“,str2[8],*str3,*str4=”string“;

则对库函数strcpy的不正确调用是

A)strcpy(str1,”HELLO1“);

B)strcpy(str2,”HELLO2“);

C)strcpy(str3,”HELLO3“);

D)strcpy(str4,”HELLO4“);

答案: C

二、填空题

10.11 以下程序的输出结果是____。

#include ”stdio.h“

main()

{ char b[]=”ABCDEFG“,*chp=&b[7];while(--chp>&b[0])putchar(*chp);putchar('''');

}

答案:

GFEDCB

10.12 以下程序的输出结果是_____。

#include ”stdio.h“

void fun(char *a1,char *a2,int n)

{ int k;for(k=0;k

a2[k]=(a1[k]-''A''-3+26)%26+''A'';a2[n]='''';

}

main()

{ char s1[5]=”ABCD“,s2[5];fun(s1,s2,4);puts(s2);

}

答案:XYZA 10.13 以下程序的输出结果是____。

main()

{ char *p[]={”BOOL“,”OPK“,”H“,”SP“};int i;for(i=3;i>0;i--,i--)printf(”%c“,*p[i]);printf(”“);

}

答案:SO

10.14 当运行以下程序时从键盘输入字符串qwerty和abcd,则程序的输出结果是____。

#include ”string.h“

#include ”stdio.h“

strle(char a[],char b[])

{ int num=0,n=0;while(*(a+num)!='''')num++;while(b[n]){ *(a+num)=b[n];num++;n++;} return(num);

}

main()

{ char str1[81],str2[81],*p1=str1,*p2=str2;gets(p1);gets(p2);printf(”%d“,strle(p1,p2));

}

答案:10 10.15 以下程序的输出结果是____。

#include ”string.h“

#include ”ctype.h“

void fun(char str[])

{ int i,j;for(i=0,j=0;str[i];i++)

if(isalpha(str[i]))str[j++]=str[i];str[j]='''';

}

main()

{ char ss[80]=”It is!“;fun(ss);printf(”%s“,ss);

}

答案:Itiss!

10.16 以下fun函数的功能是将一个字符串的内容颠倒过来,请填空。

#include ”string.h“

void fun(char str[])

{ int i,j,k;for(i=0,j=____;i

}

答案:strlen(str)-1

j--10.17 以下程序段的输出结果是_____。

printf(”%d“,strlen(”s160end“));

答案:3

10.18 以下程序段的输出结果是_____。

char s[20]=”goodgood!“,*sp=s;

sp=sp+2;

sp=”to“;

puts(s);

答案:goodgood!

三、编程题

10.19【分析与解答】

(1)已知gets函数的调用形式为:gets(str),str是存放所读入字符串的起始地址,可以是字符数组名、已指向一串固定存储单元的字符指针或数组元素的地址。gets函数从终端读入一串字符,直到读入一个回车换行符为止,字符串中不包括回车换行符,并在最后自动添加′\0′。现在,在mygets函数中规定用getchar函数进行字符的读入,在此前,我们已多次使用过此函数,并以回车换行符作为结束输入的条件。函数的首部如下:

mygets(char *s) 输入过程如下:

while((*s=getchar())!=′\n′)

s+ +;这里把读入的字符存入s所指的存储单元中,然后移动s,使它指向下一个存储单元。最后当读入′\n′后,结束输入;这时,s指向存放′\n′的存储单元,不要忘记在此单元中放入字符串结束标志来替换′\n′:*s=0。

(2)puts函数的调用形式为:puts(str),str是输出字符串的起始地址。puts函数输出从str地址开始的字符串,最后自动输出一个换行符。myputs函数的首部如下:

myputs(char *s)

用以下循环输出字符串中的每一个字符直到遇到字符串结束标志:

while(*s){ putchar(*s);s+[KG-*3]+;}

当s所指存储单元中是字符串结束标志时退出循环,然后输出一个换行符:putchar(′\[KG-*3]n′)。

(3)请编写主函数分别调用这两个函数,并分别与gets和puts函数比较。

(4)总结:在mygets函数中利用while循环输入字符的操作在第六章中已多次用到,应当已经熟练掌握;而在myputs函数中利用指针的移动来输出所指存储单元的数据也是应熟练掌握的算法。10.20【分析与解答】

(1)函数首部如下:

int fun(char *s) 字符指针形参s指向待查字符串。

(2)定义变量i和j,使其初值分别为0和最后一个字符所在的下标,j的值可通过库函数求得:

i=0;j=strlen(s)-1;(3)利用循环,通过i++和j--,使i和j不断分别向后和向前移动,以便引用对称的元素进行比较,若s[i]等于s[j],则当前符合回文条件,i和j的移动继续,否则退出循环;当i大于等于j时,说明对称位置中的字符都已经比较过且符合回文条件,因此也应退出循环:

while(i

if(i

else return 1;

(5)请编写主函数,定义所需数据结构,输入不同字符串,调用函数并输出函数值,以判断函数是否正确。(6)总结:本题的算法与逆置算法相似,只是没有对应位置中数据的移动,而是进行比较。

10.21【分析与解答】

(1)本题的算法可参考习题9.28。

(2)若函数名为delc,则函数首部可写成:

char delc(char *s, int pos)

因为删除成功要求返回被删的字符,因此函数值的类型应是char。形参字符指针s指向被删字符串的开始,形参pos存放指定的删除位置,注意被删字符的下标就是pos-1。

(3)删除操作实际上是从指定位置开始把字符串中的字符逐个前移,直到遇到字符串结束标志。这一过程可用for循环来完成。先把下标为pos中的字符前移到下标为pos-1的元素中,其他依次前移:

for(i=pos;s[i];i[KG-*3]+[KG-*3]+)s[i-1]=s[i];

退出循环时s[i]中已是字符串结束标志,不要忘记:s[i-1]=s[i];使结束标志也向前移一位。(4)在进行删除操作前,需要检查指定删除位置pos的值是否合理,若不合理就立即返回空值:

if(pos>strlen(s)||pos<[KG-*3]=0)return 0;

(5)在删除操作前,应该纪录下被删的那个字符,以便作为函数值返回:c=s[pos-1]。

(6)请编写主函数,定义所需的数组和变量,输入字符串和输入删除的位置,调用函数后输出删除后的字符串,并对各种情况进行测试,以检查程序是否正确。

(7)总结:删除算法是程序设计中的基本算法,虽然,在细节的要求上可能有所不同,例如对于一维数组中的数据,需要变动数据的个数,而字符串则要求重新设置字符串结束标志。

10.22【分析与解答】

(1)若函数名为dels,函数首部如下:

void dels(char *s) 形参s是一个指向字符串的指针变量。

(2)函数中先完成删除字符串中最后的所有空格。这只要在最后一个非空格字符的后面加上字符串结束标志(′\0′),就使得最后所有的空格都被删除了。但完成这一操作需要通过三个步骤:第一,找到字符串的最后一个空格的位置;第二,往回找到字符串的最后一个非空格的位置;第三,在最后一个非空格的位置的后面加上字符串结束标志。

① 找到字符串的最后一个空格的位置可用以下语句来完成,函数中另定义一个指针变量p,并把s的值赋给它,使它指向字符串的开始。以下while循环和语句使p指向最后的一个字符(′\0′的前面)。

while(*p)p++;

p--;

也可以调用求字符串长度的库函数:p=s+strlen(s)-1;使p指向最后的一个字符。 ② 往回找到字符串的最后一个非空格的位置可用以下语句来完成:

while(*p==′ ′)p--;

以上while循环中,只要p所指存储单元中是空格,就使p移动指向前一个字符,当p所指存储单元中不是空格时立刻退出循环;这时p指向字符串中最后一个非空格字符。

③ 请读者自己把字符串结束标志放在最后一个非空格的位置的后面。

(3)函数接着删除字符串中的前导空格。这只要把前导空格后的第一个非空格字符移到字符串的开头,其后的字符依次前移即可。完成这一操作,首先需要知道第一个非空格字符的位置(下标);然后把其后的字符串移到字符数组的开头。若用变量i来表示第一个非空格字符的下标,i的初值为0,以下循环可以完成此操作:

while(s[i]==′ ′)i++;

只要s[i]是空格,就使i增1,直到遇到第一个非空格字符。以下循环把前导空格后的第一个非空格字符移到数组的开头,其后的字符依次前移,直到遇到字符串结束标志。变量j的初值为0,移动完成后,j就是最后一个字符后面元素的下标。请读者自己把字符串结束标志放在其中。

while(s[i]){s[j]=s[i];j++;i++;}

(4)请自己编写主函数,给出定义语句。在调用dels函数之后,建议用以下语句输出结果:

printf(″\nThe result :\n%s″,str);printf(″****END″); 最后的****END紧跟在字符串之后进行输出,以便观察字符串最后的空格是否已删除。(5)总结:在dels函数中用了移动指针和改变下标两种方法,来引用字符串中的元素。无论是删最后的空格或删前导空格,都可用这两种引用的方法。

第十一章

一、选择题

11.1 以下叙述不正确的是

A)C程序的main函数可以没有参数。

B)C程序的main函数可以有参数。

C)C程序的main函数若有参数时,第一个参数的值最少是1。

D)main函数的第一个参数必须是整型,其名字必须是argv,第二个参数可以定义成:char *argv[],名字必须是argv。

答案:D

11.2 若有以下定义和说明,则对fun函数的正确调用语句是

A)a=fun;a(w);

B)a=fun;(*a)(&c);

C)b=fun;*b(w);

D)fun(b);

main()

{ int(*a)(int *),*b(),w[10],c;

...}

fun(int *c){...}

答案:B

11.3 以下叙述正确的是

A)C程序中各函数之间既允许直接递归调用也允许间接递归调用

B)C程序中各函数之间不允许直接递归调用也不允许间接递归调用

C)C程序中各函数之间允许直接递归调用不允许间接递归调用

D)C程序中各函数之间不允许直接递归调用允许间接递归调用

答案:A

11.4 以下程序的输出结果是

A)8

B)30

C)16

D)2

long fib(int n)

{ if(n>2)return(fib(n-1)+fib(n-2));else return(2);

}

main()

{ printf(”%ld“,fib(6));}

答案:C

二、填空题

11.5 假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在DOS提示符下键入

PROG ABCD EFGH IJKL(此处代表Enter键)

则输出结果为_____。

main(int argc, char *argv[])

{ while(--argc>0)printf(”%s“,argv[argc]);printf(”“);

}

答案:IJKLEFGHABCD

11.6 以下程序的输出结果是_____。

fun(int x)

{ int p;if(x==0||x==1)return(3);p=x-fun(x-2);return p;

}

main()

{ printf(”%d“,fun(9));}

答案:7 11.7 以下程序的输出结果是_____。

fun(int n,int *s)

{ int f1,f2;if(n==1||n==2)*s=1;else { fun(n-1,&f1);

fun(n-2,&f2);

*s=f1+f2;}

}

main()

{ int x;

fun(6,&x);printf(”%d“,x);

}

答案:8

11.8 以下程序调用invert函数按逆序重新放置a数组中元素的值,a数组中的值在main函数中读入。请填空。

#define N 10

void invert(int *s,int i, int j)

{ int t;if(i

invert(s,_____,j-1);}

}

main()

{ int a[N],i;for(i=0;i

}

答案:*(s+j)i+1 i 11.9 以下程序的输出结果是_____。

funa(int a,int b)

{ return a+b;}

funb(int a,int b)

{ return a-b;}

sub(int(*t)(),int x,int y)

{ return(*t)(x,y);}

main()

{ int x,(*p)(int ,int);p=funa;x=sub(p,9,3);x+=sub(funb,8,3);printf(”%d“,x);

}

答案:17

11.10 以下程序中的trap函数是一个用梯形法求定积分的通用函数,梯形法求定积分s的公式为:

n-1

x=((f(a)+f(b))/2+∑ f(a+i*h)*h, h=│(a-b)/n│

i=1

其中,n为积分小区间数,以下程序调用trap函数求积分,被积函数是:

f(x)=x*x+3*x+2,且 n=1000,a=0,b=4。

#include ”math.h“

double trap(double _____,double a,double b)

{

double t,h;

int i,n=1000;t=0.5*((*fun)(a)+(*fun)(b));h=fabs(a-b)/(double)(n);for(i=1;i<=n-1;i++)t=t+_____;t=t*h;return(t);

}

double mypoly(double x)

{

return(x*x+3.0*x+2.0);

}

main()

{

double y,(*pf)(double);pf=_____;y=trap(pf,0.0,4.0);printf(”%f",y);

} 答案:(*fun)(double)(*fun)(a+i*h)mypoly

三、编程题

11.11 【分析与解答】

(1)无论命令行的内容是什么,总是要求程序需要输出字符串中的一部分连续的字符,因此可将这一部分的功能放在output函数中完成。函数的首部如下:

output(char *s, int b,int e)

其中,s指向字符串,b为从s中开始输出的字符的下标,e为结束输出的字符的下标。只要确定了开始输出的字符的下标和结束输出的字符的下标,在一个for循环中就可以完成输出。请自己完成此函数体。

(2)在主函数中读入一行字符串放在s数组中,求出s串的长度放在len变量中。另外用变量n存放要输出的字符的个数。

(3)主函数的首部写成:

main(int a, char *[KG-*3]c[])

其中的第一个参数a将存入命令行中的字符串的个数,当命令行中没有其他参数时,a的值为1;因此按题目要求,此时输出字符的个数n应等于10。

(4)主函数中的第二个参数是一个指向字符串的指针数组。当命令行为:

outch-2

这时,c[0]中存放了字符串outch的首地址,c[1]中存放了字符串-2的首地址。存储单元*[KG-*3]c[1](即*(c[1]+0)或c[1][0])中是字符-;存储单元*(c[1]+1)(或c[1][1])中是字符2。同理,当命令行为:

outch +6

这时,c[1]中存放了字符串+6的首地址。存储单元*[KG-*3]c[1](即*(c[1]+0))中是字符+;存储单元*(c[1]+1)中是字符6。

(5)根据以上分析,可用以下语句来得到待输出的字符个数放在n中:

if(a>1)n=*(c[1]+1)-′0′;

else n=10;

(6)按题目规定,如果a的值为1或者*[KG-*3]c[1]中的字符是′-′号时,输出s字符串的最后若干字符,这时调用output函数,把s数组的地址传给形参指针s,把开始输出的元素的下标len-n传给形参b,把最后一个输出的元素下标len-1传给形参e。可用以下语句来实现:

if(a==1 || *[KG-*3]c[1]==′-′)output(s,len-n,len-1);

(7)如果*[KG-*3]c[1]中的字符是′+′号时,将从字符串s的最前面开始输出,除了把s数组的地址传给output函数的形参指针s外,把开始输出的元素的下标0传给形参b,把最后一个输出的元素下标n-1传给形参e。

if(*[KG-*3]c[1]==′+′)output(s,1,n-1);

(8)总结:读者按以上所述写出相应的代码,存入OUTCH.C文件。在Turbo C 的环境下进行编译调试、运行,生成一个OUTCH.EXE文件。最后退出Turbo C,在OUTCH.EXE文件所在目录下,打入如题所示的命令行,在程序运行时输入一字符串,观察运行结果是否正确,如果不正确,则需回到Turbo C中进行修改。

11.12 【分析与解答】

习题9.32已经给出了把一个整数转换为二进制数的算法,这是一个把十进制整数不断被2除的过程,每次被2除的余数即是一个二进制位上的数(1或0)。转换的方法是一样的,只是每次转换的数被2除,这可用递归来完成,递归函数的部分内容可表示如下:

outbinary(int a)

第四篇:2011年计算机等级考试二级C语言上机题库(含答案)

认识实习报告

9月初,我们先前往了山东威海滨田印刷机械有限公司进行认识实习。此后我们又去了一家大型零件加工厂进行了参观。

通过这次的实习,我们了解到机械行业第一线的一些具体情况,了解了工业生产实施的具体过程,同时也对一些工厂的技术实施,管理方法有了一定的认识。

前往滨田印刷机械有限公司以后,我们在指导老师和工程师的带领下,分批开始了对该厂的参观。这一切对我们而言陌生有新鲜。开始,我们在一位严谨的工程师的带领下,去了零件加工厂了解了各类零件的加工。其中参观了各种自动化得机床,我们还从一部分机床中看到了上学期我们金工实习那些机床的影子。但给我最大的感触是整个车间里,国产的机床并不是很多。整个过程纪律严明,一边参观零件的加工,一边聆听了工程师给予我们的讲解了解了整个工厂的第一道程序。

此后,我们前往了三间组装车间,参观了52系列,66系列和47系列三种印刷机的组装。这次给我们介绍的是一位年轻的工程师,他详细的向我们介绍了这三种印刷机的一些知识。我们也了解了刚知道这几个型号产生的疑惑,原来,47,52和66的意思是最大用纸尺寸的长。其中47系列是单色印刷机,可用于印号码,打孔线和树脂凸版印刷。使用的集中供油系统可以有效的防止因局部遗忘加油造成的零件磨损,延长零件的精度和使用寿命,杜绝润滑油浪费,保护环境卫生。52系列性能较高,大都是以高级胶印机所具有的高耐久性、高精度的部件为基础,生产的高性能印刷机。同时也是可适合文字、线条印刷,实地印刷等各种印刷需要。另外通过添加多种备选装置,使机器升级到更高效率的印刷机。到66系列时,工程师大哥向我们介绍的较为详细,它分为两款:WEIHAI HAMADA66-NP 实现精美平版印刷及号码印刷的高品质重型印刷机和WEIHAI HAMADA66 真正高品质的重型印刷机。WEIHAI HAMADA66系列是以真正高质量印刷为目标而生产的大四开重型胶印机。这款先进的机械拥有按扭式与触摸式键盘,所需操作全部集中在3处操作盘上。独特的飞达可以实现高速给纸及高精度套印。通过计算机分析设定理想的墨辊排列方式,高档机拥有的装备随处可见。后来通关查询我了解到这两款62的相关参数如下:

WEIHAI HAMADA66-NP实现精美平版印刷及号码印刷的高品质重型印刷机最大印刷面积 640×470 mm 最大用纸尺寸 660×483 mm 最小用纸尺寸 297×210 mm 纸张厚度 0.04~0.4 mm 续纸方式 连续供纸式 湿润方式 水胶绒式 墨 辊

19根(上墨辊4根)水 辊

5根(上水辊2根)套准机构 滚轮式拉规 印刷速度

3,000~10,000张/小时 马 达

5.55Kw、(主电机3.7Kw气泵0.75Kw)机械尺寸

机尺寸 2,290(L)×1,375(W)×1,750(H)mm 重 量

重量 3,200kg

WEIHAI HAMADA66 真正高品质的重型印刷机 最大印刷面积 640×470 mm 最大用纸尺寸 660×483 mm 最小用纸尺寸 297×210 mm 纸张厚度 0.04~0.4 mm 续纸方式 连续供纸式 湿润方式 水胶绒式 墨 辊

19根(上墨辊4根)水 辊

5根(上水辊2根)套准机构 滚轮式拉规 印刷速度

10,000张/小时 马 达

5.55Kw、(主电机3.7Kw气泵0.75Kw)机械尺寸

机尺寸 2,290(L)×1,375(W)×1,750(H)mm 重 量 3,200kg 4点以后,我们结束参观,我们开始于工作人员进行了一些交流,我们有了更多的了解。4点半,我们乘车回校。

我们第二次去参观的是一家大型零件加工厂,由于威海是海边城市,所以这些零件大都是给船舶提供的。那天下午来到工厂,我们第一个印象就是很高很大,由于零件较大,所以建了几个很高很大的自动吊车,因此进厂后发现工厂很高,室内也较为空旷,通过了解我们知道,加工这些大型零件花费的人力,财力和时间都相当巨大。这次给我们进行讲解的是一位高高的工程师,为人冷静沉稳让我们不由自主跟着他的步伐聆听讲解。走到工厂的一头,我们发现了一个巨大的轴,旁边一块牌子写着;十万元的教训。原来,由于加工时的小小失误,造成螺纹的一点瑕疵,最终导致整个零件的报废。看到这个以后,大家都有着不小的感 触。此后我们又参观了他们的一些小型零件的加工。同样。4点半后我们结束参观回校。

认识实习主要是学习一些我们专业课的基础,我们学到了一些我们在课本中学习不到的东西.实习提供了一个机会,让大家接触到真实的工作环境有了实习的经验。我相信我以后毕业工作时可以更快更好的融入新的环境,完成学生向职场认识的转换。

坦白说,我以前对自己专业比较迷茫,但这次实习我了解了我们专业的大体方向,也同时提高了自己对专业的兴趣和主观能动性。

我相信自己能渐渐明确自己以后发展奋斗的目标,同时也增加了自己学好本专业的信心。

但是,通过这次实习我真正感觉到步入社会后我们要学的东西还很多,差距还是有的,如专业课知识欠缺,动手能力不足等等。我也知道这不是一天两天能学会的,不过我坚信我能做到这一点。这次实习对我将来毕业设计一定有很大的帮助,我想能够在以后的设计中体会到更对的东西。最后还是谢谢给予我的这次机会,让我真正学到了很多专业和社会知识。

老师,工程师们您们都辛苦了,真诚的感谢您们。

091310323 尹旭明

第五篇:全国计算机等级考试二级

全国计算机等级考试二级证书

简介 ***2432010年9月二级access

证书样本

全国计算机等级考试和高考、全国英语四六级考试一样,是国家教育部考试中心推出的三大权威考试,是在校大学生必须参加的考试和衡量计算机水平最权威、含金量和承认度最高的认证,并唯一得到国家和各用人单位的统一认可。

创想独有优势

通过率高:在全国平均通过率不到10%的情况下,创想分中心10级助产班参考7人,双科通过6人;10级护理5班参考21人,双科通过17人;创想分中心历届一次性通过率全省第一。

创想学员毕业受欢迎:

06级陈燕燕同学毕业后考取济宁汶上县医院事业编;

08级马玉宝同学,毕业后被济南市第三人民医院录用;2010年9月份前二级access

09级刘晓燕同学优先被济南市中心人民医院选为实习生。证书全通通用,上网可查。查询网址

下载最新2018年3月全国计算机等级考试二级C语言上机题库100套(最新光碟拷贝版)word格式文档
下载最新2018年3月全国计算机等级考试二级C语言上机题库100套(最新光碟拷贝版).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    计算机二级C语言上机题型总结

    全国计算机二级C语言考试上机题型总汇 (一)关于“******”问题 1、将字符串中的前导*号全部删除,中间和后面的*号不删除。 void fun(char *a) { char *p=a; while(*p= =’*’)......

    二级C语言上机题库_南开100题

    工作感受心得 我是体育部的部委李盟,在加入我们学校学生会体育部不久后加入前湖礼仪工作组,担任出礼仪的工作.在我出礼仪工作的工程中,收获很多,体会也很多 ,丰富了我在学生......

    计算机等级考试三级C语言上机试题总结[精选5篇]

    计算机等级考试三级C语言上机试题总结 一、替换字符。 形如这样:函数ReadDat实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar,按给定的......

    C语言二级上机考试要点总结

    具有三种题型:程序填空、程序修改和程序设计,其中程序填空30分,程序修改30分,程序设计40分。[1]从以往的机试的情况来看,许多考生在程序设计题目上失分比较严重,而程序设计题占总......

    二级C语言上机考试改错题总结

    二级C语言上机考试改错题总结 根据本人多年研究全国计算机等级考试二级若错误行中有整数1除以某个表达式或变量时,必C语言,发现很多考生对上机考试存在很大的问须把整数1改为1......

    2009春江苏省计算机二级C语言上机(编程)

    2009春上机试题1(编程) 程序功能:找出7个默森尼数。法国数学家默森尼曾提出下列公式:Mp=2^p-1。当p是素数并且Mp也是素数时,称Mp为默森尼数,例如,p=5, Mp=2^5-1=31,5和31都......

    2018年3月二级C语言上机题库及答案

    程序填空题: 给定程序中,函数fun的作用是: 注意:部分源程序在文件BLANK.C中。 不得增行或删行,也不得更改程序的结构! 源程序如下 答案: x[i]......

    全国计算机等级考试上机考试应试技巧

    余超友情提供——全国计算机等级考试上机考试应试技巧 掌握好上机考试的应试技巧,可以使考生的实际水平在考试时得到充分发挥,从而取得较为理想的成绩。历次考试均有考生因为......