《C语言考试题及答案.pdf》由会员分享,可在线阅读,更多相关《C语言考试题及答案.pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一、单项选择题:(10分,每题2分)1char*p10;该语句声明了一个:。A)指向含有 10 个元素的一维字符型数组的指针变量 p B)指向长度不超过 10 的字符串的指针变量 p C)有 10 个元素的指针数组 p,每个元素可以指向一个字符串 D)有 10 个元素的指针数组 p,每个元素存放一个字符串 2若 int x;且有下面的程序片断,则输出结果为:。for(x=3;x D)rt-5若二维数组 a 有 m 行 n 列,则下面能够正确引用元素 aij的为:。A)*(a+j*n+i)B)*(a+i*n+j)C)*(*(a+i)+j)D)*(*a+i)+j CDDDC 二、分析程序并写出运行
2、结果。(25 分,每题 5 分)1#include main()int n;static char*monthName=Illegal month,January,February,March,April,May,June,July,August,September,October,November,December;for(n=1;n=12;n+)printf(%sn,monthNamen);运行结果是:January February March April May June July August September October November December 2#include
3、#define ARR_SIZE 7 void YH(int aARR_SIZE,int n);void PrintYH(int aARR_SIZE,int n);main()int aARR_SIZEARR_SIZE;YH(a,ARR_SIZE-1);PrintYH(a,ARR_SIZE-1);void YH(int aARR_SIZE,int n)int i,j;for(i=1;i=n;i+)for(j=1;j=i;j+)if(j=1|i=j)aij=1;else aij=ai-1j-1+ai-1j;void PrintYH(int aARR_SIZE,int n)int i,j;for(
4、i=1;i=n;i+)for(j=1;j=i;j+)printf(%4d,aij);printf(n);运行结果是:1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 3#include main()int i,n;for(i=1;i=5;i+)printf(Please enter n:);scanf(%d,&n);if(n=0)continue;printf(n=%dn,n);printf(Program is over!n);程序运行时输入:1 -2 3 -4 5 运行结果是:n=1 Please enter n:Please enter n:n=3
5、Please enter n:Please enter n:n=5 Program is over!4#include void Func(int n);main()int i;for(i=0;i 2;i+)Func(i);void Func(int n)static int t=1;printf(t=%dn,t+);运行结果是:t=1 t=2 5#include int Func(int i);main()int i;for(i=3;i0;i-)k+;return(k);运行结果是:13 17 三、阅读并完成程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(20
6、分,每空 2 分)1.下面程序用于读入 10 个字符串,然后找出最大的字符串并打印。#include#include main()char str1080,maxstring80;int i;printf(Enter ten strings:n);for(i=0;i10;i+)scanf(%s,stri );strcpy(maxstring,str0);for(i=1;i10;i+)if(strcmp(maxstring,stri)0 strcpy(maxstring,stri);printf(The max string is:%sn,maxstring);2.下面这个程序用于交换两个数组的
7、对应元素的值。#include#define ARRAY_SIZE 10 void Swap(int*x,int*y);void Exchange(int a,int b,int n);void InputArray(int a,int n);void PrintArray(int a,int n);main()int aARRAY_SIZE,bARRAY_SIZE,n;printf(Input array lenth n=10:);scanf(%d,&n);printf(Input array a:n);InputArray(a,n);printf(Input array b:n);Inpu
8、tArray(b,n);Exchange(a,b,n);printf(After swap:n);printf(Array a:n);PrintArray(a,n);printf(Array b:n);PrintArray(b,n);void Swap(int*x,int*y)int temp;temp=*x;*x=*y ;*y=temp;void Exchange(int a,int b,int n)int i;for(i=0;i n;i+)Swap(&ai,&bi);void InputArray(int a,int n)int i;for(i=0;i n;i+)scanf(%d,&ai)
9、;void PrintArray(int a,int n)int i;for(i=0;i n;i+)printf(%d,ai);printf(n);3.从键盘任意输入一个年号,判断它是否是闰年。若是闰年,输出Yes,否则输出No。已知符合下列条件之一者是闰年:能被 4 整除,但不能被 100 整除。能被 400 整除。#include main()int year,flag;printf(Enter year:);scanf(%d,&year);if(year%4=0&year%100!=0|year%400=0)flag=1;else flag=0;if(flag)printf(Yes!n)
10、;else printf(No!n);四、在下面给出的 4 个程序中,共有 15 处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。(在错误的代码下边画一根横线,把正确的代码写在旁边;漏掉的代码正确插入合适的位置。30 分,每找对 1 个错误,加 1 分,每修改正确 1 个错误,再加 1 分。)1编程计算矩阵相乘之积。#include#define ROW 2#define COL 3/void MultiplyMatrix(int aROWCOL,int bCOLROW,int cROWROW);main()int aROWCOL,bCOLROW,cROWROW,i,j;prin
11、tf(Input array a:n);for(i=0;iROW;i+)for(j=0;jCOL;j+)scanf(d,&aij);/%d printf(Input array b:n);for(i=0;iCOL;i+)for(j=0;jROW;j+)scanf(d,&bij);MultiplyMatrix(a,b,c);printf(Results:n);for(i=0;iROW;i+)for(j=0;jROW;j+)printf(%6d,&cij);/cij printf(n);void MultiplyMatrix(int aROWCOL,int bCOLROW,int cROWROW)
12、int i,j,k;for(i=0;iROW;i+)for(j=0;jROW;j+)for(k=0;kCOL;k+)/cij=0;cij=cij+aik*bjk;/bkj 2编程输入 10 个数,找出其中的最大值及其所在的数组下标位置。#include int FindMax(int num,int n,int*pMaxPos);main()int num10,maxValue,maxPos,minValue,minPos,i/;printf(Input 10 numbers:n);for(i=0;i10;i+)scanf(%d,numi);/&numi maxValue=FindMax(nu
13、m,10,*maxPos);/&maxPos printf(Max=%d,Position=%dn,maxValue,maxPos);int FindMax(int num,int n,int*pMaxPos)int i,max;max=num0;for(i=1,i n,i+)/i=1;i max)max=numi;*pMaxPos=i;return max;3韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从 1 至 5 报数,最末一个士兵报的数为 1;按从 1 至 6 报数,最末一个士兵报的数为 5;按从 1 至 7 报数,最末一个士兵报的数为 4;最后再按从 1 至 11
14、报数,最末一个士兵报的数为 10。你知道韩信至少有多少兵吗?#include main()int x;/x=0 while(1)if(x%5=1&x%6=5&x%7=4&x%11=10)/x%5=1&x%6=5&x%7=4&x%11=10 break;x+/x+;printf(x=%dn,x);4下面函数 Squeez()的功能是删除字符串 s 中所出现的与变量 c 相同的字符。void Squeeze(char s,char c);/void Squeeze(char s,char c)int i,j;/j=0;for(i=0;si!=0;i+)if(si!=c)/c sj=si;j+;si
15、=0;/sj=0;或/sj=0;五、编程(15 分)从键盘任意输入某班 10 个学生的成绩,调用 save 函数把数据存入到以你的学号命名的磁盘文件中,然后打开该文件读出数据,对成绩进行由高到低的排序,并打印成绩不及格的学生人数。最后再次调用 save 函数把数据存入到原磁盘文件中。要求按照如下给出的函数原型进行编程:void save(float score,int n);void Sort(float score,int n);int Fail(float score,int n);要求用一维数组做函数参数编程实现成绩排序和统计成绩不及格的学生人数,然后在主函数中打印这些结果,不能使用全局
16、变量编程。参考程序如下:void load(float score,int n)/3 分 FILE*fp;int i;if(fp=fopen(02406101,rb)=NULL)printf(cannot open infilen);return;for(i=0;in;i+)if(fread(&scorei,sizeof(float),1,fp)!=1)if(feof(fp)fclose(fp);return;printf(file read errorn);fclose(fp);void save(float score,int n)/3 分 FILE*fp;int i;if(fp=fope
17、n(02406101,wb)=NULL)printf(cannot open filen);return;for(i=0;in;i+)if(fwrite(&scorei,sizeof(float),1,fp)!=1)printf(file write errorn);fclose(fp);void sort(float score,int n)/3 分 int i,j,k;float t;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(scorejscorek)k=j;t=scorek;scorek=scorei;scorei=t;int Fail(float score,int n)/3 分 int i,k=0;for(i=0;in;i+)if(scorei60)k+;return k;void main()/3 分 int i;float score10;for(i=0;i10;i+)scanf(%f,&scorei);save(score,10);load(score,10);sort(score,10);printf(The Fail number is%d,Fail(score,10);save(score,10);
限制150内