C语言程序设计实验.

Slides:



Advertisements
Similar presentations
第 8 章 数组 计算机科学学院 李淮 Tel QQ
Advertisements

CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.
电子成绩单项目实现.
选择结构案例.
C语言实验 哈尔滨工业大学计算机科学与技术学院 苏小红
C语言实验 第二课.
Loops.
C语言基础——指针的高级应用 Week 05.
C语言实验 第一课 标题:学号+姓名.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
第4章 选择结构程序设计 在现实生活中,需要进行判断和选择的情况是很多的 如果你在家,我去拜访你 如果考试不及格,要补考
C语言程序设计 第八章 函数.
第九章 系 统 安 全 性 9.1 结构体 9.2 结构体型数组  9.3 结构体型指针 9.4 内存的动态分配 9.5 共用体
C语言程序设计 第五章 选择结构程序设计.
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
C程序设计 第9章 自定义数据类型 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
第3章 顺序结构程序设计 本章要点: 格式化输出函数──printf() 格式输入函数——scanf() 字符输出函数——putchar()
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
第4章 选择结构程序设计 4.1 选择结构和条件判断 4.2 用if语句实现选择结构 4.3关系运算符和关系表达式
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
第4章 选择结构程序设计 4.1 选择结构和条件判断 4.2 用if语句实现选择结构 4.3关系运算符和关系表达式
项目六 用指针优化学生成绩排名 项目要求 项目分析
第五章 选择结构程序设计 一、关系运算符和表达式 1、关系运算符 在程序中经常需要比较两个量的大小关系, 以决定程序下一步
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
Introduction to the C Programming Language
Introduction to the C Programming Language
STRUCTURE 授課:ANT 日期:2010/5/12.
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
程式撰寫流程.
Introduction to the C Programming Language
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Chap 3 分支结构 3.1 简单的猜数游戏 3.2 四则运算 3.3 查询自动售货机中商品的价格.
第四章 C 语言中的输入和输出.
C语言 程序设计基础与试验 刘新国、2012年秋.
第八章 使用指针.
第十章 指针.
第五章 习题课 电子信息与计算机科学系 曾庆尚.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
数组 梁春燕 华电信息管理教研室.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
C语言概述 第一章.
for 迴圈 while迴圈 do-while迴圈 break 與 continue goto 與 標籤 程式觀摩
C语言大学实用教程 第6章 数组 西南财经大学经济信息工程学院 刘家芬
函数 概述 模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块, 特点: 开发方法: 自上向下,逐步分解,分而治之
Introduction to the C Programming Language
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
Chap 5 函数 5.1 计算圆柱体积 5.2 数字金字塔 5.3 复数运算.
C程序设计.
第4章 Excel电子表格制作软件 4.4 函数(一).
Introduction to the C Programming Language
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第四章 C 语言中的输入和输出.
Introduction to the C Programming Language
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
多重條件選擇敘述
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:
函式庫補充資料 1.
C语言基础学习 从外行到入门.
Presentation transcript:

C语言程序设计实验

主教材: 实验教材: 谭浩强,《 C程序设计》(第三版),清华大学出版社,2004,8

实验内容 实验内容 实验题目 实验一、熟悉上机环境 在屏幕上显示一个短句 键盘输入与屏幕输出练习 实验二、顺序结构编程练习 计算定期存款本利之和 求摄氏温度 实验三、选择结构编程练习 计算居民用水 身高预测 实验四、选择结构编程练习 简单的计算器程序 输出成绩等级 实验五、循环结构编程练习 求最大公约数和最小公倍数 求字符个数 实验六、循环结构编程练习 求分数序列之和 猜数游戏 实验七、数组编程练习 求对角线元素和 输出杨辉三角形 实验八、数组编程练习 检验并打印魔方矩阵 将密码译成原码

实验内容 实验内容 实验题目 实验九、函数编程练习 求素数 将二维数组转置 实验十、函数编程练习 连接字符串 进制转换 实验十一、函数编程练习 将字符串反序存放并输出 加法考试题 实验十二、一维数组和函数综合编程练习 学生成绩统计 实验十三、预处理命令 求两整数相除的余数 闰年的判断 实验十四、指针编程练习 查找英文月名 求最大值 实验十五、指针编程练习 按序输出3个整数 求字符串长度 实验十六、结构体编程练习 在屏幕上模拟显示一个数字式时钟

