C语言程序设计各章练习题.docx

上传人:b****5 文档编号:6858128 上传时间:2023-01-11 格式:DOCX 页数:38 大小:52.50KB
下载 相关 举报
C语言程序设计各章练习题.docx_第1页
第1页 / 共38页
C语言程序设计各章练习题.docx_第2页
第2页 / 共38页
C语言程序设计各章练习题.docx_第3页
第3页 / 共38页
C语言程序设计各章练习题.docx_第4页
第4页 / 共38页
C语言程序设计各章练习题.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

C语言程序设计各章练习题.docx

《C语言程序设计各章练习题.docx》由会员分享,可在线阅读,更多相关《C语言程序设计各章练习题.docx(38页珍藏版)》请在冰豆网上搜索。

C语言程序设计各章练习题.docx

C语言程序设计各章练习题

《C语言程序设计》各章练习题

2016年12月汇编

第1-3章C语言基础、编程规范、顺序结构程序设计

编程题1:

设a和b均为int型变量,编写一个程序,通过键盘读入a,b的值,然后交换a,b的值。

要求屏幕显示“输入2个整数,用空格隔开”的提示语句,并且输出交换前a,b的值,交换后a,b的值。

附加要求:

(1)允许定义第3个变量,实现交换;

(2)不允许定义第3个变量,实现交换。

第4章选择结构程序设计

编程题2:

根据下列函数关系写程序,要求提示输入x的值,输出y的值。

编程题2:

根据下列函数关系写程序,要求提示输入x的值,输出y的值。

编程题3:

求ax2+bx+c=0方程的解。

(只输出b2-4ac>=0的求解结果,小于0,输出“不予求解!

”)

第5章循环结构程序设计

编程题4:

编程计算

要求提示键盘输入n,如n为负数,不予计算,直接返回。

编程题5:

编程序计算n!

,要求n从键盘输入,如n小于0,不予计算。

编程题6:

从键盘输入一个数n,判断n是否是素数。

编程题6:

编写程序输出1~100之间的偶数,要求屏幕显示时5个偶数一行,每个数占5位,右对齐。

编程题7:

编程计算100到1000之间有多少个数其各位数字之和是5,并将其输出。

编程题8:

求满足下列条件的三位数n,它除以11(整数相除)所得到的商等于n的各位数字的平方和,且其中至少有二位数字相同的数。

编程题9:

有一些十进制整数对ab和cd具有如下特性:

ab×cd=ba×dc,其中a≠b且c≠d。

如:

12×42=21×24。

请编程找出30~50之间满足上述等式所有m,n值,并按上述等式的格式输出。

(×用*表示)

编程题10:

从键盘上输入一个整数,然后把这个整数的各位逆序输出。

例如,输入123456,输出654321。

第6章数组

编程题11:

有一个已排好序的数组inta[11]={-5,-3,0,6,8,12,16,28,66,88};,要求输入一个数后,按原来排序的规律将它插入数组中。

编程题12:

输入一个字符串(字符个数为小于100),统计其中字母、数字、空格以及其它符号的个数,并将大写字母改为小写字母,输出改变后的字符串。

(提示:

A的ASCII值为65,a的ASCII值为97)

编程题12:

输入一行字符(字符数组的个数小于100),统计其中字母、数字以及其它符号的个数。

(注:

数组限定字符个数小于100)

编程题12:

输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。

(注:

字符个数不受限制)

第7章函数

编程题13:

编写一个子函数intfun(intn),其功能是判断整数n是否为素数,n是素数,返回值为1;n不是素数,返回值为0。

调用该函数,将100~200之间的素数全部输出,要求屏幕上每个数占4位,每行显示5个素数,左对齐。

(循环、条件分支、子函数、变量的值传递、屏幕显示格式控制)

编程题14:

主函数中定义两个数组inta[5]={5,4,8,-1,2},b[10]={1,-1,2,4,8,4,0,9,3,7};用子函数实现从小到大的冒泡排序,子函数为voidbubble(int[],int);要求在主函数中显示排序前、后的数组a和b的元素。

(循环、条件分支、子函数、数组、地址传递)

编程题15:

主函数中定义两个数组inta[5]={5,4,8,-1,2},b[10]={1,-1,2,4,8,4,0,9,3,7};用子函数实现从小到大的选择法排序,子函数为voidsort(int[],int);要求在主函数中显示排序前、后的数组a和b的元素。

