0715
题目1:什么是指针函数?什么是函数指针?回答并举例、
答:函数指针的定义:指向函数代码的首地址的指针称为函数指针
函数类型 (*指针变量名)(形参列表)
int (*f)(int x)
函数指针的赋值
int func(int x)
int (*f)(int x)
f=func;
赋值时不用带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的
首地址。
指针函数:一个函数不仅可以带回一个整型数据的值,字符类型和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。
格式:类型标识符 *函数名(参数表)
int *f(x,y)
题目2:用变量a给出下面的定义
a) 一个整型数
int a
b) 一个指向整型数的指针
int *a
c) 一个指向指针的的指针,它指向的指针是指向一个整型数
int *a;
int b;
int *c;
c=&b;
a=&c;
d) 一个有10个整型数的数组
int a【10】
e) 一个有10个指针的数组,该指针是指向一个整型数的
int *a【10】
f) 一个指向有10个整型数数组的指针
int *b;
int a【10】;
b=&a;
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
int *b(int)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
int a【10】(int)
题目3:查找最小的k个元素(笔试题)
输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
void Find(int num[10])
{
int i,j,temp;
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
if(num[i]>num[j])
{
temp=num[j];
num[j]=num[i];
num[i]=temp;
}
}
}
void Read(int num[10])
{
int i;
for(i=0;i<10;i++)
{
scanf("%d",&num[i]);
}
}
int main()
{
int num[10];
int n,i;
printf("请输入n:");
scanf("%d",&n);
Read(num);
Find(num);
printf("最小的%d个数为:",n);
for(i=0;i<n;i++)
{
printf("%4d",num[i]);
}
printf("\n");
return 0;
}
结果:
题目4:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。(笔试题)
句子中单词以空格符隔开。为简单起见,没有标点符号。
例如输入“I am a student”,则输出“student a am I”
在这里插/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
char num[100][20];
int i,t;
char b[10]="\0";
for(i=0;;i++)
{
gets(num[i]);
if(strcmp(num[i],b)==0)
break;
}
int j=i;
printf("句子为:");
for(t=0;t<j;t++)
{
printf("%s",num[t]);
printf(" ");
}
printf("\n");
printf("逆序为:");
for(t=j-1;t>=0;t--)
{
printf("%s",num[t]);
printf(" ");
}
printf("\n");
return 0;
}
结果:
题目5:网友年龄
某君新认识一网友。
当问及年龄时,他的网友说:
“我的年龄是个2位数,我比儿子大27岁,
如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”
请你计算:网友的年龄一共有多少种可能情况?
提示:30岁就是其中一种可能哦. (第七届蓝桥杯软件类省赛真题)
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
int i,t=0,o,son=0,m=0;
for(i=27;i<100;i++)
{
t=i%10;
o=i/10;
son=(t*10)+o;
if((son+27)==i)
{
m++;
}
}
printf("%d\n",m);
return 0;
}
结果:
题目6: 请编写一个C函数,该函数将一个字符串逆序
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <string.h>
int main()
{
char a[100];
int i;
gets(a);
for(i=strlen(a);i>=0;i--)
{
printf("%c",a[i]);
}
printf("\n");
return 0;
}
结果:
题目7: 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
void Zhuanhuan(int n,int m,int a[100])
{
char b[10];
int i=0,t=0,p;
while(n!=0)
{
i=n%m;
n=n/m;
a[t]=i;
t++;
}
for(p=0;p<t;p++)
{
if(a[p]<10)
{
b[p]=a[p] + '0';
}
else
{
b[p]='A'+(a[p]-10);
}
}
for(p=t-1;p>=0;p--)
{
printf("%c",b[p]);
}
printf("\n");
}
int main()
{
int n,m;
int a[100];
printf("请输入一个整数:");
scanf("%d",&n);
printf("转换进制;");
scanf("%d",&m);
Zhuanhuan(n,m,a);
return 0;
}
结果:
题目8: 输入一个字符串,计算字符串中子串出现的次字数
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <string.h>
void fun(char * p,char * q,int n)
{
int lengh1=strlen(p);
int lengh2=strlen(q);
while(*p!='\0')
{
if(strncmp(p,q,lengh2)==0)
{
n++;
p=p+n;
}
else
{
p++;
}
}
printf("子串出现的次数:%d\n",n);
}
int main()
{
char str[100],ptr[100];
char *p,*q;
int n=0;
q=&ptr;
p=&str;
printf("请输入字符串:");
scanf("%s",str);
printf("请输入子串:");
scanf("%s",ptr);
fun(p,q,n);
return 0;
}
结果:
题目9: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.
提示:帧头和帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <string.h>
int main()
{
char s[100];
char str1[100];
char str2[100];
printf("请输入一个字符串:");
gets(s);
printf("请输入祯头:");
gets(str1);
printf("请输入祯尾:");
gets(str2);
char *p=s;
char *p1=str1;
char *p2=str2;
char *p3=NULL;
char *p4=NULL;
while(*p)
{
if(strncmp(p,p1,strlen(p1))==0)
{
p3=p;
while(*p3)
{
if(strncmp(p3,p2,strlen(p2))==0)
{
int j,i;
p4=p;
j=p3-p+strlen(str2);
for(i=0;i<j;i++)
printf("%c",*p4++);
puts("\0");
break;
}
p3++;
}
}
p++;
}
return 0;
}
结果:
0716
1、打印菱形星号组合
*
***
*****
*******
*****
***
* *
* *
* *
* *
* *
* *
* 第i行:
空格数?
星号数?
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
int i,j,k;
int t=0,m=0;
for(i=1;i<=4;i++)
{
t=0;
m=0;
for(j=1;j<=7;j++)
{
if(j-i==3||j+i==5)
{
printf("*");
t++;
}
else
{
printf(" ");
m++;
}
}
printf("第%d行,星号数为:%d,空格数为:%d",i,t,m);
printf("\n");
}
for(i=5;i<8;i++)
{
t=0;
m=0;
for(j=1;j<8;j++)
{
if(i-j==3||j+i==11)
{
printf("*");
t++;
}
else
{
printf(" ");
m++;
}
}
printf("第%d行,星号数为:%d,空格数为:%d",i,t,m);
printf("\n");
}
return 0;
}
结果:
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
int i,j,k,n;
int t=0,m=0;
for(i=1;i<=4;i++)
{
t=0;
m=0;
for(j=1;j<=4-i;j++)
{
printf(" ");
t++;
}
for(k=1;k<=2*i-1;k++)
{
printf("*");
m++;
}
for(j=j+k;j<=8;j++)
{
printf(" ");
t++;
}
printf("第%d行,星号有%d个,空格有%d个",i,m,t);
printf("\n");
}
for(i=1;i<=3;i++)
{
t=0;
m=0;
for(j=1;j<=i;j++)
{
printf(" ");
t++;
}
for(k=1;k<=7-2*i;k++)
{
printf("*");
m++;
}
for(j=j+k;j<=8;j++)
{
printf(" ");
t++;
}
printf("第%d行,星号有%d个,空格有%d个",i+4,m,t);
printf("\n");
}
return 0;
}
结果:
2求a和b的最大公约数
gcd(a ,b)= gcd(b, a%b)
例:gcd(36,24) =gcd(24, 12 ) =gcd(12, 0 )
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
void fun(int a,int b)
{
int t,i=1,n,m;
if(a>b)
{
printf("gcd(%d,%d)",a,b);
while(i)
{
i=a%b;
n=a;
a=b;
b=n;
printf("=gcd(%d,%d)",a,i);
b=i;
}
printf("\n");
}
else
{
m=a;
a=b;
b=m;
printf("gcd(%d,%d)",a,b);
while(i)
{
i=a%b;
n=a;
a=b;
b=n;
printf("=gcd(%d,%d)",a,i);
b=i;
}
printf("\n");
}
}
int main()
{
int a,b;
printf("请输入两个整数a,b:");
scanf("%d%d",&a,&b);
fun(a,b);
return 0;
}
结果:
![!](https://img-blog.csdnimg.cn/20190717090051383.png)
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <math.h>
int main()
{
int i,n;
int count=0;
double t;
printf("请输入一个n:");
scanf("%d",&n);
for(i=1;i<n;i++)
{
count=2*i-1;
t=t+(1.0/count)*pow(-1,i+1);
}
printf("pi=%.9lf\n",t*4);
return 0;
}
结果:
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
int a[21],i;
double sum=0;
a[0]=1;
a[1]=2;
for(i=2;i<=20;i++)
{
a[i]=a[i-1]+a[i-2];
}
for(i=0;i<20;i++)
{
sum+=(float)a[i+1]/a[i];
}
printf("%.9lf\n",sum);
return 0;
}
结果:
5、求100~200间的所有素数,每行打印5个素数
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
int i,j,t=1;
int num[100];
for(i=100;i<=200;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
{
break;
}
}
if(j==i)
{
num[t++]=i;
}
}
for(i=1;i<t;i++)
{
printf("%4d",num[i]);
if(i%5==0)
{
printf("\n");
}
else
{
continue;
}
}
printf("\n");
return 0;
}
结果:
6、计算字符串中的单词数。
单词:由空格分开的连续字母数字串。
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
void fun(char str[100])
{
int lengh=0;
int i,t=0,n=0;
while(str[lengh])
{
lengh++;
}
for(i=0;i<lengh;i++)
{
if((str[i]==' '&&str[i+1]>='a'&&str[i+1]<='z')||(str[i]==' '&& str[i+1]>='0'&&str[i+1]<='9')||(str[i]==' '&&str[i+1]!=' ')||(str[i]>='a'&&str[i]<='z'&&str[i+1]=='\0'))
{
t++;
}
}
for(i=0;i<lengh;i++)
{
if(str[i]==' '&&str[i+1]==' ')
{
n++;
}
else
{
break;
}
}
printf("%d",t-n);
}
int main()
{
char str[100];
gets(str);
fun(str);
return 0;
}
结果:
8、打印字符串、复制字符串、连接字符串
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <string.h>
void Print(char str[])
{
printf("打印字符串:");
puts(str);
}
void Copy(char str[],char ptr[])
{
int lengh1=strlen(str);
int lengh2=strlen(ptr);
int i,t=0;
while(str[t])
{
t++;
}
if(t>lengh2)
{
printf("空间不足!\n");
}
else
{
for(i=0;i<t;i++)
{
ptr[i]=str[i];
}
printf("复制后:");
for(i=0;i<t;i++)
{
printf("%c",ptr[i]);
}
printf("\n");
}
}
void Conest(char str[],char qtr[])
{
int lengh1=strlen(qtr);
int lengh2=strlen(str);
int i,t=0,m=0;
while(str[t]!='\0')
{
t++;
}
while(qtr[m]!='\0')
{
m++;
}
if((lengh2-t)<(lengh1-m))
{
printf("空间不够!\n");
}
else
{
for(i=0;i<lengh1;i++)
{
str[t+i]=qtr[i];
}
printf("连接后:");
for(i=0;i<t+lengh1;i++)
{
printf("%c",str[i]);
}
}
printf("\n");
}
int main()
{
char str[100];
char ptr[50];
char qtr[50];
printf("请输入字符串str:");
gets(str);
printf("请输入字符串qtr:");
gets(qtr);
Print(str);
Copy(str,ptr);
Conest(str,qtr);
return 0;
}
结果:
9、整数数组的冒泡排序(从小到大)
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
void fun(int a[],int n)
{
int i,t,m=0;
do{
m=0;
for(i=0;i<n-1;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
m++;
}
}
}while(m!=0);
for(i=0;i<n;i++)
{
printf("%3d",a[i]);
}
printf("\n");
}
int main()
{
int a[5];
int i;
printf("请输入5个数:");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
fun(a,5);
return 0;
}
结果:
10、对于任意正整数都可以找出至少一串连续奇数,它们的和等于该整数的立方。以下程序验证[2,20]之间的数满足这一性质。
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,n=0,t=0,m=0,p=1;
long sum=0;
for(i=2;i<=20;i++)
{
sum=0;
m=(i*i)-i-1;
n=(i*i)+i+1;
if((m%2)&&(n%2))
{
printf("%d^3=%d",i,i*i*i);
printf("\n");
}
for(j=m;j<=n;j=j+2)
{
sum=sum+j;
}
if(sum==(i*i*i))
{
printf("%d",i);
continue;
}
}
return 0;
}
(这个代码我只完成了一半)
结果: