C语言第五次上机课
天津理工大学 c语言上机报告5

实验五(2009-9-24)一、实验名称:数组。
二、实验目的:(1)掌握C语言中一维数组、二维数组的定义方法;(2)掌握字符数组与常用字符串处理函数的使用;(3)掌握与数组有关的算法(如数组元素的排序);(4)进一步熟悉Visual C++6.0开发环境下调试程序的基本步骤。
三、实验项目(1)源程序为:#include <stdio.h>#define N 10int main(){int i;int arr[N];int max;int min;double sum;//输入(Input)printf("%s", "Enter 10 integers: \n");for(i=0; i<N; i++)scanf("%d", &arr[i]);printf("%s", "\n");//处理(Process)max=arr[0];min=arr[0];sum=0.0;for(i=1; i<N; i++){if(max<arr[i])max=arr[i];if(min>arr[i])min=arr[i];sum += arr[i];}//输出结果(Output)printf("%s%d\n", "max=", max);printf("%s%d\n", "min=", min);printf("%s%7.2f\n", "ave=", sum/N);return 0;}(2)源程序为:#include <stdio.h>int main(){int i;char str1[80], str2[80];//输入(Input)printf("%s", "Enter a string: \n");gets(str1);//处理(Process)i=0;while(str1[i]!='\0'){str2[i]=str1[i];i++;}str2[i]='\0';//输出结果(Output)printf("%s%s\n", "Str2 is: ", str2);return 0;}(3)源程序为:#include <stdio.h>#define N 20int main(){int i, j;int arr[N];int tmp;//输入(Input)printf("%s%d%s\n", "Enter ", N, " integers:");for(i=0; i<N; i++)scanf("%d", &arr[i]);printf("\nBefore Sorting: ");for(i=0; i<N; i++)printf("%d ", arr[i]);printf("\n");//处理(Process)for(i=1; i<N; i++){for(j=0; j<N-i; j++){if(arr[j]>arr[j+1]){tmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;}}}//输出结果(Output)printf("\nAfter Sorting:\n");for(i=0; i<N; i++)printf("%d ", arr[i]);printf("\n");return 0;}(4)源程序为:#include <stdio.h>#define N 20int main(){int i, j, k; //循环变量int arr[N]; //数组int tmp; //临时变量int num; //待查找的数int flag; //是否找到的标志int mid; //位置变量//数据输入printf("%s%d%s\n", "Enter ", N, " integers:");for(i=0; i<N; i++)scanf("%d", &arr[i]);//选择排序for(i=0; i<N-1; i++){/**基本思想: 共进行N-1趟的比较,每趟比较找到剩余数中的最小值并放到指定的位置。
C语言上机操作指导

C语言上机操作指导程序设计是实践性很强的过程,任何程序最终都必须在计算机上运行,以检验程序的正确与否。
因此在学习程序设计中,一定要重视上机实践环节,通过上机可以加深理解C 语言的有关概念,以巩固理论知识,另一方面也可以培养程序调试的能力与技巧。
1.C语言程序的上机步骤按照C语言语法规则而编写的C程序称为源程序。
源程序由字母、数字及其它符号等构成,在计算机内部用相应的ASCII码表示,并保存在扩展名为“.C”的文件中。
源程序是无法直接被计算机运行的,因为计算机的CPU只能执行二进制的机器指令。
这就需要把ASCII码的源程序先翻译成机器指令,然后计算机的CPU才能运行翻译好的程序。
源程序翻译过程由两个步骤实现:编译与连接。
首先对源程序进行编译处理,即把每一条语句用若干条机器指令来实现,以生成由机器指令组成的目标程序。
但目标程序还不能马上交计算机直接运行,因为在源程序中,输入、输出以及常用函数运算并不是用户自己编写的,而直接调用系统函数库中的库函数。
因此,必须把“库函数”的处理过程连接到经编译生成的目标程序中,生成可执行程序,并经机器指令的地址重定位,便可由计算机运行,最终得到结果。
C语言程序的调试、运行步骤可以用图A-1表示:语法错误连接错误运行错误图A-1 C语言程序的调试、运行步骤图A-1中,虚线表示当某一步骤出现错误时的修改路线。
运行时,无论是出现编译错误、连接错误,还是运行结果不对(源程序中有语法错误或逻辑错误),都需要修改源程序,并对它重新编译、连接和运行,直至将程序调试正确为止。
除了较简单的情况,一般的程序很难一次就能做到完全正确。
在上机过程中,根据出错现象找出错误并改正称为程序调试。
我们要在学习程序设计过程中,逐步培养调试程序1的能力,它不可能靠几句话讲清楚,要靠自己在上机中不断摸索总结,它可以说是一种经验积累。
程序中的错误大致可分为三类:程序编译时检查出来的语法错误;连接时出现的错误;程序执行过程中的错误。
大连理工c语言第五次上机作业参考答案