(循环、条件分支、子函数、数组、地址传递)

编程题16:

用递归函数计算n!

编程题17:

编写一个子函数intfact(intn),计算n的阶乘。

调用该函数计算1!

+2!

+3!

+…+n!

,要求n从键盘输入,如输入n小于0,不予计算。

(循环、递归函数)

编程题18:

将16进制或8进制或2进制数转换为十进制数(字符数组、字符串函数、子函数、字符ASCII值与10进制数的转换,指数函数的调用)

编程题18:

编程实现八进制数转换为十进制数(注:

用字符数组n[100]接收输入,输入的八进制数肯定正确,无须检测;八进制数转换为十进制数的子函数为inthtoi(charhnum[]);)

编程题18:

编写一个子函数,将16进制数转换为10进制数。

编程题19:

编写一个子函数,主函数用字符数组作为实参,统计字符串中字母、数字、空格以及其他符号的个数,要求主函数中显示字符串与统计结果。

编程题20:

编写一个子函数,主函数输入一行字符,子函数找出字符串中最长的单词,并显示结果。

编程题21:

用递归法将一个整数n转换为字符串。

例如:

输入483,输出字符串“483”,n的位数不确定。

编程题22:

写一个子函数,将输入的字符串按反序存放,在main中输入和输出字符串。

第8章指针

编程题23:

编写一个子函数mystrcmp(char*s1,char*s2)实现2个字符串的比较。

编程题23:

编程实现两个字符串连接起来,不要用strcat函数。

编程题23:

用函数调用实现字符串的复制。

编程题23:

写一个函数,求一个字符串的长度。

在main函数中输入字符串,并输出其长度。

编程题24:

写一个用矩形法求定积分的通用函数,分别计算

编程题25:

输入一个字符串,内有数字和非数字字符,如:

A123x45617960?

302tab5876,将其中连续的数字作为一个整数,依次用数组存放这些数,统计有多少个整数,并输出这些数。

编程题26:

主函数输入整数的个数,用指针变量动态申请内存,并用键盘按任意次序输入n个整数,用子函数voidbubble(int[],int)实现从小到大的冒泡排序。

第9章结构

编程题27:

建立一个链表,每个结点包括:

学号、姓名、性别、年龄,输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。

编程题28:

13个人围成一圈,从第一个人开始顺序报号,凡报到3者退出圈子,找出最后留在圈子中的人原来的序号。

要求用链表实现。

编程题29:

阅读链表操作相关函数,完成指定的操作函数。

链表内容仅限表头表尾添加、删除、查询、显示、保存,不考排序、中间节点的插入和删除

#include"stdio.h"

#include"malloc.h"

#include"string.h"

structStudent

{

charname[20];

intnum;

intmath;

structStudent*next;

};

structStudent*Create(structStudent*head);//生成数据链表

voidShowList(structStudent*head);//显示链表

voidsaveList(structStudent*head);//保存链表数据

voidAddTail(structStudent*head,structStudent*temp);//表尾添加元素

structStudent*AddHead(structStudent*head,structStudent*temp);//表头添加元素

structStudent*DeleteSomeone(structStudent*head);//删除元素

voidFindSomeone(structStudent*head);//查询元素

structStudent*DeleteHead(structStudent*head);//删除表头

voidDeleteTail(structStudent*head);//删除表尾

voidmain()

