C语言程序设计题/C语言计算机二级考试押题版
与 数位 和 数 有关
求max与min
任意四个数
运算符和表达式版本
#include <stdio.h>
int main( )
{
int a,b,c,d;
int max,min;
printf("please input 4 integers:");
scanf("%d%d%d%d", &a, &b, &c, &d); /*输入4个整数*/
max=min=a; /*初始化最大、最小值*/
max=max>b?max:b; /*max与变量b比较,较大的数存在max*/
min=min<b?min:b; /*min与变量b比较,较小的数存在min*/
max=max>c?max:c; /*max与变量c比较,较大的数存在max*/
min=min<c?min:c; /*min与变量c比较,较小的数存在min*/
max=max>d?max:d; /*max与变量d比较,较大的数存在max*/
min=min<d?min:d; /*min与变量d比较,较小的数存在min*/
printf("max=%d, min=%d\n",max,min);
return 0;
}
任意三个数求max
三目运算符
#include <stdio.h>
int main( )
{
int a,b,c;
printf("please input 3 integers:");
scanf("%d%d%d%d", &a, &b, &c); /*输入3个整数*/
printf("max=%d\n",a>b?(a>c?a:c):(b>c?b:c));//二维的思路-> a>b?a:b;
return 0;
}
循环语句
# include<stdio.h>
int main()
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
if(a>c) t=a;
else t=c;
else if(b>c) t=b;
else t=c;
printf("%d\n",t);
return 0;
}
数组元素
(考的可能性小)
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int max = arr[0];
//若有负数,则不可取:int max = 0;
int i = 0;
for (i = 0; i <= 10; i++)
{
if (arr[i] > max)
max = arr[i];
}
printf("%d\n", max);
return 0;
}
三位数数位求和各种变体
本体
a=n%10; /*计算n的个位上的数字*/
b=n/10%10; /*计算n的十位上的数字*/
//b=n%100/10;
c=n/100; /*计算n的百位上的数字*/
本位求和
#include <stdio.h>
int main( )
{
int num,unit,dec,per,total;
printf("Input a integer number(100~999):");
scanf("%d", &num);
unit=n%10; /*计算n的个位上的数字*/
dec=n/10%10; /*计算n的十位上的数字*/
per=n/100; /*计算n的百位上的数字*/
total=unit+dec+per; /*计算n的逆序数*/
printf("%d\n",total); /*输入rn*/
return 0;
}
递归实现
#include <stdio.h>
int digitSum(int num)
{
if(num<10)
return num;
else
return num%10 + digitSum(num/10);
}
int main()
{
int n, sum;
printf("Please input the number:");
scanf("%d", &n);
sum=digitSum(n);
printf("%d\n", sum);
return 0;
}
变体
#include<stdio.h>
int fun(int x)
{
int n,s1,s2,s3,t;
n=0;
t=100;
while(t<=999)
{
s1=t%10;
s2=t/10%10;
s3=t/100;
if(s1+s2+s3==x)
{
printf("%d\t",t);
n++;
}
t++;
}
return n;
}
int main()
{
int x;
scanf("%d",&x);
printf("%d",fun(x));
return 0;
}
水仙花数
关键句 : if(x==(pow(a,3)+pow(b,3)+pow(c,3)))
#include<stdio.h>
#include<math.h>
int main()
{ int x=100,a,b,c;
while(x>=100&&x<1000)
{
a=x/100;
b=x%100/10;
c=x%10;
if(x==(pow(a,3)+pow(b,3)+pow(c,3)))
printf("%5d",x);
x++;
}
return 0;
}
函数调用
#include <stdio.h>
int narcissus(int n)
{
int i,j,k;
i=n%10;
j=n/10%10;
k=n/100;
if (i*i*i+j*j*j+k*k*k==n)
return 1;
else
return 0;
}
int main( )
{
int i;
for (i=100;i<=999;i++)
if (narcissus(i))
printf("%5d",i);
printf("\n");
return 0;
}
逆序输出
关键句 : rn=a * 100+b * 10+c;
#include <stdio.h>
int main( )
{
int n; /*定义变量n表示三位正整数*/
int a,b,c; /*定义变量a、b、c分别表示n的个位、十位、百位上的数字*/
int rn; /*定义变量rn表示n的逆序数*/
printf("Input a positive integer(100~999):");
scanf("%d", &n); /*输入n*/
a=n%10; /*计算n的个位上的数字*/
b=n/10%10; /*计算n的十位上的数字*/
c=n/100; /*计算n的百位上的数字*/
rn=a*100+b*10+c; /*计算n的逆序数*/
printf("%d\n",rn); /*输入rn*/
return 0;
}
count++
给一个不多于5位的正数:求出他是几位数,并按位打印
#include<stdio.h>
int main()
{ int n,m,r,count=0;
printf("please input a integer:\n");
scanf("%d",&m);
if (m<0) //判断是不是正数
m=-m; //负数取相反数
n=m; //换新的代号
do
{
r=m%10;//不断取余数,将所给数拆开
printf("%d",r);//拆一个打印一个
count++;//统计拆了几个
m=m/10;//降数量级
}while (m);
printf("\n%d has %d digits\n",n,count);
return 0;
}
数列规律
Fibonacci
#include <stdio.h>
int main( )
{
int f1, f2, f3;
int i;
f1 = 1;
f2 = 1;
i = 2;
printf( "%d %d ", f1, f2 );
while ( i < 10 )
{
f3 = f1 + f2;
printf( "%d ", f3 );
f1 = f2;
f2 = f3;
i++;
}
printf( "\n" );
return 0;
}
大于t最小的数
int fun(int t)
{
int a=1,b=1,c=0,i;
for(i=4;i<=t;i++)
{
if(c<t)
{
c=a+b;
a=b;
b=c;
}
else
break;
}
return c;
}
约束范围
double fun(double x)
{
double s1=1.0,p=1.0,sum=0.0,s0,t=1.0;
int n=1;
do
{
s0=s1;
sum+=s0;
t*=n;
p*=(0.5-n+1)*x;
s1=p/t;
n++;
}while(fabs(s1-s0)>1e-6);
return sum;
}
前20项求和
2/1+3/2+5/3+8/5+13/8+21/13
#include<stdio.h>
int main()
{ int i=1,n;
double t,x=1,y=2,s,sum=0;
while(i<=20) //控制前20个元素相加
{
s=y/x; //单元素形式
sum=sum+s; //求和形式
t=y; //找一临时变量
y=y+x; //下一个数的分子=上一个数的分子+上一个数的分母
x=t; //安放临时变量
i++; //使递增
}
printf("%f\n",sum);
return 0;
}
a递增求和(考-)
#include<math.h>
#include<stdio.h>
int main()
{
int n,sum=0,i=1,s,a;
printf("please input a=");//原子项
scanf("%d",&a);
printf("please input n=");//项数
scanf("%d",&n);
s=a;
while(i<=n)//控制项数
{
sum=sum+s;//最终累计求和结果
s=s*10+a;//变项:增加数量级的项
i++;//自增
}
printf("sum=a+aa+aaa+...+a...a=%d\n",sum);
return 0;
}
正负号变换(考)
s=m-m2/2+m3/3-m4/4+…,要求最后一项绝对值小于10-4
#include <stdio.h>
#include <math.h>
int main( )
{
double s, m, item;
int n, sign;
scanf( "%lf", &m );
s = 0;
n = 1;
sign = 1;//按体意先规定第一项为正
item = 1;
do
{
item = item * m / n;//不加符号项,实质是控制m的累乘
s += sign * item; //最终项
sign = - sign; //符号变换
n++; //分母自增
} while( fabs( item ) >= 1E-4 );//按要求控制
printf( "%.2f\n", s );
return 0;
}
分母!求和(考-)
double fun(int n)
{
double t,sn=1.0;
int i,j;
for(i=1;i<n;i++)
{
t=1.0;
for(j=1;j<=i;j++)
t=t*j;
sn+=1.0/t;
}
return sn;
}
图案打印
筝型(考)
#include<math.h>
int main()
{
int i=1,k,l,m;
for(;i<=49;i++)//1 - 49
{
k=i%7;//余数
l=3-(int)fabs((i-1)/7-3);
m=(int)fabs(i-4-7*((i-1)/7));
if(k==1) //余数为1
printf("\n");
if(m<=l)
printf("*");
else
printf(" ");
}
printf("\n");
return 0;
}
n行菱形
#include <stdio.h>
void printDiamond(int k);
int main()
{
int n;
scanf("%d",&n);
printDiamond(n);
return 0;
}
void printDiamond(int k)
{
int i,j,n;
n = k/2+1;
for(i = 0;i<n;i++)
{
for(j=0;j<n-i; j ++)
putchar(' ');
for(j = 0; j<2*i+1; j++)
putchar('*');
putchar('\n');
}
for(i = n-2; i>=0; i --)
{
for(j=0;j<n-i; j ++)
putchar(' ');
for(j = 0; j<2*i+1; j++)
putchar('*');
putchar('\n');
}
}
倒三角(考)
#include <stdio.h>
int main( )
{
int i, j;
for ( i=1 ; i<=5 ; i++ ); //用i先控制总行数
{
for ( j=1 ; j<=i-1 ; j++ ) // 0 1 2 3 4
printf( " " ); //打印空格数
for ( j=1 ; j<=11-2*i ; j++ )// 9 7 5 3 1
printf( "*" ); //打印*号
printf( "\n" ); //控制换行
}
return 0;
}
平行四边形
#include <stdio.h>
#include <math.h>
int main( )
{
int i, j;
for ( i=1 ; i<=5 ; i++ )//用i先控制总行数
{
if ( i<=3 )//前三行正左三角,后下两行倒右三角
{
for ( j=1 ; j<=3-i ; j++ )// 2 1 0
printf( " " ); //打印空格数
}
for ( j=1 ; j<=3-fabs(3-i) ; j++ )// 3-|3-i|= 1 2 3 2 1
printf( "*" );
printf( "\n" );
}
return 0;
}
数学题
完数
6=1+2+3,找出1000内的
#include<stdio.h>
int main()
{
int m,i,j,s;
for(m=6;m<1000;m++)//先圈定范围6开始--1000为止
{
s=1;
for(i=2;i<m;i++)
if(m%i==0) //能被整除,没余数
s=s+i;
if(m-s==0) //
{
printf("%5d its fastors are 1 ",m);
for(j=2;j<m;j++)
if(m%j==0)
printf("%d ",j);
printf("\n");
}
}
return 0;
}
质数(考)
#include <stdio.h>
#include <math.h>
int main( )
{
int n, i, k, count = 0;
for ( n = 101 ; n <= 999 ; n += 2 )//每次增2,减少循环次数
{ //总共:101-999
k = (int)sqrt(n);//开根号后,强制类型转换
for ( i = 2 ; i <= k ; i++ )//2-k,小于k的数
{
if ( n % i == 0 )//能被整除就跳出循环
{
break;
}
}
if ( i > k )
//承接上一段for语句,如顺利运行到这步:被除数大于强制类型转换后的数
//循环除完了,都无约数,即为质数
{
count++;//计数
printf( "%4d", n );//3位数,多1个空格,"%4d"打印
if ( count % 8 == 0 )//每行8个
printf( "\n" );
}
}
printf( "\n" );
return 0;
}
哥德巴赫猜想
#include <stdio.h>
#include <math.h>
int judgePrime(int n) ;
int main( )
{
int m,j,k;
int count=1;
printf("%4d=%4d+%4d",4,2,2); /*对4单独处理*/
for (m=6;m<=2000;m=m+2) /*从6开始分解*/
{
k=(int)sqrt(m); /*控制最大的第一加法因子终值*/
for (j=3;j<=k;j=j+2) /*扫描加法因子是不是质数*/
if (JudgePrime(j) && JudgePrime(m-j))/*两个加法因子均为质数*/
{
printf("%4d=%4d+%4d ",m,j,m-j);/*输出分解的式子*/
count++; /*输出个数加1*/
if (count%4==0) /*根据个数控制换行*/
printf("\n");
break; /*找到一种分解就退出*/
}
}
printf("\n");
return 0;
}
int judgePrime(int n) /*直接用教材中例5_3的代码*/
{
int i,k ;
if ( n==1 )
return 0 ;
k = (int) sqrt ( n );
for (i = 2; i<=k ; i++)
if (n % i == 0)
return 0 ;
return 1;
}
符号函数
#include <stdio.h>
int main( )
{
int x, sign;
scanf( "%d", &x );
if ( x > 0 )
sign = 1;
else if ( x == 0 )
sign = 0;
else
sign = -1;
printf( "%d -- %d\n", x, sign );
return 0;
}
勾股数(考过)
#include <stdio.h>
int main( )
{
int x, y, z;
for( x = 1 ; x <=48 ; x++ )
for( y = x+1 ; y <=49 ; y++ )
for( z = y+1 ; z <=50 ; z++ )
{
if ( x*x + y*y == z*z )
printf( "%3d %3d %3d\n", x, y, z );
}
return 0;
}
辗转相除(可能)
#include <stdio.h>
int main( )
{
int a, b, d;
scanf( "%d%d", &a, &b );
d = a % b;
while ( d != 0 )
{
a = b;
b = d;
d = a%b;
}
printf( "%d\n", b );
return 0;
}
摄氏度/华氏度
#include <stdio.h>
int main( )
{
float f,c;
printf("Input:\nF=");
scanf("%f", &f); /*输入华氏温度*/
c=5.0/9.0*(f-32); /*计算设施温度*/
printf("C=%.2f\n",c); /*按格式输出*/
return 0;
}
函数写法
#include <stdio.h>
double CelToFah ( double c)
{
return c*9/5+32;
}
int main( )
{
double c;
scanf("%lf",&c);
while (c>=0)
{
printf("Cel=%lf, Fah=%lf\n",c,CelToFah (c));
scanf("%lf",&c);
}
return 0;
}
同时被3和7整除和的平方根
s=sqrt(s);
double fun(int n)
{
double s=0.0;
int i;
for(i=1;i<n;i++)
if(i%3==0&&i%7==0)
s=s+i;
s=sqrt(s);
return s;
}
计算因子和
s+=i;
int fun(int n)
{
int s=0,i;
for(i=2;i<=n-1;i++)
if(n%i==0)
s+=i;
return s;
}
3-n素数平方根和
s+=sqrt(m);
double fun(int n)
{
int m,k,i;
double s=0.0;
for(m=3;m<=n;m++)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)
s+=sqrt(m);
}
return s;
}
自然数倒数和(考-)
关键语句: sum+=1.0/i;
double fun(int n)
{
int i;
double sum=0.0;
for(i=1;i<=n;i++)
if(i%5==0||i%9==0)
sum+=1.0/i;
return sum;
}
杨辉三角(考)
#include <stdio.h>
#define N 16
int main()
{
int i,j,n=0;
int a[16][16]={0};
do
{
printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}while(n<1 || n>16);
for(i=0;i<n;i++)
a[i][0]=1;
for(i=1;i<n;i++)
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}
计算是第几天
#include<stdio.h>
int main()
{
int year,month,day,days,i;
int b[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d-%d-%d",&year,&month,&day);
if(year%400==0||(year%4==0&&year%100!=0))
b[2]=29;
days=day;
for(i=1;i<month;i++)
days=days+b[i];
printf("%d\n",days);
return 0;
}
字符串
@结束
for( m=0; getchar()!=‘@’; )
long func()
{
long m;
for( m=0; getchar()!='@'; )
m++;
return m;
}
整型->字符串
# include <stdio.h>
void convert(int n)
{
int i;
if((i=n/10) != 0)
convert(i);
putchar(n%10+'0');
putchar(' ');
}
int main()
{
int number;
printf("输入整数:");
scanf("%d", &number);
printf("输出是:");
if(number < 0)
{
putchar('-');
number = -number;
}
convert(number);
putchar('\n');
return 0;
}
指针调用字符串比较
# include <stdio.h>
# include <string.h>
void check(char *a, char *b, int(*cmp)(const char *, const char *));
void main()
{
char s1[80], s2[80];
int(*p)(const char *, const char *); /* 函数指针 */
p = strcmp; /* 将函数strcmp的地址赋给函数指针p */
printf("输入两个字符串:\n");
gets(s1); /* 输入字符串1 */
gets(s2); /* 输入字符串2 */
check(s1, s2, p); /* 通过指针变量p传递函数strcmp的地址 */
}
void check(char *a, char *b, int(*cmp)(const char *, const char *))
{
printf("测试是否相等\n");
if(!(*cmp)(a, b))
printf("结果:相等\n");
else
printf("结果:不相等\n");
}
重复字符删除后输出
#include <stdio.h>
void deleteSame(char *s) //对串s删除相同的元素
{
int i=0,j,k;
while(s[i]) //对s[i]进行判断
{ for (j=0;j<i;j++) //与本串中其前面所有字符比较
if (s[i]==s[j])
break; //只要与其中一个字符相等则退出循环,将删该字符
if (j<i) //上面循环停止时如果符合此条件说明应删除s[i]
for (k=i;s[k];k++) //删除s[i]字符
s[k]=s[k+1];
else i++; //若当前s[i]不需要删除,则准备比较下一个字符
}
}
int main()
{
char str[40];
printf("input a string:\n");
gets(str);
printf("string deleted the same character is:\n");
deleteSame(str);
puts(str);
return 0;
}
字符串逆置(考-)
#include <stdio.h>
#include <string.h>
void reverse(char *p)
{
int i,j;
char t;
int n=strlen(p);
for(i=0,j=n-1;i<j;i++,j--)
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
int main()
{
char str[20];
printf("Input the string:");
gets(str);
printf("Before reverse:");
puts(str);
reverse(str);
printf("After reverse:");
puts(str);
return 0;
}
大小写转换
#include <stdio.h>
void change(char *p)
{
while(*p)
{
if (*p>='a'&&*p<='z')
*p=*p-32;
p++;
}
}
int main()
{
char str[20];
gets(str);
change(str);
puts(str);
return 0;
}
过滤非数字的字符
#include <stdio.h>
#include <string.h>
void change(char *p)
{
char a[20];
int i=0,j;
strcpy(a,p);
for(j=0;a[j];j++)
{
if (a[j]>='0'&&a[j]<='9')
p[i++]=a[j];
}
p[i]='\0';
}
int main()
{
char str[20];
gets(str);
change(str);
puts(str);
return 0;
}
数组
删去数组相同元素
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define N 80
int fun(int a[], int n)
{
int i=1,j;
int count=1;
int flag;
while(i<n)
{
flag=1;
for(j=0;j<count;j++)
{
if (a[j]==a[i])
{
flag=0;break;
}
}
if (flag)
{
count++;
a[count-1]=a[i];
}
i++;
}
return count;
}
int main()
{
int a[N],i,n=20;
srand(time(NULL));
for (i=0;i<20;i++)
a[i]=rand()%10;
printf("The original data :\n");
for(i=0; i<n; i++)
printf("%3d",a[i]);
n=fun(a,n);
printf("\n\nThe data after deleted :\n");
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n\n");
return 0;
}
删除偶数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void createRandom(int p[],int n); //产生随机元素
int deleteEven(int p[],int n); //删除偶数元素
void printOut(int p[],int n); //输出函数
int main( )
{
int arr[100],n,deleteNum;
printf("Input number of elements(number<100):\n");
scanf("%d",&n);
createRandom(arr,n);
printf("original array:\n");
printOut(arr,n);
deleteNum=deleteEven(arr,n);
printf("after delete,the array is:\n");
printOut(arr,n-deleteNum);
return 0;
}
void createRandom(int p[],int n)
{
int i;
srand(time(0));
for (i=0;i<n;i++)
p[i]=rand()%100+1;
}
int deleteEven(int p[],int n)
{
int i=0,j,count=0;
while(i<n-count)
{
if (p[i]%2==0)
{
for (j=i+1;j<n-count;j++)
p[j-1]=p[j];
count++;
}
else i++;
}
return count;
}
void printOut(int p[],int n)
{
int i;
for (i=0;i<n;i++)
printf("%4d",p[i]);
printf("\n");
}
array素数(考+)
#include <stdio.h>
#define MAX 1000
int fun(int lim, int aa[MAX])
{
int i,j,k=0;
for(i=2;i<=lim;i++)
{
for(j = 2 ; j <= (i/2) ; j++)
if(i % j == 0)
break;
if(j > (i/2))
aa[k++] = i;
}
return k;
}
int main()
{
int m, i, sum;
int array[MAX] ;
printf("输入一个整数");
scanf("%d", &m);
sum=fun(m, array);
for(i=0 ; i < sum ; i++)
{
if(i%10==0&&i!=0)
printf("\n");
printf("%5d", array[i]);
}
return 0;
}
元素交换(考)
最大最小数交换
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int arr[],int x,int y) //交换两数
{
int t=arr[x];
arr[x]=arr[y];
arr[y]=t;
}
int findMax(int a[],int n) //寻找数组中最大元素返回其指针
{
int i,maxPos=0;
for (i=1;i<n;i++)
if (a[i]>a[maxPos]) maxPos=i;
return maxPos;
}
int findMin(int a[],int n) //寻找数组中最小元素返回其指针
{
int i,minPos=0;
for (i=1;i<n;i++)
if (a[i]<a[minPos]) minPos=i;
return minPos;
}
void printOut(int arr[],int n) //输出数组中前n个元素
{
int i;
for (i=0;i<n;i++)
printf("%8d",arr[i]);
printf("\n");
}
int main ( )
{
int a[10],maxPos,minPos,i;
printf("input 10 elements:\n");
srand(time(NULL));
for (i=0;i<10;i++) //读入10个元素
a[i]=rand();
minPos=findMin(a,10); //调用函数求得最小元素位置
maxPos=findMax(a,10); //调用函数求得最大元素位置
printf("before exchange:\n");
printOut(a,10); //输出交换前的序列
swap(a,minPos,0); //交换第一个元素与最小元素
swap(a,maxPos,9); //交换最后一个元素与最大元素
printf("after exchange:\n");
printOut(a,10); //输出交换后的序列
return 0;
}
学生成绩查询系统
# include <stdio.h>
# include <stdlib.h>
double Nosearch(int sc[][7])
{
int i,j,sum=0;
double average;
printf("输入学号:");
scanf("%d", &i);
for(j=1; j<7; j++)
{
printf("第%d科成绩是%d\n", j, sc[i][j]);
sum += sc[i][j];
}
average = sum/6.0;
return average;
}
double Subsearch(int sc[][7])
{
int i,j,sum=0;
double average;
printf("输入考试科目号:");
scanf("%d", &j);
for(i=1; i<5; i++)
{
printf("第%d号学生本科成绩是%d\n", i, sc[i][j]);
sum += sc[i][j];
}
average = sum/4.0;
return average;
}
void input(int sc[][7])
{
int i,j;
printf("请输入成绩\n");
for(i=1; i<5; i++)
for(j=1; j<7; j++)
scanf("%d", &sc[i][j]);
}
int main( )
{
int select;
int i, j;
int score[5][7];
double average = 0;
do{
printf("本程序有4项功能:\n");
printf(" 1. 根据学号查询学生成绩\n");
printf(" 2. 根据考试号统计成绩\n") ;
printf(" 3. 根据考试号和学号查询成绩\n");
printf(" 4. 成绩录入\n");
printf(" 0. 退出\n");
printf(" 请输入选择(0 - 4): ");
scanf("%d", &select);
switch(select)
{
case 0:
printf("OK\n");
exit(0);
break;
case 1:
average=Nosearch(score);
printf("学生的平均成绩是%7.2f\n", average);
break;
case 2:
average=Subsearch(score);
printf("本科平均成绩是%7.2f\n", average);
break;
case 3:
printf("输入学号和考试号:");
scanf("%d %d", &i, &j);
printf("第%d号学生的第%d科考试成绩是%d\n", i, j, score[i][j]);
break;
case 4:
input(score);
break;
default:
break;
}
}while(1);
return 0;
}
指针
交换排序
#include<stdio.h>
int main()
{
int a[10],*p=a,n,i,j;
do
{
scanf("%d",&n);
} while(n<=0||n>10);
for(i=0;i<n;i++)
scanf("%d",p+i);
for(i=0;i<n-1;i++)
{
for(j=i;j<n;j++)
if(*(p+j)<*(p+i))
{
int t=*(p+j);
*(p+j)=*(p+i);
*(p+i)=t;
}
}
for(i=0;i<n;i++)
printf("%d ",p[i]);
return 0;
}
逆序存放(考)
# include <stdio.h>
void inv(int *x, int n);
int main()
{
int i;
int array[10] = {1, 3, 9, 11, 0, 8, 5, 6, 14, 98};
printf("原始数组是:\n");
for(i=0; i<10; i++)
printf("%d " , array[i]);
printf("\n");
inv(array, 10);
printf("按相反次序存放后的数组为:\n");
for(i=0; i<10; i++)
printf("%d ", array[i]);
printf("\n");
return 0;
}
void inv(int *x, int n)
{
int *p, *i, *j , t;
int m = (n-1)/2;
i = x;
j = x + n - 1;
p = x + m;
for(; i<=p; i++, j--)
{
t = *i;
*i = *j;
*j = t;
}
}
逆序存放并输出变化元素
# include <stdio.h>
void inv(int *x, int n);
int main()
{
int i;
int array[10] = {1, 3, 9, 11, 0, 8, 5, 6, 14, 98};
printf("原始数组是:\n");
for(i=0; i<10; i++)
printf("%d\t" , *(array+i));
printf("\n");
inv(array, 10);
printf("按相反次序存放后的数组为:\n");
for(i=0; i<10; i++)
printf("%d\t",*(array+i));
printf("\n");
return 0;
}
void inv(int *x, int n)
{
int *p, *i, *j , t;
int m = (n-1)/2;
j = x + n - 1;
p = x + m;
for(i = x; i<=p; i++, j--)
{
t = *i;
*i = *j;
*j = t;
}
}
平均值比较
#include <stdlib.h>
#include <stdio.h>
#include<time.h>
#define N 10
double fun(double *x)
{
int i, j; double av, y[N];
av=0;
for(i=0; i<N; i++)
av +=x[i]/N;
for(i=j=0; i<N; i++)
if( x[i]<av )
{
y[j]=x[i];
x[i]=-1;
j++;
}
i=0;
while(i<N)
{
if( x[i]!= -1 )
y[j++]=x[i];
i++;
}
for(i=0; i<N; i++)x[i] = y[i];
return av;
}
int main()
{
int i; double x[N];
srand(time(NULL));
for(i=0; i<N; i++)
{
x[i]=rand()%50;
printf("%4.0f ",x[i]);
}
printf("\n");
printf("\nThe average is: %f\n",fun(x));
printf("\nThe result :\n");
for(i=0; i<N; i++)
printf("%5.0f ",x[i]);
printf("\n");
return 0;
}
宏定义
2月天数
#include <stdio.h>
/*定义计算二月天数的带参宏*/
#define DAYS_FEB(year) (year)%4==0 && (year)%100!=0 || (year)%400==0 ? 29: 28
int main( )
{
int year;
int days;
printf("input a year:");
scanf("%d", &year); /*输入年份*/
days=DAYS_FEB(year); /*使用宏求年份year的二月的天数*/
printf("days of the Feb.: %d\n",days); /*输出结果*/
return 0;
}
数值交换
define CHANGE(a,b,t) t=a;a=b;b=t
#include<stdio.h>
#define CHANGE(a,b,t) t=a;a=b;b=t
int main()
{
int c,d,s;
scanf("%d%d",&c,&d);
CHANGE(c,d,s);
printf("c=%d,d=%d\n",c,d);
return 0;
}
两数相除的余数,3和7的倍数
define Q(a,b) (a)%(b),if (Q(i,3) == 0&&Q(i,7) == 0)
#include<stdio.h>
#define Q(a,b) (a)%(b)
int main()
{
int i;
for (i=1;i<=200;i++)
if (Q(i,3)==0&&Q(i,7)==0)
printf("%5d",i);
printf("\n");
return 0;
}