第五次上机作业:(请用指针实现)1.数据移位有n(n<=10)个整数,使前面各数顺序向后移m(m<=n)个位置,最后m 个数变成最前面的m个数,如图所示。
编写函数shift(a,n,m)实现上述功能,在主函数中输入n个整数和输出调整后的n个数。
SAMPLE OUTPUTnInput n(n<=10):10Input 10 integers:Output the original:Output the shifted:#include <>#define N 10void shift(int a[ ],int n,int m);void main( ){ int i,n,m;int a[N];printf("Input n(n<=10):");scanf("%d",&n);printf("Input %d integers:\n",n);for(i=0;i<n;i++)scanf("%d",a+i);printf("Output the original:\n");for(i=0;i<n;i++)printf("%d ",*(a+i));printf("\n");printf("Input m(m<=%d):",n);scanf("%d",&m);shift(a,n,m);printf("Output the shifted:\n");for(i=0;i<n;i++)printf("%d ",*(a+i));printf("\n");}void shift(int a[ ],int n,int m){ int i,j,t;for(i=0;i<m;i++){ t=a[n-1];for(j=n-2;j>=0;j--)a[j+1]=a[j];a[0]=t;}}2.字符串排序在主函数中输入10个不等长的字符串放入二维字符数组中,编写函数sort()利用指针数组对其排序,在主函数中输出排好序的字符串。
计算机上机第五课ppt课件

必须是char型、int型和它们的变体,不能用于float、 double、void或其它更复杂数据类型
位运算不改变原操作数的值
移位运算
a>>b表示将a的二进制右移b位,a<<b表示将a的二进 制左移b位,其中a、b均为整型,b为正数
例如,a=12;a=a<<2 00001100 00110000 (十进制60)
00001111
C语言运算符及优先次序
优先级
运算符
特征
1
(), [], .,->
双目
!, ~, (t), +(正号), -(负号), *, &(取地 单目
址), ++, --, sizeof
34
*, /, % , +, -
5
<<, >>
双目
67
<, <=, >, >=, ==, !=
8 9 10
?:
三目
14
=, +=, -=, *=, /=, %=, &=, ^=, |=; >>=; <<=
双目
15
,
双目
8、逻辑运算
逻辑运算:用形式逻辑原则来建立数值间关系,运 算对象和运算结果均为逻辑量。
任何非零的数均表示逻辑真,零表示逻辑假。
逻辑运算符:与(&&),或(||),非(!),共三种。
真值表
!(a&&b)可写成!a||!b
练习1
要求当A的值为奇数时,表达式的值为真,A的值为偶 数时,表达式的值为假,以下不满足要求的表达式是:
C语言上机实验

实验一(第1章实验)实验目的:1.掌握运行C语言程序的全过程。
2.熟悉编译环境。
3.初步熟悉C语言程序的语法规定。
4.了解简单函数的使用方法。
实验内容:1.编程且上机运行:求3个整数的和。
2.编程且上机运行:求2个数的和、差、积和商。
3.编程且上机运行:输入3个数,求最大值。
4.编程且上机运行:输入圆的半径,求圆的面积和周长。
5.在屏幕上输出:“hello world!”实验结果:实验二(第3章实验)1.实验目的:理解C语言的类型系统。
实验内容:写程序测试数据-2在类型char,int,unsigned int,long int,unsigned long int 中存储情况。
实验过程:实验结果:参见各种类型的存储实现描述。
2.实验目的:了解混合类型计算中类型的转换规则。
实验内容:写程序测试多种类型数据一起运算时类型的转换及表达式结果的类型。
注意unsigned int和int数据运算时类型转换的方向。
实验过程:/** 类型转换问题* 试问下面两个表达式等价吗?*/#include <stdio.h>#include <stdlib.h>int main() {unsigned int ui,uj;ui = 1;uj = 2;if (ui < uj)printf("\n%u < %u is true !\n", ui, uj);elseprintf("\n%u < %u is false !\n", ui, uj);if (ui - uj < 0)printf("\n%u - %u <0 is true !\n", ui, uj);elseprintf("\n%u - %u <0 is false !\n", ui, uj);system("pause");return 0;}实验结果:参见类型转换规则。
天津大学C++第5次上机练习

1、编程计算1+3+5+7+…+99的值
要求分别用while, do-while, for三种循环语句来实现
2、教材p50习题:利用公式就pi
3、编程求出所有的“水仙花数”。
所谓“水仙花数”是指一个三位数,其各位数字的立方
和等于该数本身。
例如,153是“水仙花数”,因为153=1^3+3^3+5^3
4、教材P49 第3题编写程序并按要求改写
a) 输入一个n值,判断后输出计算结果。
b) 可以循环输入n值并计算,设输入n值为-1000时停止循环。
c) 假设n的范围在[-5,5]之间,
求出此范围内所有的结果,步长为1或0.1。
5、编写程序,实现如下菜单界面。
1、当输入1-5时,实现菜单选择功能
2、增加循环,可以循环选择各菜单项。
3、当输入数据不在1-5范围内时,提示输入错误,请重新选择菜单项。
C语言上机步骤范文

