第一篇:中国MOOC, C 语言代码和实验报告总结
递归法计算游戏人员的年龄(4分)题目内容:
有n个人围坐在一起,问第n个人多大年纪,他说比第n-1个人大2岁;问第n-1个人,他说比第n-2个人大2岁,.....,问第3个人,他说比第2个人大2岁;问第2个人,他说比第1个人大2岁。第1个人说自己10岁,问第n个人多大年纪。递归函数原型:unsigned int ComputeAge(unsigned int n);提示: 递归公式
输入格式: “%u” 输出格式:
“The person's age is %un”
输入样例1: 5↙
输出样例1:
The_person's_age_is_18 输入样例2: 10↙
输出样例2:
The_person's_age_is_28 注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)
时间限制:500ms内存限制:32000kb
#include “stdio.h” int main(){ unsigned int a,b;scanf(“%u”,&a);b=10+(a-1)*2;printf(“The person's age is %un”,b);
return 0;} 魔术师猜数(4分)题目内容:
在一种室内互动游戏中,魔术师要每位观众心里想一个三位数abc(a、b、c分别是百位、十位和个位数字),然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及这5个数的和值。只要观众说出这个和是多少,则魔术师一定能猜出观众心里想的原数abc是多少。例如,观众甲说他计算的和值是1999,则魔术师立即说出他想的数是443,而观众乙说他计算的和值是1998,则魔术师说:“你算错了!”。请编程模拟这个数字魔术游戏。要求用函数实现,函数原型:int Magic(int m);其中形参m代表观众计算的和值。输入格式: “%d” 输出格式:
观众计算错误,魔术师给出的结论:“The sum you calculated is wrong!n” 观众计算正确,魔术师给出的结论:“The number is %dn” 输入样例1: 1998↙
输出样例1:
The_sum_you_calculated_is_wrong!输入样例2: 1999↙
输出样例2:
The_number_is_443 注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)
时间限制:500ms内存限制:32000kb
#include “stdio.h” int is(int i,int k){ int j=0,ii=i;while(ii){j+=ii%10;ii/=10;} if(j*222==k+i)return 1;else return 0;} int main(){ int i,j,k,sum;scanf(“%d”,&sum);k=0;for(i=100;i<=999;i++)if(is(i,sum)){k=i;break;} if(k==0)printf(“The sum you calculated is wrong!n”);else printf(“The number is %dn”,k);
return 0;} 寻找中位数v1.0(4分)题目内容:
编写一个函数返回三个整数中的中间数。函数原型:int mid(int a, int b, int c);功能是返回a,b,c三数中大小位于中间的一个数。输入格式: “%d%d%d” 输出格式:
“The result is %dn” 输入样例1: 12 6 18↙ 输出样例1: The_result_is_12 输入样例2:-9 7-2↙
输出样例2: The_result_is_-2 注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)
时间限制:500ms内存限制:32000kb
#include “stdio.h” int main(){ int a[4],max,min,ans,i;scanf(“%d%d%d”,&a[1],&a[2],&a[3]);max=1;for(i=1;i<=3;i++)if(a[i]>a[max])max=i;min=1;for(i=1;i<=3;i++)if(a[i]< a[min])min=i;ans=6-max-min;printf(“The result is %dn”,a[ans]);
return 0;} 还原算术表达式(4分)题目内容: 编写程序求以下算式中XYZ的值。
输入格式: 输出格式:“X=%d,Y=%d,Z=%dn” 输入样例: 输出样例: X=3,Y=2,Z=1 注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:31kb
#include “stdio.h” int main(){ int x,y,z;for(x=0;x<=9;x++)for(y=0;y<=9;y++)for(z=0;z<=9;z++)if(x*100+y*110+z*12==532)printf(“X=%d,Y=%d,Z=%dn”,x,y,z);
return 0;} 计算礼炮声响次数(4分)题目内容:
在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听到几次礼炮声。输入格式:无 输出格式: n=%d 输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb
#include “stdio.h” main(){ int n=0,t;for(t=0;t<=20*7;t++){ if(t%5 == 0 && t <=20*5){ n++;continue;} if(t%6 == 0 && t <=20*6){ n++;continue;} if(t%7 == 0){ n++;} } printf(“n=%dn”, n);} 兔子生崽问题(4分)题目内容:
假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子(即当年12月份总计有多少对兔子,含成兔和小兔)?请编程求解该问题。
参考答案:依题意,兔子的繁殖情况如图所示。图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图可发现如下规律:(1)每月小兔对数 = 上个月成兔对数。
(2)每月成兔对数 = 上个月成兔对数 + 上个月小兔对数。综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。
用fn(n=1,2,„)表示第n个月成兔对数,于是可将上述规律表示为如下递推公式:
输入格式:无 输出格式:
每个月兔子对数的输出格式: “% 4d” 第12个月的兔子总数的输出格式: “nTotal=%dn” 输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb
#include“stdio.h” int main(){ int i,a[13];a[1]=1;a[0]=1;for(i=2;i<=12;i++)a[i]=a[i-1]+a[i-2];for(i=1;i<=12;i++)printf(“% 4d”,a[i]);printf(“nTotal=%dn”,a[12]);
return 0;} 抓交通肇事犯(4分)题目内容:
一辆卡车违犯交通规则,撞人后逃跑。现场有三人目击事件,但都没记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位的车号刚好是一个整数的平方。现在请根据以上线索帮助警方找出车号以便尽快破案。
[提示]:假设这个4位数的前两位数字都是i,后两位数字都是j,则这个可能的4位数 k = 1000*i + 100*i + 10*j + j 式中,i和j都在0~9变化。此外,还应使k=m*m,m是整数。由于k是一个4位数,所以m值不可能小于31。输入格式:无
输出格式:“k=%d,m=%dn” 输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb
#include“stdio.h” int main(){ int i,m,ans;for(m=31;m<=100;m++){ ans=m*m;if(((ans/100)%11==0)&&((ans%100)%11==0))printf(“k=%d,m=%dn”,ans,m);}
return 0;} 检验并打印幻方矩阵。(4分)题目内容:
幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。输入格式: “%d” 输出格式:
如果是幻方矩阵,输出提示信息: “It is a magic square!n” 矩阵元素的输出: “% 4d”(换行使用“n”)
如果不是幻方矩阵,输出提示信息: “It is not a magic square!n” 输入样例1: 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(输人样例中“_”代表空格)输出样例1:
It is a magic square!**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(输出样例中“*”代表空格)输入样例2: 1_0_1_6_1 3_1_1_1_1 1_1_1_1_2 1_1_1_1_1 9_1_7_1_1(输人样例中“_”代表空格)输出样例2:
It is not a magic square!注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(输人样例中“_”代表空格,输出样例中“*”代表空格)时间限制:500ms内存限制:32000kb
#include “stdio.h” int main(){ int a[6][6];int i,j;for(i=1;i<=5;i++)for(j=1;j<=5;j++)scanf(“%d”,&a[i][j]);for(i=1;i<=5;i++){ a[i][0]=0;for(j=1;j<=5;j++)a[i][0]+=a[i][j];if(a[i][0]!=a[1][0]){printf(“It is not a magic square!n”);return 0;} } for(i=1;i<=5;i++){ a[0][i]=0;for(j=1;j<=5;j++)a[0][i]+=a[j][i];if(a[0][i]!=a[0][1]){printf(“It is not a magic square!n”);return 0;} } if(a[1][0]!=a[0][1]){printf(“It is not a magic square!n”);return 0;} a[0][0]=0;for(i=1;i<=5;i++)a[0][0]+=a[i][i];if(a[0][0]!=a[1][0]){printf(“It is not a magic square!n”);return 0;} a[0][0]=0;for(i=1;i<=5;i++)a[0][0]+=a[i][6-i];if(a[0][0]!=a[1][0]){printf(“It is not a magic square!n”);return 0;} printf(“It is a magic square!n”);for(i=1;i<=5;i++){ for(j=1;j<=5;j++)printf(“% 4d”,a[i][j]);printf(“n”);}
return 0;} ISBN识别码判断(4分)题目内容:
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2„„以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,...,9,再求和,即0×1+6×2+„„+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。程序运行结果示例1: 0-123-41562-4↙ Right 程序运行结果示例2: 0-123-41562-7↙ 0-123-41562-4 输入格式: 用gets()输入字符串 输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN的格式要求)。输出格式:
输入的ISBN号码的识别码正确,输出信息: “Right” 输入的ISBN号码的识别码错误,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”),输出格式:“%s” 注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!输入样例: 输入样例:
时间限制:500ms内存限制:32000kb
#include “stdio.h” int xg(char *s,int k){ if(k==10)*(s+12)='X';else *(s+12)='0'+k;} int main(){ char s[14];int a[10],i,ans=0;gets(s);a[1]=s[0]-'0';a[2]=s[2]-'0';a[3]=s[3]-'0';a[4]=s[4]-'0';a[5]=s[6]-'0';a[6]=s[7]-'0';a[7]=s[8]-'0';a[8]=s[9]-'0';a[9]=s[10]-'0';for(i=1;i<=9;i++)ans+=a[i]*i;ans%=11;if(ans+'0'==s[12]||(ans==10&&s[12]=='X'))printf(“Right”);else {xg(s,ans);printf(“%s”,s);}
return 0;} 摘苹果(4分)题目内容:
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。程序运行结果示例1:
200 140 150 156 187 197 149↙ 110↙ 4 程序运行结果示例2:
210 102 153 147 110 130 182 88 113↙ 100↙ 6 输入格式: “%d” 输入包括两行数据:
第1行包含10个100到200之间的整数(包括100和200,以厘米为单位),分别表示10个苹果到地面的高度。两个相邻的整数之间用一个空格隔开。
第2行只包括一个100到120之间的整数(包含100和120,以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。输出格式: “%d” 注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!输入样例: 输出样例:
时间限制:500ms内存限制:32000kb
#include “stdio.h” int main(){ int app[11],i,ans=0,h;for(i=1;i<=10;i++)scanf(“%d”,app+i);scanf(“%d”,&h);for(i=1;i<=10;i++)if(app[i]<=h+30)ans++;printf(“%d”,ans);
return 0;} 求最大素数(4分)题目内容:
求500以内的10个最大素数及其和,并分别输出这10个最大素数及其和。要求10个素数按从大到小的顺序输出。输入格式: 无 输出格式:
10个最大素数的输出格式:“% 6d” 总和的输出格式:“nsum=%dn” 输入样例: 输出样例:
时间限制:500ms内存限制:32000kb
#include “stdio.h” int ss[96];int is(int k){ int i=1;while(ss[i]*ss[i]<=k){ if(k%ss[i]==0)return 0;i++;}
return 1;} int main(){ int n=2,i,sum=0;ss[1]=2;ss[2]=3;for(i=4;i<=500;i++)if(is(i))ss[++n]=i;for(i=n;i>=n-9;i--){ printf(“% 6d”,ss[i]);sum+=ss[i];} printf(“nsum=%dn”,sum);
return 0;} 字符串逆序(4分)题目内容:
用字符数组作函数参数编程,利用一个数组实现字符串(允许输入带空格的字符串)的逆序存放。要求如下:
(1)在主函数中从键盘输入字符串,字符串的最大长度为80个字符。
调用Inverse()函数将字符串逆序存放,然后在主函数中输出逆序后的字符串。(2)在子函数Inverse()中实现字符串的逆序存放。函数原型为: void Inverse(char str[]);程序运行结果示例1: Input a string: abcde↙
Inversed results: edcba 程序运行结果示例2: Input a string: hello↙
Inversed results: olleh 输入格式: 用gets()输入字符串 输出格式:
输入提示信息:“Input a string:n” 输出提示信息:“Inversed results:n” 用puts()输出字符串
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!输入样例: 输出样例:
时间限制:500ms内存限制:32000kb
#include “stdio.h” #include “string.h” int dh(char *s,int len){ int i;char c;for(i=0;i<=len/2;i++){ c=*(s+i);*(s+i)=*(s+len-i);*(s+len-i)=c;} } int main(){ char s[80],len=0;printf(“Input a string:n”);gets(s);while(s[len]!=' ')len++;len--;dh(s,len);printf(“Inversed results:n”);puts(s);
return 0;}
水手分椰子(4分)题目内容:
五个水手在岛上发现一堆椰子,先由第1个水手把椰子分为等量的5堆,还剩下1个给了猴子,自己藏起1堆。然后,第2个水手把剩下的4堆混合后重新分为等量的5堆,还剩下1个给了猴子,自己藏起1堆。以后第3、4个水手依次按此方法处理。最后,第5个水手把剩下的椰子分为等量的5堆后,同样剩下1个给了猴子。请用迭代法编程计算并输出原来这堆椰子至少有多少个。
输入格式: 无
输出格式:“y=%dn” 输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb
#include “stdio.h” int can(int k){ int i;for(i=1;i<=5;i++){ if((k-1)%5!=0||k< 5)return 0;k=(k-1)/5*4;} return 1;} int main(){ int ans=1;while(!can(ans))ans++;printf(“y=%dn”,ans);
return 0;} 找最值(4分)题目内容:
从键盘任意输入10个整数,用指针变量作函数参数编程计算最大值和最小值,并返回它们所在数组中的位置。函数原型如下所示:
int FindMax(int num[], int n, int *pMaxPos);//函数返回最大值,pMaxPos返回最大值所在的下标
int FindMin(int num[], int n, int *pMinPos);//函数返回最小值,pMaxPos返回最小值所在的下标
程序运行结果示例: Input 10 numbers:-1 2 3 45 92 8 9 12 7 8↙
Max=92,Position=4,Min=-1,Position=0
输入格式: “%d” 输出格式:
提示信息:“Input 10 numbers:n” 输出结果:“Max=%d,Position=%d,Min=%d,Position=%dn” 输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb
#include “stdio.h” int Findmax(int *a,int *p){ int i;*p=0;for(i=1;i< 10;i++)if(*(a+*p)<*(a+i))*p=i;
return 0;} int Findmin(int *a,int *p){ int i;*p=0;for(i=1;i< 10;i++)if(*(a+*p)>*(a+i))*p=i;
return 0;} int main(){ int a[10],maxp,minp,i;printf(“Input 10 numbers:n”);for(i=0;i< 10;i++)scanf(“%d”,a+i);Findmax(a,&maxp);Findmin(a,&minp);printf(“Max=%d,Position=%d,Min=%d,Position=%dn”,a[maxp],maxp,a[minp],minp);
return 0;} 星期查找(4分)题目内容:
任意输入英文的星期几,通过查找如图所示的星期表,输出其对应的数字,若查到表尾,仍未找到,则输出错误提示信息。
提示:用一个二维字符数组weekDay来存放如图所示的星期表的内容(字符串)。输入待查找的字符串,然后在星期表中顺序查找与输入字符串相匹配的字符串。找到的字符串在星期表数组中的第一维下标(行号)即为题目所求。程序运行结果示例1: Please enter a string: Friday↙ Friday is 5 程序运行结果示例2: Please enter a string: Fruday↙ Not found!输入格式: 字符串输入采用gets()函数 输出格式:
输入提示信息:“Please enter a string:n” 找到了,输出:“%s is %dn” 没找到,输出:“Not found!n” 输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb
#include “stdio.h” #include “string.h” int main(){ char s[][10]={“Sunday”,“Monday”,“Tuesday”,“Wednesday”,“Thursday”,“Friday”,“Saturday”};char ss[10];int i;printf(“Please enter a string:n”);gets(ss);for(i=0;i<=6;i++)if(strcmp(ss,s[i])==0){printf(“%s is %dn”,ss,i);return 0;} printf(“Not found!n”);
return 0;} 杨辉三角形(4分)题目内容:
编程打印具有如下形式的杨辉三角形,其中输出数据的行数n从键盘输入,并且n<=10。程序运行结果示例1: Input n(n<=10): 5↙ 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
程序运行结果示例2: Input n(n<=10): 7↙ 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1
输入格式: “%d” 输出格式:
输入提示信息:“Input n(n<=10):n” 输出数据格式:“% 4d” 数据换行: “n”
输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb
#include “stdio.h” #include “string.h” int main(){ int a[11][11],n,i,j;printf(“Input n(n<=10):n”);scanf(“%d”,&n);for(i=1;i<=n;i++)for(j=1;j<=i;j++){ if(j==1||j==i)a[i][j]=1;else 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(“% 4d”,a[i][j]);printf(“n”);}
return 0;} 找数组最值(4分)题目内容:
按如下函数原型编程从键盘输入一个m行n列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中,m和n的值由用户键盘输入。已知m和n的值都不超过10。void InputArray(int *p, int m, int n);int FindMax(int *p, int m, int n, int *pRow, int *pCol);//函数返回最大值,pRow和pCol分别返回最大值所在的行列下标
例如,程序的1次运行结果如下: Input n: 3,4↙
Input 3*4 array: 1 2 3 4↙ 5 6 7 8↙ 9 0-1-2↙
max=9,row=2,col=0 输入格式: 提示信息: “Input m,n:n” 输入数组维数:“%d,%d” 提示信息: “Input %d*%d array:n” 输入数组元素:“%d” 输出格式: “max=%d,row=%d,col=%dn” 输入样例: 输出样例:
时间限制:500ms内存限制:32000kb
#include “stdio.h” int main(){ int a[11][11],i,j,m,n,maxi,maxj,max;printf(“Input m,n:n”);scanf(“%d,%d”,&m,&n);printf(“Input %d*%d array:n”,m,n);for(i=1;i<=m;i++)for(j=1;j<=n;j++)scanf(“%d”,&a[i][j]);max=a[1][1];maxi=1;maxj=1;for(i=1;i<=m;i++)for(j=1;j<=n;j++)if(max< a[i][j]){max=a[i][j];maxi=i;maxj=j;} printf(“max=%d,row=%d,col=%dn”,max,maxi-1,maxj-1);
return 0;} 冒泡排序(4分)题目内容:
采用冒泡法进行升序排序法的基本原理是:对数组中的n个数执行n-1遍检查操作,在每一遍执行时,对数组中剩余的尚未排好序的元素进行如下操作:对相邻的两个元素进行比较,若排在后面的数小于排在前面的数,则交换其位置,这样每一遍操作中都将参与比较的数中的最大的数沉到数组的底部,经过n-1遍操作后就将全部n个数按从小到大的顺序排好序了。程序的某次运行结果如下: Input n:10↙
Input 10 numbers:2 9 3 4 0 6 8 7 5 1↙
Sorting results: 0 1 2 3 4 5 6 7 8 9 输入格式: “%d” 输出格式:
输入数据个数提示:“Input n:” 输入数据提示:“Input %d numbers:” 输出提示:“Sorting results:” 输出格式:“% 4d” 输入样例: 输出样例: 时间限制:500ms内存限制:32000kb
#include “stdio.h” int main(){ int a[110],n,i,j;printf(“Input n:”);scanf(“%d”,&n);printf(“Input %d numbers:”,n);for(i=1;i<=n;i++)scanf(“%d”,&a[i]);for(i=1;i<=n-1;i++)for(j=1;j<=n-1;j++)if(a[j]>a[j+1]){ a[j]+=a[j+1];a[j+1]=a[j]-a[j+1];a[j]=a[j]-a[j+1];} printf(“Sorting results:”);for(i=1;i<=n;i++)printf(“% 4d”,a[i]);
return 0;} 删除字符串中与某字符相同的字符(4分)题目内容:
在字符串中删除与某字符相同的字符,要求用字符数组作函数参数。程序运行结果示例: Input a string: hello, my friend!↙ Input a character:!↙
Results:hello, my friend 输入格式: 字符串输入用 gets()函数
单个字符输入用 getchar()函数 输出格式:
输入字符串的提示信息: “Input a string:n” 输入单个字符的提示信息: “Input a character:n” 输出格式: “Results:%sn” 输入样例: 输出样例:
时间限制:500ms内存限制:32000kb
#include “stdio.h” int main(){ char a[100],c;int i;printf(“Input a string:n”);gets(a);printf(“Input a character:n”);c=getchar();i=0;printf(“Results:”);while(a[i]!=' '){ if(a[i]!=c)printf(“%c”,a[i]);i++;} printf(“n”);
return 0;} 求最大数和最小数的最大公约数(4分)题目内容:
从键盘输入10个正整数,求出最大数,最小数,以及他们的最大公约数。要求用数组实现。程序运行结果示例1: Input 10 numbers: 15 23 56 87 94 105 78 19 22 43↙ maxNum=105 minNum=15 15
程序运行结果示例2: Input 10 numbers: 33 1 2 9 8 7 5 4 0 10↙ maxNum=33 minNum=0
输入格式: “%d” 输出格式:
输入提示信息:“Input 10 numbers:n” 最大数输出格式:“maxNum=%dn” 最小数输出格式:“minNum=%dn” 最大公约数输出格式:“%d” 输入样例: 输出样例:
时间限制:500ms内存限制:32000kb
#include “stdio.h” int gcd(int i,int j){ if(i< 1||j< 1)return-1;if(i%j==0)return j;else return gcd(j,i%j);} int main(){ int a[11],i,max,min,ans;printf(“Input 10 numbers:n”);for(i=1;i<=10;i++)scanf(“%d”,&a[i]);max=a[1];min=a[1];for(i=2;i<=10;i++){ if(a[i]>max)max=a[i];if(a[i]< min)min=a[i];} ans=gcd(max,min);printf(“maxNum=%dn”,max);printf(“minNum=%dn”,min);if(ans!=-1)printf(“%d”,ans);
return 0;} 百万富翁的换钱计划(4分)题目内容:
有一天,一位百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,陌生人对百万富翁说:“我每天给你10万元,而你第一天只需给我1分钱,第二天我仍给你10万元,你给我2分钱,第三天我仍给你10万元,你给我4分钱„„。你每天给我的钱是前一天的两倍,直到满一个月(30天)为止”,百万富翁很高兴,欣然接受了这个契约。请编程计算在这一个月中陌生人总计给百万富翁多少钱,百万富翁总计给陌生人多少钱。输入格式: 无
输出格式:
输出百万富翁给陌生人的钱: “to Stranger: %.2f yuann” 输出陌生人给百万富翁的钱: “to Richman: %.2f yuann” 输入样例: 输出样例:
时间限制:500ms内存限制:32000kb
#include“stdio.h” int main(){ int i;double st=0,mi=0,mo=1;for(i=1;i<=30;i++){ st+=mo;mi+=10;mo*=2;} st/=100;mi*=10000;printf(“to Stranger: %.2lf yuann”,st);printf(“to Richman: %.2lf yuann”,mi);
return 0;} 用计数控制的循环实现正数累加求和(4分)题目内容: 输入一些整数,编程计算并输出其中所有正数的和,输入负数时不累加,继续输入下一个数。输入零时,表示输入数据结束。要求最后统计出累加的项数。程序运行结果示例: Input a number: 1↙
Input a number: 3↙
Input a number: 4↙
Input a number: 2↙
Input a number:-8↙ Input a number:-9↙
Input a number: 0↙
sum=10,count=4
输入格式: “%d” 输出格式:
输入提示信息: “Input a number:n” 输出格式: “sum=%d,count=%dn” 输入样例: 输出样例:
时间限制:500ms内存限制:32000kb
#include“stdio.h” int main(){ int i,ans=0,c=0;do { printf(“Input a number:n”);scanf(“%d”,&i);if(i>0){ans+=i;c++;} }while(i!=0);printf(“sum=%d,count=%dn”,ans,c);
return 0;} 平方根表(4分)题目内容:
按如下格式输出100以内整数的平方根表。
输入格式: 无 输出格式:
输出表头: “% 7d” 输出每行的开头数字: “%d” 输出第m行n列中的值:“%7.3f” 输入样例: 输出样例:
时间限制:500ms内存限制:32000kb
#include“stdio.h” #include“math.h” int main(){ int i,j;for(i=0;i<=9;i++)printf(“% 7d”,i);printf(“n”);for(i=0;i<=9;i++){ printf(“%d”,i);for(j=0;j<=9;j++)printf(“%7.3f”,sqrt(i*10+j));printf(“n”);}
return 0;} 最大公约数(4分)题目内容:
按照如下函数原型编写子函数计算正整数a和b的所有公约数。第一次调用,返回最大公约数。以后只要再使用相同参数调用,每次返回下一个小一些的公约数。无公约数时,函数CommonFactors()返回-1,主函数中不输出任何信息。函数原型: int CommonFactors(int a, int b)程序运行结果示例1:
Input a and b: 100,50↙
Common factor 1 is 50 Common factor 2 is 25 Common factor 3 is 10 Common factor 4 is 5 Common factor 5 is 2 Common factor 6 is 1
程序运行结果示例2:
Input a and b: 7,-3↙
输入格式: “%d,%d” 输出格式:
输出公约数: “Common factor %d is %dn” 输入提示信息:“Input a and b:n” 输入样例: 输出样例:
时间限制:500ms内存限制:32000kb
#include“stdio.h” int main(){ int i,j,k,ans=0;printf(“Input a and b:n”);scanf(“%d,%d”,&i,&j);if(i< 0||j< 0)return 0;for(k=i;k>=1;k--)if(i%k==0&&j%k==0){ ans++;printf(“Common factor %d is %dn”,ans,k);}
return 0;}
实验一数据类型和表达式实验(验证性实验
2学时)
一、目的要求:
(1)了解C语言中数据类型的意义。(2)理解常用运算符的意义。
(3)掌握C语言表达式的运行规则。(4)编写实验报告。
二、实验内容(参考实验指导书):
1、计算由键盘输入的任何两个双精度数据的平均值。(1)算法描述:将数据代入公式(a+b)/2,输出结果。(2)源代码及说明:
#include
scanf(“%lf %lf”,&a,&b);
printf(“%lf”,(a+b)/2);}
(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
3、编写一个C语言程序,测试下列各表达式:
i, j
i + 1 , j + 1 i++ , j++ ++i , ++j i+++++j(1)算法描述:定义变量并将其分别代入各表达式中,输出结果。(2)源代码及说明:
#include
printf(“%d %dn”,i+1,j+1);printf(“%d %dn”,i++,j++);
i=2,j=3;printf(“%d %dn”,++i,++j);
i=2,j=3;
printf(“%dn”,(i++)+(++j));
}(3)测试数据:2 3(4)运行结果:2 3;3 4;2 3;3 4;6(5)问题及解决方法:
问题:没有注意变量的使用。解决方法:重新定义变量。
4、输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。
interest = money(1+rate)yearmoney输出结果。
(2)源代码及说明:
#include
int year=0;
scanf(“%lf %lf”,&money,&rate);
scanf(“%d”,&year);interest=money*pow(1+rate, year)-money;printf(“%.2lf”,interest);}(3)测试数据:100 0.1 2(4)运行结果:21.00(5)问题及解决方法:
问题:求利率的多次幂
解决方法:利用math 函数库里的pow()函数
5、输入华氏温度,输出对应的摄氏温度。计算公式如下:
c = 5 *(f32)/ 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
{
int i;
printf(“请输入一个整数:n”);
scanf(“%d”,&i);
if(i>0)
{
printf(“ + n”);
}
else if(i=0)
printf(“0n”);
else
printf(“(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
scanf(”%f“,&x);if(x<0){
y=0;
printf(”应交水费%f 元n“,y);} else if(x>=0&&x<=15){
y=4*x/3;
printf(”应交水费%f 元n“,y);} else
{
y=2.5 * x-10.5;
printf(”应交水费%f 元n“,y);} }(3)测试数据:-1
20(4)运行结果:0.000000 10.666667 35.200000(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
switch(score/10)
{
case 10:
} case 9:printf(”优秀“);break;
case 8:printf(”良好“);break;case 7:printf(”中等n“);break;
case 6:printf(”及格n“);break;case 5: case 4: case 3: case 2: case 1: case 0:printf(”不及格n“);break;default: printf(”你输入的成绩非法n“)} printf(”你输入的成绩非法n“);}(3)测试数据:98
-22(4)运行结果:优秀良好中等及格不及格输入不合法输入不合法(5)问题及解决方法:
问题:大于100的分数未给出明确结果 解决方法;在代码中加上对高于100分的限制
4、运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:
s = 250km
没有折扣
250km ≤ s < 500km 2%折扣
500km ≤ s < 1000km 5%折扣
1000km ≤ s < 2000km8%折扣 2000km ≤ s < 3000km10%折扣
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
if(s<250){
d=0.0;} else if(s>=250&&s<500){
d=0.02;} else if(s>=500&&s<1000){
d=0.05;} 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“,money);}(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
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(”%d %d %dn“,x,y,z);
}
} } }(3)测试数据:(4)运行结果:3 2 1(5)问题及解决方法:无
2、编写一个程序打印如下对称图形(行数由键盘输入1~9范围的值),例如下面是输入的数字4时的情形:
4444444
33333
222
222
33333
4444444(1)算法描述:
for(i=number;i>0;i--){
for(k=number;k>=i;k--){
printf(”“);
}
for(j=0;j
printf(”%d“,i);
}
for(i=2;i<=number;i++){
for(k=number;k>=i;k--)
}
for(j=0;j
printf(”%d“,i);
}(2)源代码及说明: #include
for(k=number;k>=i;k--)
{
printf(”“);
}
for(j=0;j
{
printf(”%d“,i);
}
printf(”n“);
} } for(i=2;i<=number;i++){ for(k=number;k>=i;k--){
printf(”“);} for(j=0;j
printf(”%d“,i);}
printf(”n“);}(3)测试数据:4(4)运行结果:4444444
33333
222
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
int x;for(x=1;x<1000;x++){
if(x%5==2 && x%7==3 && x%3==1)
printf(”%dn“,x);} }(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
if((x!='A')+(x=='C')+(x=='D')+(x!='D')==3)
printf(”%c做了好事n“,x);} }(3)测试数据:
(4)运行结果:C做了好事(5)问题及解决方法:无
三、实验总结:通过这几个实验基本掌握了循环的用法和循环嵌套的使用。
实验四数组程序设计实验(验证性综合性实验
4学时)
一、目的要求:
(1)掌握一维和二维数组的使用技巧。(2)编写实验报告。
二、实验内容(参考实验指导书):
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
int st =0;int m=N-1;for(i=0;i scanf(”%d“,&a[i]);} for(i=0;i if(a[i]<0) { b[j++]=a[i]; st++; } if(a[i]>0) { b[m--]=a[i]; end=m; } } for(i=st;i b[i]=0;} for(j=0;j printf(”%d “,b[j]);} }(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 if(n break;} k = i;for(i=9;i>=k;i--){ a[i+1]=a[i];} a[k]=n;for(i=0;i<9;i++){ printf(”%4d“,a[i]);} }(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(”%d“,&a[i][j]);交换数组对应数值并输出 for(i=0;i<5;i++) for(j=0;j<3;j++) b[i][j]=a[j][i];printf(”%d “,b[i][j])(2)源代码及说明: #include for(j=0;j<3;j++) { b[i][j]=a[j][i]; printf(” %d“,b[i][j]); } printf(”n“);} }(3)测试数据:1 2 3 4 5 9 9(4)运行结果:1 5 1 3 5 7 9(5)问题及解决方法:无 4、编程实现随机产生10个位于区间[100 200]互不相等的整数,并将其按降序排序和输出。(1)算法描述: 产生随机数 #include a[i]=random(200); printf(”%4d“,a[i]);} 进行排序(选择)for(i=0;i<=9;i++){ for(j=i+1;j<10;j++) { if(a[i] { k=a[i]; a[i]=a[j]; a[j]=k; } } }(2)源代码及说明: #include int x;int a[10];int i,j,m = 1;int temp;srand((unsigned)time(NULL));while(1) { for(i=0;i<10;i++){ x =100+ rand()% 101;for(j=0;j if(a[j] == x) { m == 0; } } if(m == 1){ a[i]=x;} else { i--;} } break;} for(i=0;i<10;i++){ printf(”%d “,a[i]);} printf(”n“);printf(”降序排列为:n“);for(i=0;i<9;i++){ for(j=i+1;j<10;j++){ if(a[i] { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } for(i=0;i<10;i++){ printf(”%d “,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%10; n=n/10; } return d;} 用scanf输入数,调用函数int digit输出结果(2)源代码及说明: #include m= n%10; n=n/10;} return m;} main(){ int x;x = digit(1234,2);printf(”%dn“,x);}(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 return 0;} for(i=2;i<=n-1;i++){ if(n%i==0){ return 0; } } return 1;} main(){ int r;r = isprime(5); } printf(”%dn“,r);r = isprime(8);printf(”%dn“,r);(3)测试数据:2 4(4)运行结果:1 0 (5)问题及解决方法:无 3、写一个函数reverse(char s[]),将字符串s[]中的字符串倒序输出。试分别用递归和非递归两种形式编写。(1)算法描述: 递归:递归的出口: if(n==1) printf(”%c “,s[0]);return;递归的形式 printf(”%c “,s[n-1]); s[n-1]=' '; reverse(s);非递归: 利用倒序特点,进行交换 for(i=0;i temp=s[i];s[i]=s[n-1-i];s[n-1-i]=temp;}(2)源代码及说明: 递归: void reverse(char s[]){ int n;n=strlen(s);if(n==1){ printf(”%c “,s[0]); return;} printf(”%c “,s[n-1]);s[n-1]=' ';reverse(s);} 非递归: void reverse(char s[]){ } int n;int i,j;char temp;n=strlen(s);if(n==1){ printf(”%c “,s[0]);return;} for(i=0;i temp=s[i];s[i]=s[n-1-i];s[n-1-i]=temp;} for(i=0;i (5)问题及解决方法: 4、写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性。(5)一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需要通过子函数实现,输出的时候要求5个数字一行。(1)算法描述: 用递归和非递归写出函数reverse(char s[])递归:递归的出口: if(n==1) printf(”%c “,s[0]);return;递归的形式 printf(”%c “,s[n-1]); s[n-1]=' '; reverse(s);非递归: 利用倒序特点,进行交换 for(i=0;i temp=s[i];s[i]=s[n-1-i];s[n-1-i]=temp;} 写出主函数,调用函数reverse(char s[])(2)源代码及说明: 递归: #include printf(”%c “,s[0]); return;} printf(”%c “,s[n-1]);s[n-1]=' ';reverse(s);} int main(){ char text[10]={'a','b','c','d','e','f','g','h','m','o'};int i,n=10;for(i=0;i printf(”%c “,text[i]);} printf(”n“); } printf(”倒序为:n“);reverse(text);非递归: #include printf(”%c “,s[0]); return;} for(i=0;i temp=s[i]; s[i]=s[n-1-i]; s[n-1-i]=temp;} for(i=0;i printf(”%c “,s[i]);} } int main(){ char text[10]={'a','b','c','d','e','f','g','h','m','o'};int i,n=10;for(i=0;i printf(”%c “,text[i]);} printf(”n“);printf(”倒序为:n“);reverse(text);}(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] 若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(”n合计:%d个n“,cnt);(2)源代码及说明: #include if(hw(i)) { if(isprime(i)==1) { cnt++; } } } printf(”n合计:%d个n“,cnt);} int isprime(int n){ int i=2;while(i<=sqrt(n)){ if(n%i==0) return 0; i++;} return 1;} int hw(int n){ int m=0;int t=n;while(t){ m=m*10+t%10; } t/=10;} return m==n;(3)测试数据: (4)运行结果:93个(5)问题及解决方法:无 三、实验总结:掌握了函数中参数传递的两种方式和函数的相互调用。 实验六指针实验 (验证性综合性实验 4学时) 一、目的要求: (1)用指针作为函数参数完成字符串的传递。(2)掌握函数中参数传递的两种方式。(3)编写实验报告。 二、实验内容(参考实验指导书): (1)编写一个函数char *delk(char *sp),把sp所指向的字符串中所有的“$”字符删除,并把处理后的字符串指针返回。(1)算法描述: char *b=”$keidk$kd“;char *a=(char*)malloc(sizeof(b)); delk(b,a);(2)源代码及说明: #include if(*p!='$'){ *q=*p; q++; } p++;} } main(){ char *b=”$keidk$kd“;char *a=(char*)malloc(sizeof(b)); delk(b,a);printf(”%sn“,a);}(3)测试数据:$abcd$efgh(4)运行结果:abcdefgh(5)问题及解决方法:无 2、写一个函数int find(char *s1, char *s2),函数find的功能是查找串s1中是否包含指定的词(s2指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的空格符分隔。(1)算法描述: char s1[]=”abc bc cd ef“;char s2[]=”we";int a=find(s1,s2);(2)源代码及说明: #include while(*p==' '){ p++; } q=p; while(*q!=' '&&*q!=' '){ q++; } char c=*q; *q=' '; r=strcmp(p,s2); k=k+1; if(r==0){ return k; } p=q+1; } if(r!=0){ 学号:__________ 姓名:__________ 班级:__________ 日期:__________ 指导教师:__________ 成绩:__________ 实验一 上机操作初步和简单的C程序设计 一、实验目的1、熟悉C语言运行环境Turbo C++3.02、会简单的程序调试 3、熟悉C语言各种类型数据的输入输出函数的使用方法 4、掌握顺序结构程序设计 二、实验内容 1、上机运行本章3个例题,熟悉所用系统的上机方法与步骤。(习题1.7) 2、编写一个C程序,输入a、b、c 3个值,输出其中最大者。(习题1.6) 3、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。注意:在Trubo C++ 3.0中不能输入汉字,只能输入英文或拼音。(习题4.8) 4、运行如下程序,写出运行结果。第一┆范文网www.xiexiebang.com整理该文章,版权归原作者、原出处所有...#include void main() { int a=1,b=2; a=a+b;b=a-b;a=a-b; printf(“%d,%dn”,a,b); } 三、实验步骤与过程 四、程序调试记录 C语言程序设计(B) (2010-2011-2) 实验报告 教学班级: 学号: 姓名: 课程教师: 实验辅导教师: 江西理工大学 自由编辑的程序 一、实验前的源程序: //任意整数的叠加 #include 实验错误报告: [Error] D:Program FilesC-Free 4temp未命名10.cpp:7: parse error before `for' [Error] D:Program FilesC-Free 4temp未命名10.cpp:7: parse error before `)' 构建中止 未命名10: 2 个错误, 0 个警告 实验后的源程序: //任意整数的叠加 #include int i,j,sum=0;printf(“please input a int numbern”);scanf(“%d”,&j);for(i=0;i<=j;i++)sum=sum+i;printf(“此数的叠加=%dn”,sum);} 二、实验前的源程序: /*小写字母转大写字母*/ #include 江西理工大学 } c2='s';c1=c1-32;c2=c2-32;printf(“%c,%cn”,c1,c); 实验错误报告: [Error] D:Program FilesC-Free 4temp未命名11.cpp:9: `c' undeclared(first use this function)[Error] D:Program FilesC-Free 4temp未命名11.cpp:9:(Each undeclared identifier is reported only once [Error] D:Program FilesC-Free 4temp未命名11.cpp:9: for each function it appears in.)构建中止 未命名11: 3 个错误, 0 个警告 实验后的源程序: /*小写字母转大写字母*/ #include 三、实验前的源程序: /*查看某一年是否为闰年*/ #include { if(year%100==0) { if(year%400==0) i=1; else 江西理工大学 i=0; } else i=1; } else i=0;if(i) printf(“%d 是闰年n”,year);else printf(“%d 不是闰年n”,year);} 实验错误报告: [Error] D:Program FilesC-Free 4temp未命名14.cpp:15: parse error before `else' [Error] D:Program FilesC-Free 4temp未命名14.cpp:25: parse error at end of input 构建中止 未命名14: 2 个错误, 0 个警告 实验后的源程序: /*查看某一年是否为闰年*/ #include { if(year%100==0) { if(year%400==0) i=1; else i=0; } else i=1; } else i=0;if(i) 江西理工大学 printf(“%d 是闰年n”,year);else printf(“%d 不是闰年n”,year);} 数据的输入和输出 四、程序改错题 改错前的源程序;#include #include 改错前的源程序;#include 江西理工大学 #include long x=7654123;x*=10;printf(“x=%7d”,x);} 改错前的源程序: #include #include 五、程序编写题:已知char ch’b’;int i=3 ,j=5;float x=22.354,y=435.6789;根据下面的输出结果编写程序。ch =’b’,ASCII=98 i=3□□□□□□j=5 x=22.35□□□y=435.68 实验前的源程序: #include 江西理工大学{ char ch='b';int i=3,j=5;float x=22.354,y=435.6789;printf(“ch='%c',ASCII=%dn”,ch,ch);printf(“i=%d j=%dn”,i,j);printf(“x=%.2f y=%.2fn”,x,y);} 实验错误报告:无 实验后的源程序: #include j=%dn”,i,j);printf(“x=%.2f y=%.2fn”,x,y);} 六、从键盘输入一行字符,统计其中小写字母、大写字母和其它字符的个数: 实验前的源程序: #include “stdio.h” void main(){ printf(“请任意输入一串字符:n”); char ch,sum1=0,sum2=0,other=0; ch=getchar(); while(c!='n') { if(c>='A'&&c<='Z')sum1++; else if(c>='a'&&c<='z')sum2++; else other++; c=getchar(); } printf(“大写字母的个数:%dn”,sum1);printf(“小写字母的个数:%dn”,sum2); 江西理工大学printf(“其他字符母个数:%dn”,other);} 实验错误报告: [Error] D:Program FilesC-Free 4temp未命名7.cpp:7: `c' undeclared(first use this function)[Error] D:Program FilesC-Free 4temp未命名7.cpp:7:(Each undeclared identifier is reported only once [Error] D:Program FilesC-Free 4temp未命名7.cpp:7: for each function it appears in.)构建中止 未命名7: 3 个错误, 0 个警告 实验后的源程序: #include “stdio.h” void main(){ printf(“请任意输入一串字符:n”); char ch,sum1=0,sum2=0,other=0; ch=getchar(); while(ch!='n') { if(ch>='A'&&ch<='Z')sum1++; else if(ch>='a'&&ch<='z')sum2++; else other++; ch=getchar(); } printf(“大写字母的个数:%dn”,sum1);printf(“小写字母的个数:%dn”,sum2);printf(“其他字符母个数:%dn”,other);} 七、使用以下公式求∏的近似值,要求精确到最后一项的绝对值小于10e-4 ∏/4=1-1/3+1/5-1/7+…… 实验前的源程序: #include “stdio.h” #include “math.h” main(){ 江西理工大学 } float sum=0;int i,j;for(i=1;;i++){ j=2*i-1;if(1.0/j>0.0001){ sum+=pow(-1,i+1)*(1.o/j);continue;break;} printf(“∏=%fn”,sum*4.0); 实验错误报告: [Error] D:Program FilesC-Free 4temp未命名9.cpp:13: nondigits in number and not hexadecimal [Error] D:Program FilesC-Free 4temp未命名9.cpp:19: parse error at end of input 构建中止 未命名9: 2 个错误, 0 个警告 实验后的源程序: #include “stdio.h” #include “math.h” main(){ float sum=0;int i,j;for(i=1;;i++){ j=2*i-1;if(1.0/j>0.0001){ sum+=pow(-1,i+1)*(1.0/j);continue;} break;} printf(“∏=%fn”,sum*4.0);} 八、用选择法对10个整数排序: 实验前的源程序: 江西理工大学#include scanf(“%d”,a[i]);} printf(“n”);for(i=0;i<10;i++)for(j=0;j<10-j;j++){ if(a[j]>a[j+1]) { k=a[j]; a[j]=a[j+1]; k=a[j+1];} printf(“这10个整数从小到大排列为:”);for(j=0;j<10;j++){ printf(“%d ”,a[j]);} printf(“n”);printf(“这10个整数从大到小排列为:”);for(j=9;j>=0;j--){ printf(“%d ”,a[j]);} 实验错误报告: [Error] D:Program FilesC-Free 4temp未命名1.cpp:33: parse error at end of input 构建中止 未命名1: 1 个错误, 0 个警告 实验后的源程序: //用选择法对10个整数排序 #include 江西理工大学 int i,j,k;for(i=0;i<10;i++){ scanf(“%d”,a[i]);} printf(“n”);for(i=0;i<10;i++)for(j=0;j<10-j;j++){ if(a[j]>a[j+1]){ k=a[j]; a[j]=a[j+1]; k=a[j+1];} } printf(“这10个整数从小到大排列为:”);for(j=0;j<10;j++){ printf(“%d ”,a[j]);} printf(“n”);printf(“这10个整数从大到小排列为:”);for(j=9;j>=0;j--){ printf(“%d ”,a[j]);} } 九、求一个3*3的整数矩阵对角线元素之积: 实验前的源程序: #include scanf(“%d”,&a[i][j])} for(i=0;i<3;i++) 江西理工大学 { for(j=0;j<3;j++) { printf(“%d ”,a[i][j]); } printf(“n”); } printf(“n”); for(i=0;i<3;i++) { for(j=0;j<3;j++) if(i=j) ji*=a[i][j]; printf(“主对角线的积为:%dn”,ji); } } 实验错误报告: [Error] D:Program FilesC-Free 4temp未命名4.cpp:11: parse error before `}' 构建中止 未命名4: 1 个错误, 0 个警告 实验后的源程序: #include scanf(“%d”,&a[i][j]);} for(i=0;i<3;i++){ for(j=0;j<3;j++) { printf(“%d ”,a[i][j]); } printf(“n”); } 江西理工大学 printf(“n”); for(i=0;i<3;i++) { for(j=0;j<3;j++) if(i=j) ji*=a[i][j]; printf(“主对角线的积为:%dn”,ji); } } 十、将一个数组中的值按你需从新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。 实验前的源程序: #include scanf(“%d”,&a[i]);} for(i=0;i t=a[i]; a[i]=a[j-i-1]; t=a[j-i-1];} printf(“该数组逆序排列为:”); for(i=0;i printf(“%d ”,a[i]);printf(“n”);} 实验错误报告: [Error] D:Program FilesC-Free 4temp未命名3.cpp:25: parse error at end of input 构建中止 未命名3: 1 个错误, 0 个警告 江西理工大学实验后的源程序: #include scanf(“%d”,&a[i]);} for(i=0;i t=a[i]; a[i]=a[j-i-1]; a[j-i-1]=t;} printf(“该数组逆序排列为:”); for(i=0;i printf(“%d ”,a[i]);} printf(“n”);} 江西理工大学 C语言程序设计(B) (2010-2011-2) 实验报告 教学班级: 学号: 姓名: 课程教师:王华金 实验辅导教师:王华金 江西理工大学P123-- 五、1、编写函数,找出5*5数组对角线上元素的最小值,并在主函数中调用它。要求元素的值通过键盘输入。 实验前的源程序: #include for(j=0;j<5;j++) if(i==j) if(p[i][j] return min;} void main(){ int i,j,m,a[5][5];printf(“请输入a[5][5]:n”);for(i=0;i<5;i++)for(j=0;j<5;j++)scanf(“%d”,&a[i][j]);printf(“a[5][5]:n”);for(i=0;i<5;i++){for(j=0;j<5;j++)printf(“%4d”,a[i][j]);printf(“n”);} m=func(a);printf(“主对角线上元素的最小值为:%dn”,m);} 实验错误报告: [Error] C:Users陶鑫DocumentsC-FreeTemp未命名4.cpp:13: error: `main' must return `int' [Warning] C:Users陶鑫DocumentsC-FreeTemp未命名4.cpp:27:2: warning: no newline at end of file 构建中止 未命名4: 1 个错误, 1 个警告 江西理工大学 实验后的源程序: #include for(j=0;j<5;j++) if(i==j) if(p[i][j] return min;} main(){ int i,j,m,a[5][5];printf(“请输入a[5][5]:n”);for(i=0;i<5;i++)for(j=0;j<5;j++)scanf(“%d”,&a[i][j]);printf(“a[5][5]:n”);for(i=0;i<5;i++){for(j=0;j<5;j++)printf(“%4d”,a[i][j]);printf(“n”);} m=func(a);printf(“主对角线上元素的最小值为:%dn”,m);} P123-- 五、3、编写从整形数组中检索给定数值的函数,若找到则输出该数值在数组中的位置。 实验前的源程序: #include “stdio.h” int Find(int array[],int Array size,int num){ int i;for(i=0;i 江西理工大学int main(){ int a[]={1,2,3,4,5};num=4,n=5,index;index=find(a,5,num);if(index)printf(“%d在数组中第%d位置”,num,index);else printf(“数组中没有这个数!”);} 实验错误报告: [Error] C:Users陶鑫DocumentsC-FreeTemp未命名3.cpp:2: error: expected `,' or `...' before “size” [Error] C:Users陶鑫DocumentsC-FreeTemp未命名3.cpp:5: error: expected `;' before “size” [Error] C:Users陶鑫DocumentsC-FreeTemp未命名3.cpp:5: error: `size' was not declared in this scope [Error] C:Users陶鑫DocumentsC-FreeTemp未命名3.cpp:5: error: expected `)' before ';' token [Error] C:Users陶鑫DocumentsC-FreeTemp未命名3.cpp:5: error: expected `;' before ')' token [Error] C:Users陶鑫DocumentsC-FreeTemp未命名3.cpp:13: error: `num' was not declared in this scope [Error] C:Users陶鑫DocumentsC-FreeTemp未命名3.cpp:13: error: `n' was not declared in this scope [Error] C:Users陶鑫DocumentsC-FreeTemp未命名3.cpp:13: error: `index' was not declared in this scope 江西理工大学[Error] C:Users陶鑫DocumentsC-FreeTemp未命名3.cpp:14: error: `find' was not declared in this scope [Warning] C:Users陶鑫DocumentsC-FreeTemp未命名3.cpp:19:2: warning: no newline at end of file 实验后的源程序: #include “stdio.h” int Find(int Array[], int Array_size, int num){ int i;for(i=0;i P123-- 五、6、输入10名学生5门课的成绩,分别用函数求:(1)每门课的平均分。(2)找出最高的分数所对应的学生和成绩。 实验前的源程序: #include for(i=0;i<10;i++) { printf(“输入第%d个学生五门课的成绩:”,i+1); for(j=0;j<5;j++) scanf(“%f”,&a[i][j]); } } void aver_cour(float a[10][5])//课程的平均分 江西理工大学 { int i,j; float sum; for(i=0;i<5;i++) { sum=0; for(j=0;j<10;j++) sum+=a[j][i]; printf(“第%d门课的平均成绩为:%6.2fn”,i+1,sum/10); } } void highest(float a[10][5])//查找最高分 { int i,j,flag1,flag2;float max=0; for(i=0;i<10;i++) { for(j=0;j<5;j++) { if(max { max=a[i][j]; flag1=i; flag2=j; } } } printf(“最高分对应的是学生:%d课程:%dn”,flag1+1,flag2+1);} void main(){ float a[10][5]; input(a); aver cour(a); highest(a); } 实验错误报告: [Error] C:Users陶鑫DocumentsC-FreeTemp未命名6.cpp:35: error: `main' must return `int' [Error] C:Users陶鑫DocumentsC-FreeTemp未命名6.cpp:38: error: `aver' was not declared in this scope [Error] C:Users陶鑫DocumentsC-FreeTemp未命名6.cpp:38: error: expected `;' before “cour” 江西理工大学[Warning] C:Users陶鑫DocumentsC-FreeTemp未命名6.cpp:40:4: warning: no newline at end of file 构建中止 未命名6: 3 个错误, 1 个警告 实验后的源程序: #include for(i=0;i<10;i++) { printf(“输入第%d个学生五门课的成绩:”,i+1); for(j=0;j<5;j++) scanf(“%f”,&a[i][j]); } } void aver_cour(float a[10][5])//课程的平均分 { int i,j; float sum; for(i=0;i<5;i++) { sum=0; for(j=0;j<10;j++) sum+=a[j][i]; printf(“第%d门课的平均成绩为:%6.2fn”,i+1,sum/10); } } void highest(float a[10][5])//查找最高分 { int i,j,flag1,flag2;float max=0; for(i=0;i<10;i++) { for(j=0;j<5;j++) { if(max { max=a[i][j]; flag1=i; flag2=j; } } } printf(“最高分对应的是学生:%d课程:%dn”,flag1+1,flag2+1);} main() 江西理工大学 { float a[10][5]; input(a); aver_cour(a); highest(a);} P173- 五、2、对具有10个元素的char类型的数组,从下标为6的元素开始全部设置'#'号,保持前6个元素中的内容不变。 实验前的源程序: #include“stdio.h” main(){int i;char a[10]={'h','e','l','l','o','j','p','i','j','d'};for(i=0;i<10;i++)printf(“%c”,a[i]);printf(“n”); for(pi=(a+6);pi<(a+10);pi++) *pi='#';for(i=0;i<10;i++)printf(“%c”,a[i]);} 实验错误报告: [Error] C:Users陶鑫DocumentsC-FreeTemp未命名1.cpp:8: `pi' undeclared(first use this function)[Error] C:Users陶鑫DocumentsC-FreeTemp未命名1.cpp:8:(Each undeclared identifier is reported only once [Error] C:Users陶鑫DocumentsC-FreeTemp未命名1.cpp:8: for each function it appears in.) 构建中止 未命名1: 3 个错误, 0 个警告 江西理工大学 实验后的源程序: #include“stdio.h” main(){int i;char a[10]={'h','e','l','l','o','j','p','i','j','d'}, *pi;for(i=0;i<10;i++)printf(“%c”,a[i]);printf(“n”); for(pi=(a+6);pi<(a+10);pi++) *pi='#';for(i=0;i<10;i++)printf(“%c”,a[i]);} P173- 五、5、输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换,并输出对换后的10个数。 实验前的源程序: #include int max,min; max=min=0;for(i=0;i<10;i++){ if(*(p+i)>*(p+max))max=i; if(*(p+i)<*(p+min))min=i;} m=p[0];p[0]=p[max];p[max]=m;m=p[9];p[9]=p[min];p[min]=m;} void Show(int *p){ int i=0;printf(“交换后结果如下:n”);while(i<10) printf(“%d ”,*(p+i++));printf(“n”);} 江西理工大学void main(){ int data[10];int i=0;printf(“请输入十个数:n”);while(i<10) scanf(“%d”,data+i++)Deal(data);Show(data);} 实验错误报告: [Error] C:Users陶鑫DocumentsC-FreeTemp未命名7.cpp:24: error: `main' must return `int' [Error] C:Users陶鑫DocumentsC-FreeTemp未命名7.cpp:30: error: expected `;' before “Deal” [Warning] C:Users陶鑫DocumentsC-FreeTemp未命名7.cpp:32:2: warning: no newline at end of file 构建中止 未命名7: 2 个错误, 1 个警告 实验后的源程序: #include 江西理工大学} void Show(int*p){ int i=0;printf(“交换后结果如下:n”);while(i<10)printf(“%d”,*(p+i++));printf(“n”);} void main(){ int data[10];int i=0;printf(“请输入十个数:n”);while(i<10)scanf(“%d”,data+i++);Deal(data);Show(data);} P173- 五、7、编写小学生做加、减、乘、除四则运算的程序。例如在操作系统下,键入cal 15*15< 回车>,则在屏幕上显示15*15=225.实验前的源程序: 实验错误报告: 实验后的源程序: #include int i,j,k;char *f[2];int b[2];scanf(“%s”,&f[1]);scanf(“%d”,&b[1]); 江西理工大学 江西理工大学12 } scanf(“%s”,&f[2]);scanf(“%d”,&b[2]);i=b[1];j=b[2];k=i*j;printf(“%d*%d=%d”,i,j,k); 实验一 熟悉C语言程序的运行环境 一、实验目的 1、了解在该系统上如何编辑、编译、连接和运行一个C 程序; 2、通过运行简单的C程序,初步了解C程序的特点。 二、实验预习 1、认真阅读简单的C程序介绍,C程序上机步骤部分内容; 2、编写好所需要的程序,程序的书写应该清楚整洁,一般检查应该是没有明显的错误。 如果在程序中有疑问的地方,可以标记起来,以便于上机调试时予以注意。初学者特别忌讳 上机前自己不编写程序,到时随便地抄别人的程序。 三、实验指导 1、输入并运行一个简单的程序,从而熟悉所用系统的上机方法与步骤。(1)选择File->New,使编辑窗口变成空白(2)输入下面的程序(例题1.1)#include (4)如果编译无错误,按【Ctrl+F9】键使程序运行,按【Alt+F5】键,切换到用户 屏,观察分析运行结果。 2、输入并运行一个需要在运行时输入数据的程序(1)清空编辑窗口,输入下面的程序(例题1.2)。#include 四、实验内容 1、在C 编辑环境下编辑实验指导中给出的程序、编译并运行。 2、试编写一程序完成如下信息的显示。********************************** “How are you!” ********************************** 3、编写一个C 程序(习题1.6):输入a, b, c 三个值,输出其中最大者。根据上述题目要求编程并上机调试运行。 五、实验报告要求 实验结束后,应整理实验报告,其内容应包括: 1、实验题目 2、设计思路 3、写出程序源代码 4、写出程序运行结果 5、对实验结果进行分析、总结 六、设计思路 1.5题:以main为主函数,对三条语句进行编码,分别输出,即可达到所要求的结果。1.6题:以main为主函数,先输入三个整形十进制数,任取其一,与其它两个中的任一进行对比,取其最大,再与剩余的一个进行对比,可得最大。 七、源程序清单 1.5题: #include printf(“n**********************n”);printf(“ ”how are you“n”);printf(“**********************n”);} 1.6题: #include 八、分析、总结、及心得 通过本次实验让我学会c程序的编写应注意的一些细节,理解一些简单程序的编写方法。 实验二 数据类型,运算符与表达式 一、实验目的 1、掌握C 语言数据类型,以及对它们赋值的方法; 2、掌握不同的数据类型之间赋值的规律; 3、学会使用C 的有关算术运算符,以及包含这些运算符的表达式,特别是自加和自减运算符的使用; 4、进一步熟悉C 程序的编辑、编译、连接和运行的过程。 二、实验预习 1、认真阅读教材数据类型,算术运算符和表达式,赋值运算符和表达式部分内容。 三、实验指导 1、输入并运行下面的程序: #include (1)将一个负整数赋给一个无符号的变量,会得到什么结果。 (2)将一个大于32767 的长整数赋给整形变量,会得到什麽结果。 (3)将一个长整数赋给无符号的变量,会得到什麽结果(分别考虑该长整数的值大于或等于65535 以及小于65535 的情况)。 同学们可以改变程序中各变量的值,以便比较。例如: a = 65580, b =-40000, e = 65535,f = 65580。 2、输入下面程序: #include (4)在(3)的基础上,将printf 语句改为: printf(“%d,%d”, ++i, ++j);运行并分析结果。(5)再将printf 语句改为: printf(“%d,%d,%d,%d”, i, j, i++, j++);运行并分析结果。(6)将程序改为: #include 四、实验内容 1、在C 编辑环境下编辑实验指导中给出的程序、编译并运行。 2、试编一程序实现输入长宽高,计算长方体的表面积。 3、按习题3.7 的要求编程序并上机运行,该题的要求是: 要将“China”译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母。例如,字母“A”后面第4 个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1、c2、c3、c4、c5 五个变量的值分别为’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5 分别变为’G’、’l’、’m’、’r’、’e’、,并输出。 (1)输入编好的程序,并运行该程序。分析是否符合要求。 五、实验结果 1题: (1):100,-100 100,65436 100,65436(2):-15536,32767(3):5000,32767 2题: (1):9,119,10(2):9,11,8,11(3):8,10(4):9,11(5):9,11,8,10(6):i=9,j=9,m=8,n=-9 六、源程序清单 四.2题 #include #include 七、分析、总结、及心得 通过本次的实验,熟悉如何定义一个整型、字符型和实型的变量,掌握算术运算符的使用,以及包含这些运算符的表达式,特别是自加和自减运算符的使用,学会一些简单程序编写所注意的问题。 实验三 简单C程序设计 一、实验目的 1、掌握C 语言中赋值语句的使用方法; 2、掌握不同类型数据的输入输出方法,能正确使用各种格式转换符; 二、实验预习 1、认真阅读数据的输入输出部分内容。 三、实验指导 1、从键盘输入两个0 到127 的整数,求两数的平方差并输出其值以及这两个整数的ASCII 码对应的字符。 (1)算法分析:标准ASCII 码值范围是0 到127,所以在这范围内的数可以以字符形式输出,实现方法是用格式输出函数并用格式符c 控制输出。(2)根据结果书写源程序 #include 注意输入时两数间应以空格间隔,不能用逗号,只有源程序输入函数中两格式符以逗号间隔时输入才可以是:100,50↙(6)查看结果【Alt+F5】 2、输入程序 #include (2)在此基础上,修改程序的第7~11 行: a=61;b=62;c1=a;c2=b;f=3157.890121;g=0.123456789 d=f;e=g;p=a=m=50000;q=b=n=-60000;运行程序,分析结果。(3)将printf 语句改为: printf(“a=%d,b=%dnc1=%c,c2=%cnd=%15.6f,e=%15.12fn”,a,b,c1,c2,d,e);printf(“f=%f,g=%fnm=%d,n=%dnp=%d,q=%dn”,f,g,m,n,p,q);运行程序,分析结果。 (4)将p、q 改用%o 格式符输出。运行程序,分析结果。 四、实验内容 1、在C 编辑环境下编辑实验指导中给出的程序、编译并运行。 2、本节实验题目: (1)若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1='a',c2='b'。想得到以下的输出格式和结果,请写出程序。要求输出结果如下:(注意空格的输出)a= 3 b= 4 c= 5 x=1.200000,y=2.400000,z=-3.600000 x+y= 3.60 y+z=-1.20 z+x=-2.40 u= 51274 n= 128765 c1='a' or 97(ASCII)c2='B' or 98(ASCII)(2)假设m是一个三位数,试编写一程序完成将m的个位,十位,百位反序输出(例如:123反序输出为321)。 五、实验结果 三、1: d,2,7500 2、(1): a=61,b=62 c1=a,c2=b d= 3.56,e=-6.87 f= 3157.890121,g= 0.123456789000 m=50000,n=-60000 p=32768,q=40000(2): a=-15536,b=5536 c1==,c2=> d=3157.89,e= 0.12 f= 3157.890121,g= 0.123456789000 m=50000,n=-60000 p=50000,q=5536(3): c1==,c2=> d= 3157.890137,e= 0.123456791043 f=3157.890121,g=0.123457 m=-15536,n=0 p=5536,q=-1(4): a=15536,b=5536 c1==,c2=> d= 3157.890137,e= 0.123456791043 f=3157.890121,g=0.123457 p=12640,q=177777 六、源程序清单 2(1): #include }(2:)#include } 七、分析、总结、及心得 在本次实验中,学会了赋值语句的使用方法,不同类型数据的输入输出,尤其是某些空格应特别注意,了解了在scanf语句中不能用n,这也是我一直犯的错误。 实验四 选择结构程序设计 一、实验目的 1、学会正确使用逻辑运算符及逻辑表达式; 2、熟练掌握if 语句与switch 语句; 二、实验预习 1、认真阅读if 语句和switch 语句部分内容。 2、编写好所需要的程序。 三、实验指导 1、输入三角形的三边长,判断这个三角形是否是直角三角形。 (1)算法分析:直角三角形斜边最长,要先找出三边中最长的边,判断最长边的平方 是否等于其余两边的平方和,若相等就是直角三角形。根据分析结果书写源程序。#include t=a; a=b; b=t;}/* a 中放a,b 中较长边*/ if(a t=a; a=c; c=t;}/* a 中放a,b,c 中的最长边*/ if(a*a==b*b+c*c) printf(“Y”);else printf(“N”);}(2)编辑源程序(3)编译【F9】,直到没有错误。(4)运行【Ctrl+F9】,输入: 3,4,5↙ (5)查看结果【Alt+F5】,输出: Y 四、实验内容 1、在C 编辑环境下编辑实验指导中给出的程序、编译并运行。 2、本节实验题目: (1)给出一个百分制成绩,要求输出成绩等级A、B、C、D。90 分以上为A,80~89分为B,70~79 分为C,60~69 分为D,60 分以下为E。 ①事先编好程序,要求分别用if 语句和switch 语句实现。运行程序,并检查结果是否正确。 ②再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级。 ③修改程序,使之能正确处理任何数据。当输入数据大于100 或小于0 时,通知用户“输入数据错”,程序结束。 (2)给出一个不多于5位的正整数,要求:①求出它是几位数。②分别打印出每一位数。③按逆序打印出各位数字。 五、简述编程思路 2.1.1首先写一段程序(switch语句)来对不是所要求的输入的判断与执行,其次写出主要要执行的语句对于switch要求用break跳出,if则不同,六、源程序清单 2.1.1:(用switch)#include scanf(“%f”,&a);} switch((int)a/10){ case 0: case 1: case 2: case 3: case 4: case 5:b='E';break; case 6:b='D';break; case 7:b='C';break; case 8:b='B';break; case 9: case 10:b='A';} printf(“b=%cn”,b); } 2.1.2:(用if) #include scanf(“%f”,&a);} if(a>=0&&a<60) b='E';else if(a>=60&&a<70) b='D';else if(a>=70&&a<80) b='C';else if(a>=80 &&a<90) b='B';else b='A'; printf(“b=%cn”,b); } 2.2: #include } 七、实验心得 通过本次实验,明白了if和switch的联系,以及长整形在打印时注意的地方,学会使用逻辑运算符及逻辑表达式。 实验五 循环控制 一、实验目的 1.熟练掌握for 语句、while 语句、do-while 语句实现循环的方法; 2.理解循环嵌套及其使用方法; 3.掌握break 语句与continue 语句的使用; 4.掌握用循环实现一些常用算法(如穷举、迭代、递推等)。 二、实验预习1.认真阅读本章教材中循环控制部分.2.编写好所需要的程序。 三、实验指导 1.打印如下图案 * * * * * * * * * * * * * * * * (1)算法分析:从图案中找出行数,空格数,星号数间的关系如下: 行数空格数星号数 1 3 1 2 2 3 3 1 5 4 0 7 i 4-i 2*i-1 可用双重循环控制整个图案的输出。若用循环变量i,j 分别控制外层,内层循环,则 i 的取值从1 到4,表示行数,在每行中要确定前面空格个数和星号个数,空格个数是4-i,星号个数是2*i-1。 (2)根据分析结果写出源程序 #include (6)查看结果【Alt+F5】。输出题目要求的图案。 四、实验内容 1.在C 编辑环境下编辑实验指导中给出的程序,编译并运行。2.要求学生独立完成如下题目: (1)输出100到1000之间的所有水仙花数。所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。 (2)输入一行字符,分别统计出其中英文字母、空格、数字 和其他字符的个数。 (3)试利用图形函数完成极坐标函数ρ=cos(3*X)图像的绘制。【进阶题目,选做】 根据以上题目要求编程并上机调试运行。 五、编程思路 2(1)对一个数字每一位的输出的前提下在利用一个if语句即可。2(2)先明白英文字母、空格、数字的ASCII,在用if函数即可。 六、程序运行结果 2(1): #include printf(“%dn”,a); a++;} }(2): #include if(c>=65&&c<=90||c>96&&c<=122) i++; else if(c>=48&&c<=57) j++; else if(c==32) k++; else l++;} printf(“i=%d,j=%d,k=%d,l=%dn”,i,j,k,l); }(3): #include int main(){ int gdriver, gmode;float p,x,px,py,zx,zy;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver, &gmode, “c: c”);for(x=0;x<=2*PI;x+=0.01){ p=cos(3*x); zx=p*cos(x); zy=p*sin(x); px=320+zx*100; py=240-zy*100; putpixel(px,py,14);} getch();closegraph();return 0;} 七、实验总结、心得 通过本次实验,理解了一些循环语句的选择、运用,对一些简单循环的嵌套有了更进一步的理解。第二篇:c语言实验报告
第三篇:C语言 实验报告
第四篇:C语言实验报告
第五篇:c语言实验报告