C 2013笔试题
1、把整数分解成素数 如90=2*3*3*5 【见2015年】#
方法一:
12345678910111213141516171819int
main()
{
int
n, i=2;
printf
(
"\nInput:"
);
scanf
(
"%d"
, &n);
printf
(
"="
);
i = 2;
while
(n > 1)
{
if
(n%i == 0)
{
printf
(
"%d"
, i);
n = n / i;
if
(n > 1)
printf
(
"*"
);
}
else
i++;
// 如果不能整除时,说明不是其素数
}
return
0;
}
方法二:
12345678910111213141516171819202122232425262728293031323334353637383940414243#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
//判读是否为质数,并带回它的最小因数(除1之外)。
int
isprime(
int
value,
int
*submultiple)
{
int
i;
for
(i=2; i<(
int
)
sqrt
(value)+1; i++)
{
if
((value%i)==0)
{
*submultiple=i;
return
0;
}
}
return
1;
}
//递归调用,如果为质数则打印出来,否则将该数除以它的最小因数(除1之外)后递归调用
void
prime_submultiple(
int
value)
{
int
submultiple;
if
(isprime(value,&submultiple))
{
printf
(
"%d"
,value);
return
;
}
else
{
printf
(
"%d*"
,submultiple);
prime_submultiple(value/submultiple);
return
;
}
}
int
main()
{
int
x;
printf
(
"\nPlease input a integar:"
);
scanf
(
"%d"
,&x);
printf
(
"%d="
,x);
prime_submultiple(x);
}
方法三:
1234567891011121314151617181920212223242526272829303132333435363738394041424344#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
//判断是否为质数,并带回他的最小因数(1除外),这个最小因数为素数
int
IfPrime(
int
value,
int
*submultiple)
{
int
i;
for
(i=2; i <
sqrt
(value); i++)
{
if
(0 == value%i)
{
*submultiple =i;
return
0;
}
}
return
1;
}
//递归调用,如果为质数则直接打印出来,否则为合数,将该合数除以它的最小因数(1除外)后递归调用
void
primre_submultiple(
int
value)
{
int
submultiple;
//value为质数(素数)
if
(IfPrime(value,&submultiple))
{
printf
(
"%d"
,value);
return
;
}
else
{
printf
(
"%d*"
,submultiple);
primre_submultiple(value/submultiple);
return
;
}
}
void
main()
{
int
idata;
printf
(
"please input a integar:"
);
scanf
(
"%d"
,&idata);
printf
(
"%d = "
,idata);
primre_submultiple(idata);
printf
(
"\n"
);
}
2、计算1-x+x^2/2!-x^3/3!+.....+x^n/n! 见【2015相似】#
方法一:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465#include<stdio.h>
int
Calculate(
int
x,
int
n)
{
int
total=0;
int
itemp_a=x,itemp_b=1;
int
i,j;
for
(i=0; i <= n; i++)
{
if
(0 == i)
{
total +=1;
printf
(
"%d : total=%d\n"
,i,total);
}
else
if
(1 == i)
{
total = total-x;
printf
(
"%d : total=%d\n"
,i,total);
}
else
//===oushu
{
if
((0 == i%2))
{
itemp_a =1;
itemp_b =1;
for
(j=i; j>= 1; j--)
{
itemp_a *=x;
itemp_b *=j;
printf
(
"itemp_a=%d, itemp_b=%d\n"
,itemp_a,itemp_b);
}
printf
(
"%d : total=%d\n"
,i,total);
total +=(itemp_a/itemp_b);
printf
(
"%d,total:%d\n"
,i,total);
}
else
{
itemp_a =1;
itemp_b =1;
for
(j=i; j>= 1; j--)
{
itemp_a *=x;
itemp_b *=j;
printf
(
"itemp_a=%d, itemp_b=%d\n"
,itemp_a,itemp_b);
}
printf
(
"%d : total=%d\n"
,i,total);
total = total-(itemp_a/itemp_b);
printf
(
"%d,total:%d\n"
,i,total);
}
}
}
printf
(
"%d,total:%d\n"
,i,total);
return
total;
}
void
main()
{
int
x;
int
n;
int
total;
printf
(
"please input the data of x,n!\n"
);
scanf
(
"%d %d"
,&x,&n);
total = Calculate(x,n);
printf
(
"OK,the result is: %d\n"
,total);
}
方法二:
12345678910111213141516171819202122232425#include <stdio.h>
#include <stdlib.h>
void
main()
{
int
n, x, j, i = 1;
float
sum = 1, k = 1;
printf
(
"Input n and x:\n"
);
scanf
(
"%d %d"
, &n, &x);
while
(i <= n)
{
k = 1;
for
(j = 1; j <= i; j++)
{
k = -1*k*x;
}
for
(j = 1; j <= i; j++)
{
k = k/ j;
}
sum += k;
i++;
}
printf
(
"%f\n"
, sum);
}
方法三:动态规划
1234567891011121314151617#include <stdio.h>
#include <stdlib.h>
void
main()
{
int
n,x,i=1;
float
sum = 1,k = 1;
printf
(
"Input n and x:\n"
);
scanf
(
"%d %d"
, &n, &x);
while
(i <= n)
{
k = -1 * k*x / i;
sum += k;
i++;
}
printf
(
"%f"
, sum);
}
3、删除输入的字符串中的大小写字母和数字 并统计有重复的字符及其重复次数#
4、输入整形数据,按输入的逆序建立单链表 【见2016年19题】#
代码:
12345678910111213141516171819202122232425262728293031323334#include <stdio.h>
#include <stdlib.h>
typedef
struct
slist{
int
data;
struct
slist *next;
};
int
main()
{
//逆序建立单链表,头插法
int
x;
struct
slist *p,*head = (
struct
slist *)
malloc
(
sizeof
(
struct
slist));
head ->next = NULL;
printf
(
"请输入元素:\n"
);
scanf
(
"%d"
,&x);
while
(x != 9999)
{
struct
slist *node = (
struct
slist *)
malloc
(
sizeof
(
struct
slist));
node ->data = x;
node ->next = head ->next;
head ->next = node;
scanf
(
"%d"
,&x);
}
//输出
printf
(
"单链表为:"
);
p = head ->next;
while
(p != NULL)
{
printf
(
"%d\t"
,p ->data);
p = p->next;
}
return
0;
}
5、单链表逆序 【见2017.24】#
方法一:头插法
代码:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364#include <stdio.h>
#include <stdlib.h>
typedef
struct
slist
{
int
data;
struct
slist *next;
};
struct
slist *head;
// 尾插法建立链表
void
creatslist()
{
int
x;
head = (
struct
slist *)
malloc
(
sizeof
(
struct
slist));
//头结点
struct
slist *p,*node;
// q为尾指针
p = head;
printf
(
"请输入元素:"
);
scanf
(
"%d"
,&x);
while
(x != 9999)
{
node = (
struct
slist *)
malloc
(
sizeof
(
struct
slist));
node ->data = x;
p ->next = node;
p = node;
printf
(
"请输入元素:"
);
scanf
(
"%d"
,&x);
}
p ->next = NULL;
}
//链表输出打印
void
inputslist()
{
struct
slist *q;
//q是工作指针
q = head ->next;
//头结点无元素
while
(q != NULL)
{
printf
(
"%d\t"
,q ->data);
q = q ->next;
}
}
// 方法一:头插法 逆序链表
void
reverseslist1()
{
struct
slist *p,*r;
// p是工作指针,r是p的后继,以防断链
p = head ->next;
//从第一个元素开始
head ->next = NULL;
//将头节点后置null,断开
while
(p != NULL)
{
r = p ->next;
// r暂存s后继
p ->next = head ->next;
// 依次将元素结点摘下
head ->next = p;
p = r;
}
}
void
main()
{
creatslist();
inputslist();
printf
(
"\n逆序后:\n"
);
reverseslist1();
inputslist();
}
方法二: 后继指针指向前驱结点
代码:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465#include <stdio.h>
#include <stdlib.h>
typedef
struct
slist
{
int
data;
struct
slist *next;
};
struct
slist *head;
// 尾插法建立链表
void
creatslist()
{
int
x;
head = (
struct
slist *)
malloc
(
sizeof
(
struct
slist));
//头结点
struct
slist *p,*node;
// q为尾指针
p = head;
printf
(
"请输入元素:"
);
scanf
(
"%d"
,&x);
while
(x != 9999)
{
node = (
struct
slist *)
malloc
(
sizeof
(
struct
slist));
node ->data = x;
p ->next = node;
p = node;
printf
(
"请输入元素:"
);
scanf
(
"%d"
,&x);
}
p ->next = NULL;
}
//链表输出打印
void
inputslist()
{
struct
slist *q;
//q是工作指针
q = head ->next;
//头结点无元素
while
(q != NULL)
{
printf
(
"%d\t"
,q ->data);
q = q ->next;
}
}
// 方法二:后继指针指向前驱结点
void
reverseslist2()
{
struct
slist *pre,*p = head ->next,*r =p ->next;
p ->next = NULL;
//处理第一个结点
while
(r != NULL)
// r若为空,则p为最后一个节点
{
pre = p;
p = r;
r = r ->next;
p ->next = pre;
}
head ->next = p;
//处理最后一个结点
}
void
main()
{
creatslist();
inputslist();
printf
(
"\n逆序后:\n"
);
reverseslist2();
inputslist();
}
作者:Hang Shao
出处:https://www.cnblogs.com/pam-sh/p/12587689.html
版权:本作品采用「知识共享」许可协议进行许可。
声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)