C语言程序设计题/C语言计算机二级考前押题版
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) //余数为1printf("\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 4printf( " " ); //打印空格数for ( j=1 ; j<=11-2*i ; j++ )// 9 7 5 3 1printf( "*" ); //打印*号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 0printf( " " ); //打印空格数}for ( j=1 ; j<=3-fabs(3-i) ; j++ )// 3-|3-i|= 1 2 3 2 1printf( "*" );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-999k = (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;elsesign = -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");elseprintf("结果:不相等\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;
}