目录
1、候选人计票程序
设计一个进行候选人的选票程序。假设有三位候选人,在屏幕上输入要选择的候选人姓名,有10次投票机会,最后输出每个人的得票结果。
#include<stdio.h>
#include<string.h>
struct candidate
{
char name[20];
int count;
} cndt[3]={{"王",0},{"张",0},{"李",0}};
int main()
{
char Ctname[20];
int i,j;
for(i=1;i<=10;i++)
{
scanf("%s",&Ctname);
for(j=0;j<3;j++)
{
if(strcmp(Ctname,cndt[j].name)==0)
cndt[j].count++;
}
}
for(i=0;i<3;i++)
{
printf("%s: %d\n",cndt[i].name,cndt[i].count);
}
}
运行结果
2、创建单链表
要求实现创建一个简单的链表,并将这个链表中数据输出到窗体上。
#include<stdio.h>
#include<malloc.h>
struct LNode
{
int data;
struct LNode *next;
};
struct LNode *create(int n)
{
int i;
struct LNode *head,*p1,*p2;
int a;
head = NULL;
printf("输入整数:\n");
for(i=n;i>0;--i)
{
p1=(struct LNode*)malloc(sizeof(struct LNode));
scanf("%d",&a);
p1->data=a;
if(head==NULL)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
}
p2->next=NULL;
return head;
}
int main()
{
int n;
struct LNode *q;
printf("输入你想创建的结点个数:");
scanf("%d",&n);
q=create(n);
printf("结果是:\n");
while(q)
{
printf("%d ",q->data);
q=q->next;
};
printf("\n");
}
运行结果
3、创建双链表
要求实现创建一个双链表,并把这个链表中数据输出到窗体上,输入要查找的学生姓名,将查找到的姓名从链表中删除,并显示删除后的链表。
#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct node
{
char name[20];
struct node *prior,*next;
}stud;
stud *create(int n)
{
stud *p, *h, *s;
int i;
h = (stud*)malloc(sizeof(stud));
h->name[0] = '\0';
h->prior = NULL;
h->next = NULL;
p = h;
for (i = 0; i < n; i++)
{
s = (stud*)malloc(sizeof(stud));
p->next = s;
printf("输入第%d个学后的姓名:",i + 1);
scanf("%s", s->name,20);
s->prior = p;
s->next = NULL;
p = s;
}
p->next = NULL;
return h;
}
stud *search(stud *h, char *x)
{
stud *p;
char *y;
p = h->next;
while (p)
{
y = p->name;
if (strcmp(y, x) == 0) {
return p;
}
else
p = p->next;
}
printf("没有找到数据!\n");
return NULL;
}
void del(stud *p) {
if (p->next == NULL) {
p->prior->next = NULL;
free(p);
}
else
{
p->next->prior = p->prior;
p->prior->next = p->next;
free(p);
}
}
int main(void) {
int number;
char sname[20];
stud *head, *sp;
puts("请输入链表的大小:");
scanf("%d", &number);
head = create(number);
sp = head->next;
printf("\n现在这个双链表是:\n");
while (sp)
{
printf("%s ", &*(sp->name));//%s是字符串解析,所以要解引后的取地址
sp = sp->next;
}
printf("\n请输入你想查找的姓名:\n");
scanf("%s", sname,20);
sp = search(head, sname);
printf("你想查找的姓名是:%s\n", sp->name);
del(sp);
sp = head->next;
printf("现在这个双链表是:\n");
while (sp)
{
printf("%s ", &*(sp->name));//%s是字符串解析,所以要解引后的取地址
sp = sp->next;
}
printf("\n");
puts("\n按任意键退出...");
return 0;
}
运行结果
4、创建循环链表
实现创建一个循环链表。
#include<stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct student
{
int num;
struct student *next;
}LNode,*LinkList;
LinkList create(void)
{
LinkList head;
LNode *p1,*p2;
char a;
head = NULL;
a = getchar();
while(a!='\n')
{
p1=(LNode*)malloc(sizeof(LNode));
p1->num=a;
if(head==NULL)
head = p1;
else
p2->next = p1;
p2=p1;
a=getchar();
}
p2->next = head;
return head;
}
int main()
{
LinkList L1,head;
printf("请输入循环链表:\n");
L1 = create();
head = L1;
printf("这个合成的链表是:\n");
printf("%c ",L1->num);
L1 = L1->next;
while(L1!=head)
{
printf("%c ",L1->num);
L1 = L1->next;
}
printf("\n");
}
运行结果
5、使用头插入法建立单链表
#include<stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct student
{
int num;
struct student *next;
}LNode,*LinkList;
LinkList create(void)
{
LinkList head;
LNode *p1;
char a;
head = NULL;
printf("请输入链表元素:\n");
a = getchar();
while(a!='\n')
{
p1=(LinkList)malloc(sizeof(LNode));
p1->num=a;
p1->next = head;
head=p1;
a=getchar();
}
return head;
}
int main()
{
LinkList L1;
L1=create();
printf("这个链表是:\n");
while(L1)
{
printf("%c ",L1->num);
L1 = L1->next;
}
printf("\n");
}
运行结果
6、使用指针交换两个数组中的最大值
在屏幕上输入两个分别带有5个元素的数组,使用指针实现将两个数组中的最大值交换,并输出交换最大值之后的两个数组。
#include<stdio.h>
int *max(int *a,int n);
int swap(int*pa,int *pb);
#define N 5
int *max(int *a,int n)
{
int *p,*q;
q=a;
for(p=a+1;p<a+n;p++)
{
if(*p>*q)
{
q=p;
}
}
return q;
}
int swap(int *pa,int *pb)
{
int temp;
temp=*pa;
*pa=*pb;
*pb=temp;
}
int main()
{
int a[N],b[N];
int *pa,*pb,*p;
printf("input array a with 5 element\n");
for(p=a;p<a+N;p++)
{
scanf("%d",p);
}
printf("input array b with 5 element\n");
for(p=b;p<b+N;p++)
{
scanf("%d",p);
}
pa=max(a,N);
pb=max(b,N);
printf("The max numbers are %d and %d\n",*pa,*pb);
swap(pa,pb);
printf("now a: ");
for(p=a;p<a+N;p++)
{
printf("%3d",*p);
}
printf("\nnow b:");
for(p=b;p<b+N;p++)
{
printf("%3d",*p);
}
printf("\n");
return 0;
}
运行结果
7、输出二维数组的一个元素
要求在窗体上输出一个3行4列的数组,输入要显示数组元素的所在行数和列数,并在窗体上显示该数组的元素值。
#include<stdio.h>
#include <conio.h>
main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p,(*pt)[4],i,j;
printf("The array is :");
for(p=a[0];p<a[0]+12;p++)
{
if((p-a[0])%4==0)
{
printf("\n");
}
printf("%4d",*p);
}
printf("\n");
printf("Please input the position like:i= ,j= \n");
pt=a;
scanf("i=%d,j=%d",&i,&j);
printf("a[%d,%d]=%d\n",i,j,*(*(pt+i)+j));
getch();
}
运行结果
8、商品信息的动态存放
动态分配一块内存区域,并存放一个商品信息。
#include<stdio.h>
#include <stdlib.h>
main()
{
struct com
{
int num;
char *name;
int count;
double price;
}*commodity;
commodity=(struct com*)malloc(sizeof(struct com));
commodity->num;
commodity->name="苹果";
commodity->count=100;
commodity->price=2.1;
printf("编号=%d\n名称=%s\n数量=%d\n价格=%f\n",commodity->num,
commodity->name,commodity->count,commodity->price);
}
运行结果
9、利用宏定义求偶数和
编写程序实现利用宏定义求1~100的偶数和,定义一个宏判断一个数是否为偶数。
#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define EVEN(x) (((x)%2==0)?TRUE:FALSE)
int main()
{
int sum,i;
sum = 0;
for(i+1;i<=100;i++)
{
if(EVEN(i))
sum+=i;
}
printf("SUM=%d\n",sum);
}
运行结果
10、使用条件编译隐藏密码
一般输入密码时都会用星号*来替代,用以增强安全性。要求设置一个宏,规定宏体为1,在正常情况下密码显示为*号的形式,在某些特殊的时候,显示为字符串。
#include<stdio.h>
#define PWD 1
int main()
{
char *s="mrsoft";
#if PWD
printf("******\n");
#else
printf("%s\n",s);
#endif
}
运行结果