四川师范大学c语言实验报告
更新时间:2024-05-01 19:05:01 阅读量: 综合文库 文档下载
实验一 数据类型和表达式 实验
(验证性 实验 2学时)
一、目的要求:
(1)了解C语言中数据类型的意义。 (2)理解常用运算符的意义。
(3)掌握C语言表达式的运行规则。 (4)编写实验报告。
二、实验内容(参考实验指导书):
1、计算由键盘输入的任何两个双精度数据的平均值。 (1)算法描述:将数据代入公式(a+b)/2,输出结果。 (2)源代码及说明:
#include
double a,b; scanf(\ %lf\ printf(\}
(3)测试数据:2 6 (4)运行结果:4.00000
(5)问题及解决方法:问题:格式符使用“%f ”,输出结果总是 0.000000 。
解决方法:格式符改为”%lf ”。
2、写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算。
(1)算法描述:将数据代入公式a + b * (c – d ) / e * f – g,输出结果。 (2)源代码及说明:
#include
main() {
int a,b,c,d,e,f,g;
scanf(\
&a,&b,&c,&d,&e,&f,&g); printf(\ }
(3)测试数据:1 2 3 4 5 6 7 (4)运行结果:-6
(5)问题及解决方法:无
3、编写一个C语言程序,测试下列各表达式: i, j i + 1 , j + 1
第 1 页 共 1 页
i++ , j++ ++i , ++j i+++++j
(1)算法描述:定义变量并将其分别代入各表达式中,输出结果。 (2)源代码及说明:
#include
int i=2,j=3;
printf(\ printf(\ printf(\ i=2,j=3;
printf(\ i=2,j=3;
printf(\ }
(3)测试数据:2 3
(4)运行结果:2 3;3 4;2 3;3 4;6 (5)问题及解决方法:
问题:没有注意变量的使用。 解决方法:重新定义变量。
4、输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。 interest = money(1+rate)year - money
(1)算法描述:利用函数pow( ),将数据代入公式interest = money(1+rate)year - money输出结果。
(2)源代码及说明:
#include
(3)测试数据:100 0.1 2 (4)运行结果:21.00 (5)问题及解决方法:
问题:求利率的多次幂
解决方法:利用math 函数库里的pow( )函数
第 2 页 共 2 页
5、输入华氏温度,输出对应的摄氏温度。计算公式如下: c = 5 * ( f - 32) / 9
其中,c表示摄氏温度,f表示华氏温度。
(1)算法描述:将数据代入c = 5 * ( f - 32) / 9,输出结果。 (2)源代码及说明:
#include
(3)测试数据:90.0
(4)运行结果:32.222222 (5)问题及解决方法:无 三、实验总结:
1. 通过实验我清楚的知道了双精度型数据的格式说明符的使用。 2. 学会使用pow( )函数。
实验二 分支结构程序设计 实验
(验证性 实验 2学时)
一、目的要求:
(1)了解和掌握分支语句的使用,包括if语句的各种形式以及switch语句。 (2)编写实验报告。
二、实验内容(参考实验指导书):
1、编写一个程序完成输入一个整数,输出它的符号。 (1)算法描述:
if(i>0) 输出“+”。 if(i<0) 输出“-”。 if(i=0) 输出“0”。 (2)源代码及说明:
#include
第 3 页 共 3 页
printf(\ }
else if(i=0)
printf(\ else printf(\
}
(3)测试数据:5 -6 (4)运行结果:+ -
(5)问题及解决方法:无
2、请编写居民应交水费,并提供各种测试数据。
居民应交水费y(元)与月用水量x(吨)的函数关系式如下: 0 x < 0 y = f(x) = 4x / 3 0 ≤ x ≤ 15 2.5x – 10.5 x > 15 (1)算法描述:
if x<0 => f(x)=0;
if 0<=x<=15 =>f(x)=4x/3 if x>15 =>f(x)=2.5x-10.5 (2)源代码及说明:
#include
(3)测试数据:-1 8 20 (4)运行结果:0.000000 10.666667 35.200000
第 4 页 共 4 页
(5)问题及解决方法:无
3、请根据输入的学生成绩给出成绩等级的判断,判断规则如下: 如果输入的成绩大于等于90,则输出优秀; 如果输入的成绩小于90、大于等于80,则输出良好; 如果输入的成绩小于80、大于等于70,则输出中等; 如果输入的成绩小于70、大于等于60,则输出及格; 其他输出不及格。 (1)算法描述:
if score>=90 输出优秀 if 80<=score<90 输出良好 if 70<=score<80 输出中等 if 60<=score<70 输出及格 else 输出不及格 (2)源代码及说明: #include
第 5 页 共 5 页
}
(3)测试数据:98 86 75 64 53 105 -22
(4)运行结果:优秀 良好 中等 及格 不及格 输入不合法 输入不合法 (5)问题及解决方法:
问题:大于100的分数未给出明确结果
解决方法;在代码中加上对高于100分的限制
4、运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下: s = 250km 没有折扣 250km ≤ s < 500km 2%折扣 500km ≤ s < 1000km 5%折扣 1000km ≤ s < 2000km 8%折扣 2000km ≤ s < 3000km 10%折扣 3000km ≤ s 15%折扣
设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为: f = p * w * s * ( 1 – d )
请编程实现:从键盘输入基本运费p,货物重w,距离s,计算输出用户最终需要支付的运费。
(1)算法描述:
if(s<250) d=0.0 if(s>=250&&s<500) d=0.02 if(s>=500&&s<1000) d=0.05 if(s>=1000&&s<2000) d=0.08 if(s>=2000&&s<3000) d=0.1
else d=0.15
然后再将数据代入公式money=p*w*s*(1-d),输出money。 (2)源代码及说明: #include
第 6 页 共 6 页
} else if(s>=1000&&s<2000) { d=0.08; } else if(s>=2000&&s<3000) { d=0.1; } else d=0.15; money=p*w*s*(1-d); printf(\总运费为:%.2lf\}
(3)测试数据:10 2 230 (4)运行结果:4600.00 (5)问题及解决方法:无
三、实验总结:掌握了if和switch分支语句的使用。
实验三 循环结构程序设计 实验 (验证性 综合性 实验 2学时)
一、目的要求:
(1)使用循环语句完成累乘、图像输出的程序编写。 (2)掌握较复杂结构程序的编写。 (3)掌握程序调试的方法。 (4)编写实验报告。
二、实验内容(参考实验指导书):
1、已知xyz + yzz = 532,其中x、y、z都是数字(0~9),编写一个程序求出x、y、z分别代表什么数字。 (1)算法描述: for i=1到9
for j=1到9 for z=1到9
if满足xyz + yzz = 532 则输出x、y、z (2)源代码及说明: #include
第 7 页 共 7 页
{ for(y=0;y<=9;y++) { for(z=0;z<=9;z++) { if(x*100+y*10+z+y*100+z*10+z==532) printf(\ } } } }
(3)测试数据: (4)运行结果:3 2 1 (5)问题及解决方法:无
2、编写一个程序打印如下对称图形(行数由键盘输入1~9范围的值),例如下面是输入的数字4时的情形:
4444444 33333 222 1 222 33333 4444444 (1)算法描述:
for(i=number;i>0;i--){ for(k=number;k>=i;k--){ printf(\ } for(j=0;j
for(i=2;i<=number;i++){ for(k=number;k>=i;k--) } for(j=0;j
(2)源代码及说明: #include
int number; int i,j,k;
scanf(\
第 8 页 共 8 页
for(i=number;i>0;i--) { for(k=number;k>=i;k--) { printf(\ } for(j=0;j
for(i=2;i<=number;i++) { for(k=number;k>=i;k--) { printf(\ } for(j=0;j
}
(3)测试数据:4
(4)运行结果: 4444444 33333 222 1 222 33333 4444444 (5)问题及解决方法:无 3、学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数。 (1)算法描述:
for(x=1;x<1000;x++)
if满足x%5==2 && x%7==3 && x%3==1 则输出x
(2)源代码及说明: #include
第 9 页 共 9 页
int x; for(x=1;x<1000;x++) { if(x%5==2 && x%7==3 && x%3==1) printf(\ } }
(3)测试数据:
(4)运行结果:52 157 262 367 472 577 682 787 892 997 (5)问题及解决方法:无
4、学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事,四位回答如下: A说:不是我。 B说:是C。 C说:是D。 D说:他胡说。
已知三个人说的是真话,一个人说的是假话。请根据这些信息,找出做了好事的人。 (1)算法描述:
for(x='A';x<='D';x++)
if((x!='A')+(x=='C')+(x=='D')+(x!='D')==3)
输出谁做了好事 (2)源代码及说明:
#include
(3)测试数据:
(4)运行结果:C做了好事 (5)问题及解决方法:无
三、实验总结:通过这几个实验基本掌握了循环的用法和循环嵌套的使用。
实验四 数组程序设计 实验 (验证性 综合性 实验 4学时)
一、目的要求:
(1)掌握一维和二维数组的使用技巧。 (2)编写实验报告。
第 10 页 共 10 页
二、实验内容(参考实验指导书):
1、从键盘输入一个长度为N(比如10)的整型数组,而后将数组中小于零的元素移动到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。比如原来数组为:2 -5 -89 75 0 -89 0 93 48 0,经过处理后的数组为:-5 -89 -89 0 0 0 75 93 48 2。由于不要求数组有序,所以不允许用排序方法。 提示:
1)输入N个数据,构建数组。
2)按照要求确定数据的位置,需要注意循环条件的确定、0数据元素往中间推的实现过程以及数组处理的方向。 (1)算法描述:
for(从第一个数到第十个数) {
for(从第i+个数到第十个数) {
首先判断前一个数是否大于零,再判断后一个数是与零之间的关系,如果不是等于零,则需交换位置。 } }
(2)源代码及说明: #include
第 11 页 共 11 页
end=m; } } for(i=st;i (3)测试数据:10 2 -5 -89 75 0 -89 0 93 48 0 (4)运行结果:-5 -89 -89 0 0 0 75 93 48 2 (5)问题及解决方法: 问题:对大于0和小于0的数进行分类,再重新组合。 解决方法:重新定义一个数组,依次放入数据。 2、设数组a的定义如下: int a[20] = {2,4,6,8,10,12,14,16}; 已存入数组中的数据值已经按由小到大的顺序存放,现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能。 提示: 1)定义整型数组并初始化。 2)从键盘输入一个数据。 3)将该数据插入到数组中,由于要保证插入的数组仍然有序,所以需要查找插入的位置。 4)输出插入数据以后的数组。 (1)算法描述: 遍历数组找到插入数在数组中的位置 for( i=0;i<20;i++) { if(a[i]>x) break; } j=i; 重新排列插入数后面的数 for(i=8;i>=j;i--){ a[i+1]=a[i];} a[j]=x; 最后输出插入数据后的数组 (2)源代码及说明: #include 第 12 页 共 12 页 scanf(\ for(i=0;i<8;i++) { if(n=k;i--) { a[i+1]=a[i]; } a[k]=n; for(i=0;i<9;i++) { printf(\ } } (3)测试数据:3 (4)运行结果:2 3 4 6 8 10 12 14 16 0 0 0 0 0 0 0 0 0 0 0 (5)问题及解决方法:无 3、写一个3 x 5矩阵的转置程序,输出其原矩阵的值和转置以后的结果。 提示: 1)定义一个二维数组及相关变量。 2)对二维数组赋值,可以由键盘输入,也可以通过其他方式赋值。 3)输出转置前的二维数组。 4)对二维数组中的值进行转置。 5)输出转置后的二维数组中的值。 (1)算法描述: 从键盘中输入数组 for(i=0;i<3;i++) for(j=0;j<5;j++) scanf(\ 交换数组对应数值并输出 for(i=0;i<5;i++) for(j=0;j<3;j++) b[i][j]=a[j][i]; printf(\(2)源代码及说明: #include 第 13 页 共 13 页 for(i=0;i<5;i++) { for(j=0;j<3;j++) { b[i][j]=a[j][i]; printf(\ } printf(\ } } (3)测试数据:1 2 3 4 5 5 6 7 8 9 1 3 5 7 9 (4)运行结果:1 5 1 2 6 3 3 7 5 4 8 7 5 9 9 (5)问题及解决方法:无 4、编程实现随机产生10个位于区间[100 200]互不相等的整数,并将其按降序排序和输出。 (1)算法描述: 产生随机数 #include #define random(x) (100+rand()1) 存入数组for(i=0;i<=9;i++) { a[i]=random(200); printf(\ } 进行排序(选择) for(i=0;i<=9;i++) { for(j=i+1;j<10;j++) { if(a[i] (2)源代码及说明: 第 14 页 共 14 页 #include 第 15 页 共 15 页 { if(a[i] (3)测试数据:137 114 155 107 146 173 160 166 172 186 (4)运行结果:186 173 172 166 160 155 146 137 114 107 (5)问题及解决方法:无 三、实验总结: (1)熟练地掌握了选择排序和穷举算法的使用; (2)掌握了对二维数组的简单的使用。 实验五 函数 实验 (验证性 综合性 实验 5学时) 一、目的要求: (1)学习函数的编程思想,编写一个包括3~4个函数的程序。 (2)掌握函数中参数传递的两种方式和函数的相互调用。 (3)编写实验报告。 二、实验内容(参考实验指导书): 1、写一个函数int digit( int n , int k ),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3。 (1)算法描述: int digit( int n , int k ) { for(i=0;i { d=n; n=n/10; } return d; } 用scanf输入数,调用函数int digit输出结果 第 16 页 共 16 页 (2)源代码及说明: #include main() { int x; x = digit(1234,2); printf(\} (3)测试数据:digit(1234,2)将返回值3 (4)运行结果:3 (5)问题及解决方法:无 2、写一个函数int isprime(int n),当n是质数时,函数返回非零值;当n是合数时,函数返回零值。 (1)算法描述: int isprime(int n){ for(i=2;i if(n%i==0) return 0; else return 1; } } if(n==1) return 0 (2)源代码及说明: #include int i; if(n==1) { return 0; } 第 17 页 共 17 页 for(i=2;i<=n-1;i++){ if(n%i==0){ return 0; } } return 1; } main() { int r; r = isprime(5); printf(\ r = isprime(8); printf(\} (3)测试数据:2 4 (4)运行结果:1 0 (5)问题及解决方法:无 3、写一个函数reverse( char s[]),将字符串s[]中的字符串倒序输出。试分别用递归和非递归两种形式编写。 (1)算法描述: 递归:递归的出口: if(n==1) printf(\ 递归的形式 printf(\ s[n-1]='\\0'; reverse(s); 非递归: 利用倒序特点,进行交换 for(i=0;i (2)源代码及说明: 递归: void reverse( char s[]) { int n; n=strlen(s); if(n==1) { 第 18 页 共 18 页 printf(\ return ; } printf(\ s[n-1]='\\0'; reverse(s); } 非递归: void reverse( char s[]) { int n; int i,j; char temp; n=strlen(s); if(n==1) { printf(\ return ; } for(i=0;i (3)测试数据: (4)运行结果: (5)问题及解决方法: 4、写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性。 (5)一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需要通过子函数实现,输出的时候要求5个数字一行。 (1)算法描述: 用递归和非递归写出函数reverse( char s[]) 递归:递归的出口: if(n==1) printf(\ 递归的形式 第 19 页 共 19 页 printf(\ s[n-1]='\\0'; reverse(s); 非递归: 利用倒序特点,进行交换 for(i=0;i } 写出主函数,调用函数reverse( char s[]) (2)源代码及说明: 递归: #include int main() { char text[10]={'a','b','c','d','e','f','g','h','m','o'}; int i,n=10; for(i=0;i 非递归: #include 第 20 页 共 20 页 void reverse( char s[]) { int n; int i,j; char temp; n=strlen(s); if(n==1) { printf(\ return ; } for(i=0;i int main() { char text[10]={'a','b','c','d','e','f','g','h','m','o'}; int i,n=10; for(i=0;i (3)测试数据:a b c d e f g h i j (4)运行结果:j i h g f e d c b a (5)问题及解决方法:无 5、在n个已排好序(设为从小到大)的数据(数或字符串)中查找某一个数据,如果找到了,就指出其在n个数中的位置;否则给出无该数据的信息。请用递归的方法实现二分查找来实现这一查找过程。 提示:采用二分法求解本问题的基本思路是:设数列为a1,a2,?,an,被查找的数为x,则查找首先对am(m = ( n + 1 ) / 2)进行,于是得到三种情形。 若x > am,则x只可能在区间[am + 1 , an] 第 21 页 共 21 页 若x < am,则x只可能在区间[a1 , am - 1] 若x = am,则am即为查找的数,求解结束。 从上面的分析发现,这个过程很适合用递归来实现。 (1)算法描述: for(i=10000;i<100000;i++) { if(hw(i)) { if(isprime(i)==1) { cnt++; } } } printf(\合计:%d个\\n\} (2)源代码及说明: #include int isprime(int n) { int i=2; while(i<=sqrt(n)) { if(n%i==0) return 0; 第 22 页 共 22 页 i++; } return 1; } int hw(int n) { int m=0; int t=n; while(t) { m=m*10+t; t/=10; } return m==n; } (3)测试数据: (4)运行结果:93个 (5)问题及解决方法:无 三、实验总结:掌握了函数中参数传递的两种方式和函数的相互调用。 实验六 指针 实验 (验证性 综合性 实验 4学时) 一、目的要求: (1)用指针作为函数参数完成字符串的传递。 (2)掌握函数中参数传递的两种方式。 (3)编写实验报告。 二、实验内容(参考实验指导书): (1)编写一个函数char *delk( char *sp),把sp所指向的字符串中所有的“$”字符删除,并把处理后的字符串指针返回。 (1)算法描述: char *b=\ char *a=(char*)malloc(sizeof(b)); delk(b,a); (2)源代码及说明: #include char *delk(char *sp,char *q) { char *p=sp; while (*p!='\\0') { if (*p!='$'){ 第 23 页 共 23 页 *q=*p; q++; } p++; } } main() { char *b=\ char *a=(char*)malloc(sizeof(b)); delk(b,a); printf(\} (3)测试数据:$abcd$efgh (4)运行结果:abcdefgh (5)问题及解决方法:无 2、写一个函数int find( char *s1, char *s2),函数find的功能是查找串s1中是否包含指定的词(s2指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的空格符分隔。 (1) 算法描述: char s1[]=\ char s2[]=\ int a=find(s1,s2); (2)源代码及说明: #include int find(char *s1,char *s2) { char *p=s1; char *q; int k=0; int r; while(*p!='\\0') { while(*p==' ') { p++; } q=p; while(*q!='\\0'&&*q!=' ') { q++; } char c=*q; 第 24 页 共 24 页 } main() { char s1[]=\ char s2[]=\ int a=find(s1,s2); printf(\} (3)测试数据: char s1[]=\char s2[]=\ char s1[]=\char s2[]=”we”; (4)运行结果:3 -1 (5)问题及解决方法:无 3、编程实现将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符形式输出。例如:输入十进制数79,将输出十六进制数4f。 (1)算法描述: for(int i=len-1;i>=0;i--) { printf(\ } (2)源代码及说明: #include { return n+'0'; } else } if(r!=0) { return -1; } *q='\\0'; r=strcmp(p,s2); k=k+1; if(r==0) { return k; } p=q+1; 第 25 页 共 25 页 return 'a'+n-10; } int DtoH(int n,char *res) { int i=0; while(n!=0) { res[i++]=trans(n); n=n/16; } return i; } main() { int a=79; char q[100]; int len =DtoH(a,q); for(int i=len-1;i>=0;i--) { printf(\ } } (3)测试数据:79 (4)运行结果:4f (5)问题及解决方法:无 4、定义函数void Merge(int a[], int n, int b[], int m),参数a、b为一维数组,数组中的数据为升序排列,n和m分别为它们的元素个数。函数的功能为:将数组a和b合并为一个数组,合并后的结果存放于数组a中,要求合并后的数组a仍旧为升序排列。请编程实现,并编写main函数对其测试。 (1)算法描述: for(i=0,j=0;i { if(a[i] { c[k]=a[i]; c[k+1]=b[j]; if(k>1) { if(c[k] { temp=c[k-1]; c[k-1]=c[k]; c[k]=temp; 第 26 页 共 26 页 } } k=k+2; } (2)源代码及说明: #include void Merge(int a[],int n,int b[],int m) { int k=0; int c[100]; int temp; int i,j; for(i=0,j=0;i { if(a[i] { c[k]=a[i]; c[k+1]=b[j]; if(k>1) { if(c[k] { temp=c[k-1]; c[k-1]=c[k]; c[k]=temp; } } k=k+2; } if(a[i]>b[j]) { c[k]=b[j]; c[k+1]=a[i]; if(k>1) { if(c[k] { temp=c[k-1]; c[k-1]=c[k]; c[k]=temp; } } k=k+2; } 第 27 页 共 27 页 } main() { int a[5]={1,4,7,9,10}; int b[5]={0,2,3,5,8}; Merge(a,5,b,5); } (3)测试数据: int a[5]={1,4,7,9,10}; int b[5]={0,2,3,5,8}; (4)运行结果:0 1 2 3 4 5 7 8 9 10 (5)问题及解决方法:无 三、实验总结: (1)掌握了用指针作为函数参数完成字符串的传递。 (2)掌握了函数中参数传递的两种方式。 } a=c; for(i=0;i 实验七 字符串与指针 实验 (验证性 综合性 实验 2学时) 一、目的要求: (1)掌握用指针进行函数参数传递的方法。 (2)掌握指针数组和二维数组间的关系以及进行参数传递时的写法。 (3)编写实验报告。 二、实验内容(参考实验指导书): 1、编写一个书名排序程序,输入10个书名存入一个二维数组,用函数void sortstring( char *name[] , int n)实现它们的字典顺序。 (1)算法描述: sortstring(name,10); for(a=0;a<10;a++) printf(\(2)源代码及说明: #include void sortstring(char *name[],int n) { char *p; 第 28 页 共 28 页 int i,j; for(i=0;i (3)测试数据: (4)运行结果:hello world start end then first follow watch see hear (5)问题及解决方法:无 2、编写函数void search( char *s1, char *s2, char *s3)。函数search()从已知的两个字符串s1与s2中找出它们都包含的最长的单词放入字符串s3,约定字符串中只有小写字母和空格字符,单词用1个或1个以上空格分隔。 (1)算法描述: (2)源代码及说明: #include void search(char *s1, char *s2, char *s3) { char *p; int word,i,m,n; char a[20]; p=s1; s3[0]='\\0'; while (*p!='\\0') { word=0; for (i=0;p[i]!='\\0';i++) 第 29 页 共 29 页 { if (p[i]!=' '&&word==0) { word=1; m=i; } else if (p[i]==' '&&word==1) { n=i; break; } } if (p[i]=='\\0'&&word==1) n=i; if (word==1) { strncpy(a,p+m,n-m); a[n-m]='\\0'; char *pfind; if ( (pfind=strstr(s2,a))!=NULL ) { if ( *(pfind+strlen(a))==' ' || *(pfind+strlen(a))=='\\0' ) if (strlen(a)>strlen(s3)) strcpy(s3,a); } p=p+n; } else break; } } main() { char *s1=\ char *s2=\ char s3[20]; search(s1,s2,s3); printf(\} (3)测试数据: (4)运行结果:name (5)问题及解决方法:无 3、编写一个主函数,测试上述两个函数的正确性。 (1)算法描述: (2)源代码及说明: 第 30 页 共 30 页 (3)测试数据: (4)运行结果: (5)问题及解决方法: 4、输入一个字符串,内有数字和非数字字符,例如: A123cdf 456.78cpc876.9er 849.1 将其中连续的数字作为一个实数,依次存放到一数组a中。例如123存放在a[0],456.78存放在a[2],依次类推,统计共有多少个数,并输出这些数。 (1)算法描述: f(a,b); for(j=0;j<4;j++) printf(\(2)源代码及说明: #include void f(char *sp,float b[]) { char *p; float value; int power,i=0,j=0; p=sp; while(*p) { for(;!(*p>='0'&&*p<='9');p++) value=0; for(value=0;(*p>='0'&&*p<='9');p++,i++) value=value*10+*p-'0'; if(*p=='.') p++; for(power=1;(*p>='0'&&*p<='9');p++,i++) { value=value*10+*p-'0'; power=power*10; } value=value/power; b[j++]=value; } printf(\数字个数为:%d\\n\} void main() { int j; float b[4]={0}; char *a=\ f(a,b); for(j=0;j<4;j++) 第 31 页 共 31 页 printf(\} (3)测试数据: (4)运行结果:16 123.00 456.78 876.90 849.18 (5)问题及解决方法:无 三、实验总结: (1)掌握了用指针进行函数参数传递的方法。 (2)掌握了指针数组和二维数组间的关系以及进行参数传递时的写法。 实验八 结构体 实验 (验证性 综合性 实验 2学时) 一、目的要求: (1)掌握结构体的定义、数据输入方法。 (2)掌握结构体成员变量的两种访问方法。 (3)掌握编写程序完成单链表的建立和查询方法。 (4)编写实验报告。 二、实验内容(参考实验指导书): 1、编写一个建立单链表的函数,设链表的表元素信息包含学号、姓名、一门课的成绩;写一个按照学号查学生成绩的函数;最后写一个主函数,它先调用建立函数,再调用查询函数,显示查到学生的姓名和成绩。 (1)算法描述: for(k=0;k<4;k++) { printf(\请输入学号:(1~4)\\n\scanf(\ for(j=0;j<4;j++) if(stu[j].num==i) (2)源代码及说明: #include stu[4]={{1,\main() { int i,j,k; for(k=0;k<4;k++) { 第 32 页 共 32 页 printf(\请输入学号:(1~4)\\n\scanf(\ for(j=0;j<4;j++) if(stu[j].num==i) printf(\ } } (3)测试数据: (4)运行结果: (5)问题及解决方法:无 2、编一程序,能把从终端输入的一个字符串中的小写字母全部转换成大写字母,要求输入的字符的同时指定该字符在字符串中的序号(即字符在字符串中的顺序号,例如第1个字符的序号为1),字符和序号存入结构体中,字符串存入结构体数组中,然后显示结构体数组的结果(用字符!表示输入字符串的结束)。 (1)算法描述: while(1) { scanf(\ if(s[i].a!='!') s[i].num=i+1; else break; if(s[i].a>'Z') s[i].a=s[i].a-32; printf(\ i++; } (2)源代码及说明: #include 第 33 页 共 33 页 int i=0; printf(\请输入字母,以!为结束标志\\n\ while(1) { scanf(\ if(s[i].a!='!') s[i].num=i+1; else break; if(s[i].a>'Z') s[i].a=s[i].a-32; printf(\ i++; } } (3)测试数据: (4)运行结果: (5)问题及解决方法:无 3、在本实验的实验内容1的基础上,实现在链表元素index之前插入元素的操作Insert( struct node *head, int index)和删除指定位置元素的操作Delete( struct node * head, int index),并编写主函数测试。 (1)算法描述: (2)源代码及说明: #include struct student * fun() { struct student *p,*q,*head; 第 34 页 共 34 页 q=head=NULL; char str[15]={'\\0'}; printf(\请依次输入学生的姓名,学号,成绩:(以'0'作为结束标志)\\n\ while(1) { scanf(\ if(str[0]=='0') break; p=(struct student *)malloc(sizeof(struct student)); strcpy(p->name,str); scanf(\ scanf(\ if(head==NULL) head=q=p; else { q->next=p; q=p; } } q->next=NULL; return head; } struct student * park(struct student *head) { int i; char str[15]; struct student *p,*q; printf(\你想要删除某个学生的信息吗?是/否(1/0)\\n\ scanf(\ if(!i) return head; printf(\请输入你想要删除的学生姓名\\n\ scanf(\ for(p=head,q=NULL;p!=NULL;q=p,p=p->next) if(!strcmp(p->name,str)) break; if(p==NULL) { printf(\没有你要删除的学生的信息\\n\ return head; } else { 第 35 页 共 35 页 if(q==NULL) head=p->next; else { q->next=p->next; } free(p); } return head; } struct student *wall(struct student *head) { int i,j,k=1; struct student *p,*q,*r; printf(\你想要添加某个学生的信息吗?是/否(1/0)\\n\ scanf(\ if(!i) return head; printf(\请输入你想要添加的学生的信息:(依次为:姓名,学号,成绩)\\n\ p=(struct student *)malloc(sizeof(struct student)); scanf(\ scanf(\ scanf(\ printf(\请输入你想要添加到的位置\\n\ scanf(\ for(q=head,r=NULL;q!=NULL;r=q,q=q->next) { if(j==1) { p->next=head; head=p; break; } if(k==j) { p->next=q; r->next=p; break; } k++; } if(q==NULL&&j==k) { q=p; 第 36 页 共 36 页 p->next=NULL; } if(q==NULL&&j>k) printf(\你的添加的位置不合法\\n\ return head; } void prin(struct student *head) { struct student *p; for(p=head;p!=NULL;p=p->next) { printf(\ printf(\ printf(\ printf(\ } } main() { struct student *head; head=fun(); head=wall(head); head=park(head); prin(head); } (3)测试数据: (4)运行结果: (5)问题及解决方法:无 三、实验总结: (1)掌握了结构体的定义、数据输入方法。 (2)掌握了结构体成员变量的两种访问方法。 (3)掌握了编写程序完成单链表的建立和查询方法。 实验九 文件操作 实验 第 37 页 共 37 页 (验证性 综合性 实验 1学时) 一、目的要求: (1)掌握文件的打开和关闭。 (2)精通文件的读写操作。 (3)了解文件的定位操作及文件的检测函数。 (4)掌握文件的应用。 (5)编写实验报告。 二、实验内容(参考实验指导书): 1、编写一个程序,读取磁盘上的一个C语言程序文件,要求加上注释后再存放到磁盘上,文件可以另外命名。 (1)算法描述: if((p=fopen(\ fscanf(p,\ fclose(p); if((p=fopen(\ { printf(\ exit(1); } (2)源代码及说明: #include 第 38 页 共 38 页 (3)测试数据: (4)运行结果: (5)问题及解决方法:无 2、编写一个程序,将文件old.txt从第10行起存放到new.txt中。 (1)算法描述: while(!feof(p1)) { if((c=fgetc(p1))=='\\n') i++; if(i>=9) { fputc(c,p2); } } (2)源代码及说明: #include int i=0; char c; FILE *p1,*p2; if((p1=fopen(\ { printf(\ exit(1); } if((p2=fopen(\ { printf(\ exit(1); } while(!feof(p1)) { if((c=fgetc(p1))=='\\n') i++; if(i>=9) { fputc(c,p2); } } 第 39 页 共 39 页 system(\ fclose(p1); fclose(p2); } (3)测试数据: (4)运行结果: (5)问题及解决方法:无 3、有一个整数文件,读取其中的数值,如果为奇数加1,如果为偶数减1,然后存放到新的文件中去。 (1)算法描述: while(!feof(p1)) { c=fgetc(p1); if((c-'0')%2==0) i--; else if((c-'0')%2==1) i++; } (2)源代码及说明: #include 第 40 页 共 40 页
正在阅读:
四川师范大学c语言实验报告05-01
2016税务师《税法 一》模拟试题(二)06-30
以孝为先作文500字06-29
2016初中数学中考指导二轮复习锦囊:专题四 探究型问题03-08
PCR实验室SOP文件09-18
实验一 顺序表操作实现07-06
安涉外外贸单证考试试卷11-24
最新2018海南省《宗教事务条例》知识竞赛满分答案09-23
杰克琼斯巡店报告08-06
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 四川
- 师范大学
- 语言
- 实验
- 报告
- 证劵从业资格考试市场基础讲义
- 商务英语阅读2_翻译复习翻译
- 马王堆汉墓帛书《六十四卦(周易)》释文
- 机械设计练习题 (6)
- 走进拉贝故居 - 图文
- 2011年考研政治《思修与法律基础》真题解析
- 人因工程学 实验指导书ok 2
- 人教版五年级数学《可能性大小》教学设计
- 房地产项目环境影响评价报告书 - 图文
- 技术经济学 研究生入学试题
- 人音版第八册音乐教案 Microsoft Word 文档
- 40+60+40 m预应力混凝土变截面连续梁桥设计计算书
- 新企业所得税题目计算题-初级
- 多操作系统独立启动设置详解
- 2010陕西省村官考试试题真题及答案
- 模具设计与制造毕业设计
- 太钢英语二级强化翻译练习题
- 塑料模具毕业设计论文
- 工作总结1
- 住宅门厅及公共部位装饰设计标准