C语言头文件.docx
《C语言头文件.docx》由会员分享,可在线阅读,更多相关《C语言头文件.docx(25页珍藏版)》请在冰豆网上搜索。
![C语言头文件.docx](https://file1.bdocx.com/fileroot1/2023-1/30/1daa63ff-afe7-4146-b4ff-152fbc2c9800/1daa63ff-afe7-4146-b4ff-152fbc2c98001.gif)
C语言头文件
//判一个整数是否为回文素数
#include
#include
//判一个整数是否为回文数,是返回真否则返回假
charisPlalindrome(longn);
//判一个整数是否为素数,是返回真否则返回假
charisPrime(longn);
intmain(){
puts("2~9999之间的回文素数如下:
");
for(longn=2;n<10000;n++){
if(isPlalindrome(n)&&isPrime(n))
printf("%-4ld",n);
}
putchar('\n');
}
//判一个整数是否为回文数,是返回真否则返回假
charisPlalindrome(longn){
longm=0;
longs=(n>=0?
n:
-n);
n=s;
while(s){
m=m*10+s%10;
s/=10;
}
return(m==n);
}
//判一个整数是否为素数,是返回真否则返回假
charisPrime(longn){
if(n<2)returnfalse;
inti,k=(int)sqrt(n);
for(i=2;i<=k;i++){
if(n%i==0)
returnfalse;
}
returntrue;
}
//方法1:
输出所有3位数的对称素数。
例如:
101、727都是素数并且是对称的。
#include
#include
//判n是否为素数,是返回真否则返回假
intisPrime(longintn);
intmain(){
for(inti=100;i<1000;i++)
if(isPrime(i)&&i%10==i/100)
printf("%d是对称的素数\n",i);
}
//判n是否为素数,是返回真否则返回假
intisPrime(longintn){
longintk=(longint)sqrt(n);
for(longinti=2;i<=k;i++)
if(n%i==0)returnfalse;
returntrue;
}
//方法2:
输出所有3位数的对称素数。
例如:
101、727都是素数并且是对称的。
#include
//判n是否为素数,是返回真否则返回假
charisPrime(longintn);
intmain(){
for(inti=1;i<=9;i+=2)
for(intj=0;j<=9;j++){
intk=101*i+10*j;
if(isPrime(k))
printf("%d是对称的素数\n",k);
}
}
//判n为素数,是素数返回真否则返回假
charisPrime(longn){
if(n<2)returnfalse;
if(n==2)returntrue;
if(n%2==0)returnfalse;
for(longi=3;i*i<=n;i+=2){
if(n%i==0)returnfalse;
}
returntrue;
}
/***************************************************
//功能:
演示如何建立一个简单的菜单
//编写者:
王灿辉,版本号:
1.0,编写时间:
2011-1-6
****************************************************/
#include
#include//toupper
#include//strchr
#include//getche
#defineS_NUM35//选择菜单表头的星号数目
#defineMAX_MENU255//功能选择菜单的最大行数
//显示表头的n个字符(ch)
inlinevoidshow_table_head(intn,charch);
//显示功能选择菜单
//入口参数:
存放允许用户选择的所有(大写)字符,格式形如:
“A,B,C,D,Q”
voidshow_menu(char*);
//获得用户的选择。
返回值:
用户按下的字符(被转为大写)
charget_choice(void);
intmain(){
charchoice;//用户按下的字符(被转为大写)
while((choice=get_choice())!
='Q'){
switch(choice){
case'I':
printf("\a\n输入信息。
\n\n");
break;
case'O':
printf("\a\n输出信息。
\n\n");
break;
case'T':
printf("\a\n输出统计信息。
\n\n");
break;
case'F':
printf("\a\n查找并输出信息。
\n\n");
break;
case'D':
printf("\a\n查找并删除信息。
\n\n");
break;
}
}
}
//显示表头的n个字符(ch)
inlinevoidshow_table_head(intn,charch){
if(n<1)return;
for(inti=0;iputchar(ch);
putchar('\n');
}
//显示功能选择菜单
//入口参数:
存放允许用户选择的所有(大写)字符,格式形如:
“A,B,C,D,Q”
voidshow_menu(char*select_str){
//存放功能选择菜单,要求:
每行的第一个字符必须为选择字符,最后一行一般是“Q:
退出系统”!
conststaticchar*menu[]={
"I:
输入信息",
"O:
输出信息",
"T:
输出统计信息",
"F:
查找并输出信息",
"D:
查找并删除信息",
"Q:
退出系统"
};
show_table_head(S_NUM,'*');//显示E_NUM个'*'
for(inti=0,j=0;iprintf("%-4s%-*s*\n","*",S_NUM-5,menu[i]);
if(i>0)select_str[j++]=',';
select_str[j++]=toupper(menu[i][0]);
}
select_str[j++]='\0';
show_table_head(S_NUM,'*');//显示E_NUM个'*'
printf("请选择(%s):
",select_str);
}
//获得用户的选择。
返回值:
用户按下的字符(被转为大写)
charget_choice(void){
charselect_str[MAX_MENU*2];
//存放允许用户选择的所有(大写)字符,格式形如:
“A,B,C,D,Q”
charchoice;
while
(1){
show_menu(select_str);//显示功能选择菜单
choice=toupper(getche());//非缓冲有回显输入
putchar('\n');
if(strchr(select_str,choice)&&choice!
=',')break;
printf("\a\n选择错误,请重新选择......\n\n");
}
returnchoice;
}
/*
给定整数N(2=如:
7331就是一个这样的4位质数,因为7、73、733都是质数。
要求:
按升序输出所有符合要求的质数。
例如:
输入N=2,则必须按序输出下面的9个质数:
232931375359717379
*/
#include
//判n是否为质数,是返回真否则返回假。
intisPrime(longintn){
if(n<2)returnfalse;
for(longinti=2;i*i<=n;i++){
if(n%i==0)returnfalse;
}
returntrue;
}
intmain(){
intn=0;
printf("请输入一个2~8之间的整数:
");
scanf("%d",&n);
if(n<2||n>8){
puts("输入的整数不在2~8之间!
");
return-1;
}
//计算下界(10^n-1)和上界(10^n)
longinti=0,down=10;
for(i=n-1;i>1;i--)down*=10;
longintup=down*10;
intcount=0;//符合要求的质数的数目
for(i=down;iif(isPrime(i)){//i是质数
//判其前任意位是质数?
for(longintprime=i,j=down;j>=10;j/=10){
if(!
isPrime(prime/j))break;
}
if(j<10){//其前任意位都是质数
printf("%d\t",i);//输出
count++;
}
}
}
printf("\n符合要求的%d位质数共有%d个。
\n",n,count);
return0;
}
//产生伪随机数的函数及其测试程序
#include
staticunsignedlongintnext=1;//种子
intrand1(void){
//产生伪随机数的魔术般的公式
next*=1103515245+12345;
return(unsignedint)(next/65536)%32768;
}
voidsrand1(unsignedintseed){
next=seed;
}
//跳过本行剩余的其他字符和<回车>键
inlinevoideatline(void){
while(getchar()!
='\n')
continue;
}
intmain(void){
unsignedintseed;
printf("请输入你选定的种子:
");
while(scanf("%u",&seed)==1){
srand1(seed);//重置种子
for(inti=0;i<8;i++)
printf("%hd\t",rand1());
eatline();
printf("\n请输入下一个种子(按q退出):
");
}
}
//“打鱼还是晒网”。
某人从2000年1月1日20岁开始“三天打鱼两天晒网”,问某天该人在打鱼还是在晒网。
#include
//从那一年开始“三天打鱼两天晒网”
#defineYEAR2000
//开始“三天打鱼两天晒网”的年龄
#defineAGE20
//可以“三天打鱼两天晒网”的最大年龄
#defineMAX_AGE100
//判指定年份(year)是否为闰年?
inlineboolisLeapYear(intyear);
//获得指定年(year)、月(month)对应的天数,如:
2011年5月有31天
//错误条件:
如果月份错误则返回-1
intgetDaynumOfMonth(intyear,intmonth);
intmain(){
inti,y,m,d;
while
(1){
printf("请输入日期(年.月.日),用q退出:
");
if(scanf("%d.%d.%d",&y,&m,&d)!
=3)break;
while(getchar()!
='\n');
//跳过该行的其他输入和<回车>键
if(yputs("那一年他还没有出生!
");
continue;
}
if(yputs("那一年他还没有开始打鱼!
");
continue;
}
if(y-YEAR>MAX_AGE){
printf("他已经超过%d岁,还能打鱼?
\n",MAX_AGE);
continue;
}
if(m<1||m>12){
puts("月份只能在1~12之间");
continue;
}
if(d<1){
puts("日期必须大于0!
");
continue;
}
intdays=getDaynumOfMonth(y,m);
if(d>days){
printf("%d年%d月只有%d天!
\n",y,m,days);
continue;
}
days=d;
//加上前面几年的天数,每年365天或366天(闰年)
for(i=y-1;i>=YEAR;i--)
days+=365+isLeapYear(i);
//加上前面几个月的天数
for(i=m-1;i>=1;i--)
days+=getDaynumOfMonth(y,i);
days%=5;
if(days==1||days==2||days==3)
puts("他正在打鱼...");
else
puts("他正在晒网...");
}
return0;
}
//判指定年份(year)是否为闰年?
inlineboolisLeapYear(intyear){
return(year%4==0&&year%100!
=0)||(year%400==0);
}
//获得指定年(year)、月(month)对应的天数,如:
2011年5月有31天
//错误条件:
如果月份错误则返回-1
intgetDaynumOfMonth(intyear,intmonth){
staticconstintday_num[]={31,-1,31,30,31,30,31,31,30,31,30,31};
if(month<1||month>12)return-1;//月份错误
if(month!
=2)
returnday_num[month-1];
else
return(isLeapYear(year)?
29:
28);
}
/*********************************************
程序的运行过程和输出结果如下:
请输入日期(年.月.日),用q退出:
1977.7.7
那一年他还没有出生!
请输入日期(年.月.日),用q退出:
1988.8.8
那一年他还没有开始打鱼!
请输入日期(年.月.日),用q退出:
2111.1.1
他已经超过100岁,还能打鱼?
请输入日期(年.月.日),用q退出:
2000.0.1
月份只能在1~12之间
请输入日期(年.月.日),用q退出:
2000.1.0
日期必须大于0!
请输入日期(年.月.日),用q退出:
2000.2.30
2000年2月只有29天!
请输入日期(年.月.日),用q退出:
2000.1.1
他正在打鱼...
请输入日期(年.月.日),用q退出:
2000.1.3
他正在打鱼...
请输入日期(年.月.日),用q退出:
2000.1.4
他正在晒网...
请输入日期(年.月.日),用q退出:
2000.1.5
他正在晒网...
请输入日期(年.月.日),用q退出:
2000.1.6
他正在打鱼...
请输入日期(年.月.日),用q退出:
2000.2.1
他正在打鱼...
请输入日期(年.月.日),用q退出:
2000.2.3
他正在晒网...
请输入日期(年.月.日),用q退出:
2001.1.1
他正在打鱼...
请输入日期(年.月.日),用q退出:
2001.1.2
他正在打鱼...
请输入日期(年.月.日),用q退出:
2001.1.3
他正在晒网...
请输入日期(年.月.日),用q退出:
2001.1.5
他正在打鱼...
请输入日期(年.月.日),用q退出:
2011.10.10
他正在打鱼...
请输入日期(年.月.日),用q退出:
q
**********************************************/
//利用全局变量实现swap函数。
演示全局变量(外部变量)的定义、声明(说明)和使用
//全局变量(外部变量)是实现函数之间数据通讯的有效手段,但绝不是一种好的手段。
//外部变量可加强函数模块之间的数据联系,但是又使函数要依赖这些变量,
//本例中的函数main、swap均依赖于(外部)全局变量x和y,因而使得函数的独立性降低
#include
intx,y;
//(外部)全局变量(的定义),初值为0
voidswap(void){
//在函数前定义的全局变量,在该函数内使用可不再加以说明
intt=x;x=y;y=t;
return;
}
intmain(){
externintx,y;
//该声明可省略,但明确写出来,可以知道这里有访问全局变量,这是一个好的习惯!
x=3;
y=5;
printf("交换前全局变量x=%d,y=%d\n",x,y);
swap();//利用全局变量实现值交换
printf("交换后全局变量x=%d,y=%d\n",x,y);
return;//可以省略,但最好写出来!
}
//输入任意一个整数,输出不小于该整数的一对孪生素数。
//孪生素数即相差2的一对素数。
例如3和5,5和7,11和13,…,10016957和10016959等等都是孪生素数。
#include
#include
//判n是否为素数,是返回真否则返回假
intisPrime(longintn);
intmain(){
longintn;
printf("请输入一个整数:
");
scanf("%ld",&n);
while(!
isPrime(n)||!
isPrime(n+2))n++;
printf("%ld,%ld是一对孪生素数\n",n,n+2);
}
//判n是否为素数,是返回真否则返回假
intisPrime(longintn){
longintk=(longint)sqrt(n);
for(longinti=2;i<=k;i++)
if(n%i==0)returnfalse;
returntrue;
}
#include
//判一个整数是否为回文数
charisPlalindrome(longn);
intmain(){
for(longn=-999;n<=999;n++){
if(isPlalindrome(n))
printf("%-4ld",n);
}
putchar('\n');
}
charisPlalindrome(longn){
longm=0;
longs=(n>=0?
n:
-n);
n=s;
while(s){
m=m*10+s%10;
s/=10;
}
return(m==n);
}
//全局变量和局部变量
#include
staticintx;
//仅在本文件可以使用的全局变量
inty=1;
//在本程序(其他文件的函数)中都可以使用的全局变量
intmain(){
externintx;
//引用全局变量,该语句可以省略,但明确写出来是更好的习惯
//声明该变量在函数外部定义,不能进行初始化,也不能在该函数中再定义。
//externinty;如果有该语句则下面的inty=2;将报告重定义错误!
printf("x=%d\ty=%d\n",x,y);
//输出(全局变量)x=0(未初始化的全局变量被自动初始化为0)和y=1
x=1;//修改全局变量的值
inty=2;//新定义的局部变量并初始化,将覆盖掉全局变量
printf("x=%d\ty=%d\n",x,y);
//输出x=1(全局变量)和y=2(局部变量)
}
//输出1~30000之间的所有"亲密数"。
//一个数A的所有因子之和为B,而B的所有因子之和正好是A,则称A和B是"亲密数"
//如果A又正好等于B,则称A为“完数”,如:
6=1+2+3则为“完数”。
//220和284是"亲密数"。
//220的所有因子之和:
1+2+4+5+10+11+20+22+44+55+110=284
//284的所有因子之和:
1+2+4+71+142=220
#include
#defineMAX30000
//计算给定正整数的所有因子之和
unsignedintfunc(unsignedintn){
for(unsignedints=0,i=1;i<=n/2;i++)
if(n%i==0)s+=i;
returns;
}
intmain(){
for(unsigneda=1;a<=MAX;a++){
if(func(func(a))==a)
printf("%d\t%d\n",a,func(a));
}
}
//输出2-N之间的所有"完数",即:
一个数正好等于其因子之和,如:
6=1+2+3
#include
//判给定的正整数是否是"完数"
charfunc(intn){
for(ints=0,i=1;i<=n/2;i++)
if(n%i==0)s+=i;
return(s==n);
}
intmain(){
inti,n;
printf("Inputintegervalue(>=2):
");
scanf("%d",&n);
if(n>=2)
for(i=2;i<=n;i++){
if(func(i))printf(