C语言实训教程
肇庆学院计算机学院 高级语言程序设计课程组
2010.9
序言
程序设计是高校重要的计算机基础课程,它以编程语言为平台,介绍程序设计的思想和方法。通过该课程的学习,学生不仅要掌握高级程序设计语言的知识,更重要的是在实践中逐步掌握程序设计的思想和方法,培养问题求解和程序语言的应用能力。
C语言是一种功能强大、编程灵活、特色鲜明的程序设计语言,但要学好运用这门语言进行程序设计,不仅要学习C语言的基本概念、语法规则以及基本编程算法,更重要的是要进行实践,真正能够利用所学知识,动手编写程序,解决实际问题。这就要求必须加强这门课程的实践环节,通过大量的不同层次的训练,积累编程经验,提高程序设计能力。
本书指导思想是:实验项目分层次,由浅入深、循序渐进,达到读写程序的能力同步提高的目的。
该书共有12个实验,其中2个为综合性实验。每个实验包括实验目的、相关知识点及示例、实验任务等,而实验任务又包括若干个实验项目,每个实验项目都有训练要点以及程序正确运行的参考示例。实验任务中的实验项目设置按照“由浅入深、循序渐进”的原则设置了三个层次,第一层次为程序改错,目的是读简单程序,读懂并纠正程序中的错误,这些错误,一般都是初学者易犯的常见错误,通过改错训练,避免以后编写程序时犯同样错误。第二层次是程序扩展,目的是训练学生读程序的能力,以及在理解程序的基础上,模仿原来的程序对程序进行扩充改写,使得学生能够完成部分编程,为独立完成编写程序打下基础。第三层次为程序编写,训练学生独立编程的能力以及解决实际问题的能力。经过“读懂-模仿-改写-编写”的过程,在循序渐进的引导中逐步熟悉理解和掌握程序设计的思想、方法和技巧,并能掌握基本的程序调试方法。
目录
实验 1 熟悉C语言编程环境..................错误!未定义书签。
1.1 VC++6.0的使用....................错误!未定义书签。实验 2 顺序结构程序设计................错误!未定义书签。
2.1 基本数据类型和表达式.....................错误!未定义书签。
2.2 输入和输出函数...................错误!未定义书签。实验 3 分支结构程序设计................错误!未定义书签。
3.1 二分支程序设计...................错误!未定义书签。
3.2 多分支程序设计...................错误!未定义书签。实验 4 循环结构程序设计................错误!未定义书签。
4.1 基本的循环程序设计..................错误!未定义书签。
4.2 嵌套循环........................错误!未定义书签。实验 5 函数..........................错误!未定义书签。
5.1 函数的定义及调用...............错误!未定义书签。
5.2 函数的嵌套调用和递归调用.............错误!未定义书签。
5.3 使用工程组织多个程序文件.............错误!未定义书签。实验 6 综合实验一.....................错误!未定义书签。实验 7 数组..........................错误!未定义书签。
7.1 一维数组........................错误!未定义书签。
7.2 二维数组........................错误!未定义书签。
7.3 字符数组........................错误!未定义书签。实验 8 结构体与共用体....................错误!未定义书签。
8.1 结构体.....................错误!未定义书签。
8.2 结构体数组....................错误!未定义书签。
8.3 共用体.....................错误!未定义书签。实验 9 指针..........................错误!未定义书签。
9.1指针的概念及基本运算...............错误!未定义书签。
9.2指针与数组.....................错误!未定义书签。
9.3单向链表.........................错误!未定义书签。实验 10 位运算....................错误!未定义书签。实验 11 文件........................错误!未定义书签。实验 12 综合实验二...................错误!未定义书签。
课程编号:学 时 数:54学时
课程名称:C语言程序设计适用专业:计算机应用技术
执 笔 人:编写日期:2008年7月
单元能力训练指导
单元一:运算符、表达式、输入输出语句
1.能力要求:
1)能够正确定义、输入、输出并使用常用数据类型:整型、实型、字
符型
2)掌握五种基本算术运算符的使用:+、-、*、/、%,知道优先
级与结合性
3)掌握逻辑运算符和关系运算符、条件运算符的使用
4)能够正确使用printf()和scanf()进行各种数据正确格式的输入输
出
5)编写简单顺序结构程序
2.基础能力训练:
1)输入一个字母,输出其对应的ASCII码.2)输入一个小写字母,输出其对应的大写字母.3)从键盘输入一个四位数,编程计算该四位数的各位和并输出。
4)教材p.41页习题,5,6,7,9,10(关于数据类型、运算符、表达
式的练习题,其他类似题目均可)
5)教材p.62页习题4,5,6,7(关于格式化输入输出的练习题,其
他类似题目均可)
3.拓展能力训练:
1)输入一个十进制数,输出其对应的八进制数据。
2)输入一个圆的半径,分别求圆的周长,面积和体积。
单元二:选择结构程序设计
1.能力要求:
1)能够使用if语句编写条件选择程序
2)能够使用嵌套if语句和switch语句编写多分支选择结构程序
2.基础能力训练:
1)判断一个数的正、负,输出相应信息
2)判断一个数的奇偶,输出相应信息
3)在主函数中输入整型数据n,判断该数是否能被3整除,如果能被3 整
除,输出“yes”,否则输出“no”
4)将数学式子写成程序语言,如80<=x<=90
5)编程求解分段函数,根据程序写出分段函数的数学表达式
6)从键盘输入三个数,按照从小到大(或从大到小)的顺序输出
7)判断一个年份是否闰年
8)对一个百分制的成绩给出相应的等级(如90分以上A,80分以上B
等
9)从键盘输入两个整数,输出大数(用条件表达式求解)
3.拓展能力训练:
1)从键盘上输入一个数,判断其是否为水仙花数。
2)求一元二次方程的根
3)编程实现以下功能,读入两个数(d1,d2)和一个运算符(o),计算
d1 o d2的值。
单元三:循环结构程序设计
1.能力要求:
1)掌握for、do-while、while语句结构
2)能够使用for、do-while、while编写循环结构程序
3)使用for、do-while、while编写多重循环语句
2.基础能力训练:
1)求1+2+3+…+100的和存入变量sum中,并将sum打印出来。
2)编程计算200――300的偶数和并将和打印输出
3)计算正整数1-n中的奇数之和及偶数之和
4)从5-100之间找出能被5或7整除的数(或类似求1-100之间不
能被8整除的数
5)判断一个循环语句能执行多少次(补充类似练习)
6)打印99乘法表(二重循环)
7)求Fibonacci数列的前20个数。该数列的生成方法为: F1 = 1,F2
= 1,Fn=Fn-1+Fn-2(n>=3),即从第3个数开始每个数等于前2个数之和。(每行输出4个数)
9)求出3~100之间的所有素数,并按每行5个数打印输出
3.拓展能力训练:
1)编写一个只要输入4位数的年份和该年的元旦是星期几,就可打印
全年日历的程序(可作思路开发练习时讲解)。
2)试编写程序,求一个数任意次方的最后三位数,要求x,y从键盘上
输入
3)猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不
瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
4)编写程序,从键盘上输入6名学生4门课的成绩,分别统计出每个
学生的平均成绩。
单元四:数组
1.能力要求:
1)掌握一维数组的使用
2)能够进行二维数组的定义、初始化、输入、输出、引用等操作
3)进行字符串、字符数组操作,熟悉常用字符串处理函数
2.基础能力训练:
1)有一12个元素的整型数组b,从键盘输入数据,请以每行4个数据
各个数据之间空两格的形式输出b数组的12个元素
2)由键盘输入一个字符串,如果字符串中的字符是英文字母,则进行
大小写转换,其它字符不变。输出转换后的字符串。
3)定义一个整型数组a[10],将数组a[10]中的10个元素按逆序重新
存放。4)用数组方法求Fibonacci数列的前20个数。该数列的生成方法为: F1 = 1,F2 = 1,Fn=Fn-1+Fn-2(n>=3),即从第3个数开始每个数等于前2个数之和。(每行输出4个数)
4)对从键盘输入的一个字符串中的大英字母及数字进行计数。
5)有一个3行3列的矩阵,请将其在屏幕上输出。
6)将一个2*3的矩阵转置为3*2的矩阵
7)在一个三行三列的矩阵中求出数值最大的元素及其行/列下标并打
印输出。
8)不使用库函数实现两个字符串的复制和连接
3.拓展能力训练
1)从键盘输入10个字符串,按照字典顺序将其排序输出(二维字符数
组)
2)打印杨辉三角形(要求打印出10行)
121
1331
14641
15101051
1……
3)从键盘上输入100个字符,统计其中字母、每个数字和其它字符的个数及其百分比。
4)找出一个二维数据中的鞍点。(鞍点是指位置上的元素在该行上最大,在该列上最小),如果没有鞍点,请输出提示信息。
单元五:函数
1.能力要求:
1)能够通过定义、调用函数处理指定问题:如数组排序,数据交换,字符串大、小写转换等
2)能够嵌套调用函数
3)编制递归函数进行求阶乘的运算
4)了解变量的作用域及生存期在程序中的影响
2.基础能力训练:
1)在主函数中,输入整数x的值,调用函数,在屏幕上输出y的值。2)编写函数求三个数中的最大数
3)编写函数求组合数C= n!/(k!*(n-k)!)
4)编写递归函数用于计算n!
5)编写函数求x的n次方的值
6)用函数求两个整数之差的绝对值
7)用函数求1-100的累计和
8)不使用库函数strcat(),编程将两个字符串连接起来。
9)编写函数将一个字符串中的小写字母改为大写字母(数组元素和数
组名作函数参数)
10)有关函数及全局变量等的程序阅读类型题。
3.拓展能力训练:
1)定义两个函数,分别求两个整数的最大公约数和最小公倍数。
2)编写函数,使用递归的方法,3)求三个数的最小公倍数。用函数实现。
单元六:指针
1.能力要求:
1)指针变量的定义、使用,以及指针变量作函数参数
2)使用指针进行数组操作
3)使用指针进行字符串操作
2.基础能力训练:
1)用下标法和指针法引用数组元素
2)使用指针,不使用库函数strcat(),编程将两个字符串连接起来。
3)使用指针,不使用库函数strcpy(),编程将两个字符串连接起来。
使用指针,不用库函数strlen(),编程求字符串的长度。
4)使用指针进行冒泡法排序
5)使用指针求一个字符串的长度
3.拓展能力训练:
1)编写一个子串截取函数,viod substr(char *source,int start,int length,char *dest);source是源字符串指针,start是截取的开始位置,length是要截取的子串的长度,dest是指目标串指针。
2)编写一个程序,利用指针打印如下图形。
***
** **
****
****
3)编写一个函数,完成对n个字符串的排序。
单元七:结构体与链表
1.能力要求:
1)在程序中正确使用结构体变量、结构体数组以及结构体类型的指针
2)了解链表处理的方法
2)了解共用型、枚举型数据类型
2.基础能力落实:
1)定义一个反映学生学号、姓名和性别的结构体变量,同时初始化;
将信息打印输出。
2)定义一个结构体数组,用于存放5名学生的学号、姓名及三门课的成绩; 从键盘输入5名学生的以上数据,将成绩平均值最大的学生的学号、姓名、三门课的成绩及平均成绩在屏幕上输出。
3.拓展能力落实:
1)利用共用体测键盘的输入。
2)编写一个函数,实现链表的插入。
3)编写一个函数,实现链表的查询。
单元八:文件
1.能力要求:
1)根据题意进行文件操作:打开、关闭、读写
2)进行文件定位操作,了解位置指针与出错检测
3)数组、字符、字符串的读写
2.基础能力落实:
1)定义一个字符数组str[15],从键盘输入一个字符串“polytechnic”,将此字符串,写入文件string.dat中,分别用fwrite与fputs函数实现
2)定义一个浮点型变量a,从键盘输入数据,将此数写入二进制文件
data.dat中
3)将一个整型数据、浮点型数据存入文件并读取
4)将一个结构体数据存入文件并读取。
3.拓展能力落实:
1)编写一个函数,实现两个文本文件的复制。
2)将一个文件中,所有的小写字母转化为大写字母后输出
湖北轻工职业技术学院 《C语言程序设计》实验报告
实验十一:函数
班 级: ___________10计管_________________ 姓 名: ___________胡高______________ 学 号: ___________1003011138________________ 日 期: ____________2011-5-29________________
一、实验目的和要求
1、理解数组引入的意义及作用;
2、掌握一维数组的基本思想和基本用法;
3、掌握使用一维数组的基本算法:排序与查找。
二、实验主要仪器和设备 计算机一台,Turbo C环境。
三、实验内容
请将该实验报告重新命名为“实验11-学号[姓名]”,如“实验11-66[张三]”
1、P145 填空题2(2)
2、P145 上机操作题 3(5)
四、实验原始纪录 实验1 程序的设计界面。(Alt+PrintScreeninclude SysRq拷贝当前窗口)
程序代码。(此处写代码,不是图片。
#include void main(){
void swap();
extern int a,b;
a=3;b=10;
swap();
printf(“a=%d,b=%dn”,a,b);
}
int a,b;
void swap()
{
int temp;
temp=a;a=b;b=temp;
}
实验2 程序的设计界面。
程序代码。
五、实验结果及分析
实验1运行结果图。
实验2运行结果图。
六、实验总结与思考(主要写一些在实验过程中,遇到的问题、所犯的错误,以及是如何发现纠正的。大约100至200字左右。)
本次试验的内容是考察数组的引用、基本算法等,但是总体感觉有点问题。有的地方不知道如何下手
目 录
特别注意,打开视图菜单-文档结构图观察文档结构。目录由WORD菜单中插入-引用-目录自动生成并更新,不需要手工生成菜单。
本模板仅说明格式,内容由指导老师决定,不用按这份目录内容编写实训报告。
具体目录见文档要求。以下部分仅供参考。
目 录........................................................................................................................1
一、实训的目的与要求................................................................................................1
二、题目说明................................................................................................................2
三、总体设计................................................................................................................2
3.1.软件模块结构图...........................................................................................2 3.2.程序流程图...................................................................................................3
四、详细设计和实施....................................................................................................3
4.1 XXXX模块.....................................................................................................4.2
4.3
五、遇到的问题和解决方法........................................................................................4
六、实训总结................................................................................................................4
七、参考文献................................................................................................................4 附录(源程序代码)....................................................................................................5
一、实训的目的与要求
(正文为宋体,五号字 行间距为21)中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国
二、题目说明
(正文为宋体,五号字 行间距为21)题目参照任务书中有关描述
三、总体设计
3.1.软件模块结构图(以下图仅供样式参考)
图1-1 软件模块结构图
3.2.程序流程图(以下图仅供样式参考):
四、详细设计和实施
(正文为宋体,五号字 行间距为21)4.1 模块1 ………(可以写一些关键程序代码,另外截一些界面图并说明实现了什么功能,以证明功能实现了)每一个界面,必须有(1)功能简介(2)界面截图一张(3)界面关键代码和描述 每一个界面说明作为独立的一小节。(在文档说明中有样例)
五、遇到的问题和解决方法
(正文为宋体,五号字 行间距为21)1. 2. 3. …………
六、实训总结
(正文为宋体,五号字 行间距为21)
七、参考文献
[1] 权明富,齐佳音,舒华英.客户价值评价指标体系设计[J].南开管理评论,2004,7(3):17-18.[2] 刘小洪,邹鹏.商业银行客户关系价值管理模型研究[J].管理科学,2005,18(3):57-60.附录(源程序代码)
第一天的题目: 求两个整数之和。
#include main(){ int a,b,sum;a=3;b=5;sum=a+b;printf(“sum is %d/n”,sum);} 求两个整数中的较大者。#include “stdio.h” void main(){int max(int,int);int a,b,c;scanf(“%d,%d,”,&a,&b);c=max(a,b);printf(“max=%d”,c);} int max(int x,int y){ int z;if(x>y)z=x;else z=y;return(z);}
求1×3×5×7×9×11 #include int main(){ int i = 1,sum = 1;while(i <= 11){
sum = sum*i;
i = i+2;}
printf(“%d”,sum);return 0;} 有50个学生,要求将成绩在80分以上的学生的学号和成绩输出。
#include main(){
int i;
int a[50];
for(i=0;i<50;i++)
{
scanf(“%d”,&a[i]);
if(a[i]>80)
printf(“%d”,a[i]);
} }
判定2000—2500年中的每一年是否闰年,并将结果输出。
#include int main(){
int y;
y=2000;
while(y<=2500)
{
if(((y%4 == 0)&&(y%100!= 0))||(y%400 == 0))
printf(“%d 年是闰年n”,y);
else printf(“%d 年不是闰年n”,y);
y=y++;} } 求111111 23499100#include void main(){ int sign=1;float deno=2.0,sum=1.0,term;while(deno<=100){
sign=-sign;
term=sign/deno;
sum=sum+term;
deno=deno+1;} printf(“%fn”,sum);} 给出一个大于或等于3的正整数,判断它是不是一个素数。
#include void main(){
int i,n,mark=0;
scanf(“%d”,&n);
for(i=2;i < n/2+1;i++)
{
if(n%i==0)
{
printf(“%d不是素数”,n);
mark=1;
break;
}
}
if(mark==0)
printf(“%d是素数”,n);} 求5!#include main(){ int i,n;long fact=1;printf(“Input n:”);scanf(“%d”,&n);for(i=1;i<=n;i++)fact*=i;printf(“%d!=%1dn”,n,fact);} 给定一个大写字母,要求用小写字母输出。
#include void main(){ char c;c=getchar();if(c>='A'&&c<='Z')putchar(c+'a'-'A');} 输入两个实数,按代数值由小到大的顺序输出这两个数。
#include void main(){
float a,b,t;scanf(“%f %f”,&a,&b);if(a>b){ t=a;a=b;b=t;} printf(“%5.2f,%5.2fn”,a,b);
} 输入3个数a,b,c,要求按由小到大的顺序输出。
#include void main(){ int a,b,c,t;printf(“please input three numbersn”);scanf(“%d%d%d”,&a,&b,&c);if(a>b){ t=a;a=b;b=t;} if(a>c){ t=a;a=c;c=t;} if(b>c){ t=b;b=c;c=t;} printf(“%d<%d<%dn”,a,b,c);} 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。
#include main(){
char zhong,guo;
scanf(“%c”,&zhong);
if(65<=zhong&&zhong<=90)
{
guo=zhong+32;
printf(“%c”,guo);
}
else
printf(“%c”,zhong);}
1(x0)1编一程序,输入一个x值,要求输出相应的y值。y0(x0)
1(x0)#include void main(){
int x,y;
printf(“请输入x:”);
scanf(“%d”,&x);
if(x<0)
y=-1;
else if(x=0)
y=0;
else
y=1;
printf(“y=%d”,y);} 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为 60分以下。成绩的等级由键盘输入。#include void main(){ char grade;printf(“等级:”);scanf(“%c”,&grade);switch(grade){ case 'A': printf(“90~100n”);break;case 'B': printf(“80~89n”);break;case 'C': printf(“70~79n”);break;case 'D': printf(“60~69n”);break;case 'E': printf(“不合格n”);break;default: printf(“error!n”);break;} }
5写一程序,判断某一年是否闰年。#include int main(){
int a;
scanf(“%d”,&a);
if(a%4==0&&a%100!=0||a%400==0)
printf(“是闰年”);
else printf(“不是闰年”);} 运输公司对用户计算运输费用。路程(s km)越远,每吨·千米运费越低。标准如下:
s < 250
没有折扣
250≤s < 500
2%折扣
500≤s < 1000
5%折扣
1000≤s < 2000
8%折扣
2000≤s < 3000
10%折扣
3000≤s
15%折扣 #include int main(){
int c, s;
float p, w, d, f;
scanf(“%f %f %d”, &p, &w, &s);
if(s >= 3000)c =12;
else c = s / 250;
switch(c)
{
case 0 : d = 0;break;
case 1 : d = 2;break;
case 2 :
case 3 : d = 5;break;
case 4 :
case 5 :
case 6 :
case 7 : d = 8;break;
case 8 :
case 9 :
case 10:
case 11: d = 10;break;
case 12: d = 15;break;
}
f = p * w * s *(1-d / 100);
printf(“freight =%15.4fn”,f);} 全班有50个学生,用循环语句统计各学生三门课的平均成绩。#include void main(){ int score[9];int total[3];int average[3];int i;for(i=0;i<9;i++)scanf(“%d”,score+i);for(i=0;i<3;i++){ total[i]=score[i*3]+score[i*3+1]+score[i*3+2];average[i]=total[i]/3;printf(“学生%d的平均分:%dn”,i,average[i]);} } 求1+2+3+…+100 #include main(){ int i=1,sum=0;while(i<=100){ sum=sum+i;i++;} printf(“sum=%dn”,sum);} 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。#include int main(){ int s;unsigned double a=0;unsigned double m;for(s=1;s<=1000;s++){ scanf(“%uf”,&m);if((a+m)<100000.00)a=a+m;else { a=a+m;printf(“捐钱人数为%d,平均钱数为%.2fn”,s,(double)a/s);break;} }
return 0;} 要求输出100~200之间的不能被3整除的数。#include void
main(){
int
n;
for(n=100;n <=200;n++)
{
if(n%3!=0)
printf(“%d
”,n);}
printf(“n ”);}
第二天的题目:
1 输出以下4*5的矩阵。
10 15 20 #include void main(){ char *p[5]={“ 1 2 3 4 5”,“ 2 4 6 8 10”,“ 3 6 9 12 15”,“ 4 8 12 16 20”};for(int i=0;i<5;i++){
printf(“%sn”,p[i]);} } 用
41131517
公式求
的近似值,直到发现某一项的绝对值小于10-6 为止(该项不累计加)。
#include #include int main(){ int s;double t,n,pi;s=-1,t=1,n=1.0,pi=0;for(t=1;fabs(t)>=1e-6;n=n+2){
s=-s;
t=s/n;
pi=pi+t;} pi=pi*4;printf(“%.6fn”,pi);return 0;}
求费波那西(Fibonacci)数列的前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。即: F11F21FFFn1n2n(n1)(n2)
(n3)#include int main(){ int f1=1,f2=1,f3;int i;printf(“%12dn%12dn”,f1,f2);for(i=1;i<=38;i++){
f3=f1+f2;
printf(“%12dn”,f3);
f1=f2;
f2=f3;} return 0;}
输入一个大于3的整数n,判定它是否素数(prime,又称质数)。#include int main(){ int a,b;scanf(“%d”,&a);b=a;while(--b>1)
if(a%b==0)
{
printf(“此数不是素数n”);
return 0;
}
printf(“此数是素数n”);
return 0;} 求100~200间的全部素数。#include #include void main(){
int i,k,sk,flag,m=0;
for(k=100;k<=200;k++)
{
sk=(int)sqrt(k);
flag = 1;
for(i=2;i<=sk;i++)
{
if(k%i==0)
{
flag=0;
break;
}
}
if(flag==1)
{
m++;
printf(“%5d”,k);
}
}
if(m%12==0)
printf(“n”);
printf(“total:%5dn”,m);} 对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。#include int main(){ int arr[10] = {0,1, 2,3,4,5,6,7,8,9}, i,j,t;for(i=0;i<10;i++)for(j=i+1;j<10;j++)if(arr[i] < arr[j]){ t = arr[i];arr[i] = arr[j];arr[j] = t;} for(i=0;i<10;i++)printf(“%d,”, arr[i]);return 0;} 用数组处理求Fibonacci数列问题
#include #include int main(){
int i;
int f[40]={1,1};
for(i=0;i<40;i++)
{
f[i]=f[i-2]+f[i-1];
}
for(i=0;i<40;i++)
{
if(i%5==0)
printf(“/n”);
printf(“%12d”,f[i]);
}
return 0;} 有10个地区的面积,要求对它们按由小到大的顺序排列(采用起泡法)。#include void main(){ int a[10];int i,j,temp;printf(“请输入10个数:”);for(i=0;i<10;i++)
scanf(“%d”,&a[i]);for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
} for(i=0;i<10;i++)
printf(“%dt”,a[i]);} 将一个二维数组行和列的元素互换,存到另一个二维数组中。
14123b25a456 36#include main(){ static int a[2][3]={{1,2,3},{4,5,6}};static int b[3][2],i,j;printf(“array a:n”);for(i=0;i<2;i++){
for(j=0;j<3;j++)
{
printf(“%5d,a[i][j]”);
b[j][i]=a[i][j];
}
printf(“n”);} printf(“array b:n”);for(i=0;i<3;i++){
for(j=0;j<2;j++);
printf(“%5d”,b[i][j]);
printf(“n”);} } 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
#include int main(){
int a[3][4],max,i,j;
int x=0,y=0;
printf(“请输入矩阵的数值!n”);
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf(“%d”,&a[i][j]);
max=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(max{
max=a[i][j];
x=i;
y=j;
}
printf(“矩阵中最大的元素为:%dn”,max);
printf(“行号为:%d,列号为:%d”,x,y);} 输出一个已知的字符串。#include main(){ char a[4];scanf(“%c,%c,%c”,&a[0],&a[1],&a[2]);a[3]=' ';printf(“%s”,a);} 输出一个菱形图。#include void main(){
int h;
printf(“输入高度-》 ”);
scanf(“%d”,&h);
for(int i=1;i<=h;i++)
{
for(int a=1;a<=(h-i);a++)
{
printf(“ ”);
}
for(int b=1;b<=(i*2-1);b++)
{
printf(“*”);
}
printf(“n”);
}
for(int j=h-1;j>=1;j--)
{
for(int a=1;a<=(h-j);a++)
{
printf(“ ”);
}
for(int b=1;b<=(j*2-1);b++)
{
printf(“*”);
}
printf(“n”);
} } 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。#include int main(){
char string[81],c;int i,num=0,word=0;gets(string);
for(i=0;
(c=string[i])!= ' ';i++)if(c==' ')word=0;
else
if(word==0){
word=1;num++;}
printf(“There
are
%d
word
in
the
line.n ”,num);getchar();return
0;} 有3个字符串,要求找出其中最大者。#include #include void
main(){
char
string[20];char
str[3][20];int
i;for(i=0;i <3;i++)gets(str[i]);
if(strcmp(str[0],str[1])> 0)strcpy(string,str[10]);
else
strcpy(string,str[1]);if(strcmp(str[2],string)> 0)strcpy(string,str[2]);
printf(“nthe
largest
string
isn%sn ”,string);
} 15 输出以下的结果,用函数调用实现。
******************
How do you do!
****************** #include void fun1(void){printf(“**************n”);} void fun2(void){printf(“* How do you do!n”);}
main(){fun1();fun2();fun1();} 输入两个整数,要求输出其中值较大者。要求用函数来找到大数。#include int main(){ int max(int,int);
int a,b,c;
printf(“please enter a and b:”);
scanf(“%d,%d”,&a,&b);
c=max(a,b);
printf(“%d,%d,max=%dn”,a,b,c);
return 0;}
int max(int x,int y){ int z;
if(x>y)z=x;
else
z=y;
return(z);} 输入两个实数,用一个函数求出它们之和。#include int main(){ float add(float x,float y);float a,b,c;printf(“please enter a and b:”);scanf(“%f,%f”,&a,&b);c=add(a,b);printf(“sum is %f.n”,c);return 0;} float add(float x,float y){ float z;z=x+y;return(z);}
输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。#include void main(){
int max_4(int a,int b,int c,int d);
int a,b,c,d,max;
printf(“Please enter 4 interger numbers:”);
scanf(“%d %d %d %d ”,&a,&b,&c,&d);
max=max_4(a,b,c,d);
printf(“max=%d n”,max);}
int max_4(int a,int b,int c,int d)
{int max_2(int,int);
int m;m=max_2(a,b);
m=max_2(m,c);
m=max_2(m,d);
return(m);
} int max_2(int a,int b)
{if(a>b)
return a;
else return b;
} 有5个学生坐在一起
问第5个学生多少岁?他说比第4个学生大2岁 问第4个学生岁数,他说比第3个学生大2岁 问第3个学生,又说比第2个学生大2岁 问第2个学生,说比第1个学生大2岁 最后问第1个学生,他说是10岁 请问第5个学生多大(递归调用)
#include int main(){ int age(int n);printf(“NO.5,age:%dn”,age(5));return 0;} int age(int n){ int c;if(n==1)
c=10;else
c=age(n-1)+2;return(c);} 用递归方法求n!。#include float fac(int n)
{
float f;
if(n<0)
{
printf(“n<0, dataerror!”);
}
else if(n==0||n==1)
f=1;
else
f=fac(n-1)*n;
return f;} int main(){ int n;scanf(“%d”,&n);printf(“%.0fn”,fac(n));return 0;}
第3天的题目: 输入10个数,要求输出其中值最大的元素和该数是第几个数。#include #include int main(int argc, char *argv[]){
int i=1,max,temp,n=1;
while(i<=10)
{
if(i==1){
scanf(“%d”,&max);
}
else
{
scanf(“%d”,&temp);
if(temp>max)
{
max = temp;
n=i;
}
}
i++;
}
printf(“最大数%d 位置%dn”,max,n);
system(“pause”);
return 0;} 有一个一维数组score,内放10个学生成绩,求平均成绩。#include int main(){ float average(float array[10]);float score[10],aver;int i;printf(“input 10 scores:n”);for(i=0;i<10;i++)
scanf(“%f”,&score[i]);printf(“n”);aver=average(score);printf(“%5.2fn”,aver);return 0;} float average(float array[10]){ int i;float aver,sum=array[0];for(i=1;i<10;i++)
sum=sum+array[i];aver=sum/10;return(aver);} 有两个班级,分别有35名和30名学生,调用一个average函数,分别求这两个班的学生的平均成绩。#include int main(){ float average(float array[],int n);float score1[5]={98,97,91,78,66};float score2[10]={67,78,89,99,68,78,77,85,59,88};printf(“%6.2fn”,average(score1,5));printf(“%6.2fn”,average(score2,10));return 0;} float average(float array[],int n){ int i;float aver,sum=array[0];for(i=1;i#include #define N void sort(int array[],int n){
int i,j,k,t;
for(i=0;i{
k=i;
for(j=i+1;jif(array[j]k=j;
t=array[k];
array[k]=array[i];
array[i]=t;
} }
int main(){
int i,array[N];
printf(“input a number:”);
for(i=0;i<=N-1;i++)
scanf(“%d”,&array[i]);
sort(&array[0], N);
for(i=0;i<=N-1;i++)
printf(“%d ”,array[i]);
return 0;} 有一个3×4的矩阵,求所有元素中的最大值。#include int main(){ int max_value(int array[][4]);int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};printf(“max value is %dn”,max_value(a));return 0;} int max_value(int array[][4]){ int i,j,max;max=array[0][0];for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)
max=array[i][j];
return(max);} 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。#include float max=0,min=0;int main(){ float average(float array[],int n);float ave,score[10];int i;printf(“please enter 10 scores:n”);for(i=0;i<10;i++)
scanf(“%f”,&score[i]);ave=average(score,10);printf(“max=%6.2fn min=%6.2fn average=%6.2fn”,max,min,ave);
return 0;} float average(float array[],int n){int i;float aver,sum=array[0];max=min=array[0];for(i=1;imax)max=array[i];else if(array[i] int main(){
int fac(int n);int i;for(i=1;i<=5;i++)
printf(“%d!=%dn”,i,fac(i));return 0;} int fac(int n){
static int f=1;
}f=f*n;return(f);调用函数,求3个整数中的大者。#include int main(){ int max();extern int a,b,c;scanf(“%d %d %d”,&a,&b,&c);printf(“max is %d”, max());return 0;} int a,b,c;int max(){ int m;m=a>b?a:b;if(c>m)m=c;return(m);} 给定b的值,输入a和m,求a*b和am的值。#include int a;int main(){ int power(int);int b=3,c,d,m;scanf(“%d,%d”,&a,&m);c=a*b;printf(“%d*%d=%dn”,a,b,c);d=power(m);printf(“%d**%d=%dn”,a,m,d);return 0;} extern a;int power(int n){ int i,y=1;for(i=1;i<=n;i++)y*=a;
return(y);} 通过指针变量访问整型变量。#include “stdio.h” void main(){
int a,b;
int *pointer_1,*pointer_2;
a=100;b=10;
pointer_1=&a;
pointer_2=&b;
printf(“%d,%dn”,a,b);
printf(“%d,%dn”,*pointer_1,*pointer_2);} 输入a和b两个整数,按先大后小的顺序输出a和b。
解题思路:用指针方法来处理这个问题。不交换整型变量的值,而是交换两个指针变量的值。#include main(){ int *p1,*p2,*p,a,b;
scanf(“%d,%d”,&a,&b);
p1=&a;p2=&b;
if(a
{p=p1;p1=p2;p2=p;}
printf(“na=%d,b=%dn”,a,b);
printf(“max=%d,min=%dn”,*p1, *p2);} 对输入的两个整数按大小顺序输出。现用函数处理,而且用指针类型的数据作函数参数。#include void max(int *a,int *b){ int n;if(*a<*b){
n=*a;
*a=*b;
*b=n;} } int main(void){ int a,b;int *n=&a,*m=&b;printf(“输入两个整数:n”);scanf(“%d%d”,&a,&b);max(n,m);printf(“%d
%dn”,a,b);return 0;} 对输入的两个整数按大小顺序输出。
解题思路:尝试调用swap函数来实现题目要求。在函数中改变形参(指针变量)的值,希望能由此改变实参(指针变量)的值
#include swap(int *p1,int *p2){
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;}
main(){
int a,b;
int *pointer_1,*pointer_2;
scanf(“%d,%d”,&a,&b);
pointer_1=&a;pointer_2=&b;
if(a
swap(pointer_1,pointer_2);
printf(“ %d,%d ”,a,b);}输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现。#include void swap(int *x,int *y){int t=*x;*x=*y;*y=t;} int main(){int a,b,c;scanf(“%d%d%d”,&a,&b,&c);if(a 解题思路:引用数组中各元素的值有3种方法:(1)下标法;(2)通过数组名计算数组元素地址,找出元素的值;(3)用指针变量指向数组元素 分别写出程序,以资比较分析。#include void main(){ int a[10];int i;for(i=0;i<10;i++)
scanf(“%d”,&a[i]);for(i=0;i<10;i++)
printf(“%d ”,a[i]);} 通过指针变量输出整型数组a的10个元素。
解题思路:
用指针变量p指向数组元素,通过改变指针变量的值,使p先后指向a[0]到a[9]各元素。#include main(){ int *p,i,a[10];p=a;for(i=0;i<10;i++)scanf(“%d”,p++);printf(“n”);p=a;for(i=0;i<10;i++,p++)printf(“%d”,*p);}将数组a中n个整数按相反顺序存放
解题思路:将a[0]与a[n-1]对换,……将a[4]与a[5]对换。#include int main(){ void inv(int x[ ],int n);
int i, a[10]={3,7,9,11,0,6,7,5,4,2};
for(i=0;i<10;i++)printf(“%d ”,a[i]);
printf(“n”);
inv(a,10);
for(i=0;i<10;i++)printf(“%d ”,a[i]);
printf(“n”);
return 0;} void inv(int x[ ],int n){ int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{ j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;} } 用指针方法对10个整数按由大到小顺序排序。
解题思路:
在主函数中定义数组a存放10个整数,定义int *型指针变量p指向a[0] 定义函数sort使数组a中的元素按由大到小的顺序排列 在主函数中调用sort函数,用指针p作实参 用选择法进行排序
#include int main(){ void sort(int x[],int n);int i,*p,a[10];p=a;printf(“please enter 10 integer numbers:”);for(i=0;i<10;i++)
scanf(“%d”,p++);p=a;sort(p,10);for(p=a,i=0;i<10;i++){
printf(“%d ”,*p);
p++;} printf(“n”);return 0;}
void sort(int x[],int n){ int i,j,k,t;for(i=0;ik=i;
for(j=i+1;jif(x[j]>x[k])
k=j;
if(k!=i)
{
t=x[i];
x[i]=x[k];
x[k]=t;
}
} } 有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。
.#include“stdio.h” void InputScore(double s[][4]){ int i,j;
printf(“please input the score of three student:n”);
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf(“%lf”,&s[i][j]);} double AllAverage(double *s,int m){double sum=0;int i;
for(i=0;isum=sum+*(s+i);return sum/(m*4);} void PrintNScore(double(*s)[4],int n){ int i;for(i=0;i<4;i++)printf(“%d”,*(*(s+n-1)+i));} void main(){
double score[3][4],ave;
int n;
InputScore(score);
ave=AllAverage(score[0],3);
printf(“average =%lfn”,ave);
printf(“please input the NO.of student who will be printed:n”);
scanf(“%d”,&n);
printf(“The score of the %dth student is:n”,n);
PrintNScore(score,n);
}.定义一个字符数组,在其中存放字符串“I love China!”,输出该字符串和第8个字符。
解题思路:定义字符数组string,对它初始化,由于在初始化时字符的个数是确定的,因此可不必指定数组的长度。用数组名string和输出格式%s可以输出整个字符串。用数组名和下标可以引用任一数组元素。
#include int main(){ char string[]=“I love China!”;
printf(“%sn”,string);
printf(“%cn”,string[7]);
return 0;}。
第4天的题目:
1.输入一行字符,统计其中的英文字符、数字字符、空格及其它字符的个数。#include #include #define STOP '|' int main(void){ char c;char prev;long n_chars = 0L;int n_lines = 0;int n_words = 0;int p_lines = 0;int inword = 0;
printf(“Enter text to be analyzed(| to be quit):n ”);prev = 'n';while((c = getchar())!= STOP){
n_chars++;
if(c == 'n')
n_lines++;
if(!isspace(c)&&!inword)
{
inword = 1;
n_words++;
}
if(isspace(c)&& inword)
inword = 0;
prev = c;} if(prev!= 'n')
p_lines = 1;printf(“characters = %ld,word = %d,line = %d,”,n_chars,n_words,n_lines);printf(“partial lines = %dn”,p_lines);return 0;}
2.编程先输入某班30个学生某门课的成绩,对全班30个学生成绩进行由高到低排序,并打印输出排序结果,要求按照如下函数原型,用函数编程实现排序功能。#include
void sort(float score[],int n)
{
int i,j;
for(i=0;ifor(j=0;jif(score[j]{
float temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
}
void main()
{
float score[30];
int i;
printf(“Please enter the number and score:n”);
for(i=0;i<30;i++)
scanf(“%f”,&score[i]);
sort(score,30);
printf(“Sorted results:n”);
for(i=0;i<30;i++)
printf(“%f”,score[i]);
}
3.用户从键盘任意输入一个数字表示月份值n,程序显示该月份对应的英文表示,若n不在1~12之间,则输出“Illegal month”。#include int main(){
int n;
printf(“请输入n的值n”);
scanf(“%d”,&n);
switch(n)
{
case 1:printf(“Janunryn”);break;
case 2:printf(“Februaryn”);break;
case 3:printf(“Marchn”);break;
case 4:printf(“Apriln”);break;
case 5:printf(“Mayn”);break;
case 6:printf(“Junen”);break;
case 7:printf(“Julyn”);break;
case 8:printf(“Augustn”);break;
case 9:printf(“Septempern”);break;
case 10:printf(“Octobern”);break;
case 11:printf(“Novembern”);break;
case 12:printf(“Decembern”);break;
default:printf(“Illegal month”);
}
return 0;}
4.计算十个数据的平均值。#include void main(){ int a[10],sum=0,i=0;float b;printf(“输入10个数n”);for(;i<10;i++)scanf(“%d”,&a[i]);for(i=9;i>=0;i--)sum=sum+a[i];b=(float)sum/10;printf(“平均数=%fn”,b);}
5.编程实现从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。(用字符数组实现)#include #include #define N 10 int main(void){ char a[N];int i,j;printf(“Input data:”);for(i=0;(a[i]=getchar())!='n';i++);a[i]=' ';
} printf(“输出的数据n”);for(j=i-1;j>=0;j--)printf(“%c”,a[j]);putchar('n');return 0;
6.从键盘任意输入一个4位数x,编程计算x的每一位数字相加之和(忽略整数前的正负号)。例如,输入x为1234,则由1234分离出其千位
1、百位
2、十位
3、个位4,然后计算1+2+3+4=10,并输出10。#include main(){ int a,b,c,d;int sum,i;printf(“输入一个四位数n”);scanf(“%d”,&i);a=i/1000;b=(i/10)%10;c=(i/100)%10;d=i%10;sum=a+b+c+d;printf(“%dn”,sum);}
7.输入20个学生的成绩,求出其中大于平均成绩学生的人数,并对20名学生成绩按从高到低进行排序。#include
int count1(float score[],int n)
{
int i,count=0;
float sum=0,avg;
for(i=0;isum+=score[i];
avg=sum/n;
for(i=0;iif(score[i]>avg)count++;
return count;
}
void sort(float score[],int n)
{
int i,j;
for(i=0;ifor(j=0;jif(score[j]{
float temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
}
void main()
{
int i;
float score[20];
for(i=0;i<20;i++)
scanf(“%f”,&score[i]);
int COUNT=count1(score,20);
printf(“大于平均成绩学生的人数:%d”,COUNT);
sort(score,20);
for(i=0;i<20;i++)
printf(“%f”,score[i]);
}
224466...228.利用公式=133557ׄ前100项之积计算并打印值。#include “stdio.h” void main(){ float a=2,b=1;double num=1;int i;for(i=1;i<=100;i++){
num*=a/b;
if(i%2==0)a+=2;
else b+=2;}
num*=2;printf(“π=%.16lfn”,num);}
9.由键盘输入一个班的某课程的学生成绩,计算其平均分然后输出。#include int main(){ float sum=0,n;int i=0;do {
printf(“输入第%d个学生的成绩,输入负数结束”,i+1);
scanf(“%f”,&n);
if(n<0)
break;
sum+=n;
i++;} while(1);printf(“平均成绩为%.4fn”,sum/i);return 0;}
10.从键盘输入10个整型数据,放入数组a 中,求其最大值、最小值及其所在元素的下标位置并输出。#include int main(){
}
} printf(“最大值:%d 最大值所在位置:%dn最小值:%d 最小值所在位return 0;} if(a[i]}
min_=a[i];minInd=i;int a[10],max_,min_,maxInd,minInd;int i;scanf(”%d“,&a[0]);max_=a[0];min_=a[0];maxInd=minInd=0;for(i=1;i<10;i++){
scanf(”%d“,&a[i]);if(a[i]>max_){
max_=a[i];maxInd=i;置:%dn”,max_,maxInd,min_,minInd);
11.下面的函数MyStrcmp()用于实现函数strcmp()的功能,将两个字符串s和t进行比较,要求将两个字符串中第一个不相同字符的ASCII码值之差作为MyStrcmp()函数的返回值。#include #include“string.h” int strcmpp(char *s,char *t){int la=strlen(s),lb=strlen(t),i=0;while(1){ if(s[i]!=' '&&t[i]!=' '){ if(s[i]>t[i]){return 1;break;} else if(s[i]