一、指针 用指针方法编写一个程序,输入 3 个整数,将它们按由小到大的顺序输出
#include <stdio.h>
void swap(int *pa,int *pb) {
int temp;
temp = *pa;
*pa = *pb;
*pb = temp;
}
void main() {
int a,b,c,temp;
scanf("%d%d%d",&a,&b,&c);
if(a>b) swap(&a,&b);
if(b>c) swap(&b,&c);
if(a>c) swap(&a,&c);
printf("%d,%d,%d",a,b,c);
}
二、 编写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后在主函数中输出。
#include<stdio.h>
int main()
{void copy(char c[],char b[]);
char a[100],b[20];
gets(a);
copy(a,b);
puts(b);
return 0;
}
void copy(char c[],char b[])
{int i,j=0;
for(i=0;c[i]!='\0';i++)
if(c[i]=='a'||c[i]=='A'||c[i]=='e'||c[i]=='E'||c[i]=='i'||c[i]=='I'||c[i]=='O'||c[i]=='o'||c[i]=='u'||c[i]=='U')
{b[j]=c[i];j++;}
b[j]='\0';
return;
}
三、写一函数,对输入的一组整数按由小到大的顺序排序,在main主函数调用该函数实现排序 。
#include<stdio.h>
void main()
{void paixu(int a[],int n);
int a[100],i,n;
printf("需要对多少数进行排序:");
scanf("%d",&n);
printf("请输入要排序的一组数(用空格隔开):");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
paixu(a,n);
for(i=0;i<n;i++)
printf("%2d",a[i]);
printf("\n");
return;
}
void paixu(int a[],int n)
{int i,j,t;
for(j=0;j<n;j++)
for(i=0;i<n-1-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
}
四、 编写一个函数,统计字符数组中大写字母的个数。
#include <stdio.h>
int main()
{char string[100],Le;
int count(char s[]);
printf("input string:\n");
_gets(string)__; //输入字符串
Le=count(string); //调用count函数
printf("大写字母有%d个",Le);
return 0;
}
int count( char s[ ] )
{int sum=0,i;
for (i=0;s[i]!='\0';i++)
if (s[i]>='A' && s[i]<='Z')
sum++;
return sum;
}
五、从键盘输入一个字符串,删除其中的字母 a后输出。例如,输入字符串"abcaca",输出 bcc。
#include <stdio.h>
#include <string.h>
void main()
{
char a[100],b[100];int i,j=0;
gets(a);
for(i=0;(a[i]!='\0');i++)
if(a[i]!='a')
{b[j]=a[i];j++;}
b[j]='\0';
printf("%s\n",b);
}
六、 有一篇文章,共有3行文字,每行有80个字符,要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
#include <stdio.h>
#include <string.h>
void main()
{
char str[3][80];
int i,j,m=0,n=0,p=0,q=0,t=0;
for(i=0;i<3;i++)
gets(str[i]);
for(i=0;i<3;i++)
{
for(j=0;j<strlen(str[i]);j++)
{
if(str[i][j]>='A'&&str[i][j]<='Z')
m++;
else if(str[i][j]>='a'&&str[i][j]<='z')
n++;
else if(str[i][j]>='0'&&str[i][j]<='9')
p++;
else if(str[i][j]==' ')
q++;
else t++;}
}
printf("大写字母有%d个\n小写字母有%d个\n数字有%d个\n空格有%d个\n其他字符有%d个\n",m,n,p,q,t);
}
七、 //求一个3×3的整数矩阵对角线元素之和。
#include <stdio.h>
void main()
{
int a[3][3],i,j,m=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if (i==j || i+j==2)
m=m+a[i][j];
printf("%d\n",m);
}
八、 //用选择法对10个整数排序。10个整数用scanf函数输入。
#include <stdio.h>
void main()
{
int i,j,m,min,t,a[10];
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
{
m=i;min=a[i];
for(j=i+1;j<10;j++)
{
if(min>a[j])
{min=a[j];m=j;}
}
t=a[i];a[i]=a[m];a[m]=t;
}
printf("排序后的数组为:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
九、 //用递归法求Fibonacci数列第n项的值。该数列有如下的特点:第1个数和第2个数都为1,从第3个数开台,每个数都是其前面两个数之和。即:
#include<stdio.h>
long Fibonacci(int n)
{ long f;
if(n==0||n==1)
f=n;
else
f=Fibonacci(n-1)+Fibonacci(n-2);
return f;
}
int main()
{
int n;
scanf("%d",&n);
printf("F(%d)=%d\n",n,Fibonacci(n));
return 0;
}
十、 //写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。
要求:
(1)函数名为prime,如果是素数,函数返回值为1,如果不是素数,函数返回值为0。
#include<stdio.h>
int prime(int x)
{int i,f;
for(i=2;i<x;i++)
{if (x%i==0) break;}
if(i<x) f=0;
else f=1;
return f;}
int main()
{int prime(int x);
int a,x;
scanf("%d",&x);
a=prime(x);
if (a==1)
printf("是素数\n");
else
printf("不是素数\n");
return 0;}
(2)保留判别素数的函数,修改主函数,要求实现输出100~200之前的素数。
#include<stdio.h>
int prime(int x)
{int i,f;
for(i=2;i<x;i++)
{if (x%i==0) break;}
if(i<x) f=0;
else f=1;
return f;}
int main()
{int prime(int x);
int a,x;
for (x=100;x<=200;x++)
{a=prime(x);
if (a==1)
printf("%5d",x);
}
return 0;}
十一、 //输出100以内所有能被3整余但不能被5整除的数,按每5个数的形式输出。
#include <stdio.h>
void main()
{ int i,k=0;
for (i=1;i<=100;i++)
{ if (i%3==0 && i%5!=0)
{printf("%4d",i);
k++;
if (k%5==0) printf("\n");
}
}
printf("\n个数:%d\n",k);
}
十二、 // 输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。
#include <stdio.h>
void main()
{
int a=0,b=0,c=0,d=0;
char j;
for(;(j=getchar())!='\n';)
{ if('a'<=j && 'z'>=j || 'A'<=j &&'Z'>=j)
a++;
else if('0'<=j && '9'>=j)
b++;
else if(' '==j)
c++;
else d++;
}
printf("字母%d 数字%d 空格%d 其他%d\n",a,b,c,d);
}
十三、 //自己编写一个求x的n次方的函数(函数名为power,n为整数),在主函数中输入x和n的值,调用函数求出x的n次方。
#include<stdio.h>
double power(int x,int n)
{double t=1;
for(;n>=1;n--)
t=t*x;
return t;
}
void main()
{int x,n;
printf("输入x和n的值:");
scanf("%d%d",&x,&n);
power(x,n);
printf("%.0f\n",power(x,n));
return;
}
十四、 /*以下程序的功能为:通过输入年份和月份,判断该月的天数。请填空。
分析:
(1)一年中1、3、5、7、8、10、12月份均为31天;4、6、9、11月份均为30天;如果该年是闰年,则2月份为29天,否则为28天。
(2)闰年的条件是:能被4整除但不能被100整除,或者能被400整除。*/
#include<stdio.h>
int main()
{ int y,m,d;
printf("请输入年份和月份");
scanf("%d,%d",&y,&m);
switch(m)
{case 2:
if (m%4==0&&m%100!=0 || m%400==0) //判断是否为闰年
d=29;
else
d=28;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: d=31;break;
case 4:
case 6:
case 9:
case 11:d=30;
}
printf("%d年%d月份有%d天\n",y,m,d);
return 0;
}
十五、 /*打印如下图形。请填空。
*
* * *
* * * * *
* * * * * * *
*/
#include<stdio.h>
int main()
{ int i,j;
for (i=1;i<=4;i++)
{for (j=1;j<=10-i;j++) printf(" "); //输出*之前的空格
for (j=1; j<=2*i-1;j++) printf("*");// 输出每一行的"*"
printf("\n"); //输完每一行后换行
}
return 0;
}
十六、 /*输出如下图形。
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 6 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
*/
#include<stdio.h>
int main()
{ int i,j;
for (i=1;i<=9;i++)
{for (j=1;j<=20-i;j++)
printf(" ");
for (j=1;j<=i;j++)
printf("%d",j);
for (j=i-1;j>=1;j--)
printf("%d",j);
printf("\n");
}
return 0;
}
十七、 // S=1/2+2/3+3/5+5/8+…… (前20项的和) (12.278297)
#include <stdio.h>
void main()
{ int i,m=1,n=2,a;
float b,s=0;
for(i=1;i<=20;i++)
{
b=(float)m/n;a=n;n=m+n;m=a;
s=s+b;}
printf("%f\n",s);
}
十八、 //S=1!+2!+3!+……10!进制 (4037913)
方法一:
#include <stdio.h>
void main()
{
int i,a=1,b=0;
for(i=1;i<=10;i++)
{a=a*i;
b=b+a;}
printf("%d\n",b);
}
方法二:
#include<stdio.h>
void main()
{int i,s,a,n;
s=0;
for(i=1;i<=10;i++)
{
for(n=1,a=1;n<=i;n++)
a=a*n;
s=s+a;
}
printf("s=%d\n",s);
}