C语言实践篇---代码和功能鉴赏

网易免费个人主页

/实践一、本程序是豆豆站长在奥运会申办成功后,抑制不住自己的兴奋之情,参考的他那选举的过程而编写的一个模拟程序,已在Turboc2.0上通过运行,如有不足请高手指教。/
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void menu()
{clrscr();
printf(“--------奥运会选票器------------\n”);
printf(" 选择你信任的城市\n");
printf(“1.北京 2.多仑多 3.大坂\n”);
printf(“4.衣斯坦布耳 5.结果 6.退出\n”);
printf(“---------------------------------\n”);
}
void fun()
{
int i;
static int b=0,a=0,j=0,c=0;
char ch,pass[100],que;
while(1)
{menu();
printf(“选择你信任的城市或结果:”);
scanf(“%d”,&i);getchar();
if(i<1||i>6)
{
printf(“请重新选择\n”);
getchar();
fun();
}
switch(i)
{
case 1:printf(“这是北京你确定吗?—[y/n]\n”);
scanf(“%c”,&ch);
getchar();
if(ch==‘y’){ b++;break;}
else printf(“请重新选择\n”);
fun();
case 2:printf(“这是多仑多你确定吗?—[y/n]\n”);
scanf(“%c”,&ch);
getchar();
if(ch==‘y’) {a++;break;}
else printf(“请重新选择\n”);
fun();
case 3:printf(“这是大坂你确定吗?—[y/n]\n”);
scanf(“%c”,&ch);
getchar();
if(ch==‘y’) {j++;break;}
else printf(“请重新选择\n”);
fun();
case 4:printf(“这是衣斯坦布耳你确定吗?—[y/n]\n”);
scanf(“%c”,&ch);
getchar();
if(ch==‘y’){ c++;break;}
else printf(“请重新选择\n”);
fun();
case 5:printf(“请输入密码\n”);
scanf(“%s”,pass);
if(strcmp(pass,“dzg”)==0) goto L1;
else{printf(“error\n”);getchar(); fun();}
case 6:exit(0);
}
}
L1:
printf(“您选择的结果是:”);
printf(“北京:%d,多仑多:%d,大坂:%d,衣斯坦布耳:%d\n”,b,a,j,c);
getchar();
printf(“你要继续选择吗?—[y/n]”);
scanf(“%c”,&que);
getchar();
if(que==‘y’)
fun();
else exit(0);
}
void main()
{ menu();
fun();
}

/实践二、说明:此程序是豆豆站长在学习C语言初期的一个课程设计,功能是:建立一个小型的数据库,将一个学校里学生的姓名、出生日期、性别、学好输入其中,并可以通过此程序进行筛选、排序、查找、删除、插入等功能,此程序适用于学过C语言和数据结构的人员参考。如有不足请高手指教/
#define Maxsize 50
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
void funct1(struct list l);
void funct2(struct list l);
void funct3(struct list l);
void funct4(struct list l);
struct jwcrsjb
{
long num;
char name[20];
char sex[10];
long born;
};
struct list
{
struct jwcrsjb List[Maxsize];
int size;
};
void Initlist(struct list l)
{
l->size=0;
}
void Insertreal(struct list l,struct jwcrsjb x)
{
if(l->size==Maxsize) {printf(“overflow\n”); exit(0);}
l->List[l->size]=x;
l->size++;
}
void Inserti(struct list l,int i,struct jwcrsjb x)
{
int j;
if(i<1||i>l->size) {printf(“error!”); exit(0);}
if(l->size>=Maxsize){printf(“overflow\n”);exit(0);}
for(j=l->size-1;j>=i-1;j–)
l->List[j+1]=l->List[j];
l->List[i-1]=x;
l->size++;
}
void deletei(struct list l,int i)/delete the 'i’number temp/
{
int j;
if(i<1||i>l->size){printf(“error”);exit(0);}
if(l->size==0) {printf(“empty”); exit(0);}
for(j=i;jsize;j++)
l->List[j-1]=l->List[j];
l->size–;
}
void traverselist(struct list l)
{
int i;
for(i=0;isize;i++)
{
printf(“%ld “,l->List[i].num);
printf(”%s “,l->List[i].name);
printf(”%s “,l->List[i].sex);
printf(”%ld “,l->List[i].born);
printf(”\n”);
}
}
void selectsort(struct list l,int n)
{
int i,j,k;
struct jwcrsjb x;
if(n==0) {printf(“empty”);exit(0);}
for(i=1;i<n;i++)
{
k=i-1;
for(j=i;j<n;j++)
{if(l->List[k].num>l->List[j].num) k=j;}
if(k!=i-1)
{
x=l->List[k];
l->List[k]=l->List[i-1];
l->List[i-1]=x;
}
}
}
int search(struct list l,int low,int high,char searchname)
{
if(low<=high)
{int mid=(low+high)/2;
if(strcmp(l->List[mid].name,searchname)==0)
return mid;
else if(strcmp(l->List[mid].name,searchname)>0)
return search(l,low,mid-1,searchname);
else return search(l,mid+1,high,searchname);
}
else return -1;
}
void menu()
{
printf(“********************************************\n”);
printf(“WELCOME TO OUR DATABASE\n”);
printf(“1.creat 2.inserti\n”);
printf(“3.deletei 4.selectsort\n”);
printf(“5.search 0.exit\n”);
printf(“6.traverselist\n”);
printf("
**********************************\n");
}
void main()
{ struct list l;
struct jwcrsjb y;
int i;
int choice;
l.size=0;
while(1)
{/clrscr();/
menu();
printf(“please choose:”);
scanf(“%d”,&choice);
switch(choice)
{
case 1:
funct1(&l);
break;
case 2:
printf(“enter i:”);
scanf(“%d”,&i);
printf(“enter num:”);
scanf(“%ld”,&y.num);
printf(“enter name:”);
getche();
scanf(“%s”,y.name);
printf(“enter sex:”);
getche();
scanf(“%s”,y.sex);
printf(“enter born:”);
scanf(“%ld”,&y.born);
Inserti(&l,i,y);
break;
case 6:
traverselist(&l);
getchar();
getchar();
break;
case 3:
funct2(&l);
break;
case 4:
funct3(&l);
break;
case 5:
funct4(&l);
break;
case 0:
exit(0);
}
}
}
void funct1(struct list *l)/screct list/
{
struct jwcrsjb x;
int h,n;
Initlist(l);
printf(“how many people you want to enter:”);
scanf(“%d”,&h);
for(n=0;n<h;n++)
{
printf(“enter num:”);
scanf(“%ld”,&x.num);
printf(“enter name:”);
scanf(“%s”,x.name);
printf(“enter sex:”);
scanf(“%s”,x.sex);
printf(“enter born:”);
scanf(“%ld”,&x.born);
Insertreal(l,x);
}
}
void funct2(struct list *l)
{int i;
printf(“which people you want to delete:”);
scanf(“%d”,&i);
deletei(l,i);
}
void funct3(struct list *l)
{
int n;
printf(“how many people selectsort:”);
scanf(“%d”,&n);
selectsort(l,n);
}
void funct4(struct list *l)
{ int k;
char searchname[50];
int low,high;
printf(“Enter people name:”);
scanf(“%s”,searchname);
printf(“Enter low,high:”);
scanf(“%d,%d”,&low,&high);
k=search(l,low,high,searchname);
printf(“%d\n”,k);
}
.

/实践三、假设有序表A中10个元素的关键字序列为:(2,12,15,22,31,36,49,50,67,79)
a.用二分查找关键字等于12的元素的下标过程。
b.若要查找关键字为31,15,49的元素,则分别需要几次比较(在Turboc2.0 中已通过 )
/
#include <stdio.h>
#define N 10
int search (int A,int low, int high, int k)
{int mid;
if (low<=high)
{mid=(low+high)/2;
if(k==A[mid] ) return mid ;
else if (k<A[mid]) return search (A,low, mid-1,k);
else return search (A,mid+1,high, k);

}
else return -1;
}
void main ()
{int a[N]={2,12,15,22,31,36,49,50,67,79};
int k=0,x=0;
printf(“Enter the k:”);
scanf(“%d”,&k);
x=search(a,0,9,k);
printf(“%d\n”,x);
}
/答案:分别为4、2、6、次查找/

/* 实践四、有一组元素的排序列为(46,14,26,74,53,40,38,29)
写出直接选择排序法的排序过程 */
#include <stdio.h>
#define N 8
void selectsort(int a,int n)
{int i,j,k;
int z,x;
for (i=1;i<n;i++)
{k=i-1;
for(j=i;j<n;j++)
{ if (a[k]>a[j]) k=j; }
if(k!=i-1)
{x=a[k];
a[k]=a[i-1];
a[i-1]=x;
}
}
}
void travalete(int a,int n)
{int i;
for (i=0;i<n;i++)
printf(“%d “,a[i]);
printf(”\n”);
}
void main()
{ int A[N]={46,14,26,74,53,40,38,29};
printf(“Befor selecsort:\n”);
travalete(&A[0],N);
selectsort(&A[0],N);
printf(“After selectsort:\n”);
travalete(&A[0],N);
}

/实践五、此程序是豆豆模拟电视上用电脑随机抽奖的程序,供大家参考,如有不足请高手指教/

#include<stdlib.h>
#include<stdio.h>
#include<bios.h>
#include<conio.h>
void main()
{
long i,a[20]={
10001,10002,10003,10004,10005,
10006,10007,10008,10009,10010,
10011,10012,10013,10014,10015,
10016,10017,10018,10019,10020
};
long ch=0;
i=0;
while (ch!=539623456)
{
if(ch==11504) exit(0);
while(1)
{
gotoxy(40,12);
printf(“%ld”,a[i]);
i++;
if(i>=20) i=0;
if(bioskey(1))
{
ch=bioskey(0);
ch=getchar();
}
}
}
}

本程序是豆豆刚上大学时学习C语言时练习的代码,编程是一个创造性的劳动,但其过程是相当枯燥的,希望学习编程的兄弟姐妹们能够对这个编程产生兴趣,才能够坚持下去,而兴趣的源泉就是从编程的酸甜苦辣从体验出来的.

我运行了上面哥们的程序后对其进行了小小的修改,不知与你的程序本意相同吗?
我在vc++上进行了测试 觉得基本上跟你的本意相符.
/实践一、本程序是豆豆站长在奥运会申办成功后,抑制不住自己的兴奋之情,参考的他那选举的过程而编写的一个模拟程序,已在Turboc2.0上通过运行,如有不足请高手指教。/
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void menu()
{
clrscr();
printf(“--------奥运会选票器------------\n”);
printf(" 选择你信任的城市\n");
printf(“1.北京 2.多仑多 3.大坂\n”);
printf(“4.衣斯坦布耳 5.结果 6.退出\n”);
printf(“---------------------------------\n”);
}
void fun()
{
int i;
static int b=0,a=0,j=0,c=0;
char ch,pass[100],que;
while(1)
{
menu();
printf(“选择你信任的城市或结果:”);
scanf(“%d”,&i);

	if(i<1||i>6) 
	{ 
		printf("请重新选择\n");  
		fun(); 
	} 
	switch(i) 
	{ 
		case 1:
			printf("这是北京你确定吗?---[y/n]\n"); 
			scanf(" %c",&ch); 
			if(ch=='y')
				{ b++;break;} 
			else 
				{ printf("请重新选择\n");fun(); }
	case 2:
		printf("这是多仑多你确定吗?---[y/n]\n"); 
		scanf(" %c",&ch); 
		if(ch=='y') 
			{a++;break;} 
		else 
			{printf("请重新选择\n"); fun(); }
	case 3:
		printf("这是大坂你确定吗?---[y/n]\n"); 
		scanf(" %c",&ch);
		if(ch=='y') 
			{j++;break;} 
		else 
			{printf("请重新选择\n"); fun(); }
	case 4:
		printf("这是衣斯坦布耳你确定吗?---[y/n]\n"); 
		scanf(" %c",&ch);
		if(ch=='y')
			{ c++;break;} 
		else 
			{printf("请重新选择\n"); fun(); }
	case 5: 
		printf("请输入密码\n"); 
		scanf("%s",pass); 
		if(strcmp(pass,"dzg")==0) goto L1; 
		else
			{printf("error\n");fun();} 
	case 6:exit(0); 
	}
}

L1:
printf(“您选择的结果是:”);
printf(“北京:%d,多仑多:%d,大坂:%d,衣斯坦布耳:%d\n”,b,a,j,c);
getchar();
printf(“你要继续选择吗?—[y/n]”);
scanf(" %c",&que);
if(que==‘y’) fun();
else exit(0);
}
void main()
{
fun();
}
其他的程序编的都非常的帮!你的c运用的很好,还希望以后多多指教!
这些是你找的题目还是自己构思的?
第五个我运行不了!bois.h是什么库函数?bioskey(0)什么作用还希望老兄指导!

我看了你改我的程序,首先,我谢谢你能够详细看了我的程序,并做了你的修改,我看了你的 修改,整体上就是将我那里面的一些getchar();给删除了,不知道你删除后,运行时有没有发现什么问题。我想问题是很容易看到的。
还有bioskey函数是返回键盘上的键值的。至于详细介绍,你可以参考C语言高级教程。

你是否指是不要getchar();在输入的时候不会在那停留?我删了之后也出现了这问题,这个问题只须在scanf(" %c",&ch);中%前加个空格!就解决了!
你试运行一下!

你这样改,的确减少了几行代码。但也牺牲了程序的可读性。我个人认为,你应该在提高程序执行效率上修改啊。

删了getchar()你牺牲了可读性吗??

我不这么认为!