C语言上机步骤范文C语言是一种计算机程序设计语言,广泛用于软件开发和系统编程。
上机实验是C语言学习的重要组成部分,通过上机实验,可以加深对C语言的理解,掌握实际应用技巧。
以下是C语言上机的一般步骤,供参考:1.预备工作:2.实验目标和要求:在开始实验之前,需要明确实验目标和要求。
根据不同课程或任务的不同,实验目标和要求会有所不同。
确保自己了解和理解教师或实验指导书提供的实验要求。
3.问题分析和设计:在上机实验之前,通常需要对问题进行分析和设计。
首先,仔细阅读实验要求,并弄清楚实验需要解决的问题。
其次,根据问题的特征和要求,设计出合适的解决方案和算法。
4.编码实现:5.编译和调试:编码实现完成后,需要对代码进行编译和调试。
选择编译选项,例如调试模式,然后编译源文件。
如果有任何错误或警告信息,需要进行适当的修改和调整。
如果编译通过,可以进行下一步的调试工作。
6.调试和测试:调试是指在程序出现问题时,通过查找和解决错误来确保程序的正确性和稳定性。
调试工作包括运行程序并进行测试,观察程序的输出结果是否符合预期,并检查代码和算法是否存在错误和逻辑问题。
7.优化和改进:在调试和测试过程中,可能会发现一些性能问题或需要改进的地方。
此时,可以进行优化和改进的工作。
通过调整算法和数据结构,或进行程序的重构,以提高程序的效率和可读性。
8.提交实验报告:当实验完成后,通常需要提交实验报告。
实验报告应包括实验目标、问题分析、设计方案、编码实现、测试结果和讨论等内容。
确保实验报告的格式和结构符合实验要求,以便获得更好的评分。
上述步骤可以指导C语言上机实验的进行。
每个步骤的重要性和执行顺序都有所不同,需要根据具体的实验任务来进行调整和决定。
总结起来,C语言上机步骤大致包括预备工作、实验目标和要求、问题分析和设计、编码实现、编译和调试、调试和测试、优化和改进、提交实验报告等。
通过按照这些步骤进行,可以有效地完成C语言的上机实验,并获得满意的实验结果。
C语言上机实验5-12