实验1: 熟悉上机环境 ——在屏幕上显示一个短句 在屏幕上显示一个短句“Hello World!”。 # include <stdio.h> /* 编译预处理命令 */ int main(void) /* 定义主函数main */ { printf("Hello World!\n"); return 0; /* 返回1个整数0 */ }

实验1: 熟悉上机环境 ——键盘输入与屏幕输出练习 要使下面程序的输出语句在屏幕上显示a,b,c,则如何从键盘输入正确的数据格式? #include <stdio.h> main() { char a,b; int c; scanf("%c%c%d",&a,&b,&c); printf("%c,%c,%c\n",a,b,c); }

实验2: 顺序结构编程练习 ——计算定期存款本利之和 设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。 要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入。

实验2: 顺序结构编程练习 ——计算定期存款本利之和 #include <math.h> #include <stdio.h> main() { int n; double rate; /*存款年利率变量声明*/ double capital; /*存款本金变量声明*/ double deposit; /*本利之和变量声明*/ printf("Please enter rate, year, capital:"); scanf("%lf,%d,%lf", &rate, &n, &capital); /*输入数据*/ deposit = capital * pow(1+rate, n); /*计算存款利率之和,pow为幂函数*/ printf("deposit = %f\n", deposit); /*打印存款利率之和*/ }

实验2: 顺序结构编程练习 ——计算摄氏温度 输入一个华氏温度,要求输出摄氏温度。公式为:C=5/9(F-32),输出要有文字说明,取2位小数。 式中:C表示摄氏温度,F表示华氏温度。

实验2: 顺序结构编程练习 ——计算摄氏温度 #include<stdio.h> void main() { float c,f; printf("请输入一个华氏温度:"); scanf("%f",&f); c=(5.0/9.0)*(f-32); /*注意5和9要用实型表示,否则5/9值为0*/ printf(“摄氏温度为:%5.2f\n",c); }

实验3: 选择结构编程练习 ——计算居民用水 为鼓励居民节约用水,自来水公司采取按月用水量分段计费的办法,居民应交水费y(元)与月用水量x(吨)的函数关系式如下(设x≥0)。 输入用户的月用水量x(吨),计算并输出该用户应支付的水费y(元)(保留2位小数)。 4x/3 0≤ x≤15 y= 2.5x-10.5 x>15

实验3: 选择结构编程练习 ——计算居民用水 # include <stdio.h> int main(void){ double x, y; /* 定义2个双精度浮点型变量 */ printf("Enter x (x>=0):\n"); /* 输入提示 */ scanf("%lf", &x); if (x <= 15){ y = 4 * x / 3; } else{ y = 2.5 * x - 10.5; printf("y = f(%f) = %.2f\n", x, y); /* 输出结果 */ return 0;

实验3: 选择结构编程练习 ——身高预测 每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。小孩成人后身高与其父母身高和自身性别密切相关。 设faHeight为其父身高,moHeight为其母身高,身高预测公式为: 男性成人时身高 = (faHeight + moHeight) * 0.54(cm) 女性成人时身高 = (faHeight * 0.923 + moHeight) / 2(cm) 此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。

实验3: 选择结构编程练习 ——身高预测 编程从键盘输入你的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示喜爱,输入字符N表示不喜爱),利用给定公式和身高预测方法对你的身高进行预测。

实验3: 选择结构编程练习 ——身高预测 #include <stdio.h> main(){ char sex; /*孩子的性别*/ char sports; /*是否喜欢体育运动*/ char diet; /*是否有良好的饮食习惯*/ float myHeight; /*孩子身高*/ float faHeight; /*父亲身高*/ float moHeight; /*母亲身高*/ printf("Are you a boy(M) or a girl(F)?"); scanf(" %c", &sex); printf("Please input your father's height(cm):"); scanf("%f", &faHeight); printf("Please input your mother's height(cm):"); scanf("%f", &moHeight);

