实验一
1、
#include<stdio.h>
void main()
{
char c1,c2;
c1=97;
c2=98;
printf("%c %c",c1,c2);
}
结果:a b
2、
#include<stdio.h>
void main()
{
int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
结果:9,11,9,10
(1)9,11,8,11
(2)8,10
(3)9,11
(4)8,10,8,10
(5)i=9,j=9,m=8,n=-9
3、
#include<stdio.h>
main()
{
int i=3,j=2,a,b,c,d;
d=(i*3,j=10);
a=(--i==j++)? --i:++j;
b=i++;
c=j;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
结果:12,2,12,10
实验二
1、
#include<stdio.h>
void main()
{
int i;
char j;
for(i=1;i<10;i++)
{
scanf("%c",&j);
printf("%c",j);
}
}
(1) a b c d
(2) abcdefghi
2、
(1)使用char类型输入
#include<stdio.h>
void main()
{
char a;
scanf("%c",&a);
getchar();
putchar(a);
printf(" %d\n",a);
}
输入:d
输出:d 100
(2)使用int类型输入
#include<stdio.h>
void main()
{
int a;
scanf("%c",&a);
getchar();
putchar(a);
printf(" %d\n",a);
}
输入:d
输出:d -858993564
实验三
1、编写一程序,从键盘输入字符,判别输入字符是数字、大写字母还是小写字母,输出判别结果。
#include<stdio.h>
void main()
{
char a;
printf("请输入一个数字或者字母:");
scanf("%c",&a);
if(a>=48&&a<=57)
printf("这是一个数字\n");
else if(a>=65&&a<=90)
printf("这是一个大写字母\n");
else if(a>=97&&a<=122)
printf("这是一个小写字母\n");
}
2、 给出一个不多于5位的正整数,要求:
(1)求出它是几位数;
(2)分别打印出每一位数字;
(3)按逆序打印出各位数字。
#include<stdio.h>
void main()
{
int a,i,ge,shi,bai,qian,wan;
printf("请输入一个不多于五位的正整数:");
scanf("%d",&a);
ge=a%10;
shi=a/10%10;
bai=a/100%10;
qian=a/1000%10;
wan=a/10000;
if(a>0&&a<10)
printf("这是一个一位数\n正序输出:%d\n逆序输出:%d\n",ge,ge);
else if(a>9&&a<100)
printf("这是一个两位数\n正序输出:%d%d\n逆序输出:%d%d\n",shi,ge,ge,shi);
else if(a>99&&a<1000)
printf("这是一个三位数\n正序输出:%d%d%d\n逆序输出:
%d%d%d\n",bai,shi,ge,ge,shi,bai);
else if(a>999&&a<10000)
printf("这是一个四位数\n正序输出:%d%d%d%d\n逆序输出:
%d%d%d%d\n",qian,bai,shi,ge,ge,shi,bai,qian);
else if(a>9999&&a<100000)
printf("这是一个五位数\n正序输出:%d%d%d%d%d\n逆序输出:
%d%d%d%d%d\n",wan,qian,bai,shi,ge,ge,shi,bai,qian,wan);
}
3、 有一函数,,用scanf函数输入任意x的值,求y的值。
#include<stdio.h>
void main()
{
int x,y;
printf("请输入x的值:");
scanf("%d",&x);
if(x<1){
y=x*x;
printf("y=%d\n",y);
}
else if(x>=1&&x<=10){
y=2*x-1;
printf("y=%d\n",y);
}
else if(x>=10){
y=3*x-1;
printf("y=%d\n",y);
}
}
实验四
1、 输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
#include<stdio.h>
void main()
{
char x;
int letter,space,number,others;
letter=0,space=0,number=0,others=0;
while((c=getchar())!='\n')
{
if((x>='a'&&x<='z'||x>='A'&&X<='Z'))
letter++;
else if(x=='')
space++;
else if(x>='0'&&x<='9')
number++;
else
others++;
}
printf("英文字母、空格、数字、其他字符的个数分别为:%d,%d,%d,%d\n",letter,space,number,others); }
解:
#include<stdio.h>
void main()
{
char s[100];
int i,n;
int let=0,spa=0,num=0,oth=0;
scanf("%s",s);
n=strlen(s);
for(i=0;i<n;i++)
{
if(s[i]>64&&s[i]<91||s[i]>96&&s[i]<123)
let++;
else if(s[i]==32)
spa++;
else if(s[i]>47&&s[i]<58)
num++;
else
oth++;
}
printf("letter:%d\nspace:%d\nnumber:%d\nother:%d\n",let,spa,num,oth);
getch();
}
第二篇:数据结构实验报告示例
数据结构实验报告:编制一个Joseph约瑟夫环示例程序
◎实验题目: 给定(也可自己定相关内容)
◎实验目的:给定(也可自己定相关内容)
◎实验内容:给定(也可自己定相关内容)
一、 需求分析
陈述程序设计的任务,强调程序要解决的问题是什么? 明确规定:输入的形式和输入值的范围;输出的形式;程序所能达到的功能;测试数据
1. 输入的形式和输入值的范围
本程序中,输入报数上限值m和人数上限l,密码,均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。
2. 输出的形式
从屏幕显示出列顺序。
3. 程序功能
提供用户从键盘输入,Joseph约瑟夫环的必要数据,并显示出列顺序。
4. 测试数据
(1)
输入
20
7
3 1 7 2 4 8 4
输出
6 1 4 7 2 3 5
二、概要设计
说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
以单向循环链表实现该结构。
1. 抽象数据类型的定义为:
ADT LNode
{
数据对象:D={ai | ai∈CharSet,i= 1,2,…,n,n≥0}
数据关系:R1={< ai-1 ,ai > | ai ∈D, I=2,…,n}
基本操作:
InitList(&L)
操作结果:构造一个最大长度ms,内容为空的有序表L。
ClearList(&L)
初始条件:线性表L已经存在。
操作结果:将L重置为空表。
EmptyList(L)
初始条件:线性表L已经存在。
操作结果:若L为空表返回TRUE,否则返回FALSE。
ListLength(L)
初始条件:线性表L已经存在。
操作结果:返回L中数据元素个数。
GetElem(L, pos, &e)
初始条件:线性表L已经存在,1≤i≤ListLength(L)。
操作结果:用e返回L中第i个数据元素的值。
LocateElem(L, e)
初始条件:线性表L已经存在。
操作结果:返回L中第1个与e相同的元素的位序。若不存在返回0。
ListInsert (L, i, e)
初始条件:线性表L已经存在。
操作结果:在L中的第i个元素的位置之前插入新元素 e,L的长度加1。
ListDelete(L, pos, e)
初始条件:线性表L已经存在,1≤i≤ListLength(L)。
操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1。
ListTraverse(L)
初始条件:线性表L已经存在。
操作结果:依次对L的每个数据元素进行访问。
}ADT SqList
本程序包含以下模块:
(1)主程序模块:
void main()
{
初始化;
输入数据;
执行功能;
显示结果;
}
(2)各功能模块——实现单循环链表表的各项功能。
各模块的调用关系:
主程序
↓
各功能模块
三、详细设计
实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法;画出函数的调用关系。
设计思路:写出存储结构,主要算法的基本思想。
设计表示:每个操作及模块的伪码算法。列出每个过程或函数所调用和被调用的过程或函数,也可以通过调用关系(层次)图表达。
实现注释:各项功能的实现程度、在完成基本要求的基础上还实现了什么功能。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
/*定义类型*/
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LNode, *LinkList;
/*1初始化,置表头指针为空*/
void InitList(LinkList &HL)
{
HL = (LinkList) malloc(sizeof(LNode));
HL->next = HL;
}
/*3返回长度,空则返回0*/
int ListLength(LinkList HL)
{
int i=0;
LinkList p;
p = HL->next;
while(p != HL)
{
i++;
p = p->next;
}
return i;
}
/*5返回指定位置元素的值,超出则停止运行*/
ElemType GetElem(LinkList HL,int pos)
{略}
/*6遍历所有元素*/
void TraverseList(LinkList HL)
{
LinkList p;
p = HL->next;
if(p == HL)
{
printf("空拉!\n");
exit(1);
}
while(p != HL)
{
printf("%-5d", p->data);
p = p->next;
}
printf("\n");
}
/*8修改某位置的元素值,成功返回1,否则返回0*/
int UpdatePosList(LinkList HL,int pos,ElemType x)
{略}
/*10插入元素到表尾*/
void InsertLastList(LinkList* HL,ElemType x)
{略}
/*主函数*/
void main()
{
int a[30];// = {3, 1, 7, 2, 4, 8, 4};
int m, n, l;
LinkList p;
InitList(p);
do
{
printf("Input upper limit number (m): ");
scanf("%d", &m);
getchar();
printf("Input upper limit people (n): ");
scanf("%d", &l);
getchar();
}while(m <= 0 || l <= 0);
printf("Input people's password: ");
for(int i = 0; i < l; i++)
{
scanf("%d", &a[i]);
InsertLastList(&p, a[i]);
}
printf("**********Order**********\n");
n = ListLength(p);
for(int c = 0, s = 0; n > 0; n--)
{
if(m != n && m % n != 0)
c = m % n;
else if(m == n)
c = n;
else if(m % n == 0)
c = 1;
while(c > 0)
{
if(s + 1 == l)
s = l;
else
s = (++s) % l;
if(GetElem(p, s) != -1)
c--;
}
printf("%-5d", s);
m = GetElem(p, s);
UpdatePosList(p, s, -1);
}
printf("\n**********End**********\n");
}
四、 调试分析
调试过程中遇到的主要问题,是如何解决的,对设计和编码的回顾讨论和分析;改进设想;经验和体会等。
程序的编写和调试基本正常。
遇到的问题主要是:指针的指向的边界问题。
本实验采用数据抽象的与模块化程序设计方法。思路清晰,实现时调试顺利,各模块具有很好的可重用性,得到了一次良好的程序设计训练。
五、用户使用说明
说明如何使用你编写的程序;即,如何使用,详细步骤。
根据提示输入学生人数和学生信息
示例:
Input upper limit number (m): 20
Input upper limit people (n): 7
Input people's password: 3 1 7 2 4 8 4
六、 测试结果
列出测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。
输入字母与负数 如:a,-1
提示继续输入正确的值:Input upper limit number (m):
输入正确的值得:Input upper limit number (m): 20
Input upper limit people (n): 7
Input people's password: 3 1 7 2 4 8 4
**********Order**********
6 1 4 7 2 3 5
**********End**********
Input upper limit number (m): 5
Input upper limit people (n): 5
Input people's password: 1 2 3 4 5
**********Order**********
5 1 2 4 3
**********End**********
七、实验总结
你在编程过程中花时多少?
多少时间在纸上设计?
多少时间上机输入和调试?
多少时间在思考问题?
遇到了哪些难题?
你是怎么克服的?
你的收获有哪些?
算法的时空分析和改进设想等等。
八、附录
源程序文件名清单
.h //头文件,基本操作函数的集合
.c //主程序文件