c语言程序实验
① c语言程序设计实验报告怎么写啊
通过本试验初步培养计算机逻辑解题能力。熟练掌握赋值语句和if语句的应用;掌握switch多路分支语句和if嵌套语句的使用
② C语言程序实验设计
年龄分段:
main()
{
int x;
scanf("%d", &x);
if(x <= 0)
{printf("input error\n"); return;}
switch(x)
{
case 1:case 2:case 3:case 4:case 5:
printf("学龄前幼儿\n");
break;
case 6:case 7:case 8:case 9:case 10:case 11:
printf("儿童\n");
break;
case 12:case 13:case 14:case 15:case 16:case 17:
printf("少年\n");
break;
case 18:case 19:case 20:case 21:case 22:case 23:case 24:
case 25:case 26:case 27:case 28:case 29:case 30:case 31:case 32:case 33:
case 34:case 35:case 36:case 37:case 38:case 39:
printf("青年\n");
break;
case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 48:
case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:
case 58:case 59:
printf("中年\n");
break;
default:
printf("老年\n");
break;
}
}
Sn=:
int value(int a, int n)
{
int i, result = 0;
while(n --)
{
result += a;
a *= 10;
}
return result;
}
int calc(int a, int n)
{
int i, result = 0;
result = value(a, n);
while(--n)
{
result -= value(a, n);
}
return result;
}
main()
{
int a, n;
scanf("%d", &n);
for(a = 1; a < 10; a++)
printf("a= %d, n = %d, result is %d\n", a, n, calc(a, n));
}
猴子吃桃:
int main()
{
int i,j;
j=1;
for(i=1;i<10;i++)
{
j=2*(j+1);
}
printf("第一天摘桃子的个数为%d\n",j);
return 0;
}
③ c语言程序设计实验报告
五、 课程设计小结心得体会
1设计思想
1)、设定一个一维数组,可先按员工序号设定每位员工的工资
2)、利用While语句和Prinft语句完成用户菜单的设计
功能为:第1项 设为员工编号和工资数据
第2项 设为修改员工工资数据
第3项 设为查询员工工资数据
第4项 设为结束系统
3)、当用户选择1、2项时,需输入员工编号,所以需要设计编号校正功能,如果出错可输出“The error employe number”
4)、当选择2时,进行工资数据的修改,并将新数据存回该员工的工资数组中
5)、利用for循环中判断语句,将用户工资数与数组中的工资数进行比较,如相同则输出,将计数器加1,如此下去,直到把整个数组遍历一遍
6)、判断计数器是否为0, 是0表示找不到相符的工资,如果不为0,则输出共查出几比相符的工资
以上当然里面也涉及了“函数的模块化”理念,可以避免但需要重复打印头文件时重复编写打印信头的语句。像这样的程序是多见的,这样不但降低了程序还发效率,而且耗时浪费资源“共用体”的使用简化了程序的“复杂”性,正如(4)中,学号与姓名同时表示一个人,但在函数使用了“共用体”,从而程序的简单可以便于纠错,查找问题,避免了代码的重复,这样就给编译时带来了一定的难度与“量”的繁杂。一般不采取这样的做法,力求“简单、明了、清晰”。
④ C语言程序实验课
#include<stdio.h>
intmain(){
inta=0;
intb=0;
intc=0;
intmax=0;
scanf("%d%d%d",&a,&b,&c);
max=a>b?a:b;
max=max>c?max:c;
printf("%d ",max);
return0;
}#include<stdio.h>
intmain(){
intscore;
chargrade;
scanf("%d",&score);
if(score>=90)
{
grade='A';
}
elseif(score>=80&&score<90)
{
grade='B';
}
elseif(score>=70&&score<80)
{
grade='C';
}
elseif(score>=60&&score<70)
{
grade='D';
}
else{
grade='E';
}
switch(grade)
{
case'A':
printf("A");
break;
case'B':
printf("B");
break;
case'C':
printf("C");
break;
case'D':
printf("D");
break;
case'E':
printf("E");
break;
}
return0;
}#include<stdio.h>
intmain(){
intx=0,y=0;
scanf("%d",&x);
if(x<1)
{
y=x;
}
elseif(x<10&&x>=1)
{
y=2*x-1;
}
elseif(x>=10)
{
y=3*x+11;
}
printf("%d ",y);
return0;
}
⑤ C语言实验
哈夫曼编码(Huffman Coding)是一种编码方式,以哈夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。 在计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。这种方法是由David.A.Huffman发展起来的。 例如,在英文中,e的出现概率很高,而z的出现概率则最低。当利用哈夫曼编码对一篇英文进行压缩时,e极有可能用一个位(bit)来表示,而z则可能花去25个位(不是26)。用普通的表示方法时,每个英文字母均占用一个字节(byte),即8个位。二者相比,e使用了一般编码的1/8的长度,z则使用了3倍多。倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。
本文描述在网上能够找到的最简单,最快速的哈夫曼编码。本方法不使用任何扩展动态库,比如STL或者组件。只使用简单的C函数,比如:memset,memmove,qsort,malloc,realloc和memcpy。
因此,大家都会发现,理解甚至修改这个编码都是很容易的。
背景
哈夫曼压缩是个无损的压缩算法,一般用来压缩文本和程序文件。哈夫曼压缩属于可变代码长度算法一族。意思是个体符号(例如,文本文件中的字符)用一个特定长度的位序列替代。因此,在文件中出现频率高的符号,使用短的位序列,而那些很少出现的符号,则用较长的位序列。
编码使用
我用简单的C函数写这个编码是为了让它在任何地方使用都会比较方便。你可以将他们放到类中,或者直接使用这个函数。并且我使用了简单的格式,仅仅输入输出缓冲区,而不象其它文章中那样,输入输出文件。
bool CompressHuffman(BYTE *pSrc, int nSrcLen, BYTE *&pDes, int &nDesLen);
bool DecompressHuffman(BYTE *pSrc, int nSrcLen, BYTE *&pDes, int &nDesLen);
要点说明
速度
为了让它(huffman.cpp)快速运行,我花了很长时间。同时,我没有使用任何动态库,比如STL或者MFC。它压缩1M数据少于100ms(P3处理器,主频1G)。
压缩
压缩代码非常简单,首先用ASCII值初始化511个哈夫曼节点:
CHuffmanNode nodes[511];
for(int nCount = 0; nCount < 256; nCount++)
nodes[nCount].byAscii = nCount;
然后,计算在输入缓冲区数据中,每个ASCII码出现的频率:
for(nCount = 0; nCount < nSrcLen; nCount++)
nodes[pSrc[nCount]].nFrequency++;
然后,根据频率进行排序:
qsort(nodes, 256, sizeof(CHuffmanNode), frequencyCompare);
现在,构造哈夫曼树,获取每个ASCII码对应的位序列:
int nNodeCount = GetHuffmanTree(nodes);
构造哈夫曼树非常简单,将所有的节点放到一个队列中,用一个节点替换两个频率最低的节点,新节点的频率就是这两个节点的频率之和。这样,新节点就是两个被替换节点的父节点了。如此循环,直到队列中只剩一个节点(树根)。
// parent node
pNode = &nodes[nParentNode++];
// pop first child
pNode->pLeft = PopNode(pNodes, nBackNode--, false);
// pop second child
pNode->pRight = PopNode(pNodes, nBackNode--, true);
// adjust parent of the two poped nodes
pNode->pLeft->pParent = pNode->pRight->pParent = pNode;
// adjust parent frequency
pNode->nFrequency = pNode->pLeft->nFrequency + pNode->pRight->nFrequency;
这里我用了一个好的诀窍来避免使用任何队列组件。我先前就直到ASCII码只有256个,但我分配了511个(CHuffmanNode nodes[511]),前255个记录ASCII码,而用后255个记录哈夫曼树中的父节点。并且在构造树的时候只使用一个指针数组(ChuffmanNode *pNodes[256])来指向这些节点。同样使用两个变量来操作队列索引(int nParentNode = nNodeCount;nBackNode = nNodeCount –1)。
接着,压缩的最后一步是将每个ASCII编码写入输出缓冲区中:
int nDesIndex = 0;
// loop to write codes
for(nCount = 0; nCount < nSrcLen; nCount++)
{
*(DWORD*)(pDesPtr+(nDesIndex>>3)) |=
nodes[pSrc[nCount]].dwCode << (nDesIndex&7);
nDesIndex += nodes[pSrc[nCount]].nCodeLength;
}
(nDesIndex>>3): >>3 以8位为界限右移后到达右边字节的前面
(nDesIndex&7): &7 得到最高位.
注意:在压缩缓冲区中,我们必须保存哈夫曼树的节点以及位序列,这样我们才能在解压缩时重新构造哈夫曼树(只需保存ASCII值和对应的位序列)。
解压缩
解压缩比构造哈夫曼树要简单的多,将输入缓冲区中的每个编码用对应的ASCII码逐个替换就可以了。只要记住,这里的输入缓冲区是一个包含每个ASCII值的编码的位流。因此,为了用ASCII值替换编码,我们必须用位流搜索哈夫曼树,直到发现一个叶节点,然后将它的ASCII值添加到输出缓冲区中:
int nDesIndex = 0;
DWORD nCode;
while(nDesIndex < nDesLen)
{
nCode = (*(DWORD*)(pSrc+(nSrcIndex>>3)))>>(nSrcIndex&7);
pNode = pRoot;
while(pNode->pLeft)
{
pNode = (nCode&1) ? pNode->pRight : pNode->pLeft;
nCode >>= 1;
nSrcIndex++;
}
pDes[nDesIndex++] = pNode->byAscii;
}
⑥ 学院c语言实验报告选择结构程序设计
一、
scanf("%lf", x); 改为scanf("%lf", &x);
y = 1 / x 没加分号
二、if( a + b > c || b + c > a || a + c > b)改成if( !(a + b > c || b + c > a || a + c > b) )
⑦ 大学C语言程序设计实验报告,求程序步骤。
#include<stdio.h>
void main()
{ float f=555.5678,ff;
int a[10]={ 0,1,2,3,4,5,6,7,8,9 },b[10],i;
FILE *fp;
if ( fp=fopen("TEXT.dat","wb+") )
{ fwrite(&f,sizeof(float),1,fp);
for ( i=0;i<10;i++ ) fwrite(&a[i],sizeof(int),1,fp);
fclose(fp);
} else printf("无法建立文件。\n"); goto ERROREND;
if ( fp=fopen("TEXT.dat","rb") )
{ fread(&ff,sizeof(float),1,fp);
for ( i=0;i<10;i++ ) fread(&b[i],sizeof(int),1,fp);
fclose(fp);
} else printf("无法打开文件。\n"); goto ERROREND;
printf("%.2f ",ff); for ( i=0;i<10;i++ ) printf("%d ",b[i]); printf("\n");
ERROREND:;
}
⑧ C语言循环实验
#include"stdio.h"
#include"string.h"
intmain()
{
chars[110];
intcnt;
gets(s);
intlen=strlen(s);
cnt=0;
intflag=0;
int_flag=0;
for(inti=0;i<=len;i++)
{
if((s[i]>='0'&&s[i]<='9')&&(s[i+1]=='.'&&(s[i+2]>='0'&&s[i+2]<='9')))
{
_flag=1;//出现数字标记
continue;
}
if(_flag==1)
{
cnt--;//前面有数字,现在不是数字,说明增加了一个整数
_flag=0;
// 处理了部分小数问题如果是0.3之类的还是会有问题的
}
}
for(inti=0;i<=len;i++)
{
if((s[i]>='0'&&s[i]<='9'))
{
flag=1;//出现数字标记
continue;
}
if((flag==1))
{
cnt++;//前面有数字,现在不是数字,说明增加了一个整数
flag=0;
}
}
printf("%d ",cnt);
getchar();
return0;
}
基本在下面的兄弟上面改进了点 ============貌似被我改难看了..楼下别怪我啊,,,,大哥你的代码看起来很舒服的..