实验3: 选择结构编程练习 ——身高预测 printf("Do you have a good habit of diet(Y/N)?"); printf("Do you like sports(Y/N)?"); scanf(" %c", &sports); printf("Do you have a good habit of diet(Y/N)?"); scanf(" %c", &diet); if (sex == 'M' || sex == 'm') myHeight = (faHeight + moHeight) * 0.54; else myHeight = (faHeight * 0.923 + moHeight) / 2.0; if (sports == 'Y' || sports == 'y') myHeight = myHeight * (1 + 0.02); if (diet == 'Y' || diet == 'y') myHeight = myHeight * (1 + 0.015); printf("Your future height will be %f(cm)\n", myHeight); }

实验4:选择结构编程练习 ——简单的计算器程序 要求用switch语句编程设计一个简单的计算器程序。要求根据用户从键盘输入的表达式: 操作数1 运算符op 操作数2 计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。

实验4:选择结构编程练习 ——简单的计算器程序 main(){ int data1, data2; /*定义两个操作符*/ char op; /*定义运算符*/ printf("Please enter the expression:"); scanf("%d%c%d", &data1, &op, &data2); /*输入运算表达式*/ switch (op) { case '+': /*处理加法*/ printf("%d + %d = %d\n", data1, data2, data1 + data2); break; case '-': /*处理减法*/ printf("%d - %d = %d\n", data1, data2, data1 - data2); break; case '*': /*处理乘法*/ printf("%d * %d = %d\n", data1, data2, data1 * data2); break; case '/': /*处理除法*/ if (0 == data2) printf("Division by zero!\n"); else printf("%d/%d = %d\n", data1, data2, data1/data2); break; default: printf("Unknown operator! \n"); }

实验4:选择结构编程练习 ——输出成绩等级 输入百分制成绩,要求输出成绩等级′ A′、 ′B ′、 ′C ′、 ′D ′、 ′E ′。90分以上为′ A′,80~89分为′B ′,70~79分为′C ′,60~69分为′D ′,60分以下为′E ′。

实验4:选择结构编程练习 ——输出成绩等级 #include<stdio.h> void main(){ float score; char grade; printf("请输入学生成绩:"); scanf("%f",&score); while(score>100||score<0){ printf("\n输入有误,请重输"); } switch((int)(score/10)){ case 10: case 9:grade='A';break; case 8:grade='B';break; case 7:grade='C';break; case 6:grade='D';break; case 5: case 4: case 3: case 2: case 1: case 0:grade='E'; printf("成绩是%5.1f,相应的等级是%c。\n",score,grade);

实验5:循环结构编程练习 ——求最大公约数和最小公倍数 输入两个正整数m和n,求其最大公约数和最小公倍数。 #include<stdio.h> void main(){ int p,r,n,m,temp; printf("请输入两个正整数:"); scanf("%d,%d",&n,&m); if(n<m){ temp=n; n=m; m=temp; } p=n*m; while(m!=0){ r=n%m; m=r; printf("它们的最大公约数为:%d\n",n); printf("它们的最小公倍数为:%d\n",p/n);

实验5:循环结构编程练习 ——求字符个数 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

实验5:循环结构编程练习 ——求字符个数 #include<stdio.h> void main(){ char c; int letters=0,space=0,digit=0,other=0; printf("请输入一行字符:\n"); while((c=getchar())!='\n'){ if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++; else if(c==' ') space++; else if(c>='0'&&c<='9') digit++; else other++; } printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d\n",letters,space,digit,other);

实验6:循环结构编程练习 ——求分数序列之和 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 #include<stdio.h> void main() { int i,t,n=20; float a=2,b=1,s=0; for(i=1;i<=n;i++) s=s+a/b; t=a; a=a+b; /*将前一项分子与分母之和作为下一项的分子*/ b=t; /*将前一项的分子作为下一项的分母*/ } printf("sum=%9.6f\n",s);

实验6:循环结构编程练习 ——猜数游戏 编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则计算机给出提示:“Right!”, 否则提示:“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所“想”的数不能都是一样的。

猜数游戏用到的库函数 随机函数srand 通过键入随机数种子,产生[0,100]之间的随机数 为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的 “随机化” 通过键入随机数种子,产生[0,100]之间的随机数 scanf("%u", &seed); srand(seed); magic = rand() % 100 + 1;

#include <stdlib.h> #include <stdio.h> main() { int magic; int guess; int counter; unsigned int seed; printf("Please enter seed:"); scanf("%u", &seed); srand(seed); magic = rand() % 100 + 1; counter = 0; do{ printf("Please guess a magic number:"); scanf("%d", &guess); counter ++; if (guess > magic) printf("Wrong! Too high!\n"); else if (guess < magic) printf("Wrong! Too low!\n"); }while (guess != magic); printf("Right!\n"); printf("counter = %d \n", counter); }

猜数游戏用到的库函数 使用计算机读取其时钟值并把该值自动设置为随机数种子,产生[0,100]之间的随机数 函数time()返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的种子 #include <time.h> srand(time(NULL)); magic = rand() % 100 + 1;

#include <stdlib.h> #include <stdio.h> #include <time.h> main() { int magic; int guess; int counter; srand(time(NULL)); magic = rand() % 100 + 1; counter = 0; do{ printf("Please guess a magic number:"); scanf("%d", &guess); counter ++; if (guess > magic) printf("Wrong! Too high!\n"); else if (guess < magic) printf("Wrong! Too low!\n"); }while (guess != magic); printf("Right!\n"); printf("counter = %d \n", counter); }

实验7:数组编程练习 ——求对角线元素之和 求一个3×3矩阵对角线元素之和。 #include <stdio.h> void main(){ int a[3][3],sum=0; int i,j; printf("enter data:\n"); for (i=0; i<3; i++) for (j=0; j<3; j++) scanf("%d",&a[i][j]); sum = sum + a[i][i]; printf("sum=%6d\n",sum); }

实验7:数组编程练习 ——输出杨辉三角形 输出以下的杨辉三角形(要求输出10行): 1 2 3 4 6 5 10 …

实验7:数组编程练习 ——输出杨辉三角形 #include <stdio.h> #define N 11 void main(){ int i,j,a[N][N]; for (i=0; i<N; i++){ a[i][1]=1; a[i][i]=1; } for (i=3; i<N; i++) for (j=2; j<=i-1; j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=1;i<N;i++){ for(j=1;j<=i;j++) printf("%6d",a[i][j]); printf("\n");

实验8:数组编程练习 ——检验并打印魔方矩阵 在下面的5×5魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后,检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9

实验8:数组编程练习 ——检验并打印魔方矩阵 #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 5 main(){ int i, j; int x[N][N] = {{17,24,1,8,15},{23,5,7,14,16}, {4,6,13,20,22},{10,12,19,21,3},{11,18,25,2,9}}; int rowSum[N], colSum[N], diagSum1, diagSum2; int flag = 1; for (i=0; i<N; i++) { rowSum[i] = 0; for (j=0; j<N; j++){ rowSum[i] = rowSum[i] + x[i][j]; } colSum[j] = 0; for (i=0; i<N; i++){ colSum[j] = colSum[j] + x[i][j];

实验8:数组编程练习 ——检验并打印魔方矩阵 diagSum1 = 0; for (j=0; j<N; j++){ diagSum1 = diagSum1 + x[j][j];} diagSum2 = 0; diagSum2 = diagSum2 + x[j][N-1-j];} if (diagSum1 != diagSum2){ flag = 0; } else{ for (i=0; i<N; i++){ if ((rowSum[i] != diagSum1) || (colSum[i] != diagSum1)) flag = 0; }} if (flag){ printf("It is a magic square!\n"); printf("%4d", x[i][j]); } printf("\n"); }} printf("It is not a magic square!\n"); }}

