还剩25页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
清华大学c语言教材试题和答案
一、选择题(共15题,每题2分,共30分)
1.C语言程序的基本单位是()A.语句B.函数C.变量D.程序块
2.以下哪个不是C语言的基本数据类型()A.int B.float C.char D.string
3.变量的指针是指变量的()A.值B.地址C.类型D.大小
4.以下关于for循环的描述,错误的是()A.for循环可以替换while循环B.for循环的三个表达式都可以省略C.for循环的循环体只能是单条语句D.for循环的执行顺序是先判断条件,再执行循环体
5.若有定义int a=5;则执行a++;后,a的值为()A.4B.5C.6D.不确定
6.以下哪个是C语言的关键字()A.function B.loop C.if D.while
7.数组名作为函数参数时,实际上传递的是()A.array的首地址B.数组的所有元素C.数组的长度D.数组的副本
8.以下关于结构体的描述,正确的是()A.结构体的成员必须是基本数据类型B.结构体变量可以直接赋值C.结构体数组的每个元素都是结构体D.结构体不能作为函数的返回值第1页共27页
9.若有定义char c=A;则执行c++;后,c的值为()A.A B.B C.65D.
6610.以下哪个函数用于从标准输入读取一个字符()A.scanf B.printf C.getchar D.puts
11.在C语言中,以下关于指针的描述,错误的是()A.指针变量存储的是地址B.可以通过指针修改所指向变量的值C.指针可以为NULL D.指针变量的类型与它所指向变量的类型无关
12.若有定义int arr
[5]={1,2,3,4,5};则arr
[3]的值为()A.1B.2C.3D.
413.以下关于函数的描述,错误的是()A.函数必须有返回值B.函数可以嵌套调用C.函数的参数可以是结构体D.函数名在同一作用域内必须唯一
14.若有定义int x=3,y=5;则表达式xyx:y的值为()A.3B.5C.0D.
115.以下哪个不是C语言的控制结构()A.顺序结构B.选择结构C.循环结构D.分支结构
二、填空题(共15题,每题2分,共30分)
1.C语言程序的入口点________
2.定义一个单精度浮点型变量的关键字是________
3.当循环条件不成立时,while循环________执行循环体
4.数组名是数组的________(填“首地址”或“长度”),它不能被赋值
5.函数的参数分为________参数和实参
6.若要交换两个变量a和b的值,不使用第三个变量的方法是________(写出一种即可)第2页共27页
7.结构体类型的定义格式为struct结构体名{成员列表};,其中成员列表由________组成
8.指针变量的定义格式为________
9.执行printf%%d,5;时,输出的结果是________
10.若有定义int a
[10];则数组a有________个元素,每个元素的类型是________
11.函数的声明一般放在________部分,函数的定义包括________和函数体
12.当使用scanf函数读取整数时,格式控制符是________
13.指针变量p指向int类型变量x,则*p表示________
14.结构体变量s的成员m可以表示为________或________
15.若有定义float*p=a;,则p指向的变量类型是________
三、判断题(共10题,每题1分,共10分)
1.C语言区分大小写字母()
2.变量在定义时必须初始化()
3.数组的下标可以是负数()
4.指针变量的值可以为NULL()
5.结构体可以作为函数的参数()
6.for循环的三个表达式都必须存在,不能省略()
7.函数内定义的变量在函数调用结束后会被释放()
8.用scanf读取字符串时,格式控制符是%s()
9.指针变量之间可以直接相加()
10.结构体数组中的每个元素都是结构体变量()
四、程序阅读题(共10题,每题3分,共30分)
1.#include stdio.h第3页共27页int main{int a=5,b=3;printf%d\n,a+b;return0;}输出结果________
2.#include stdio.hint main{int i;fori=0;i3;i++{printf%d,i;}return0;}输出结果________
3.#include stdio.hint main{int x=10;ifx5{printfx大于5\n;}else{printfx小于等于5\n;}return0;}第4页共27页输出结果________
4.#include stdio.hint addint a,int b{return a+b;}int main{int sum=add3,4;printf%d\n,sum;return0;}输出结果________
5.#include stdio.hint main{char c=A;printf%c\n,c+1;return0;}输出结果________
6.#include stdio.hint main{int arr
[3]={1,2,3};printf%d\n,arr
[2];return0;}输出结果________第5页共27页
7.#include stdio.hint main{int i,sum=0;fori=1;i=5;i++{sum+=i;}printf%d\n,sum;return0;}输出结果________
8.#include stdio.hint main{int a=1,b=2;int*p=a,*q=b;*p=*q;printf%d%d\n,a,b;return0;}输出结果________
9.#include stdio.hstruct Student{char name
[20];int age;};int main{第6页共27页struct Students={Tom,18};printf%s%d\n,s.name,s.age;return0;}输出结果________
10.#include stdio.hint main{int x=5;int y=x3x+2:x-2;printf%d\n,y;return0;}输出结果________
五、程序改错题(共10题,每题4分,共40分)
1.以下程序的功能是计算1到10的和,但存在错误,请找出并修改#include stdio.hint main{int sum=0,i=1whilei=10{sum+=ii++}printfsum=%d\n,sumreturn0;第7页共27页}错误位置及修改________
2.以下程序的功能是输出1到5的平方,但存在错误,请找出并修改#include stdio.hint main{int i,num;fori=1;i=5;num=i*i,i++{printf%d,num}return0;}错误位置及修改________
3.以下程序试图交换两个变量a和b的值,但无法实现,请找出并修改#include stdio.hvoid swapint a,int b{int temp=a;a=b;b=temp;}int main{int a=3,b=5;swapa,b;printf%d%d\n,a,b;第8页共27页return0;}错误位置及修改________
4.以下程序的功能是计算数组arr中所有元素的平均值,但存在错误,请找出并修改#include stdio.hint main{int arr
[4]={1,2,3,4};int sum=0,i;float avg;fori=0;i4;i++{sum+=arr[i]}avg=sum/4;printfavg=%f\n,avgreturn0;}错误位置及修改________
5.以下程序的功能是输出字符数组的长度,但存在错误,请找出并修改#include stdio.hint main{char str[]=Hello;int len=0;whilestr[len]!=NULL{第9页共27页len++}printfLength:%d\n,len;return0;}错误位置及修改________
6.以下程序的功能是输出斐波那契数列的前10项,但存在错误,请找出并修改#include stdio.hint main{int a=0,b=1,c,i;printf%d%d,a,b;fori=3;i=10;i++{c=a+b;printf%d,c;a=b;b=c;}return0;}错误位置及修改________
7.以下程序的功能是判断一个数是否为素数,但存在逻辑错误,请找出并修改#include stdio.hint isPrimeint n{第10页共27页int i;fori=2;in;i++{ifn%i==0return1;}return0;}int main{int num=17;ifisPrimenumprintf%d isprime\n,num;elseprintf%d is not prime\n,num;return0;}错误位置及修改________
8.以下程序试图通过指针修改变量x的值,但无法实现,请找出并修改#include stdio.hvoid changeint*p{*p=100;}int main{int x=5;changex;第11页共27页printf%d\n,x;return0;}错误位置及修改________
9.以下程序的功能是计算两个数的最大公约数,程序本身无错误,请写出“无错误”#include stdio.hint gcdinta,int b{int temp;whileb!=0{temp=a%b;a=b;b=temp;}return a;}int main{inta=24,b=18;int result=gcda,b;printfgcd=%d\n,result;return0;}错误位置及修改________
10.以下程序的功能是将字符串逆序输出,但存在错误,请找出并修改第12页共27页#include stdio.hint main{char str[]=abcdef;int len=strlenstr;forint i=0;ilen/2;i++{char temp=str[i];str[i]=str[len-1-i];str[len-1-i]=temp;}printf%s\n,str;return0;}错误位置及修改________
六、程序填空题(共10题,每题3分,共30分)
1.以下程序的功能是计算1到n的和,补全空白处#include stdio.hint sumint n{int s=0,i;fori=1;i=n;i++{;}return s;}int main{int n;第13页共27页scanf%d,n;printfSum=%d\n,sumn;return0;}空白处应填__
2.以下程序的功能是输出数组中的最大值,补全空白处#include stdio.hint main{int arr[]={5,2,9,1,7};int max,i;max=arr
[0];fori=1;i5;i++{ifarr[i]max{;}}printfMax=%d\n,max;return0;}空白处应填__
3.以下程序的功能是判断一个数是否为偶数,补全空白处#include stdio.hint isEvenintn{if{return1;第14页共27页}else{return0;}}int main{int num;scanf%d,num;ifisEvennum{printfEven\n;}else{printfOdd\n;}return0;}空白处应填__
4.以下程序的功能是计算n的阶乘(n!),补全空白处#include stdio.hlong longfactorialint n{long longresult=1;int i;fori=1;i=n;i++{;}return result;}第15页共27页int main{intn;scanf%d,n;printf%d!=%lld\n,n,factorialn;return0;}空白处应填__
5.以下程序的功能是输出1到100之间的素数,补全空白处#include stdio.hint isPrimeintn{int i;fori=2;i*i=n;i++{ifn%i==0{return0;}}return1;}int main{int i;fori=2;i=100;i++{if{printf%d,i;}}第16页共27页return0;}空白处应填__
6.以下程序的功能是求两个数的最小公倍数,补全空白处#include stdio.hint gcdinta,int b{int temp;whileb!=0{temp=a%b;a=b;b=temp;}return a;}int lcminta,int b{return a*b/gcda,b;}int main{inta,b;scanf%d%d,a,b;printfLCM=%d\n,;return0;}空白处应填__
7.以下程序的功能是使用指针遍历数组,补全空白处第17页共27页#include stdio.hint main{int arr[]={1,2,3,4,5};int*p=arr;//指针指向数组首元素int i;fori=0;i5;i++{printf%d,;//输出指针指向的元素p++;//指针后移一位}return0;}空白处应填__
8.以下程序的功能是将字符串转换为大写,补全空白处#include stdio.hvoid toUpperchar str[]{int i=0;whilestr[i]!=\0{ifstr[i]=astr[i]=z{;//将小写字母转换为大写}i++;}}int main{char str[]=Hello World;第18页共27页toUpperstr;printf%s\n,str;return0;}空白处应填__
9.以下程序的功能是定义一个结构体并输出成员,补全空白处#include stdio.hstruct Book{char title
[50];char author
[30];float price;};int main{struct Bookb={C Programming,Dennis Ritchie,
45.99};printfTitle:%s\n,b.title;printfAuthor:%s\n,______;//输出作者printfPrice:%.2f\n,______;//输出价格return0;}空白处应填和
10.以下程序的功能是读取文件内容并输出,补全空白处#include stdio.hint main{FILE*file=fopentest.txt,r;//以只读方式打开文件iffile==NULL{第19页共27页printf无法打开文件\n;return1;}char c;while{//读取文件直到结束c=fgetcfile;putcharc;}fclosefile;return0;}空白处应填__
七、编程题(共10题,每题5分,共50分)
1.编写一个函数,计算两个整数的和并返回结果
2.编写程序,输出1到100之间所有能被3整除的数
3.编写程序,使用冒泡排序法对数组{5,2,9,1,5,6}进行升序排序
4.定义一个学生结构体,包含学号、姓名、成绩,输入一个学生的信息并输出
5.编写函数,判断一个年份是否为闰年(能被4整除但不能被100整除,或者能被400整除)
6.编写程序,计算1到n的阶乘之和(1!+2!+...+n!)
7.编写函数,将一个字符串中的所有空格替换为下划线
8.使用结构体定义链表节点,编写函数创建并输出一个包含3个节点的简单链表第20页共27页
9.编写程序,从文件中读取一个字符串,统计其中字母、数字和其他字符的个数(需包含头文件)
10.编写程序,实现简单的计算器功能,用户输入两个数和运算符(+、-、*、/),输出计算结果(注意处理除数为0的情况)答案汇总
一、选择题答案
1.B
2.D
3.B
4.C
5.C
6.C
7.A
8.C
9.B
10.C
11.D
12.D
13.A
14.B
15.D
二、填空题答案
1.main函数
2.float
3.不
4.首地址
5.形
6.a=a+b;b=a-b;a=a-b;(或其他正确方法)
7.若干个数据成员
8.数据类型指针变量名;(如int*p;)
9.%d
10.10,int
11.函数声明,函数返回类型
12.%d
13.x的值
14.s.m,*s.m
15.float
三、判断题答案
1.√
2.×
3.×
4.√
5.√
6.×
7.√
8.√
9.×
10.√
四、程序阅读题答案
1.8[
2.
0123.x大于
54.
75.B
6.
37.
158.
229.Tom
1810.7]
五、程序改错题答案
1.第2行缺少分号;修改int sum=0,i=1;第3行sum+=i后缺少分号;修改sum+=i;第4行i++后缺少分号;修改i++;第5行printf后缺少分号;修改printfsum=%d\n,sum;
2.第3行for循环第三个表达式错误;修改fori=1;i=5;i++第21页共27页第4行printf后缺少分号;修改printf%d,num;
3.第2行swap函数参数为值传递,无法交换;修改void swapint*a,int*b{int temp=*a;*a=*b;*b=temp;}第5行调用时传地址;修改swapa,b;
4.第6行sum+=arr[i]后缺少分号;修改sum+=arr[i];第8行printf后缺少分号;修改printfavg=%f\n,avg;
5.第6行while循环条件错误(字符串结束符为\0);修改whilestr[len]!=\0第7行len++后缺少分号;修改len++;
6.第4行for循环初始值错误;修改fori=3;i=10;i++(原程序无其他错误)
7.第5行if条件正确,但返回1表示“非素数”,逻辑错误;修改return0;
8.第7行change函数参数应为指针;修改changex;
9.无错误
10.第1行缺少头文件#include string.h;修改#includestring.h
六、程序填空题答案
1.s+=i
2.max=arr[i]
3.n%2==
04.result*=i
5.isPrimei
6.lcma,b
7.*p
8.str[i]-=
329.b.author,b.price
10.c=fgetcfile!=EOF
七、编程题答案(完整代码)
1.int addinta,int b{return a+b;}#include stdio.h第22页共27页int main{int i;fori=1;i=100;i++ifi%3==0printf%d,i;return0;}#include stdio.hint main{int arr[]={5,2,9,1,5,6},i,j,temp;fori=0;i6;i++forj=i+1;j6;j++ifarr[i]arr[j]{temp=arr[i];arr[i]=arr[j];arr[j]=temp;}fori=0;i6;i++printf%d,arr[i];return0;}#include stdio.hstruct Student{int id;char name
[20];float score;};int main{struct Students;scanf%d%s%f,s.id,s.name,s.score;printfID:%d,Name:%s,Score:%.1f\n,s.id,s.name,s.score;return0;}第23页共27页#include stdio.hint isLeapint year{return year%400==0year%4==0year%100!=0;}int main{inty;scanf%d,y;printf%d%s leapyear\n,y,isLeapyis:isnot;return0;}#include stdio.hint factorialintn{int res=1,i;fori=1;i=n;i++res*=i;return res;}int main{intn,sum=0,i;scanf%d,n;fori=1;i=n;i++sum+=factoriali;printfSum offactorials:%d\n,sum;return0;}#include stdio.hvoid replaceSpacecharstr[]{int i=0;第24页共27页whilestr[i]!=\0{ifstr[i]==str[i]=_;i++;}}int main{charstr[]=Hello World;replaceSpacestr;printf%s\n,str;return0;}#include stdio.h#include stdlib.h//需包含stdlib.hstruct Node{int data;struct Node*next;};struct Node*createNodeint data{struct Node*newNode=struct Node*mallocsizeofstructNode;newNode-data=data;newNode-next=NULL;return newNode;}void printListstruct Node*head{struct Node*p=head;whilep!=NULL{printf%d,p-data;p=p-next;}printf\n;}int main{第25页共27页structNode*head=createNode1;head-next=createNode2;head-next-next=createNode3;printListhead;//输出123return0;}#include stdio.h#include ctype.h//需包含ctype.hint main{FILE*file=fopeninput.txt,r;iffile==NULL{printf无法打开文件\n;return1;}char c;int letters=0,digits=0,others=0;whilec=fgetcfile!=EOF{ifisalphac letters++;else ifisdigitcdigits++;else others++;}printfLetters:%d,Digits:%d,Others:%d\n,letters,digits,others;fclosefile;return0;}#include stdio.hint main{float a,b,res;char op;printfEnter twonumbers andoperator:;第26页共27页scanf%f%f%c,a,b,op;switchop{case+:res=a+b;break;case-:res=a-b;break;case*:res=a*b;break;case/:ifb==0{printf除数不能为0\n;return1;}res=a/b;break;default:printf无效运算符\n;return1;}printfResult:%.2f\n,res;return0;}第27页共27页。
个人认证
优秀文档
获得点赞 0