收藏 分销(赏)

C语言实验-15电本通信.doc

上传人:快乐****生活 文档编号:11398082 上传时间:2025-07-21 格式:DOC 页数:43 大小:458.01KB 下载积分:12 金币
下载 相关 举报
C语言实验-15电本通信.doc_第1页
第1页 / 共43页
C语言实验-15电本通信.doc_第2页
第2页 / 共43页


点击查看更多>>
资源描述
实验一 顺序程序设计 【实验目的】 1、熟悉C语言数据类型的概念,熟悉如何定义整型、字符型和实型变量 2、掌握C语言中的算术运算符 3、熟悉C语言表达式语句、空语句和复合语句 4、能编写简单的顺序结构的程序 【预习内容】 1、C语言中类型定义的标志符int 、short、unsigned 、char、float 、double…… 2、C语言中的运算符所能实现的操作 3、输入输出函数的调用语句getchar()、putchar()、scanf()、printf() 【实验内容及步骤】 1. 上机改错题 #include <stdio.h> int main() { int a, b; scanf("%d%d", &a, &b); printf("%d\n", a/b); return 0;} 程序纠错后,若从键盘输入15,4,则程序的运行结果为( 3)。 #include <stdio.h> int main() { float r, s; scanf("%f",&r); s=3.14159*r*r; printf("%f\n", s); //s是float型,%d打印的是整形。数据不一致会出错 return 0;} 程序纠错后,若从键盘输入3.5,则程序的运行结果为( 38.484477)。 2.上机验证题 int main() { char c1='b',c2='e'; printf("%d,%c\n",c2-c1,c2-'a'+'A'); return 0; } 程序运行结果:( ) int main() { int x=10, y=3, z; printf("%d %d\n", x/y, x%y); return 0; } 程序运行结果:( ) int main() { int sum=5, pad=5; pad = sum ++, pad ++, ++ pad; printf("%d\n", pad); return 0; } 程序运行结果:( ) int main() {short int n=65536; n++; printf("%d\n",n); return 0; } 程序运行结果:( ) 3.上机编程题 1、从键盘上任意输入三个整型数据a、b和c,要求将其交换输出a、b和c的值。如从键盘输入a=10,b=20,c=30,程序运行后输出a=20,b=30,c=10。 [程序清单]  #include <stdio.h> int main() { int a,b,c; //定义三个整形变量 int temp;//交换用的临时变量 /*赋值(要严格按照格式输入,在这里,除了%d,其他字符要原样输入,比如a=和,不能缺少。见下面运行结果)*/ scanf("a=%d,b=%d,c=%d", &a, &b, &c); temp = a; a = b ; b = c; c = temp; printf("a=%d,b=%d,c=%d\n", a, b, c); }     [程序运行过程] 第一行是输入。第二行是输出 2、编程从键盘任意输入一个三位数组成的整数,将其个位、十位和百位分离后输出,例输入256,则输出a=2,b=5,c=6。 [程序清单]  #include <stdio.h> int main() { int number; //定义你将要输入的三位数整数的变量 int a,b,c; //定义三个整形变量,接收number分离出来的值 scanf("%d", &number); c = number%10; //使用取余得到个位 /* 下面这行,假设number现在为256,number除以10本来是得25.6。但是25.6又赋值回给number,由于number是整形的,25.6后面的0.6会被截断。number值为25 */ number = number/10; b = number%10;//取到十位的数 /*下面这行除10之后number现在就是一个个位数了。这个数就是以前百位上的数。所以在下下面直接赋值就行*/ number = number/10; a = number; printf("a=%d,b=%d,c=%d\n", a, b, c); }     [程序运行结果] 实验二 分支程序设计 一、实验目的 1、掌握C语言表示逻辑量的方法(0表示“假”,1或非0表示“真”) 2、学会正确使用关系运算表达式和逻辑表达式 3、熟练使用if语句、if-else语句和switch语句 二、预习内容 1、熟悉关系表达式和逻辑表达式的表示和使用 2、熟悉if语句、if-else语句和switch语句的格式、作用和用法 三、上机内容 1、找出程序中的错误,并加以简化 #include "stdio.h" int main( ) { float max, min, median;//没有定义变量,怎么赋值? scanf("%f,%f,%f",&max,&min,&median); if (max==0) { min=0; median=(max-median)/2; } else min=max/2; printf("max=%f,min=%f,median=%f\n", max, min, median); /*这里没错,只是没输出的话怎么看结果是不?*/ return 0;} 修改程序后: (1) 若从键盘输入0,5,8,则程序的运行结果为( )。 (2)若从键盘输入5,8,11,则程序的运行结果为( )。 #include "stdio.h" int main( ) { int a; scanf("%d", &a); if (a>0) //if是判断,要有条件 if (a<10 ) printf("a>0 and a<10\n"); else //用来输出除了0到10之间的数外还有后谁。(优化部分) printf("a>=10\n"); else printf("a<=0\n"); return 0;} 修改程序后: (1) 若从键盘输入3,则程序的运行结果为( )。 (2) 若从键盘输入-5,则程序的运行结果为( )。 (3) 若从键盘输入16,则程序的运行结果为( )。 #include "stdio.h" int main( ) { int a=1,b=1, c; /*看不懂这题说的是什么,如果是输出c的值,直接把if (c=(a-b))变成c=(a-b);不就得了。但还是看不出来它想表达什么*/ if (c=(a-b)) printf("c is %d\n", c); return 0;} 修改程序后,程序的运行结果为( c is 0)。   2、上机验证程序,并分析结果 #include "stdio.h" int main() { int a= 2, b= -1, c= 2; if ( a<b ) //2<(-1) 显然是错的,所以a<b的值是false; if ( b<0 ) c=0;//这个if在上面的if体中,上面if不执行。这里肯定也不执行 else c++;//注意else的一一对应关系。是属于哪个if的 printf( “%d\n”, c); /*由于上面的第一个if为false,所以上面的语句都不执行了。直接就到了输出。*/ return 0;} 该程序的运行结果是( )。 #include "stdio.h" int main() { int a; scanf( “%d”, &a); if ( a>50 ) printf( “%d\n”, a );/*判断a是否大于50.如果大于50.三句printf都会打印,应为a大于50的话,必定大于40,30嘛 */ if ( a>40 ) printf( “%d\n”, a );//同上面思路 if (a>30 ) printf ( “%d\n”, a ); return 0;} (1) 若从键盘输入25,则程序的运行结果为( )。 (2) 若从键盘输入35,则程序的运行结果为( )。 下面这些直接赋值粘贴在vc上都可以运行的。我就不写了 (3)若从键盘输入45,则程序的运行结果为( )。 (4)若从键盘输入55,则程序的运行结果为( )。 #include "stdio.h" int main() { int x=10, y=20, t=0; if ( x==y ) t=x ; x=y ; y=t ;//注意if有无大括号的区别,这里的if范围只到t=x; printf( “%d %d\n”, x, y ); return 0;} 该程序的运行结果是( )。   #include "stdio.h" int main() { int n ; scanf( “%d”, &n ) ; if ( n++<10 ) printf( %d\n”, n ) ;//注意n++与++n的区别,n++是先运算,后执行++. else printf( “%d\n”, n-- ) ; return 0;} (1)若从键盘输入9,则程序的运行结果为( )。 (2)若从键盘输入10,则程序的运行结果为( )。 3、编程题 (1)从键盘任意输入四个int类型的整数,要求将其中的最大数输出。 #include "stdio.h" int main() { int a,b,c,d; int temp; scanf("%d%d%d%d", &a,&b,&c,&d); temp=a;//把第一值赋给temp if(temp<b) //逐一比较,始终保持temp要最大 temp = b; if(temp<c) temp=c; if(temp<d) temp=d; printf("max=%d\n",temp); return 0; } (2)从键盘任意输入四个int类型的整数,要求将它们按从小到大的顺序输出。 #include "stdio.h" int main() { int a,b,c,d; int temp;//交换时用的临时变量 printf("请输入四个整数(用空格隔开):\n"); scanf("%d%d%d%d", &a,&b,&c,&d); if(a>b) { temp = a; a = b; b = temp; } if(a>c) { temp = a; a = c; c = temp; } if(a>d) { temp = a; a = d; d = temp; } /*上面的用a逐一与b,c,c比较,交换。保证a最小. 同理,下面用b与c,d比较交换。保证b是 b,c,d中最小的。再往下原理一样*/ if(b>c) { temp = b; b = c; c = temp; } if(b>d) { temp = b; b = d; d = temp; } if(c>d) { temp = c; c = d; d = temp; } printf("从小到大: %d %d %d %d\n", a, b, c, d); return 0; } (3) 给出一百分制成绩,要求输出成绩等级,90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。规定使用switch结构。 #include "stdio.h" int main() { int grade;//定义成绩变量 printf("请输入成绩:"); scanf("%d", &grade); grade = grade/10;//只要十位上的数字 switch(grade) { case 9: printf("A\n");break; case 8: printf("B\n");break; case 7: printf("C\n");break; case 6: printf("D\n");break; default: printf("E\n");break; } return 0; } 实验三 循环程序设计 一、实验目的 1、掌握while语句、do-while语句和for语句实现循环的方法 2、理解循环结构程序段中语句的执行过程 3、进一步掌握循环结构程序的应用 二、预习内容 熟悉以下语句: while语句、do-while语句、for、break、continue语句 三、上机内容 1、阅读以下程序,先预测其结果,再上机运行验证: ①#include "stdio.h" int main() { int x=-1; do{ x=x*x; } while(!x); printf("%d\n", x); return 0; } 运行结果是( ) ② #include "stdio.h" int main() { int a,s,n,count; a=2;s=0;n=1;count=1; while(count<=7) { n=n*a; s=s+n; ++count;} printf("s=%d",s); return 0; } 运行结果是 ( ) ③#include "stdio.h" int main() { int i=1,s=3; do{ s+=i++; if(s%7==0) continue; else ++i; }while(s<15); printf("%d",i); return 0; } 运行结果是( ) ④ #include "stdio.h" int main() { int num=0; while(num<=2) { num++; printf("%d\n",num); } return 0; } 运行结果是 ( ) 2、编程与程序分析 ① 编程求1-3+5-7+9-11+……-99+101的值。 (找规律,1,3,5,7,9...。奇正偶负)  #include "stdio.h" int main() { int sum=0; //总和 int i=1; //过程变量。1,3,5,7,9...... int sign=-1;//符号,用来变换正负 for(i;i<=101;i=i+2) { sign = sign*(-1);//奇正偶负 sum = sum+(sign*i);//sign*i是要让i是正还是负 } printf("总和:%d\n", sum); return 0; } ② 从键盘输入一组十进制整数,以9999结束,统计其中正数的个数和其中的正数之和。 (使用while判断你是否输入了9999.如果输入就不再执行循环) #include "stdio.h" int main() { int count=0;//定义计数器 int sum=0;//正数总和 int number;//要输入的数 printf("请输入一组整数(用空格或回车隔开):\n"); scanf("%d",&number); while(number!=9999)//如果number不等于9999,就会一直循环 { if(number>0) { count = count+1;//如果number大于0.计数器加1 sum = sum+number;//计算和 } scanf("%d",&number); } printf("正数的个数是:%d个,正数之和为:%d\n", count, sum); } ③ 分析程序运行结果 #include "stdio.h" int main() { int x=1,y=0,a=0,b=0; for ( x=1; x<=4; x++ ) { switch(x) { case 1: switch (y) { case 0: a++; break; case 1: b++; break; } case 2: a++; b++; break; case 3: a++; b++; } printf("a=%d, b=%d\n", a, b); } return 0; } 3、思考题 (1)若有语句while (!x),则退出循环的条件是 ( x为真)。 (2)若有语句 while (x%2 && y>100 ),则继续循环条件是( x不等于0且y>100),而退出循环的条件是( x等于0或y<=100)。 (3)while (x=0)与while (x==0)两条语句的循环条件有何区别? While(x=0)相当于while(0),不执行循环。 While(x==0)是x与0比较。若x为0执行循环。否则退出循环 实验四 数组的应用 一、实验目的 1、掌握一维、二维数组的定义、数组元素的引用形式和赋值的方法。 2、掌握一维、二维数组的输入和输出的方法。 3、掌握和一维数组有关的典型算法,如求菲波那契数列、最大(小)数、查找、排序等。 4、掌握字符串的定义以及它和一维字符数组之间的关系和区别。 5、掌握字符串处理函数的功能和应用。 二、预习内容 1、预习一维数组的定义及引用的一般方法。 2、熟悉循环语句和数组处理语句结合的方法。 3、二维数组的定义和二重循环之间的关系。 4、字符串的概念。 三、实验内容 1、分析和记录以下程序运行结果,并上机验证: (1)#include "stdio.h" int main() { int v[5]; int i; v[0]=197; v[2]=-100; v[4]=350; v[1]=v[0]+v[2]; v[3]=--v[4]; for (i=0;i<5;i++) printf( "v[%d]=%d\n", i, v[i] ); return 0; } 该程序的运行结果是_____________ (2)#include "stdio.h" int main() { int t, i; int a[10]={ 1,2,3,4,5,6,7,8,9,10 }; t=a[9]; for ( i=9; i>1; i-=2) a[i]=a[i-2]; a[1]=t; for ( i=0; i<10; i++ ) printf( "%3d", a[i] ); return 0; } 该程序的运行结果是:_____________ (3)#include "stdio.h" int main() { int num[4][4]={11,22,33,44,1,2,3,4,10,20,30,40,12,22,32,42}; int i, j, s=0; for (j=0; j<3; j++) for ( i=0; i<3; ++i ) if ( i==j ) s+=num[j][i]; printf( "%d\n", s); return 0; } 该程序的运行结果是:___________ (4)#include "stdio.h" int main() {int i, j, m, n, a, x[3][4]={43,32,22,13,11,22,33,44,55,11,32,31}; m=n=0; a=x[m][n]; for (i=0;i<3; i++) for ( j=0; j<4; j++) if ( a>x[i][j] ) { m=i; n=j; a=x[m][n]; } printf("a=%d, m=%d n=%d\n", a, m, n ); return 0; } 2、将程序补充完整,以完成以下功能,并上机调试。 (1)以下程序以每行输出4个数据的格式输出a数组。(中等难度题) #include "stdio.h" int main(){ int a[12], i; for ( i=0; i<12; i++ ) scanf( "%d",&a[i]) ; for (i=0; i<12; i++ ) { if (i%4==0)printf("\n"); printf( "%6d", a[i] ); } printf( "\n" ); return 0; } (2)以下程序将数组中的数据按逆序存放。(中等难度题) #include "stdio.h" #define SIZE 12 /*SIZE为常量12*/ int main() { int a[SIZE], i, j, t; for ( i=0; i<SIZE; i++ ) scanf( "%d",&a[i]); i=0; j=SIZE-1; while ( i<j ) { t=a[i];a[i]=a[j];a[j]=t; i++; j--;} for (i=0; i<SIZE; i++) printf( "%4d", a[i] ); printf( "\n"); return 0; } (3)以下程序实现将数组a中的元素按从小到大的顺序排列。 #include "stdio.h" int main() { int i, j, temp, a[10]; for (i=0; i<10; i++ ) scanf("%d",&a[i]); for (i=0;i<10;i++ ) for (j=0;j<i; j++ ) if (a[j]>a[i]){temp=a[j];a[j]=a[i];a[i]=temp;} for (i=0; i<10; i++) printf( "%d", a[i] );//改为printf( "%4d", a[i] );会好看点 return 0; } (4)若有三个字符串s1、s2和s3,其中s1="abcdef",s2="123456",要求用字符数组实现将s1的内容复制到s3中,再将s2的内容添加到s3的后面,最后输出s3。 #include "stdio.h" int main() { char s1[]="abcdef", s2[]="123456",s3[20]=""; int i=0, j=0; while ( s1[ i ]!='\0') { s3[ i ]=s1[ i ]; i++; } i--; while ( s2[ j ]!='\0' ) {s3[ i ]=s2[ j ];i++; j++; } for ( i=0;s3[i]!='\0';i++ ) printf( "%c", s3[ i ] ); return 0; } 3、编程题: (1)读入10个整数,求出非负数个数及其和,并将10个整数按从小到大的次序输出。 (可结合前面的小到大排序,和计数) #include "stdio.h" int main() { int i, j, temp, a[10], count=0,sum=0; for (i=0; i<10; i++ ) { scanf("%d",&a[i]); if(a[i]>=0) { count = count+1;//计数 sum = sum+a[i];//计算和 } } for (i=0;i<10;i++ ) for (j=0;j<i; j++ ) if (a[j]>a[i]){temp=a[j];a[j]=a[i];a[i]=temp;} printf("非负数%d个,总和为:%d\n",count, sum); printf("从小到大排序:\n"); for (i=0; i<10; i++) printf( "%4d", a[i] ); printf("\n"); return 0; } (2) 从键盘输入十个整数对一个一维数组赋值,并将其中的奇数存放到另一个数组中后再输出,并输出奇数的个数。 如:从键盘输入: 13 14 17 34 45 55 56 76 77 99 则输出: 13 17 45 55 77 99 count = 6 #include "stdio.h" int main() { int a[10],b[10];//定义两个一维数组 int i; int j=0;//j是给b数组用的 int count=0; for(i=0;i<10;i++) { scanf("%d",&a[i]); } for(i=0;i<10;i++)//用来遍历a数组 { if(a[i]%2!=0)//除以2不等于0说明是奇数 { b[j]=a[i]; j=j+1;/*定位到下一位,不改变j就会一直是b[0]*/ } } count = j;//共有j个奇数 for(i=0;i<j;i++) { printf("%3d",b[i]); } printf("\n"); printf("count=%d\n",count); return 0; } (3) 编程求一个m*n的二维数组中所有元素的最大值,元素可随机产生,m,n任意指定。 #include<stdio.h> #include<stdlib.h> #include<time.h> #define M 4 #define N 4 int main() { int arr[M][N]; int i,j; int temp;//临时比较的变量 srand(time(NULL));//根据系统当前时间设置随机数种子 for(i=0;i<M;i++)//赋值 { for(j=0;j<N;j++) { //rand()%100+1即产生1到100的随机数 arr[i][j]=rand()%100+1; } } temp = arr[0][0]; printf("随机生成的二维数组如下:\n"); for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf("%4d",arr[i][j]);//打印出二维数组 if(temp<arr[i][j])//顺便进行比较,找最大 { temp = arr[i][j]; } } printf("\n"); } printf("最大值是:%d\n",temp); }实验五 函数的应用 一、实验目的 1、掌握定义函数的方法; 2、掌握函数实参和形参的对应关系,以及“值传递”的方法; 3、掌握数组名作为实参时,实参和形参之间的传递方法 二、预习内容 函数的概念、定义格式、变量的作用域以及调用过程中数据的传递方法。 三、实验内容 1、分析和记录以下程序运行结果,并上机验证: #include "stdio.h" int main() { int x=2, y=4; int swap( int, int ); printf("(1)in main: x=%d, y=%d\n", x, y); swap(x, y); printf("(4)in main: x=%d, y=%d\n",x, y); return 0;} swap( int a, int b) { int t; printf("(2)in swap: a=%d, b=%d\n",a, b); t=a; a=b; b=t; printf("(3)in swap: a=%d, b=%d\n",a, b); } 运行结果:_______________________________________ 2、若将以上程序中的形参a、b对应改为x和y,使其与实参变量同名,记录并分析结果。 结果一样,虽然同名,但却是完全不相关的两个数。 3、预测以下程序结果,并上机验证。 #include "stdio.h" void fun1( ) { int x=5; printf( "x=%d\n", x ); } void fun2(int x) { printf( "x=%d\n", ++x ); } int main( ) { int x=2; fun1( ); fun2( x ); printf( "x=%d\n", x ); return 0; } 运行结果:_______________ 4、分析程序运行结果,并验证程序。 #include "stdio.h" static int x=20; void fun1(int x) { x+=10; printf(“%d……fun1()\n”,x);} fun2( ) { x+=10; printf(“%d……fun2()\n”,x);} int main() { int x=10; fun1(x); fun2(); printf(“%d……int main()\n”,x); return 0;} 运行结果:_______________ 5、分析程序运行结果,并验证程序。 #include "stdio.h" int main( ) { void fun( ); fun( ); return 0; } void fun( ) { static int a=2; /*a为静态变量*/ char k='A'; a*=2; k+=1; printf("%d, %c\n", a, k); } 运行结果:_______________ 6、分析程序运行结果,并验证程序。 #include "stdio.h" int k;/*k为全局变量*/ int main()  { void fun(); k=3;  fun();  printf(“%d\n”,k); return 0; } void fun() { k=k*k;} 运行结果:_______________ 7、编程题: (1)定义一个能判断任意整数a是否是素数的函数isprime( int a),并利用这一函数,输出100~199之间的所有素数。  #include<stdio.h> int main() { int i; int isprime(int k); printf("100到199之间的素数是:\n"); for(i=100;i<=199;i++) { if(isprime(i))/*如果是素数就输出*/ { printf("%4d",i); } } printf("\n"); return 0; } int isprime(int a)/*判断是不是素数的函数,是素数返回true*/ { int i=0; for(i=2;i<a;i++) { if(a%i==0) { return 0; } } return 1; } (3) 定义一个函数递归函数 long f (int n) 求n!,并利用此函数,求出sum=4!+6!+7!的值。 #include<stdio.h> int main() { long f(int n); long sum; sum=f(4)+f(6)+f(7); printf("4!+6!+7!=%d\n",sum); } long f(int n) { if(n==1) { return 1; } else { return n*f(n-1); } } 实验六 综合 一、实验目的 1、掌握选择,循环,数组,函数,指针的定义和引用; 2、在程序中熟练应用选择,循环,数组,函数,指针的相关知识,编写综合性的程序。 二、预习内容 1、数组,循环,选择,函数,指针的相关知识 三、实验内容 编程题 (下面的三题网上都可找到) (1) 一辆卡车违反交通规则,撞人逃跑。现场3人目击,但没记住车号,只记下车的特征。甲说:牌照前两位数相同,乙说:牌照后两位数相同。丙是位数学家,他说:四位的车号刚好是一个整数的平方。请求出车号。 #include <stdio.h> #include <math.h> int main() { int i,j,num,res; for(i = 11; i < 100; i += 11) {/*前两位相同的数*/ for(j = 11; j < 100; j += 11) {/*后两位相同的数*/ num = 100 * i + j; /*组成车牌号*/ res = (int)sqrt(num);/*开平方函数,所以开头要引入math.h*/ if(res * res == num) /*判断是不是一个数的平方*/ printf("%d\n",num); } } return 0; } (2) 设有一数列,包含10个数,已按升序排列。现要求编一程序,它能够把从指定位置开始的n个数按逆序重新排列并输出新的完整数列。例如,原数列为1,2,3,4,5,6,7, 8,9,10,若要求把从第4个数开始的5个数按逆序重新排列,则新数列为1,2,3,8,7,6,5,4,9,10。要求分三行显示,第一行是原数列,第二行显示指定位置和n的值,第三行是新数列。 #include <stdio.h> int main() { void f(int b[],int x,int y); int a[10]={1,2,3,4,5,6,7,8,9,10},b[10]; int m,n,i; for(i=0;i<10;i++)//把a数组复制一份给b数组 { b[i]=a[i]; } printf("指定开始位置:"); scanf("%d",&m); printf("指定按倒叙输出的个数:"); scanf("%d",&n
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服