C语言程序设计基础训练资料.docx
《C语言程序设计基础训练资料.docx》由会员分享,可在线阅读,更多相关《C语言程序设计基础训练资料.docx(78页珍藏版)》请在冰豆网上搜索。
C语言程序设计基础训练资料
广东财经大学信息学院
C语言程序设计课程设计
基础训练
专业:
计算机科学与技术(创新实验班)
班级:
学号:
14151106144
姓名:
黄瑜宏
成绩:
指导老师:
赖庆
完成日期:
2015年6月25日
1、菜单实现
1、代码
#include
#include
#include
#include
voidfinnum();
voiddiamond();
intmenu_select();
voidmain()
{
for(;;)
{
switch(menu_select())
{
case1:
findnum();break;
case2:
diamond();break;
case3:
printf("goodbye");
exit(0);
}
}
}
intmenu_select()
{
chars;
intcn;
printf("dindnum\n");
printf("diamond\n");
printf("goodbye\n");
printf("input1-3:
");
do{
s=getchar();
cn=(int)s-48;
}while(cn<0||cn>3);
returncn;
}
voidfindnum()
{
inti;
printf("填上什么数字?
可以使得下面的式子成立");
printf("shizi\n");
printf("求解结果为\n");
for(i=1;i<10;i++)
if((30+i)*6237==(10*i+3)*3564)
{
printf("number=%d\n",i);
break;
}
}
voiddiamond()
{
inti,j,k;
printf("打印菱形图案。
\n");
for(i=1;i<=4;i++)
{
for(j=1;j<=16-i;j++)
printf("");
for(k=1;k<=(2*i-1);k++);
printf("\n");
}
}
2、编译截图
2、计算机基础解题
1、寻找成绩最佳者
⑴、代码
#include
voidmain()
{
intk=0,sum=0,flag=0;
chartongxue='';
for(k=1;k<=4;k++)
{
tongxue=64+k;
sum=(tongxue!
='A')+(tongxue=='C')+(tongxue=='D')+(tongxue!
='D');
if(sum==3)
{
printf("%c是最佳成绩者\n",tongxue);
flag=1;
}
}
if(flag!
=1)
printf("无解!
");
}
⑵、编译截图
3、使用数组和指针统计成绩
1、使用数组实现
⑴、代码
#include
#include
voidmain()
{
inti,sum=0,min=100;
inta[8]={75,80,83,85,86,30};
char*meanlow[4]={"人数","平均成绩","最低分数的科目成绩","最低分数的科目"};//字符串的长度不一样,所以使用字符指针数组meanlow来实现
charname[6][5]={"数学","物理","外语","政治","体育"};
printf("原始信息如下:
\n");
for(i=0;i<5;i++)
printf("%s:
%d\n",name[i],a[i]);
for(i=0;i<3;i++)
{
printf("%s:
%d\n",meanlow[i],a[i+5]);
}
printf("%s:
\n",meanlow[i]);
for(i=0;i<5;i++)
{
sum=sum+a[i];
if(min>a[i])min=a[i];
}
a[6]=sum/5;
a[7]=min;
for(i=0;i<5;i++)
if(min==a[i])
{
strcpy(name[5],name[i]);
break;
}
printf("\n全班各科的平均成绩如下:
\n");
for(i=0;i<5;i++)
printf("%s:
%d\n",name[i],a[i]);
printf("\n统计结果如下:
\n");
for(i=0;i<3;i++)
{
printf("%s:
%d\n",meanlow[i],a[i+5]);
}
printf("%s:
%s\n",meanlow[3],name[5]);
}
⑵、编译截图
2、使用分配内存实现
⑴、代码
//使用分配的内存实现
#include
#include
#include
voidmain()
{
inti,*p,min=100,sum=0;
inta[8]={75,80,83,85,86,30};
char*meanlow[4]={"人数","平均成绩","最低分数的科目成绩","最低分数的科目"};//字符串的长度不一样,所以使用字符指针数组meanlow来实现
charname[6][5]={"数学","物理","外语","政治","体育"};
for(i=0;i<5;i++)
printf("%s:
%d\n",name[i],a[i]);
for(i=0;i<3;i++)
{
printf("%s:
%d\n",meanlow[i],a[i+5]);
}
//计算,服用P
p=a;
for(i=0;i<5;i++)
{
sum=sum+p[i];
if(min>p[i])min=p[i];
}
a[6]=sum/5;
a[7]=min;
//分配内存地址
p=(int*)malloc(8*sizeof(int));//申请8个存储int数据的空间
if(p==NULL)
{
printf("内存分配错误");
exit
(1);
}
//存储
for(i=0;i<8;i++)
*(p+i)=a[i];
for(i=0;i<5;i++)
if(min==*(p+i))
{
strcpy(name[5],name[i]);
break;
}
printf("\n全班各科平均成绩如下:
\n");
for(i=0;i<5;i++)
printf("%s:
%d\n",name[i],*(p+i));
printf("\n统计结果如下:
\n");
for(i=0;i<3;i++)
printf("%s:
%d\n",meanlow[i],*(p+i+5));
printf("%s:
%s\n",meanlow[3],name[5]);
//释放内存
free(p);
}
3、将数组内容全部存入内存
⑴、代码
//使用分配的内存实现
#include
#include
#include
voidmain()
{
inti,*p,min=100,sum=0;
inta[8]={75,80,83,85,86,30};
char*meanlow[4]={"人数","平均成绩","最低分数的科目成绩","最低分数的科目"};//字符串的长度不一样,所以使用字符指针数组meanlow来实现
charname[6][5]={"数学","物理","外语","政治","体育"};
for(i=0;i<5;i++)
printf("%s:
%d\n",name[i],a[i]);
for(i=0;i<3;i++)
{
printf("%s:
%d\n",meanlow[i],a[i+5]);
}
//计算,服用P
p=a;
for(i=0;i<5;i++)
{
sum=sum+p[i];
if(min>p[i])min=p[i];
}
a[6]=sum/5;
a[7]=min;
//分配内存地址
p=(int*)malloc(8*sizeof(int));//申请8个存储int数据的空间
if(p==NULL)
{
printf("内存分配错误");
exit
(1);
}
//存储
for(i=0;i<8;i++)
*(p+i)=a[i];
for(i=0;i<5;i++)
if(min==*(p+i))
{
strcpy(name[5],name[i]);
break;
}
printf("\n全班各科平均成绩如下:
\n");
for(i=0;i<5;i++)
printf("%s:
%d\n",name[i],*(p+i));
printf("\n统计结果如下:
\n");
for(i=0;i<3;i++)
printf("%s:
%d\n",meanlow[i],*(p+i+5));
printf("%s:
%s\n",meanlow[3],name[5]);
//释放内存
free(p);
}
4、典型的算法和简单的文件编程结构
1、SinX的求值
⑴、代码
#include
#include
voidmain()
{
doublex,sinx,item,min=0.0005;
intn=1,sign=-1;
printf("输入度数:
");
while(scanf("%lf",&x)!
=EOF){
while(x>360)
x=x-360;
x=x*3.14159/180;
sinx=x;
item=x;
while(fabs(item)>min)//计算的级数的绝对值小于指定的一个很小的量时,计算终止。
{
item=item*x*x/(n+1)/(n+2);
sinx=sinx+sign*item;
n=n+2;
sign=(-1)*sign;
}
printf("sinx=%lf\n",sinx);
}
}
⑵、截屏
2、递归算法
全部内容的代码如下:
//狗熊吃包谷问题
/*/#include
voidmain()
{
intday=9,x=1;
while(day>0)
{
x=(x+1)*2;
day--;
}
printf("包谷总数=%d\n",x);
}
/*/
//捕鱼问题
/*/#include
voidmain()
{
intfish[6]={1,1,1,1,1,1};
inti=0;
do{
fish[5]=fish[5]+5;
for(i=4;i>=1;i--)
{
if(fish[i+1]%4!
=0)
break;
elsefish[i]=fish[i+1]*5/4+1;
}
}while(i>=1);
for(i=1;i<=5;i++)
printf("第%d个人看到的鱼是%d条.\n",i,fish[i]);
}
/*/
//利用地柜求5!
/*/#include
intfactorial(int);
voidmain()
{
intn;
printf("inputn=");
scanf("%d",&n);
printf("%d!
=%d\n",n,factorial(n));
}
intfactorial(intx)
{
if(x==0)return1;
elsereturn(x*factorial(x-1));
}
/*/
//线性查找
//因为程序不能改变指定数组元素的值,所以使用前缀const声明它
/*/#include
intlinearsearch(constinta[],intkey,intn);//声明查找函数原型
voidmain()
{
intkey,b;
constinta[]={1,3,5,7,9,2,4,6,8,10};//定义常量数组,只能使用不能改变
printf("输入查找关键字:
");
scanf("%d",&key);
b=linearsearch(a,key,10);
if(b!
=-1)
printf("关键字在数组中为a[%d]\n",b);
else
printf("数组中午次数!
\n");
}
//线性查找函数
//n为给定数组的有效长度
intlinearsearch(constinta[],intkey,intn)
{
inti;
for(i=0;i{
if(a[i]==key)
returni;
}
return-1;
}
/*/
//二分查找
/*/#include
intbinarysearch(constinta[],intkey,intn);
voidmain()
{
intkey,b;
constinta[]={11,12,15,17,19,22,24,36,48,50};
printf("输入查找关键字:
");
scanf("%d",&key);
b=binarysearch(a,key,10);
if(b!
=-1)
printf("关键字在数组中为a[%d]",b);
elseprintf("数组中无此数\n");
}
//线性查找函数
//n,给定数组的有效长度
//key:
查找关键字
intbinarysearch(constinta[],intkey,intn)
{
intmiddle=0;
intlow=0;
inthight=n;
while(low<=hight)
{
middle=(low+hight)/2;
if(a[middle]==key)
returnmiddle;
elseif(a[middle]>key)
hight=middle-1;
elselow=middle+1;
}
return-1;
}
/*/
//冒泡排序
/*/#include
voidmain()
{
inti=0,j=0,p=0;
inta[7]={0,1,8,3,9,5,4};
for(i=1;i<=5;i++)
for(j=1;j=6-i;j++)
if(a[j]p=a[j];
a[j]=a[j+1];
a[j+1]=p;
}
for(i=6;i>0;i--)
printf("a[%d]=%d\n",i,a[i]);
}
/*/
//鸡兔同笼算法一
/*/#include
voidmain()
{
intsum=0;
inti,j;
for(i=1;i<35;i++)
{
sum++;
for(j=1;j<35;j++)
{
sum++;
if((i+j==35)&&(2*i+4*j==94))
printf("jiyou%d,tuyou%dzhi\n",i,j);
}
}printf("一共循环%d.\n",sum);
}
/*/
//鸡兔同笼算法该进
#include
voidmain()
{
intsum=0;
inti,j;
for(i=1;i<24;i++)
{
sum++;
for(j=35-i;j<13;j++)
{
sum++;
if((i+j==35)&&(2*i+4*j==94))
printf("jiyou%d,tuyou%dzhi\n",i,j);
}
}printf("一共循环%d.\n",sum);
}
依次的截屏
狗熊吃包谷:
捕鱼问题:
利用递归求5!
:
线性查找:
二分查找:
鸡兔同笼:
5、多文件编程
1、代码
//s5.h
#include
#include
#include
externconstintSIZE;
double*init(int);
voidreadin(double*);
voidproduct(double*,double*,intn);
voidsort(x,a,SIZE);
(2)init.c文件//申请内存空间,返回内存块的首地址
#include"s5.h"
double*init(intn)
{
return(double*)malloc(n*sizeof(double));
}
(3)readin.c文件//输入数据到内存块
#include"s5.h"
voidreadin(double*a)
{
inti;
printf("Pleaseenter%dvalue:
\n",SIZE);
for(i=0;i{
scanf("%lf",a+i);
}
}
(4)product.c文件//求解数据的积
#include"s5.h"
voidproduct(double*addr,double*result,intn)
{
for(n--,*result=*(addr+n);--n>=0;*result*=*(addr+n))
;
}
(5)sort.c文件//数据排序
#include"s5.h"
voidswap(double*,double*);
voidsort(double*x,doublea[],intn)
{
inti,j,pick;
for(i=0;ia[i]=*(x+i);
for(i=0;i<(n-1);++i)
{
pick=i;
for(j=i+1;j{
if(a[j]pick=j;
}
swap(&a[pick],&a[i]);
}
}
voidswap(double*p1,double*p2)
{
doubletemp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
(6)s5.c文件//主函数
#include"s5.h"
constintSIZE=10;
intmain()
{
double*x,*y,res,a[10]={0.0};
inti;
if((x=init(SIZE))==NULL)
return0;
readin(x);
product(x,&res,SIZE);
printf("Theirproductis:
%10.2f\n",res);
printf("\tx:
\n");
for(i=0;i{
if(i==5)
printf("\n");
printf("%10.2f",*(x+i));
}
printf("\n\ta:
\n");
sort(x,a,SIZE);
for(i=0;i{
if(i==5)
printf("\n");
printf("%10.2f",*(a+i));
}
printf("\n\ty:
\n");
if((y=init(SIZE))==NULL)
return0;
for(i=0;i*y=a[i]*SIZE;
for(--y,i=SIZE;i>0;i--,y--)
{
if(i==5)
printf("\n");
printf("%10.2f",*y);
}
printf("\n");
++y;
free(y);
free(x);
return0;
}
6、函数设计
1、代码
//s6.h
#ifndefS