17.5实验5循环结构程序设计1.实验目的(1)熟悉掌握用while语句、do…while语句和for语句实现循环的方法。
(2)掌握在程序设计中循环的方法实现一些常用的算法(如穷举、迭代、递推等)。
(3)进一步学习调试程序。
2.实验内容编程并上机调试运行(1)输入一行字符、分别统计出其中的英文字母、空格、数字和其他字符的个数(本题是教材第5章第4题)在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符的个数。
(2)输出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其个位数字立方和等于该数本身。
例如,153是一个水仙花数,因为153=1³+5³+3³(本题是教材第五章第8题)。
(3)猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃,只剩一个桃子了。
求第一天共摘了多少桃子(本题是教材第五章第12题)。
再得到正确结果后,修改题目,改为猴子每天吃了前一天剩下的一半后,再吃两个。
请修改程序并运行,检查结果是否正确。
(4)用牛顿迭代法求方程2X³=4x²+3x-6=0在1.5附近的根(本题是教材第五章第13题,学过高等数学的读者可选做此题)。
再得到正确结果后,请修改程序所设的X初始值由1.5改为100,1000,1000,再运行,观察结果,分析不同的x初值对结果有什么影响,为什么?修改程序,使之能输出迭代的次数和每次迭代的结果,分析不同的x初始值对迭代的次数有无影响。
3.预习内容预习教材第5章。
17.6实验6数组1.实验目的(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法。
(2)掌握字符数组和字符串函数的使用。
(3)掌握与数组有关的算法(特别是排序算法)。
2.实验内容编程序并上机调试运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个整数,输出它的位数以及各位数之和。
例:括号内是说明输入4 (repeat=4)123456 -100 -1 99输出number=6, sum=21 (123456的位数是6, 各位数之和是21) number=3, sum=1 (-100的位数是3, 各位数之和是1) number=1, sum=1 (-1的位数是1, 各位数之和是1)number=2, sum=18 (99的位数是2, 各位数之和是18)#include <stdio.h>int main( ){int ri, repeat;int number, sum;long in;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%ld", &in);number=0;sum=0;if(in<0) in=-in;do{number++;sum+=(in%10);}while((in/=10)!=0);printf("number=%d, sum=%d\n", number, sum);}}2.程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2个正整数a和n, 求a+aa+aaa+aa…a(n个a)之和。
例:括号内是说明输入2 (repeat=2)2 3 (a=2, n=3)8 5 (a=8, n=5)输出246 (2+22+222)98760 (8+88+888+8888+88888)#include <stdio.h>void main(){int ri, repeat;int i, n;long int a, sn, tn;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%ld%d", &a, &n);tn=a;sn=0;for(i=1;i<=n;i++){sn+=tn;tn=tn*10+a;}printf("%ld\n",sn);}}3. 程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入1 个正整数n,计算s 的前n项的和(保留 4 位小数)。
s = 1 + 1/2! +....+ 1/n!例:括号内是说明输入:2 (repeat=2)2 (n=2)10 (n=10)输出:1.50001.7183#include "stdio.h"int main( ){int ri,repeat;int i,n;float s,t;scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d",&n);t=1;s=0;for(i=1;i<=n;i++){t*=i;s+=1.0/t;}printf("%0.4f\n",s);}}4. 程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2 个正整数m和n(1<=m,n<=1000),输出m 和n之间所有满足各位数字的立方和等于它本身的数。
输出语句:printf("%d\n", i);例:括号内是说明输入:2 (repeat=2)100 400 (m=100, n=400)1 100 (m=1, n=100)输出:153 (1*1*1+5*5*5+3*3*3=153)370 (3*3*3+7*7*7=370)371 (3*3*3+7*7*7+1*1*1=371)1#include "stdio.h"int main(){int i, digit, m, n, number,sum;int repeat, ri;scanf("%d",&repeat);for(ri = 1; ri <= repeat; ri++){scanf("%d%d", &m, &n);if(m>n){i=m;m=n;n=i;}for(i=m;i<=n;i++){sum=0;digit=i;while(digit>0){sum=sum+(digit%10)*(digit%10)*(digit%10);digit=digit/10;}if(i==sum)printf("%d\n", i);}}}5. 程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入2 个正整数m和n(1<=m,n<=500),统计并输出m 和n之间的素数的个数以及这些素数的和。
例:括号内是说明输入:3 (repeat=2)1 10 (m=1, n=10)20 35 (m=20, n=35)14 16 (m=14, n=16)输出:count=4, sum=17 (1到10之间有4个素数:2,3,5,7)count=3, sum=83 (20到35之间有3个素数:23, 29, 31)count=0, sum=0 (14到16之间没有素数)#include "stdio.h"#include "math.h"int main( ){int ri,repeat;int count=0, digit, i, j, k, m, n, sum=0;scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d%d", &m, &n);for(i=m;i<=n;i++){if(i==1)k=0;else k=1;for(j=2;j<i;j++){if(i%j==0)k=0;}if(k==1)count++,sum=sum+i;}printf("count=%d, sum=%d\n", count, sum);count=0,sum=0;}}6. 程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个整数,从高位开始逐位输出它的各位数字。
输出语句:printf("%-2d", digit);例:括号内是说明输入3 (repeat=3)123456-6008输出1 2 3 4 5 66 0 08#include <stdio.h>int main( ){int ri, repeat;int digit,r[10],a=0,b=0;long in, temp, pow;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%ld", &in);if(in<0)in=-in;while(in){a=a+1;r[a]=in%10;in=in/10;}for(b=a;b>0;b--){digit=r[b];printf("%-2d", digit);}a=0,b=0;printf("\n");}}7. 程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n (1<n≤10),再输入n个整数,输出平均值(保留2位小数)。
例:括号内是说明输入2 (repeat=2)3 1 2 -65 12 2 5 4 0输出aver=-1.00aver=4.60#include <stdio.h>int main( ){int ri, repeat;int i, n, sum;float aver;int a[10];scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &n);for(i=0; i<n; i++)scanf("%d", &a[i]);sum=0;for(i=0;i<n;i++)sum+=a[i];aver=sum*1.0/n;printf("aver=%.2f\n", aver);}}8程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:输入一个正整数n (1<n≤10),再输入n个整数,输出最大值极其下标(设最大值惟一,下标从0开始)。
例:括号内是说明输入3 (repeat=3)3 1 6 43 10 8 15 1 2 5 4 0输出max=6,index=1 (最大值6的下标是1)max=10,index=0 (最大值10的下标是0)max=5,index=2 (最大值5的下标是2). #include <stdio.h>int main( ){int ri, repeat;int i, index, n;int a[10];scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &n);for(i=0; i<n; i++)scanf("%d", &a[i]);index=0;for(i=1;i<n;i++)if(a[index]<a[i]) index=i;printf("max=%d,index=%d\n", a[index],index);}}9. 程序填空,不要改变与输入输出有关的语句。