1.题目:创建单链表并赋值,要求遍历能输出1~9
#include <stdio.h>
#include <stdlib.h>
#define MAN_ERR 0
#define MAN_OK 1
struct node
{
int num;
struct node * next;
};
typedef struct node Node;
typedef struct node * link;
void create_link(link * head)
{
*head = (link)malloc(sizeof(Node));
(*head)->next = NULL ;
}
int is_malloc_ok(link new_node)
{
if(new_node == NULL)
{
printf("empty!\n");
return MAN_ERR;
}
else
{
return MAN_OK;
}
}
void create_node(link * new_node, int i)
{
(*new_node)=(link)malloc(sizeof(Node));
while(is_malloc_ok(*new_node)==MAN_ERR)
{
(*new_node)=(link)malloc(sizeof(Node));
}
(*new_node)->num = i;
}
void insert_node_tail(link head, link new_node)
{
link p;
p=head;
while(p->next != NULL)
{
p=p->next;
}
p->next = new_node;
new_node = NULL;
}
void display_link(link head)
{
link p;
p=head;
if( p == NULL)
{
printf("link is empty!\n");
}
else
{
while(p->next != NULL)
{
printf("num=%d\n",(p->next)->num);
p=p->next;
}
}
}
void release_link(link * head)
{
link p;
p=*head;
if( p == NULL)
{
printf("link is empty!\n");
}
else
{
while( p != NULL)
{
*head = (*head)->next;
free(p);
p=*head;
}
}
}
int main()
{
link head = NULL;
link new_node = NULL;
int i;
create_link(&head);
for(i=0;i<10;i++)
{
create_node(&new_node,i);
insert_node_tail(head,new_node);
}
display_link(head);
printf("\n\n");
release_link(&head);
display_link(head);
return 0;
}
2.题目:读取一个5*5数组,然后显示每行的和与每列的和
#include <stdio.h>
#include <time.h>
#define N 5
int main()
{
int a[5][5];
int i, j;
srand((unsigned)time(NULL));
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
a[i][j]=rand()%100;
printf("%3d",a[i][j]);
}
printf("\n");
}
int k=0, sum=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
k=a[i][j];
sum=sum+k;
}
printf("%5d",sum);
}
printf("\n");
k=0;
sum=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
k=a[j][i];
sum=sum+k;
}
printf("%5d",sum);
}
printf("\n");
return 0;
}
4.题目:生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的? (第七届蓝桥杯B组真题(第二题))
#include <stdio.h>
int main()
{
int i, j, sum;
int n=236;
for(i=1;i<=100;i++)
{
sum=0;
for(j=i;j<=100;j++)
{
sum=sum+j;
if(sum>=n)
{
break;
}
}
if(sum==n)
{
break;
}
}
printf("从%3d岁开始过生日到现在%3d岁\n",i,j);
return 0;
}
5.题目:编程实现查找两个字符串的最大公共子串
示例:“aocdfe"和"pmcdfa"最大公共子串为"cfd”
#include <stdio.h>
#include <string.h>
void print(char *c)
{
int i;
for(i=0;c[i]!='\0';i++)
{
printf("%c",c[i]);
}
printf("\n");
}
void common_str(char *a , char *b)
{
char c[20];
int i, j=0;
for(i=0;a[i]!='\0' && b[i]!='\0';)
{
if(a[i]==b[i])
{
c[j++]=a[i++];
}
else
{
++i;
}
}
c[j] ='\0';
print(c);
}
int main()
{
char a[20]={'\0'}, b[20]={'\0'};
printf("please input:");
gets(a);
printf("please input:");
gets(b);
common_str(a,b);
return 0;
}
补充:
编程实现字符串中子串的查找
请写一个函数,实现从一个字符串中,查找另一个字符串的位置,如strstr(“12345”, “34”)返回值为2,
即在2号位置找到字符串“34”
#include <stdio.h>
#include <string.h>
int str_str(char *a, char *b)
{
int i=0, j=0, k;
while(a[i]!=b[j])
{
++i;
}
if(a[i]==b[j])
{
k=i;
}
while(a[i]==b[j])
{
++j;
++i;
if(b[j]=='\0')
{
break;
}
else
continue;
}
if(b[j]=='\0')
return k;
else
return -1;
}
int main()
{
char a[20]={'\0'}, b[15]={'\0'};
printf("please input:");
gets(a);
printf("please input:");
gets(b);
str_str(a,b);
if(str_str(a,b)!= -1)
printf("%2d\n",str_str(a,b));
else
printf("not str\n");
return 0;
}