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); }