2022年C语言上机考试试题 .pdf
1 C 语言上机考试试卷-1 一、选择题(评分标准20 分,每小题 2 分)1.C 语言规定:在一个源程序中,main 函数的位置。(A)必须在最开始处(B)必须在系统调用的库函数的后面(C)可以在任意位置(D)必须在最后2.在 C 语言中,int、char 和 short 三种类型数据在内存中所占的字节数。(A)由用户自己定义(B)都是 2 个字节(C)是任意的(D)由所用的计算机的字长决定3.假设所有的变量都是int 型,则表达式(a=2,b=5,b+,a+b)的值是。(A)7(B)8(C)6(D)2 4.判断 char 型变量ch 中的字符是否为小写字母的正确表达式是。(A),a?=ch=?z?(B)(,a?=ch)&(ch=?z?)(C)(a=ch)&(ch=z)(D)(,a?=ch)AND(ch=z?)5.C 语言中while 和 do-while 循环的主要区别是。(A)while 的循环体可能一次也不执行(B)while 的循环控制条件比do-while 的严格(C)do-while 允许从该语句的外部跳转到循环体内(D)do-while的循环体不能是复合语句6.若有说明int a34,则对a 数组元素的正确引用是。(A)a24(B)a1,3(C)a(2)(1)(D)a13 7.下面程序中有错误的行是。(每行最前面的数字代表行号)1main()2 int a3=1,2;3int j;4a2=5;5for(j=0,j3,j+)6a0=a0+aj;7printf(“a0=%dn”,a0);8(A)3(B)5(C)7(D)6 8.对以下语句的正确理解是。int a10=5,6,7,8,9,10;(A)将 6 个初值依次赋给a1 到 a6(B)将 6 个初值依次赋给a0 到 a5(C)将 6 个初值依次赋给a5 到 a10(D)因为数组长度与初值个数不同,所以此语句不正确9.有两个字符数组a、b,则以下正确的输入语句是。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 8 页 -2(A)gets(a,b);(B)scanf(a,b);(C)scanf(“%s%s”,&a,&b);(D)gets(a);gets(b);10.以下正确的函数定义是。(A)double fun(int x,int y)double z;z=x+y;return z;(B)fun(int x,y)int z;return z;(C)fun(x,y)int x,y;double z;z=x+y;return z;(D)double fun(int x,int y);double z;z=x+y;return z;套数号答案1 1.C 2.D 3.B 4.B 5.A6.D 7.B 8.B 9.D 10.A 二、判断题(评分标准20 分,每小题 2 分)1.C 语言规定可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行。2.程序执行的效率与数据的存储结构密切相关。3.若函数调用时的实参为变量时,同名的实参和形参占同一存储单元。4.long、int和 short类型数据占用内存大小,是根据数据的大小来决定所占内存的字节数。5.已有定义:char c;,程序前面已在命令行中包含ctype.h 文件,表达式,A?=c&c=,Z?能用于判断c 中的字符是否为大写字母。6.已 知 字 符,A?的ASC 代 码 值 是65,字 符 变 量 c1的 值 是,A?,c2 的 值 是,D?。执 行 语 句printf(%d,%d,c1,c2-2);后,输出结果是65,B。7.当用户要求输入的字符串中含有空格时,可以使用scanf()函数来输入。8.有以下函数int aaa(char*s)char*t=s;while(*t+);t-;return(t-s);aaa函数的功能是比较两个串的大小。9.在 C 程序中可以给指针变量赋一个整数作为地址值。10.若程序中有宏定义行:#define N 100,则以下叙述:“在编译程序对C 源程序进行预处理时用100替换标识符N”是正确的。套数号答案7 1.F 2.T 3.F 4.F 5.T 6.F 7.F 8.F 9.F 10.T 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 8 页 -3 三、填空题(4)(评分标准10 分,每小题 2 分)1.判断变量 a、b 是否绝对值相等而符号相反的逻辑表达式为_。2.变量 a、b 中必有且只有一个为0 的逻辑表达式为_。3.m 是值为两位数的整型变量,判断其个位数是奇数而十位数是偶数的逻辑表达式为_。4.求解赋值表达式a=5+(c=6)后,表达式值、a、c 的值依次为 _。5.求解赋值表达式a=(b=10)%(c=6),表达式值、a、b、c 的值依次为 _。参考答案:第 6 套(1)a=-b(2)a=0&b!=0|a!=0&b=0(3)m/10%2=0&m%2=1(4)11,11,6(5)4,4,10,6 四、程序改错题(评分标准20 分,每小题5 分)1.下列程序中输入3214,则输出4,即得到输入数值的位数。#include void main()int n,k=0;scanf(%d,&n);while(n%10)k+;n=n-10;/*$1*/printf(%dn,k);操作说明:在考生目录的*子目录下,有*.c 文件,该文件中“/*$1*/”行中的语句n=n-10;有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:在程序中输入n 位整型数值,得到输入数值的位数。例如:在程序中输入3214,得到输入数值的位数4。答案:n=n/10;运行样例1 行运行样例1:3214 结果:4 2.以下程序输入数值6,运行程序后输出结果2。#include void main()int i=0,t=1,n;while(scanf(%d,&n),n=0);while(!(t=n)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 8 页 -4 t=t*2;i-;/*$1*/printf(%dn,i);操作说明:在考生目录的*子目录下,有*.c 文件,该文件中“/*$1*/”行中的语句i-;有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:运行程序后输入数值6,得输出结果2。答案:i+;运行样例1 行运行样例1:6 结果:2 3.输入 1 个正整数n。假设 n 为 5,下列程序的输出结果为:sum=-0.216667#include void main()int k,flag=1,n;float s=0;scanf(%d,&n);for(k=1;kn;k+)s=s+(float)1.0*k/(k+1)*flag;flag=-1;/*$1*/printf(sum=%fn,s);操作说明:在考生目录的*子目录下,有*.c 文件,该文件中“/*$1*/”行中的语句flag=-1;有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:在程序中输入一个正数n 然后输出求和后的结果。例如:在程序中输入n 的值为 5,得到输出结果为:sum=-0.216667。答案:flag=-flag;运行样例1 行运行样例1:5 结果:sum=-0.216667 4.以下程序运行后输出:49.455978。#include#include#define f(x)x*x-5*x+sin(x)void main()int i;float max;max=(float)(f(1);for(i=2;imax)max=i;/*$1*/名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 8 页 -5 printf(%fn,max);操作说明:在考生目录的*子目录下,有*.c 文件,该文件中“/*$1*/”行中的语句if(f(i)max)max=i;有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:运行程序后,得输出结果为:49.455978。答案:if(f(i)max)max=(float)(f(i);运行样例1 行运行样例1:结果:49.455978 五、程序填空(评分标准10 分,每小题 5 分)1.该程序功能:分别统计字符串中所有英文字母中的各元音字母个数。(tolower 函数把一个大写字母转化为相应的小写字母)#include#include void main()char a80;int n5=0,i;gets(a);/*$1*/switch(tolower(ai)case a:n0+;break;case e:n1+;break;case i:n2+;break;case o:n3+;break;case u:n4+;break;for(i=0;i5;i+)printf(%d,ni);操作说明:在考生目录的*子目录下,有*.c文件,该文件中“/*$1*/”行是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:分别统计字符串中所有英文字母中的各元音字母个数(tolower 函数把一个大写字母转化为相应的小写字母)。答案:for(i=0;ai!=0;i+)运行样例1 行运行样例1:abcde 结果:1 1 0 0 0 如果填空为:for(i=0;istrlen(a);i+)则需要加上:#include 否则编译不能通过。2.本程序功能:输入n(0n10)后,输出 1个数字金字塔。如输入n为4,则输出:1 222 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 8 页 -6 33333 4444444#include void main()int i,j,n;scanf(%d,&n);/*$1*/for(j=1;j=n+1-i;j+)putchar();for(j=1;j=2*i-1;j+)putchar(char)(i+48);putchar(n);操作说明:在考生目录的*子目录下,有*.c 文件,该文件中“/*$1*/”行是根据程序功能需要填充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。该程序功能:输入n(0n10)后,输出 1个数字金字塔。例如输入n为4,则输出:1 222 33333 4444444 答案:for(i=1;i=n;i+)运行样例1 行运行样例 1:4 结果:1 222 33333 4444444 六.程序设计(评分标准20 分,每小题 10分)1.操作说明:编制函数,其功能是在float 类型 1 维数组中查找最大值、最小值,并将它们返回到调用程序,并输出,题目要求用scanf()函数输入 7 个实数数值。参考答案:#include#include void find(float num,int n,float*min,float*max);void main()int i;float min=10000.0,max=0,num7;for(i=0;i7;i+)scanf(“%f”,&numi);名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 8 页 -7 find(num,7,&min,&max);printf(%.1f%.1f,max,min);void find(float num,int n,float*min,float*max)int i;for(i=0;in;i+)if(numi*max)*max=numi;运行样例2 行运行样例1:1.5 12.3 42.2 0.7 14.5 0.1 99 结果:99 0.1 运行样例1:1.5,12.3,42.2,0.7,14.5,0.1,99 结果:1.5-10153254(乱码)2.操作说明:已知某班N 个(例如N=4)学生的基本情况已经存放在磁盘文件“student.txt”中,文件的逻辑结构如下表所示(但实际存储中不含标题行):num name age s1 s2 s3 s4 950501 Zhang 20 78 88 82 950502 Wang 19 83 85 90 950503 Li 21 79 72 69 950504 Cheng 22 90 91 95 aver scor 编写一个完整的程序,用结构体数组的方法表示该表,从上述文件中读入已知数据,然后完成下列计算工作:(1)计算每个学生3 门课的总成绩,分别填入各人的s4 域中;(2)计算全班的平均年龄,填入最后一行的age域中;(3)计算全班每门课的平均成绩,依次填入最后一行的s1,s2,s3 域中。并将计算结果写入文件“stud.txt”中。参考答案:#define Round(a)(int)(a+0.5)#include#include int main()struct student char num7;char name8;int age;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 8 页 -8 int s1,s2,s3,s4;struct student stu5;int i;int ageav=0,s1av=0,s2av=0,s3av=0,s4av=0;FILE*fp;if(fp=fopen(student.txt,r)=NULL)printf(can not open infile%sn,student.txt);exit(0);for(i=0;i5;i+)fscanf(fp,%s%s,stui.num,stui.name);fscanf(fp,%d,&stui.age);fscanf(fp,%d%d%d,&stui.s1,&stui.s2,&stui.s3);fclose(fp);for(i=0;i4;i+)stui.s4=stui.s1+stui.s2+stui.s3;ageav+=stui.age;s1av+=stui.s1;s2av+=stui.s2;s3av+=stui.s3;s4av+=stui.s4;stu4.age=Round(ageav/4.0);stu4.s1=Round(s1av/4.0);stu4.s2=Round(s2av/4.0);stu4.s3=Round(s3av/4.0);stu4.s4=Round(s4av/4.0);fp=fopen(stud.txt,w);fprintf(fp,No.Name age score1 score2 score3 total n);for(i=0;i5;i+)fprintf(fp,%6s%-6s%3d%6d%6d%6d%6d n,stui.num,stui.name,stui.age,stui.s1,stui.s2,stui.s3,stui.s4);fclose(fp);return 0;名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 8 页 -