Download presentation
Presentation is loading. Please wait.
1
C语言程序设计实验
2
主教材: 实验教材: 谭浩强,《 C程序设计》(第三版),清华大学出版社,2004,8
3
实验内容 实验内容 实验题目 实验一、熟悉上机环境 在屏幕上显示一个短句 键盘输入与屏幕输出练习 实验二、顺序结构编程练习
计算定期存款本利之和 求摄氏温度 实验三、选择结构编程练习 计算居民用水 身高预测 实验四、选择结构编程练习 简单的计算器程序 输出成绩等级 实验五、循环结构编程练习 求最大公约数和最小公倍数 求字符个数 实验六、循环结构编程练习 求分数序列之和 猜数游戏 实验七、数组编程练习 求对角线元素和 输出杨辉三角形 实验八、数组编程练习 检验并打印魔方矩阵 将密码译成原码
4
实验内容 实验内容 实验题目 实验九、函数编程练习 求素数 将二维数组转置 实验十、函数编程练习 连接字符串 进制转换
实验十一、函数编程练习 将字符串反序存放并输出 加法考试题 实验十二、一维数组和函数综合编程练习 学生成绩统计 实验十三、预处理命令 求两整数相除的余数 闰年的判断 实验十四、指针编程练习 查找英文月名 求最大值 实验十五、指针编程练习 按序输出3个整数 求字符串长度 实验十六、结构体编程练习 在屏幕上模拟显示一个数字式时钟
5
实验1: 熟悉上机环境 ——在屏幕上显示一个短句
在屏幕上显示一个短句“Hello World!”。 # include <stdio.h> /* 编译预处理命令 */ int main(void) /* 定义主函数main */ { printf("Hello World!\n"); return 0; /* 返回1个整数0 */ }
6
实验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); }
7
实验2: 顺序结构编程练习 ——计算定期存款本利之和
设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。 要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入。
8
实验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); /*打印存款利率之和*/ }
9
实验2: 顺序结构编程练习 ——计算摄氏温度 输入一个华氏温度,要求输出摄氏温度。公式为:C=5/9(F-32),输出要有文字说明,取2位小数。 式中:C表示摄氏温度,F表示华氏温度。
10
实验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); }
11
实验3: 选择结构编程练习 ——计算居民用水 为鼓励居民节约用水,自来水公司采取按月用水量分段计费的办法,居民应交水费y(元)与月用水量x(吨)的函数关系式如下(设x≥0)。 输入用户的月用水量x(吨),计算并输出该用户应支付的水费y(元)(保留2位小数)。 4x/ ≤ x≤15 y= 2.5x x>15
12
实验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 ; printf("y = f(%f) = %.2f\n", x, y); /* 输出结果 */ return 0;
13
实验3: 选择结构编程练习 ——身高预测 每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。小孩成人后身高与其父母身高和自身性别密切相关。 设faHeight为其父身高,moHeight为其母身高,身高预测公式为: 男性成人时身高 = (faHeight + moHeight) * 0.54(cm) 女性成人时身高 = (faHeight * moHeight) / 2(cm) 此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。
14
实验3: 选择结构编程练习 ——身高预测 编程从键盘输入你的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示喜爱,输入字符N表示不喜爱),利用给定公式和身高预测方法对你的身高进行预测。
15
实验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);
16
实验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 * moHeight) / 2.0; if (sports == 'Y' || sports == 'y') myHeight = myHeight * ( ); if (diet == 'Y' || diet == 'y') myHeight = myHeight * ( ); printf("Your future height will be %f(cm)\n", myHeight); }
17
实验4:选择结构编程练习 ——简单的计算器程序
要求用switch语句编程设计一个简单的计算器程序。要求根据用户从键盘输入的表达式: 操作数1 运算符op 操作数2 计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。
18
实验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"); }
19
实验4:选择结构编程练习 ——输出成绩等级 输入百分制成绩,要求输出成绩等级′ A′、 ′B ′、 ′C ′、 ′D ′、 ′E ′。90分以上为′ A′,80~89分为′B ′,70~79分为′C ′,60~69分为′D ′,60分以下为′E ′。
20
实验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);
21
实验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);
22
实验5:循环结构编程练习 ——求字符个数 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
23
实验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);
24
实验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);
25
实验6:循环结构编程练习 ——猜数游戏 编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则计算机给出提示:“Right!”, 否则提示:“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所“想”的数不能都是一样的。
26
猜数游戏用到的库函数 随机函数srand 通过键入随机数种子,产生[0,100]之间的随机数
为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的 “随机化” 通过键入随机数种子,产生[0,100]之间的随机数 scanf("%u", &seed); srand(seed); magic = rand() % ;
27
#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() % ; 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); }
28
猜数游戏用到的库函数 使用计算机读取其时钟值并把该值自动设置为随机数种子,产生[0,100]之间的随机数
函数time()返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的种子 #include <time.h> srand(time(NULL)); magic = rand() % ;
29
#include <stdlib.h>
#include <stdio.h> #include <time.h> main() { int magic; int guess; int counter; srand(time(NULL)); magic = rand() % ; 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); }
30
实验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); }
31
实验7:数组编程练习 ——输出杨辉三角形 输出以下的杨辉三角形(要求输出10行): 1 2 3 4 6 5 10 …
32
实验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");
33
实验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
34
实验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];
35
实验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"); }}
36
实验8:字符数组编程练习 —— 将密码译成原文
有一行电文,已按下面规律译成密码: A->Z a->z B->Y b->y C->X c->x … … 即把第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程序将密码译回原文,并输出密码和原文。
37
/*用两个字符数组分别存放原文和密码*/
#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");
38
实验9:函数编程练习 —— 求素数 编写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。
39
/*编写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息*/
#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);
40
实验9:函数编程练习 —— 将二维数组转置 编写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。
41
实验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");
42
实验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; }
43
实验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); }
44
实验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'; }
45
实验10:函数编程练习 —— 进制转换 编写一个函数,输入一个十六进制数,输出相应的十进制数。
46
/*编写一个函数,输入一个十六进制数,输出相应的十进制数。*/
#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{
47
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);
48
实验11:函数编程练习 ——将字符串反序存放并输出
编写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
49
实验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;
50
实验11:函数编程练习 ——小学生加法考试题 程序1:
通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”;
51
实验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"); }
52
实验11:函数编程练习 ——小学生加法考试题 程序2:
通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,直到做对为止;
53
实验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);
54
实验12:一维数组和函数综合编程练习 ——学生成绩统计
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别统计下列内容: (1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单; (3)统计各分数段的学生人数及所占的百分比;
55
实验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]++。
56
实验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); }
57
实验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;
58
实验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;
59
实验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;
60
实验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;}
61
实验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]++;
62
实验12:一维数组和函数综合编程练习 ——学生成绩统计
for (i=0; i<6; i++){ if (i == 0) { printf("< %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);
63
实验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)); }
64
实验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);
65
实验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); }
66
实验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); }
67
实验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));
68
实验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;
69
实验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);
70
实验16:结构体编程练习—— 在屏幕上模拟显示一个数字式时钟
定义一个时钟结构体类型: struct clock { int hour; int minute; int second; }; typedef struct clock CLOCK; 然后,将下列用全局变量编写的时钟模拟显示程序改成用CLOCK结构体变量类型重新编写。 时:分:秒
71
实验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); }
Similar presentations