{

structStudent*head=NULL,*temp=NULL;

intchoice;

do

{

printf("1:

创建数据链表\n");

printf("2:

添加链表单元\n");

printf("3:

删除链表单元\n");

printf("4:

查询链表单元\n");

printf("5:

删除表头\n");

printf("6:

删除表尾\n");

printf("7:

退出\n");

printf("请输入功能选择:

");

scanf("%d",&choice);//cin>>choice;

if(choice==1)

{

head=Create(temp);

ShowList(head);

saveList(head);

}

elseif(choice==2)//表头添加元素

{

temp=(structStudent*)malloc(sizeof(structStudent));

printf("姓名:

");scanf("%s",temp->name);

printf("学号:

");scanf("%d",&temp->num);

printf("成绩:

");scanf("%d",&temp->math);

AddTail(head,temp);//head=AddHead(head,temp);

ShowList(head);

saveList(head);

}

elseif(choice==3)//删除元素

{

head=DeleteSomeone(head);

ShowList(head);

saveList(head);

}

elseif(choice==4)//查找元素

FindSomeone(head);

elseif(choice==5)//删除表头

{

head=DeleteHead(head);

ShowList(head);

saveList(head);

}

elseif(choice==6)//删除表尾

{

DeleteTail(head);

ShowList(head);

saveList(head);

}

elseif(choice==7)

printf("谢谢使用!

\n");

else

printf("非法输入,请输入1~7之间的数!

\n");

}while(choice!

=7);

}

structStudent*Create(structStudent*head)//包含读文件创建链表

{

structStudent*pS,*pEnd;

FILE*fp;

fp=fopen("e:

\\list.txt","r");

if(fp!

=NULL)//表明已有链表数据,直接读入

{

intflag;

while

(1)

{

pS=(structStudent*)malloc(sizeof(structStudent));

flag=fscanf(fp,"%s%d%d",pS->name,&pS->num,&pS->math);

if(flag==EOF)

break;

if(head==NULL)

head=pS;

else

pEnd->next=pS;

pEnd=pS;

}

if(head!

=NULL)

{

pEnd->next=NULL;

printf("已从文件中读入数据创建链表!

\n");

}

deletepS;

fclose(fp);

}

if(head==NULL)

{

while

(1)

{

pS=(structStudent*)malloc(sizeof(structStudent));

printf("姓名:

");scanf("%s",pS->name);

if(strcmp(pS->name,"000"))

{

printf("学号:

");scanf("%d",&pS->num);

printf("成绩:

");scanf("%d",&pS->math);

}

else

break;

if(head==NULL)

head=pS;

else

pEnd->next=pS;

pEnd=pS;

}

pEnd->next=NULL;

deletepS;

}

returnhead;

}

voidShowList(structStudent*head)//显示链表上的数据

{

printf("学生姓名学号成绩:

\n");

while(head)

{

printf("%20s",head->name);

printf("%6d",head->num);

printf("%5d\n",head->math);

head=head->next;

}

}

voidsaveList(structStudent*head)//保存链表上的数据

{

FILE*fp;

fp=fopen("e:

\\list.txt","w");

if(fp==NULL)

{

printf("无法创建文件e:

\\list.txt!

");

return;

}

while(head)

{

fprintf(fp,"%s%d%d\n",head->name,head->num,head->math);

head=head->next;

}

fclose(fp);

}

voidAddTail(structStudent*head,structStudent*temp)//加在表尾

{

structStudent*last;

while(head)

{

last=head;

head=head->next;

}

last->next=temp;

temp->next=NULL;

}

structStudent*AddHead(structStudent*head,structStudent*temp)//加在表头

{

structStudent*first;

first=head;

head=temp;

head->next=first;

returnhead;

}

structStudent*DeleteSomeone(structStudent*head)

{

structStudent*temp;

intxnum,flag=0;

printf("请输入学号:

");

scanf("%d",&xnum);

if(head==NULL)

{

printf("表为空!

\n");

returnhead;

}

if(head->num==xnum)

{

temp=head;

head=head->next;

deletetemp;

returnhead;

}

Student*first=head;

while(head)

{

if(head->next==NULL)

break;

if(head->next->num==xnum)

{

temp=head->next;

head->next=temp->next;

deletetemp;

flag=1;

break;

}

head=head->next;

}

if(flag==0)

printf("未发现!

\n");

returnfirst;

}

voidFindSomeone(Student*head)//按学号查找

{

intxnum,flag=0;

printf("请输入学号:

");

scanf("%d",&xnum);

while(head)

{

if(head->num==xnum)

{

printf("%20s",head->name);

printf("%6d",head->num);

printf("%4d\n",head->math);

flag=1;

break;

}

head=head->next;

}

if(flag==0)

printf("未发现!

\n");

}

structStudent*DeleteHead(structStudent*head)

{

if(head==NULL)

{

printf("表为空!

\n");

returnhead;

}

if(head->next==NULL)

{

deletehead;

head=NULL;

returnhead;

}

else

{

structStudent*first=head;

head=head->next;

deletefirst;

returnhead;

}

}

voidDeleteTail(structStudent*head)

{

if(head==NULL)

{

printf("表为空!

\n");

}

if(head->next==NULL)

{

deletehead;

head=NULL;

}

else

{

structStudent*temp,*end;

end=head;

while(end->next!

=NULL)

{

temp=end;

end=end->next;

}

temp->next=NULL;

}

}

第10章文件

编程题30:

编程实现:

有一个文本文件“a.txt”,里面有大小写英文字母、数字和其它符号。

要求分别统计其中大写字母、小写字母、数字以及其它字符的个数。

编程题30:

从键盘输入一串字符,并以#结束,将其中的大写字母全部转换成小写字母,并输出到计算机D盘文件“test.txt”中保存。

(提示:

一串字符并不意味着一行字符,另外一串字符的具体字符个数是不定的。

编程题31:

从键盘输入一个字符串,将其中的小写字母全部转换为大写字母,然后输出到C盘“test”文件中保存,输入的字符串以“!

”结束。

编程题32:

有两个磁盘文件“A”和“B”,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件“C”中去。

编程题33:

有5个学生,每个学生有3门课程的成绩,从键盘输入学号、姓名、3门课程成绩,计算每个学生的平均成绩,将原有数据和平时成绩存放在磁盘文件“stud”中。

 

第1-3章C语言基础、编程规范、顺序结构程序设计

一、选择题

1.C语言是一种(C)程序设计语言。

A.低级B.面向对象C.高级D.智能

2.下列特性中,(D)不是C语言的特征。

A.运行效率高B.结构化程序设计C.能直接访问物理地址D.类型检测严格

3.下列标识符中,(D)不是C的关键字;

A.intB.floatC.charD.scanf

4.下列标识符中,(D)不是C的关键字;

A.sizeofB.shortC.longD.define

5.下列标识符中,(D)不是C的关键字;

A.gotoB.breakC.autoD.printf

6.下列标识符中,(D)不是C的关键字;

A.staticB.structC.voidD.include

7.下列自定义标识符中,(C)是不符合规定。

A.point1xB._point1xC.2pointxD.pointx_2

8.下列自定义标识符中,(C)是不符合规定。

A.MAXB._MINC.MAX$D.MIN_2

9.下列自定义标识符中,(D)是不符合规定。

A.point1_B._point1xC.pointxD.pointx_ #

10.下列自定义标识符中,(A)是不符合规定。

A.2_point1xB._point1xC.pointxD.pointx_2

11.下列四个选项中,是不合法的用户标识符的选项是(C)

A.P_0     B._abc     C.goto     D.temp

12.下面是不正确的字符串常量的是(A)

A.’abc’     B.“12’12”     C.“0”     D.“”

13.已知inta;floatf;scanf(“a=%d,f=%f”,&a,&f);为了把10和3.14分别赋值给a和f,则正确的输入为(C)

A.10,3.14B.103.14C.a=10,f=3.14D.a=10f=3.14

14.输入语句为:

scanf("%f,%f\n",&radius,&high);下列键盘输入(D)是正确的。

A.12↙;B.1,2\n↙;C.1↙2↙;D.1,2↙;

15.输入语句为:

scanf("a=%f,b=%f",&radius,&high);从键盘输入(D)是正确的。

A.12↙;B.1,2↙;C.1↙2↙;D.a=1,b=2↙;

16.输入语句为:

scanf("a=%f,b=%f\n",&radius,&high);从键盘输入(D)是正确的。

A.12↙;B.1,2↙;C.1↙2↙;D.a=1,b=2\n↙;

17.输入语句为:

scanf("a=%fb=%f",&radius,&high);从键盘输入(D)是正确的。

A.12↙;B.1,2↙;C.1↙2↙;D.a=1b=2↙;

18.doublePI=3.1415926,输出语句为:

printf("%3.2lf",PI);下列输出结果(D)是正确的。

A.3.1415926;B.3.2;C.3.1;D.3.14;

19.doublePI=3.1415926,输出语句为:

printf("%5.4lf",PI);下列输出结果(B)是正确的。

A.3.1415926;B.3.1415;C.3.1416;D.5.4;

20.doublePI=3.1415926,输出语句为:

printf("%3.4lf",PI);下列输出结果()是正确的。

A.3.1415926;B.3.141;C.3.1415;D.3.1416;

21.设x,y均为float型变量,则下列不合法的赋值语句是()

A.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1