实验8:字符数组编程练习 —— 将密码译成原文 有一行电文,已按下面规律译成密码: A->Z a->z B->Y b->y C->X c->x … … 即把第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程序将密码译回原文,并输出密码和原文。

/*用两个字符数组分别存放原文和密码*/ #include<stdio.h> void main(){ int j,n; char ch[80],tran[80]; printf("\ninput cipher code:"); gets(ch); printf("\n\ncipher code :%s",ch); j=0; while(ch[j]!='\0'){ if((ch[j]>='A')&&(ch[j]<='Z')) tran[j]=155-ch[j]; else if((ch[j]>='a')&&(ch[j]<='z')) tran[j]=219-ch[j]; else tran[j]=ch[j]; j++; } n=j; printf("\noriginal text:"); for(j=0;j<n;j++) putchar(tran[j]); printf("\n");

实验9:函数编程练习 —— 求素数 编写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。

/*编写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息*/ #include<stdio.h> void main(){ int prime(int); int n; printf("\ninput an integer:"); scanf("%d",&n); if(prime(n)) printf("\n%d is a prime.\n",n); else printf("\n%d is not a prime.\n",n); } int prime(n){ int flag=1,i; for(i=2;i<n/2&&flag==1;i++) if(n%i==0) flag=0; return(flag);

