第一篇:C语言实验
实验人员:
17自动化类03,学号1710221315,万里,实验日期:2018.3.27
实验一
C语言上机基础
一实验目的 熟悉C语言运行环境——Microsoft Visual C++ 6.0中文版。掌握C语言程序的书写格式和C语言程序的结构,初步了解C源程序的特点。3 掌握C语言上机步骤,了解如何编辑、编译、调试和运行一个C程序的方法。4 掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对他们赋值的方法。
二实验内容 完成下面程序的运行
输入并运行下面的程序,运行后记录并分析结果。#include
char c1,c2;
// 定义变量
c1=97;c2=98;
/* 定义变量 */ printf(“%c %cn”,c1,c2);} 运行结果如下:
在此基础上:
⑴
在程序最后增加一个语句,再运行,并分析结果。
printf(“%d %dn”, c1, c2);
运行结果如下:
⑵
将第2行改为:
int c1,c2;运行结果如下:
原因分析:int是整形的变量,但是输出的时候使用的是%c的格式符,这样就触发了ASCII码的使用,将97,98对应成a,b。
⑶
再将第3行改为:
c1=305;c2=340;
再使之运行,分析运行结果。运行结果如下:
原因分析:char是定义字符型变量的,但是只有一个字节,存储的空间只有到255,所以输出的就是暂时未知规则的数值
三案例项目
1.定义三个变量记录你本人的生日(整型数),姓名拼音的首字母(字符型数),年龄(浮点型数,如:20.8),然后输出这三个变量。#include
}return 0;printf(“我的生日是%d.%d.%dn”,year,month,day);printf(“我的年龄是%fn”,age);printf(“我的姓名是%c%cn”,first_name,second_name);printf(“请输入出生年月日n”);scanf(“%hd %hd %hd”,&year,&month,&day);printf(“请输入您的年龄n”);scanf(“%f”,&age);printf(“请输入您的姓名n”);scanf(“ %c %c”,&first_name,&second_name);short year,month,day;float age;//定义函数 char first_name,second_name;
程序运行结果如下:
第二篇:实验一 语言实验
微机原理与接口技术实验(1)
实验一 汇编语言程序上机过程 1 实验二 屏幕字符显示程序 3 实验三 音乐程序 5 实验四 键盘和窗口程序 7 实验五 活动图形显示程序 9 实验六 磁盘文件操作程序 12
实验
一、实验二必做,其余可以选做
实验一 汇编语言程序上机过程
实验目的:
1、掌握常用工具软件 PE,MASM和LINK的使用。
2、伪指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。
3、利用的 1号功能实现键盘输入的方法。
4、了解.EXE文件和.COM文件的区别及用INT 21H 4C号功能返回系统的方法。程序: data segment message db 'This is a sample program of keyboard and disply' db 0dh,0ah,'Please strike the key!',0dh,0ah,'$' data ends stack segment para stack 'stack' db 50 dup(?)stack ends code segment assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax mov dx,offset message mov ah,9 int 21h again: mov ah,1 int 21h cmp al,1bh je exit cmp al,61h jc nd cmp al,7ah ja nd and al,11011111b nd: mov dl,al mov ah,2 int 21h jmp again exit: mov ah,4ch int 21h code ends end start 实验步骤:
1、用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。
2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3、用TYPE命令显示1产生的.LST文件。
4、用LINK将.OBJ文件连接成可执行的.EXE文件。
5、在DOS状态下运行LINK产生的。EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按ESC键可返回DOS。若未出现预期结果,用DEBUG检查程序。实验报告:
1、汇编,连接及调试时产生的错误,其原因及解决办法。
2、思考:
1)若在源程序中把INT 21H的'H'省去,会产生什么现象? 2)把 INT 21H 4CH号功能改为 INT 20H,行不行?
实验二 屏幕字符显示程序
实验目的:
通过实验掌握下列知识: 1、8086指令: JMP,ROR,XOR,HLT。
2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。
3、直接向视频RAM(VRAM)送ASCII码进行屏幕显示的方法。
4、IBM-PC机的ASCII码表及控制字符。
5、命令(。COM)文件及使用方法。
6、利用^Break退出程序的方法及局限性。实验内容及步骤:
一、利用INT 21 0AH号功能调用显示字符串。
1、用A命令在100H处键入下列程序: MOV AH, 9 MOV DX,110 INT 21 INT 20
2、用A命令在110H处键入下列字符串的ASCII码: DB 'This is a sample!$'
3、用N命令和W命令将此程序(包括数据区)存入文件名为AA。COM的磁盘文件中。(存入前BX:CX必须置为文件长度值)。
4、用Q命令退出DEBUG。
5、在DOS命令下打AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG检查程序有无错误。
二、利用INT 21H 2号功能显示字符:
1、用A命令在100H处键入下列程序: XOR DL,DL MOVCX,100 LOP:MOV AH,2 INT 21 INC DL PUSH CX MOV CX,8 DELY: PUSH CX MOV CX,0 J: LOOP J POP CX LOOP DELY POP CX LOOP LOP INT 20
2、用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?
3、按CTRL+BREAK退出此程序,若一次不行可多做几次。
三、直接向VRAM送ASCII码显示字符
1、用A命令在100H处键入下列程序: MOV AX,B000 MOV DS,AX XOR AL,AL XOR BX,BX MOV CX,100 LOP: MOV [BX],AL INC BX INC AL PUSH CX MOV CX,8 DELY: PUSH CX MOV CX,0 J: LOOP J POP CX LOOP DELY POP CX LOOP LOP INT 20
2、用N命令和W命令将此程序存入BB.COM文件中。(一定要先存入!)
3、用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT 21H2号功能调用有何不同? 四。自编一个程序,要求显示AX的内容,即能显示AX=xxxx。
调试时AX的内容可用R命令赋值,也可用MOV指令赋值。实验报告要求:
1、各项实验记录及观察体会。
2、利用INT 21H显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?
3、自编程序草稿及调试结果。
实验三 音乐程序
实验目的:
1、掌握PC机发音原理及音乐程序编制方法。2、8086指令: IN,OUT,DIV,OR 实验内容:
一、发音程序。
1、用DEBUG输入下列程序: MOV DX,4000H IN AL,61H AND AL,FCH LOP: XOR AL,02H OUT 61H,AL MOV CX,0140H DEY: LOOP LOP DEC DX JNE LOP INT 21H INT 20H
2、在DEBUG下运行此程序,改变延时时间常数,注意声音高低变化。
二、音乐程序。
1、输入,汇编,连接并运行下列程序: stacksg segment para stack dw 32 dup(?)stacksg ends datasg segment tiger db 0ah,0dh,'two tiger。$' tig_freq dw 2 dup(262,294,330,262)dw 2 dup(330,349,392)dw 2 dup(392,440,392,349,330,262)dw 2 dup(294,196,262),0ffffh tig_time dw 10 dup(25),50,25,25,50 dw 2 dup(12,12,12,12,25,25)dw 2 dup(25,25,50)datasg ends codesg segment assume cs:codesg,ds:datasg,ss:stacksg start: mov ax,datasg mov ds,ax lea dx,tiger mov ah,9 int 21h lea si,tig_freq lea bp,ds:tig_time call play mov ah,4ch int 21h play proc freq: mov di,[si] cmp di,0ffffh je end_ply mov bx,ds:[bp] call sound add si,2 add bp,2 jmp freq end_ply: ret play endp sound proc mov al,0b6h out 43h,al mov dx,14h mov ax,4f38h div di out 42h,al mov al,ah out 42h,al in al,61h mov ah,al or al,3 out 61h,al wait: mov cx,5000 spkr_on: loop spkr_on dec bx jnz wait mov al,ah out 61h,al ret sound endp codesg ends end start
2、修改程序,使它能演奏一首你所喜爱的歌曲。
3、若歌曲中有休止符,怎么办? 实验报告:
1、实验记录和体会。
2、自编程序。
实验四 键盘和窗口程序
实验目的:
1、掌握利用INT 16H 2号功能调用实行键盘输入的方法。
2、熟悉键盘的扫描码和ASCII码的关系。
3、掌握利用INT 10H功能调用实现窗口功能的方法。实验内容:
一、键盘输入程序
1、程序: PRO_NAM AGAIN: BINIHEX ROTATE: PRINT: SEGMENT ASSUME CS:PRO_NAM ORG 100H MOV AH,0 INT 16H MOV BX,AX CALL BINIHEX MOV AH,2 MOV dl,20h INT 21H MOV DL,BL MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H JMP AGAIN INT 20H PROC NEAR MOV CH,4 MOV CL,4 ROL BX,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL PRINT ADD AL,7 MOV DL,AL MOV AH,2 INT 21H DEC CH JNZ ROTATE RET BINIHEX ENDP PRO_NAM ENDS END AGAIN
2、输入,汇编,连接此程序,并将它转变成。COM文件。
3、运行此程序,观察并记录各个键的扫描码,ASCII码及对应字符。
二、窗口程序:
1、程序: code segment assume cs:code,ss:code org 100h start: mov ax,600h mov cx,0 mov dx,184fh mov bh,7 int 10h pos: mov ah,2 mov dx,101eh mov bh,0 int 10h mov cx,20 get: mov ah,1 int 21h cmp al,1bh jz exit loop get mov ax,601h mov cx,81eh mov dx,1031h mov bh,7 int 10h jmp pos exit: int 20h code ends end start
2、将此程序输入并转变成。COM文件。
3、运行此程序,观察按不同键所产生的效果。
4、此程序所产生的窗口效果有何缺陷?试修改之。实验报告:
1、实验记录。
2、自编程序。
实验五 活动图形显示程序
实验目的:
1、掌握利用INT 10H实现活动图形的方法。
2、INT 10H 的 2号,6号,0AH号功能。实验内容:
参考下列程序自编一活动的复合图形显示程序。程序一 活动字符图形显示程序: stack segment stack db 256 dup(0)stack ends code segment assumecs: code,ss:stack move: mov cx,0 mov dx,184fh mov bh,7 mov ax,0618h int 10h mov dx,0 mov cx,1 mov bh,0 rept: mov ah,2 int 10h mov ah,10 mov al,0fh int 10h call dely mov al,20h mov ah,10 int 10h inc dh inc dl inc dl cmp dh,25 jne rept mov ah,4ch int 21h dely proc push cx push dx mov cx,5 lop: mov dx,0 lop1: dec dx jne lop1 loop lop pop dx pop cx ret dely endp code ends end move 程序二静止复合图形显示程序: stack segment stack db 256 dup(0)stack ends data segment chrtab dw 7 db 0dbh,0,0,0dbh,0,1 db 0dbh,0,1,52h,0,1 db 1,-1,-1,9,2,0 db 9,0,-2 data ends code segment assume cs:code,ss:stack,ds:data start: mov ax,data mov ds,ax mov cx,0 mov dx,184fh mov bh,7 mov ax,0618h int 10h lea di,chrtab mov cx,[di] mov dx,400h add di,2 next: add dh,[di+1] add dl,[di+2] mov ah,2 mov bh,0 int 10h push cx mov cx,1 mov ah,10 mov al,[di] int 10h pop cx add di,3 loop next mov ah,4ch int 21h code ends end start 实验报告:
1、自编程序。
2、调试中产生的问题。
实验六 磁盘文件操作程序
实验目的:
1、掌握利用FCB进行磁盘文件读写的方法。
2、掌握利用HANDLE进行磁盘文件读写的方法。
3、INT 21H 0FH,10H,14H,15H,16H,1AH号功能调用。
4、INT 21H 3CH,3DH,3FH,40H号功能调用。实验内容:
一、文本文件内容显示程序: stack segment stack db 100h dup(?)stack ends data segment fcb db 36 dup(0)count db 0 char db 0 dta db 0 errmsg db 'file access error' data ends code segment main proc far assume cs:code,ss:stack start: push ds sub ax,ax push ax mov ax,data mov es,ax assume es:data mov si,5ch mov di,offset fcb mov cx,12 cld rep movsb mov ds,ax assume ds:data mov dx,offset dta mov ah,1ah int 21h mov dx,offset fcb mov ah,0fh int 21h cmp al,0 jnz error mov word ptr fcb+0ch,0 mov word ptr fcb+0eh,1 again: tab: eof: error: display disp1: mov fcb+20h,0 lea dx,fcb mov ah,14h int 21h cmp al,0 jnz error mov al,dta cmp al,1ah jz eof cmp al,9 jz tab call dispchar inc char cmp dta,0ah jnz again mov char,0 inc count cmp count,24 jnz again mov ah,0 int 16h mov count,0 jmp again mov al,' ' call dispchar inc char test char,7 jz again jmp tab lea dx,fcb mov ah,10h int 21h ret lea bx,errmsg call display ret proc mov cx,30 mov al,[bx] call dispchar inc bx loop disp1 mov al,0dh call dispchar mov al,0ah call dispchar ret display endp dispchar proc push bx mov bx,0 mov ah,14 int 10h pop bx ret dispchar endp main endp code ends end start
1、输入,汇编,连接此程序,用DEBUG将目的程序带参数调入,用D命令观看并记录 PSP中的FCB内容。
2、运行此程序。
二、磁盘文件拷贝程序(参考): stack segment stack db 100h dup(9)stack ends;data segment sfile db 64 db ? db 64 dup(' ')dfile db 64 db ? db 64 dup(' ')ask1 db 0ah,0dh,'please input source' db 'file name:','$' ask2 db 0ah,0dh,'please input destnation' db 'file name:','$' note db 0ah,0dh,'please insert diskettes' db 'and strike any when ready ','$' er1 db 0ah,0dh,'create error $' er2 db 0ah,0dh,'open error$' er3 db 0ah,0dh,'read error$' er4 db 0ah,0dh,'write error$' er5 db 0ah,0dh,'close source file error' er6 db 0ah,0dh,'close dest file error' bufr dw ? data ends code segment assume cs:code,ds:data,ss:stack start proc push sub push mov mov mov lea call lea far ds ax,ax ax ax,data ds,ax es,ax dx,ask1 disp dx,sfile call mov xor mov mov lea call lea call mov xor mov mov lea call mov int call ret start endp disp proc mov int ret disp endp inpt proc mov int ret inpt endp copy proc mov lea mov int inpt cl,sfile+1 ch,ch si,cx [si+sfile+2],0 dx,ask2 disp dx,dfile inpt cl,dfile+1 ch,ch si,cx [si+dfile+2],0 dx,note disp ah,7 21h copy ah,9 21h ah,0ah 21h ah,3ch dx,dfile+2 cx,20h 21h lea mov jc mov mov mov lea int lea mov jc r_w: mov mov lea int lea jc or je mov lea xchg int lea jc xchg jmp exit: mov int lea jc xchg mov int lea jc ret err: mov int xchg mov int call ret copy endp dx,er1 bx,ax err bufr,ax ah,3dh al,0 dx,sfile+2 21h dx,er2 bx,ax err cx,10h ah,3fh dx,sfile+2 21h dx,er3 err ax,ax exit ah,40h dx,sfile+2 bufr,bx 21h dx,er4 err bufr,bx r_w ah,3eh 21h dx,er5 err bufr,bx ah,3eh 21h dx,er6 err ah,3eh 21h bufr,bx ah,3eh 21h disp ends end start 按COPY AAA BBB 格式要求改写此程序,取消人机对话,源文件和目的文件名由 命令行输入。实验报告:
1、自编程序原稿和调试后的正确清单。
2、实验中产生的问题及体会。
3、实验记录。code
第三篇:C语言实验
C语言实验
实验一:C语言程序调试基础
一、实验目的
1.掌握C语言源程序的编写方法和调试方法
2.学会使用VC6开发工具及调试过程的查错纠错能力。
二、任务
调试课本例子:例2.19、例3.5、例5.9
三、实验过程及结果
1.鼠标左键双击VC,打开程序;单击打开的New的页面中,单击
键,选择键,选择,在新,最后单击键,就可以建立一个新的页面。
2.在界面中输入例2.19的内容,单击
键进行调试,底下的对话框出现
一句话时,说明我们编写的程序无错,就可以单击键,来运行程序。运行结果及编写程序内容如图:
4.关闭这两个窗口,再单击
实验二:顺序程序设计
一、实验目的:
1.掌握顺序程序的设计方法;
键,选择
;
2.掌握输入输出控制语句。
二、实验任务与要求
1.第3章课后习题T2 2.第3章课后习题T7
三、实验过程及结果
实验三:分支程序设计
一、目的
1.掌握分支程序控制语句的语法格式及纷争程序设计方法。2.了解分支程序的条件表达式及运算规则; 3.掌握分支程序控制语句的嵌套使用方法。
二、任务
1.第4章课后习题T6 2.第4章课后习题T8 3.第4章课后习题T12
三、实验过程及结果
实验四:循环程序设计
一、目的
1.掌握循环程序的控制语句的语法规则;
2.掌握循环程序的编写方法;
3.掌握循环程序的嵌套与退出控制方法。
二、任务
1.求100~200间的全部素数。2.第5章课后习题T8 3.第5章课后习题T10
三、实验过程及结果
实验五:数组
一、目的
1.掌握数组的定义及使用方法 2.掌握字符数组的相关操作函数。
二、任务
1.用数组求Fibonacci数列的钱40项,每5个一行。2.将一个3行8列的数组A转置为数组B。3.已知字符串str1=”abcde”,str2=”hijklm”,比阿尼写程序分别实现str1与str2的连接、求长度、比较等操作。
三、实验过程及结果
实验六:函数
一、目的
1.掌握函数的定义与调用方法。2.掌握函数参数的专递方式。
3.掌握函数的嵌套调用和递归调用方法。
二、任务
1.编写一函数,用冒泡排序法实现对数组A的排序。2.编写一函数,用选择排序法实现对数组A的排序。3.编写一函数,实现对给定年year是不是闰年。4.编写一函数,实现对给定整数m是不是素数。
5.利用递归算法,编写一函数,求Fibonacci数列的第n项。
三、实验过程及结果
实验七:变量作用域
一、目的
1.了解变量的存储类型及生命周期、作用域的性质。2.准确使用局部变量和全局变量。
二、任务
1.根据变量作用域知识,分析下列程序的运行效果。2.调试程序,分析个变量的作用范围和生命期。
#include
Printf(“i=%dn”,i);
int i=40;
printf(“i=%dn”,i);
fun1();
fun1();}
三、实验过程及结果
实验八:结构体
一、目的
1.掌握结构体的定义方法和使用。
二、任务
定义一日期(年、月、日)结构体,编程实现日期的输入、日期的输出、日期加上一个整型天数、两个日期数据相减等功能。
三、实验过程及结果
第四篇:C语言实验题目
求两个数之和。在两种情况下完成:
①数据在程序内部定义变量时赋初值,或者通过赋值语句赋值。②数据通过scanf()函数输入。静态输入:
#include
#include
设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面积、圆柱体积。要求用scanf 输入数据,输出计算结果。#include
l=%6.2fn”,l);printf(“圆的面积为
s=%6.2fn”,s);printf(“圆柱的表面积为
sq=%6.2fn”,sq);printf(“圆柱的体积为
vz=%6.2fn”,vz);}
输入a、b、c三个整数,求出其中最大者,并连同三个源数据一起输出。#include
if(x>z)
max=x;
else
max=z;} else {
if(y>z)
max=y;
else
max=z;} return(max);} void main(){ int max(int x,int y,int z);
int a,b,c,w;
printf(“请您输入三个整数:”);
scanf(“%d,%d,%d”,&a,&b,&c);
printf(“您输入的三个数是:%d,%d,%dn”,a,b,c);
w=max(a,b,c);
printf(“这三个数中最大的是:%dn”,w);}
给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。要求输入一个成绩并打印出对应的等级制成绩。要求用switch语句完成。#include
printf(“您输入了一个错误的成绩!请重新输入n”);
scanf(“%d”,&grade);} c=grade/10;switch(c){ case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;default: grade='E';} printf(“您输入的成绩的等级为:%Cn”,grade);}
计算当n为何值时,不等式sum=1 + 1/2 + 1/3 +… + 1/n >limit成立,输出n对应的sum(limit从键盘输入,要求用while、或do...while 语句,limit=10)。#include
n++;
sum=sum+1/n;} printf(“此时sum的值是:%fn”,sum);printf(“此时n的值为%fn”,n);}
计算M=11+ 22+ 33+…+ NN,直到N等于15为止,输出N和对应的M。(要求用for语句做)
#include
M=M+(n+10*n);} for(n=10;n<=15;n++){
M=M+(n+100*n);} n--;printf(“当n是%d时,M的值为%fn”,n,M);}
100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马一匹驮0.5担,计算大、中、小马数目并输出。#include
for(small=0;small<100;small+=2)
for(mid=0;mid<50;mid++)
{
if(3*big+2*mid+small/2==100&&big+mid+small==100)
{
printf(“big:%dt,mid:%dt,small:%dn”,big,mid,small);
sum++;
}
}
printf(“一共有%d种组合方式n”,sum);}
求 sum=1!+2!+3!+...+10!,并输出结果。#include
t=t*n;
s=s+t;} printf(“1!+2!+3!+...+10!的和是:%en”,s);} 注意该程序的结果为:1!+2!+3!+...+10!的和是:4.037913e+006 是以科学计数法表示的结果,因为int的定义范围只能以此表示,如果用long int来输出,则可以得到正常表示的结果 #include
t=t*n;
s=s+t;} printf(“1!+2!+3!+...+10!的和是:%ldn”,s);}
1!+2!+3!+...+10!的和是:4037913
设数列为1,3,5,7,9,11,13,15,17,19,动态输入在数组array中,然后顺序打印输出该数列,再逆序打印输出该数列。#include scanf(“%d”,&array[i]);printf(“您输入的10个整数的顺序排列是:n”);for(i=0;i printf(“%-4d”,array[i]);printf(“n”);printf(“您输入的10个整数的逆序排列是:n”);for(i=N-1;i>=0;i--) printf(“%-4d”,array[i]);printf(“n”);} 将3x3阶二维数组的关于主对角线对称的元素互换。二维数组的第1至3行元素分别为1、2、3、4、5、6、7、8、9。用矩阵形式分别输出互换前、后的数组元素值。#include for(j=0;j<3;j++) printf(“%5d”,array[i][j]); printf(“n”);} for(i=1;i<3;i++) for(j=0;j { t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t; } printf(“After Exchanged:n”); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(“%5d”,array[i][j]); printf(“n”); } } 定义两个字符数组s1、s2,并用赋初值的方法把两个字符串“Computer”和“Language” 分别存放到s1、s2中,要求不用库函数strcat(),把s2连接到s1的尾部,然后以%s格式输出连接后的字符串s1。#include char s1[80],s2[40]; int i=0,j=0; printf(”input string1:“); scanf(”%s“,&s1); printf(”input string2:“); scanf(”%s“,&s2); while(s1[i]!=' ') i++; s1[i]=' '; i++; while(s2[j]!=' ') s1[i++]=s2[j++]; s1[i] = ' '; printf(”The new string is:%sn“,s1);} 用赋初值的方法把字符串”C is a general purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system.“存放到字符数组s中,编程统计其中的大写字母、小写字母、数字、空格、逗号的个数。#include char s[512] = ”C is a general purpose, procedural, imperative “ ”computer programming language developed in 1972 by Dennis“ ”Ritchie at the Bell Telephone Laboratories for use with “ ”the Unix operating system.“;int upper=0,lower=0,digit=0,space=0,comma=0;int i=0;while(s[i]) { if(s[i]>='A'&&s[i]<='Z')upper++; if(s[i]>='a'&&s[i]<='z')lower++; if(s[i]>='0'&&s[i]<='9')digit++; if(s[i]==' ')space++; if(s[i]==',')comma++; i++; } printf(”这串字符串有大写字母%d个,小写字母%d个,数字%d个,空格%d个,逗号%d个n“,upper,lower,digit,space,comma);} 试从主函数输入10个数据到数组中,编写对偶数项求和的子函数,它将计算结果返回给主函数,由主函数输出。#include int i,s;s=0; for(i=1;i s=s+a[i]; return(s);} void main(){ int a[10];int i,s;printf(”请您在数组内输入10个数:“);for(i=0;i<10;i++) scanf(”%d“,&a[i]);s=oqh(a,10);printf(”这个数组的偶数项的和是:%dn“,s);} 注意:oqh并无其他含义,是本人定义的一个函数名,偶数项求和的缩写。编写一个判断素数的程序,其中主函数用于完成输入一个整数并给出判断结果,单独编写一个函数用于判断其参数是否为素数,其返回值为1表示为素数,为0表示为非素数。#include if(n%i==0) { m=0; break; } if(i>t) m=1; else continue;} return(m);} void main(){ int n;int i;printf(”请输入你要判断的数:n“);scanf(”%d“,&n);while(n<=1){ printf(”您输入了一个错误的数据,请重新输入:n“); scanf(”%d“,&n);} if(prime(n)) printf(”您输入的是一个素数n“);else printf(”您输入的不是一个素数n“); } 输入三个整数,按由小到大的顺序输出。(要求使用指针来排序输出)#include t=*a; *a=*b; *b=t;} if(*a>*c){ t=*a; *a=*c; *c=t;} if(*b>*c){ t=*b; *b=*c; *c=t;} } void main(){ int a,b,c;printf(”请您输入三个整数:“);scanf(”%d %d %d“,&a,&b,&c);sort(&a,&b,&c);printf(”它们由小到大的排列顺序是:%d %d %dn“,a,b,c);} 或者是 #include void swap(int *p1,int *p2); int a,b,c; int *p1,*p2,*p3; printf(”请您输入三个整数:“); scanf(”%d %d %d“,&a,&b,&c); p1=&a; p2=&b; p3=&c; if(a>b)swap(p1,p2); if(a>c)swap(p1,p3); if(b>c)swap(p2,p3); printf(”它们由小到大的排列顺序是:%d %d %dn“,a,b,c);} void swap(int *p1,int *p2){ int p; p=*p1; *p1=*p2; *p2=p;} 输入十个整数,放在数组list中,然后用指针法从后向前输出该数组中的整数。#include int list[10],i,*p=list; printf(”请您输入10个整数:n“); for(i=0;i<10;i++) scanf(”%d“,&list[i]); printf(”这10个整数的逆序序列是:n“); for(i=9;i>=0;i--) printf(”%-4d“,*(p+i));} 如果输入的数字个数不定的情况,下面的代码可行 #include scanf(”%d“,&list[i]);p=&list[0];sort(p,n);printf(”这%d个整数的逆序序列是:n“,n);for(i=0;i printf(”%-4d“,list[i]);printf(”n“);} void sort(char *p,int m){ int i;char t,*p1,*p2;for(i=0;i p1=p+i; p2=p+(m-1-i); t=*p1; *p1=*p2; *p2=t;} } 编写一个函数,它能对一个字符串(“I am a student”)测出长度,要求函数的形参是一个指针变量,函数返回值是字符串的长度。#include n++; p++;} //*p=' ';//n++;return(n);} 若要统计结果包含结束符,则启用*p=' ';n++;两条语句 编一个函数cstrcmp实现两个字符串的比较,具体为: int cstrcmp(char *p1, char *p2)p1,p2分别指向字符串s1,s2;若s1=s2则函数返回0;若s1>s2,则函数返回1;若s1 return 0;} if(strcmp(p1,p2)>0){ return 1;} if(strcmp(p1,p2)<0){ return-1;} } void main(){ char *a;char *b;input();printf(”这两个字符串比较的结果是:%dn“,cstrcmp(a,b));} 如果要求返回的是不相同字母的ASCII码值: #include if(*(p1+i++)==' ')return(0); return(*(p1+i)-*(p2+i));} 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,用赋初值的方法输入5个学生的数据到结构体数组中,输出每个学生3门课的平均成绩。#include { char num[6]; char name[8];int score[3];float avr;}stu[5]={{”101“,”Zhou“,93,89,87},{”102“,”Yang“,85,80,78},{”103“,”Chen“, 77,70,83},{”104“,”Qian“,70,67,60},{”105“,”Li“,72,70,69}};void main(){ int i,j,sum;for(i=0;i<5;i++) { sum=0; for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/3.0;} printf(”number name score1 score2 score3 averagen“);for(i=0;i<5;i++){ printf(”%3s%10s“,stu[i].num,stu[i].name); for(j=0;j<3;j++) printf(”%7d“,stu[i].score[j]); printf(”%10.2fn“,stu[i].avr);} } 如果按平均成绩由高到低排序后,输出每个学生的成绩 #include { char num[6]; char name[8]; int score[3];float avr; }stu[5]={{”101“,”Zhou“,93,89,87},{”102“,”Yang“,85,80,78},{”103“,”Chen“, 77,70,83},{”104“,”Qian“,70,67,60},{”105“,”Li“,72,70,69}},temp;void main(){ int i,j,sum; for(i=0;i<5;i++){ sum=0; for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/3.0;} for(i=0;i<4;i++) for(j=i;j<4;j++) if(stu[j].avr { temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp; } printf(”number name score1 score2 score3 averagen“); for(i=0;i<5;i++) { printf(”%3s%10s“,stu[i].num,stu[i].name); for(j=0;j<3;j++) printf(”%7d“,stu[i].score[j]); printf(”%10.2fn",stu[i].avr); } } 实验7 函数程序设计 一、实验目的 1、掌握函数定义的方法。 2、掌握函数实参与形参的传递方式。 3、掌握函数的嵌套调用和递归调用的方法。 4、了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。 二、实验内容 1.改错题 (1)下列sub函数的功能为:将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。例如,当s所指字符串的内容为“ABCD”时,t所指数组中的内容为“DCBAABCD”。纠正程序中存在的错误,以实现其功能。程序以文件名sy7_1.c保存。#include int i,d; d=strlen(s); for(i=1;i t[i]=s[d-1-i]; for(i=0;i t[2*d]=’ ’;} main(){ char s[100],t[100];printf(“Please enter string s:”);scanf(“%s”,s);sub(s,t);printf(“nThe result is:%sn”,t);}(2)下列程序的功能为:将字符数组中的字符串逆序输出。纠正程序中存在的错误,以实现其功能。程序以文件名sy7_2.c保存。#include char a[ARR_SIZE];printf(“Please enter a string:”);gets(a);Inverse(char a[]);printf(“The inversed string is :”);puts(a);} void Inverse(char str[]){ int len,i=0,j; char temp; len=strlen(str); for(j=len-1;i { temp=str[i]; str[j]=str[i]; str[j]=temp; } } (3)下列程序的功能为:求整数n的阶乘。纠正程序中存在的错误,以实现其功能。程序以文件名sy7_3.c保存。#include static int p=1; p=p*n; return p;} void main(){ int n,i; int f=0; printf(“input member:”); scanf(“%d”,&n); for(i=1;i<=n;i++) f=f*fun(i);printf(“%d!=%dn”,n,f);} 2.程序填空题 (1)下列sum()函数的功能是:计算数组x前n个元素之和。在主函数中,输入10个任意整数和下标i1、i2的值(设1<=i1<=i2<=9),调用sum()函数计算从第i1元素到第i2元素的和,并输出结果。补充完善程序,以实现其功能。程序以文件名sy7_4.c保存。#include int i,s=0; for(i=0;______________;i++) s=____________; return s;} void main(){ int i,i1,i2,result; int x[10]; for(i=0;i<10;i++) scanf(“%d”,&x[i]); scanf(“%d%d”,&i1,&i2); result=sum(x+i1,___________);printf(“Sum=%dn”,result);} (2)以下程序的功能是:输入一个字符数小于100的字符串string,然后将string所保存字符串中的每个字符之间加一个空格。补充完善程序,以实现其功能。程序以文件名sy7_5.c保存。 #include char string[MAX]; scanf(“%s”,string); Insert(_______________); printf(“%s”,string);} void Insert(char srcStr[]){ char strTemp[MAX]; int i=0,j=0; strcpy(strTemp,srcStr); while(________________________) { srcStr[i]=strTemp[j]; i++; _______________________ srcStr[i]=’ ‘; i++; } srcStr[i]=’ ’;}(3)下列程序的功能为:输出如下图所示的图形。补充完善程序,以实现其功能。程序以文件名sy7_6.c保存。#include int j,k; for(j=1;j<=30-i;j++)printf(“%c”,’ ‘); for(k=1;k<=_________;k++)printf(_____________); printf(“n”);} void main(){ int i; for(i=1;i<=7;i++)____________; for(i=6;i>=1;i--)_____________;} 222 33333 4444444 555555555 66666666666 7777777777777 66666666666 555555555 4444444 33333 222 3.编程题 (1)从键盘输入10个数,用函数编程实现将其中最大数与最小数的位置对换后,再输出调整后的数组。程序以文件名sy7_7.c保存。 (2)编写一函数,判断一字符串是否为回文。所谓“回文”是指顺读和倒读都一样的字符串,如“deed”和“level”是回文。在主函数中对输入的5个字符串统计其中回文的个数。程序以文件名sy7_8.c保存。 (3)编写一函数,实现将一个十进制转换成二进制数。程序以文件名sy7_9.c保存。第五篇:C语言实验七[范文模版]