实验9:函数编程练习 —— 将二维数组转置 编写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。

实验9:函数编程练习 —— 将二维数组转置 #include<stdio.h> #define N 3 int array[N][N]; void main(){ void convert(int array[][3]); int i,j; printf("input array:\n"); for(i=0;i<N;i++) for(j=0;j<N;j++) scanf("%d",&array[i][j]); printf("\noriginal array:\n"); for(i=0;i<N;i++){ printf("%5d",array[i][j]); printf("\n"); } convert(array); printf("convert array:\n");

实验9:函数编程练习 —— 将二维数组转置 /*转置函数*/ void convert(int array[][3]){ int i,j,t; for(i=0;i<N;i++) for(j=i+1;j<N;j++){ t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t; }

实验10:函数编程练习 —— 连接字符串 编写一个函数,连接两个字符串。 #include<stdio.h> void main(){ void concatenate(char string1[],char string2[],char string[]); char s1[100],s2[100],s[100]; printf("\ninputstring1:"); scanf("%s",s1); printf("input string2:"); scanf("%s",s2); concatenate(s1,s2,s); printf("The new string is %s\n",s); }

实验10:函数编程练习 —— 连接字符串 /*连接函数*/ void concatenate(char string1[],char string2[],char string[]){ int i,j; for(i=0;string1[i]!='\0';i++) string[i]=string1[i]; for(j=0;string2[j]!='\0';j++) string[i+j]=string2[j]; string[i+j]='\0'; }

实验10:函数编程练习 —— 进制转换 编写一个函数,输入一个十六进制数,输出相应的十进制数。

/*编写一个函数,输入一个十六进制数,输出相应的十进制数。*/ #include<stdio.h> #define MAX 100 void main(){ int htoi(char s[]); int c,i,flag,flag1; char t[MAX]; i=0; flag=0; flag1=1; printf("\ninput a HEX number:"); while((c=getchar())!='\0'&&i<MAX && flag1){ if(c>='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F'){ flag=1; t[i++]=c; } else if(flag){ t[i]='\0'; printf("decimal number %d:\n",htoi(t)); printf("continue or not?"); c=getchar(); if(c=='N'||c=='n') flag1=0; else{

if(s[i]>='0'&&s[i]<='9') n=n*16+s[i]-'0'; /*子函数:将十六进制数转换为十进制数。*/ int htoi(char s[]){ int i,n; n=0; for(i=0;s[i]!='\0';i++){ if(s[i]>='0'&&s[i]<='9') n=n*16+s[i]-'0'; if(s[i]>='a'&&s[i]<='f') n=n*16+s[i]-'a'+10; if(s[i]>='A'&&s[i]<='F') n=n*16+s[i]-'A'+10; } return(n);

实验11:函数编程练习 ——将字符串反序存放并输出 编写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

实验11:函数编程练习 ——将字符串反序存放并输出 #include<stdio.h> #include<string.h> void main(){ void inverse(char str[]); char str[100]; printf("input string:"); scanf("%s",str); inverse(str); printf("inverse string:%s\n",str); } void inverse(char str[]){ char t; int i,j; for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--){ t=str[i]; str[i]=str[j-1]; str[j-1]=t;

实验11:函数编程练习 ——小学生加法考试题 程序1: 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”;

实验11:函数编程练习 ——小学生加法考试题 /* 函数功能: 计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0 /* 函数功能: 计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0 函数参数: 整型变量a和b,分别代表被加数和加数 函数返回值:当a加b的结果与用户输入的答案相同时,返回1,否则返回0 */ int AddTest(int a, int b) { int answer; printf("%d+%d=", a, b); scanf("%d", &answer); if (a+b == answer) return 1; else return 0; } void Print(int flag) { if (flag) printf("Right!\n"); else printf("Not correct!\n"); }

实验11:函数编程练习 ——小学生加法考试题 程序2: 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,直到做对为止;

实验11:函数编程练习 ——小学生加法考试题 main() { int a, b, answer; printf("Input a,b:"); scanf("%d,%d", &a, &b); answer = AddTest(a, b); Print(answer); } do{ }while (answer == 0);

实验12:一维数组和函数综合编程练习 ——学生成绩统计 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别统计下列内容: (1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单; (3)统计各分数段的学生人数及所占的百分比;

实验12:一维数组和函数综合编程练习 ——学生成绩统计 提示: (1)用num[i]存放第i+1个学生的学号,用score[i]存放第i+1个学生的成绩。设置计数器count,当score[i]<60分时,计数器count计数一次,并打印num[i]和score[i]。 (2)先计算全班平均分aver,当第i个学生的成绩score[i]>=aver时,打印num[i]和score[i]。 (3)将成绩分为六个分数段,60分以下为第0段,60~69为第1段,70~79为第2段,80~89为第3段,90~99为第4段,100分为第5段,因此,成绩与分数段的对应关系为: 各分数段的学生人数保存在数组stu中,用stu[i]存放第i段的学生人数。对于每个学生的成绩,先计算出该成绩所对应的分数段,然后将相应的分数段的人数加1,即stu[i]++。

实验12:一维数组和函数综合编程练习 ——学生成绩统计 #include <stdio.h> #define ARR_SIZE 30 int ReadScore(long num[], float score[]); int GetFail(long num[], float score[], int n); float GetAver(float score[], int n); int GetAboveAver(long num[], float score[], int n); void GetDetail(float score[], int n); main(){ int n, fail, aboveAver; float score[ARR_SIZE]; long num[ARR_SIZE]; printf("Please enter num and score until score<0:\n"); n = ReadScore(num, score); printf("Total students:%d\n", n); fail = GetFail(num, score, n); printf("Fail students = %d\n",fail); aboveAver = GetAboveAver(num, score, n); printf("Above aver students = %d\n", aboveAver); GetDetail(score, n); }

实验12:一维数组和函数综合编程练习 ——学生成绩统计 /*函数功能:从键盘输入一个班学生某门课的成绩及其学号,当输入成绩为负值时,输入结束。 函数参数: 长整型数组num,存放学生学号 实型数组score,存放学生成绩 函数返回值:学生总数 */ int ReadScore(long num[], float score[]){ int i = 0; scanf("%ld%f", &num[i], &score[i]); while (score[i] >= 0) { i++; } return i;

实验12:一维数组和函数综合编程练习 ——学生成绩统计 /*函数功能:统计不及格人数并打印不及格学生名单 函数参数:长整型数组num,存放学生学号 实型数组score,存放学生成绩 整型变量n,存放学生总数 函数返回值:不及格人数 */ int GetFail(long num[], float score[], int n){ int i, count; printf("Fail:\nnumber--score\n"); count = 0; for (i=0; i<n; i++){ if (score[i] < 60){ printf("%ld------%.0f\n", num[i], score[i]); count++; } return count;

实验12:一维数组和函数综合编程练习 ——学生成绩统计 /*函数功能:计算全班平均分 函数参数:实型数组score,存放学生成绩 整型变量n,存放学生总数 函数返回值:平均分 */ float GetAver(float score[], int n) { int i; float sum = 0; for (i=0; i<n; i++){ sum = sum + score[i]; } return sum/n;

实验12:一维数组和函数综合编程练习 ——学生成绩统计 /*函数功能:统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单 函数参数:长整型数组num,存放学生学号 实型数组score,存放学生成绩 整型变量n,存放学生总数 函数返回值:成绩在全班平均分及平均分之上的学生人数 */ int GetAboveAver(long num[], float score[], int n){ int i, count; float aver; aver = GetAver(score, n); printf("aver = %f\n", aver); printf("Above aver:\nnumber--score\n"); count = 0; for (i=0; i<n; i++){ if (score[i] >= aver){ printf("%ld------%.0f\n", num[i], score[i]); count++; } return count;}

实验12:一维数组和函数综合编程练习 ——学生成绩统计 /*函数功能:统计各分数段的学生人数及所占的百分比 函数参数:实型数组score,存放学生成绩 整型变量n,存放学生总数 函数返回值:无 */ void GetDetail(float score[], int n){ int i, j, stu[6]; for (i=0; i<6; i++){ stu[i]=0; } for (i=0; i<n; i++){ if (score[i] < 60){ j = 0; else{ j = ((int)score[i] - 50) / 10; stu[j]++;

实验12:一维数组和函数综合编程练习 ——学生成绩统计 for (i=0; i<6; i++){ if (i == 0) { printf("< 60 %d %.2f%%\n", stu[i], (float)stu[i]/(float)n*100);} else if (i == 5){ printf(" %d %d %.2f%%\n", (i+5)*10, stu[i], (float)stu[i]/(float)n*100); } else { printf("%d--%d %d %.2f%%\n", (i+5)*10,(i+5)*10+9, stu[i],(float)stu[i]/(float)n*100);

实验13:预处理命令编程练习 ——求两整数相除的余数 输入两个整数,求它们相除的余数。用带参的宏来实现编程序。 #include<stdio.h> #define SURPLUS(a,b)((a)%(b)) void main(){ int a,b; printf("input two integer a,b:"); scanf("%d,%d",&a,&b); printf("remainder is %d\n",SURPLUS(a,b)); }

实验13:预处理命令编程练习 ——闰年的判断 给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可定义为LEAP_YEAR,形参为y,即定义宏的形式为 #define LEAP_YEAR() (读者设计的字符串) 在程序中用以下语句输出结果: if(LEAP_YEAR(year)) printf("%d is a leap year. ",year); else printf("%d is not a leap year. ",year);

实验13:预处理命令编程练习 ——闰年的判断 /*给年份year,定义一个宏,以判别该年份是否闰年*/ #include<stdio.h> #define LEAP_YEAR(y) ((y%4==0)&&(y%100!=0||y%400==0)) void main(){ int year; printf("\ninput year:"); scanf("%d",&year); if(LEAP_YEAR(year)) printf("%d is a leap year.\n",year); else printf("%d is not a leap year.\n",year); }

实验14:指针编程练习—— 求最大值 给定10个整数,求最大值。 main( ) { int a[10]={5,7,3,6,2,1,8,9,4,0}; int i, *p, max; p=a; max=*p++; for(i=1; i<10; i++, p++ ) if (*p>max ) max =*p ; printf ( “max=%d\ n “, max); }

实验14:指针编程练习—— 查找英文月名 利用数字月份查找其英文月名. char *month_name(int n) { char *name[ ]={ ″Illegal month″, ″January″, ″February″, ″March″, ″April″, ″May″, ″June ″, ″July″, ″August″, ″September″,″October″, ″November″, ″December″}; return (n<1||n>12)?name[0]:name[n]; } main( ){ int n; scanf(″%d″,&n); printf(″%d month name is %s\n″, n, month_name( n));

实验15:指针编程练习—— 按序输出3整数 输入3个整数,按由小到大的顺序输出. #include<stdio.h> void main( ){ void swap(int *p1,int *p2); int n1,n2,n3; int *p1,*p2,*p3; printf("input three integer n1,n2,n3:"); scanf("%d,%d,%d",&n1,&n2,&n3); p1=&n1; p2=&n2; p3=&n3; if(n1>n2) swap(p1,p2); if(n1>n3) swap(p1,p3); if(n2>n3) swap(p2,p3); printf("Now, the order is :%d,%d,%d\n",n1,n2,n3); } void swap(int *p1,int *p2){ int p; p=*p1; *p1=*p2; *p2=p;

实验15:指针编程练习—— 求字符串长度 编写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。 #include<stdio.h> void main( ){ int length(char *p); int len; char str[20]; printf("input string: "); scanf("%s",str); len=length(str); printf("The length of string is %d.\n",len); } int length(char *p){ int n; n=0; while(*p!='\0'){ n++; p++; return(n);

实验16:结构体编程练习—— 在屏幕上模拟显示一个数字式时钟 定义一个时钟结构体类型: struct clock { int hour; int minute; int second; }; typedef struct clock CLOCK; 然后,将下列用全局变量编写的时钟模拟显示程序改成用CLOCK结构体变量类型重新编写。 时:分:秒

实验16:结构体编程练习—— 在屏幕上模拟显示一个数字式时钟 void update(CLOCK *t) { t->second++; if (t->second == 60) t->second = 0; t->minute++; } if (t->minute == 60) t->minute = 0; t->hour++; if (t->hour == 24) t->hour = 0; void display(CLOCK *t) { printf("%2d:%2d:%2d\r", t->hour, t->minute, t->second); }