c语言经典例题

C语言经典程序

1、从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。

#include <stdio.h>
int main() {
    int i,n=0;
    float x[1000],a,ave,sum=0.0;
    scanf("%f",&a);
    while(a>0&&n<1000){
        sum+=a;
        x[n++] = a;
        scanf("%f",&a);
    }
    ave = sum/n;
    printf("%4.2f\n",ave);
    for (i=0; i<n; i++) {
        if(x[i]<ave)
            printf("%6.2f",x[i]);
    }
    return 0;
}

2、输出2000~2100年之间所有的闰年(年份值能被4整除但不能被100整除,或者能被400整除),并统计其个数在最后输出。

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int i,count=0;
    for(i=2000;i<=2100;i++){
        if((i%4==0&&i%100!=0)||(i%400==0)){
            count++;
            printf("%d\n",i);
        }
           
    }
    printf("%d",count);
    return 0;
}

3、有一分数序列:2/1,3/2,5/3,8/5, 13/8……(从第2项起,每一项的分子是前一项的分子与分母之和,分母是前一项的分子),求这个数列的前20项之和。

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int i;
    double sum=0.0,a=2,b=1,t;
    for (i=0; i<20; i++) {
        sum+=a/b;
        t = a;
        a=t+b;
        b = t;
    }
    printf("%f",sum);
    return 0;
}

4、求最大值:输入一个正整数n,再输入n个整数,输出最大值。

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int max,a,i,n;
    scanf("%d",&n);
    scanf("%d",&a);
    max = a;
    for (i=1; i<n; i++) {
        scanf("%d",&a);
        if(max<a)
            max =a ;
    }
    printf("最大值是:%d\n",max);
    return 0;
}

5、从键盘输入一批学生的成绩(以负数为结束标志),统计输出其中的及格人数和及格人均分,并且统计输出不及格人数及不及格平均分

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int count1=0,count2=0;
    float a,sum1=0,sum2=0,ave1,ave2;
    scanf("%f",&a);
    while(a>0){
        if(a>=60){
            count1++;
            sum1+=a;
        }
        else{
            count2++;
            sum2+=a;
        }
        scanf("%f",&a);
    }
    if(count1>0)
        ave1 = sum1/count1;
    else
        ave1 = 0;
    printf("及格人数:   %d 及格平均分:  %.2f\n",count1,ave1);
    if(count2>0)
        ave2 = sum2/count2;
    else
        ave2 = 0;
    printf("不及格人数   %d 不及格平均分    %.2f\n",count2,ave2);
    return 0;
}

6、将一个四位的十六进制数转换为十进制数

#include <stdio.h>
#define N 50
long fun(char *s);
int main(int argc, const char * argv[]) {
    long m;
    char s[N];
    scanf("%s",s);
    m = fun(s);
    printf("%ld",m);
    return 0;
}
long fun(char *s){
    long sum=0;
    int i,t;
    for (i=0; s[i]!='\0'; i++) {
        if(s[i]<='9')
            t = s[i]-'0';
        else if(s[i]>='a'&&s[i]<='f')
            t = s[i]-'a'+10;
        else if(s[i]>='A'&&s[i]<='F')
            t = s[i]-'A'+10;
        sum=sum*16+t;
    }
    return sum;
}

7、从键盘输入一个整数x, 判断x是否为素数,是素数输出“yes”,否则的话输出“no”。

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int i,x;
    scanf("%d",&x);
    for(i=2;i<=x/2;i++){
        if(x%i==0)break;
    }
    if(i>x/2&&x!=1) printf("yes");
    else    printf("no");
    return 0;
}

8、查找指定字符:输入一个字符,再输入一个以回车结束的字符串(少于 80 个字符),在字符串中查找该字符。如果找到,则输出该字符在字符串中所对应的最大下标,下标从 0 开始;否则输出“Not Found”。试编写相应程序。

#include <stdio.h>
#define N 80
int main(int argc, const char * argv[]) {
    int i,index=0,flag = 0;
    char ch,s[N];
    scanf("%c",&ch);
    scanf("%s",s);
    for (i=0; s[i]!='\0'; i++) {
        if(s[i]==ch){
            index = i;
            flag = 1;
        }
    }
    if(flag=1)
        printf("%d",index);
    else
        printf("Not Found");
    return 0;
}

9、从键盘输入一个大于6的偶数,将其写成两个素数之和的表达式形式(如12=5+7)。要求定义prime(x)来判断x是否为素数,如果x是素数则返回1,不是素数返回0。

#include <stdio.h>
#include <math.h>
int prime(int x);
int main(int argc, const char * argv[]) {
    int i,n;
    scanf("%d",&n);
    for (i=2; i<=n/2; i++) {
        if(prime(i)==1&&prime(n-i)==1)
            printf("%d=%d+%d\n",n,i,n-i);
    }
    return 0;
}
int prime(int x){
    int i;
    for(i=2;i<=sqrt(x);i++){
        if(x%i==0)  return 0;;
    }
    return 1;
}

10、编程找出四位整数 abcd 中满足下述关系的数:
( ab + cd )( ab + cd ) = abcd

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int i,a,b,c,d;
    for(i=1000;i<=9999;i++){
        a = i/1000;
        b = (i/100)%10;
        c = (i/10)%10;
        d = i%10;
        if((a*10+b+c*10+d)*(a*10+b+c*10+d)==i){
            printf("%d\n",i);
        }
    }
    return 0;
}

11、输入两个正整数m和n,输出m和n之间的所有素数,每行输出10个,最后统计输出该区间内素数的个数。

#include <stdio.h>
int main(void)
{    int m,n,i,j,count=0;
    printf("input m,n:");
    scanf("%d%d",&m,&n);
    
    for(i=m;i<=n;i++)
    {
        for(j=2;j<=i/2;j++)
            if(i%j==0)  break;
        if(j>i/2&&i!=1)
        {    printf("%6d",i);
            count++;
            if(count%10==0)
                printf("\n");}
    }
    printf("\n该区间内的素数共有%d个\n",count);
}

12、输出三位数的水仙花数。

#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[]) {
    int i,m,n,sum=0,t;
    scanf("%d%d",&m,&n);
    for (i=m; i<=n; i++) {
        sum = 0;
        t = i;
        while(t>0){
            sum += pow(t%10,3);
            t = t/10;
        }
        if(sum == i)
            printf("%d",i);
       
    }
    return 0;
}

13、求e:输入一个正整数n,计算下式的和(保留4位小数)。
14、简化的插入排序:输入一个正整数n(n<10),再输入n个从小到大有序的整数,然后输入一个整数x,将x插入到这一组数据中,使该组数据仍然有序输出。

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int n,i,s[10],x,t=0;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&s[i]);
    }
    scanf("%d",&x);
    for(i=0;i<n;i++){
        if(x<s[i]){
            t = s[i];
            s[i] = x;
            x = t;
        }
        printf("%4d",s[i]);
    }
    printf("%4d\n",x);
    return 0;
}

15、找出200以内的所有完数,并输出其因子。一个数若恰好等于它的各因子之和,即为完数,如6=1+2+3。

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int i,j,sum;
    for (i=1; i<=200; i++) {
        sum = 0;
        for (j=1; j<=i/2; j++) {
            if(i%j==0)
                sum+=j;
        }
        if (sum == i) {
            printf("%d=1",sum);
            for(int k =2;k<=i/2;k++){
                if(i%k==0)
                    printf("+%d",k);
            }
            printf("\n");
        }
      
    }
    return 0;
}

16、输入一个字符串,统计其中英文字母,数字符号及其他字符的个数

#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[]) {
    char ch;
    int digit=0,alpha=0,blank=0,other=0;
    while((ch = getchar())!='\n'){
        if(ch>='0'&&ch<='9')
            digit++;
        else if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
            alpha++;
        else if (ch == ' ')
            blank++;
        else
            other++;
    }
    printf("%d %d %d %d\n",digit,alpha,blank,other);
    return 0;
}

17、统计子字符串substr在字符串str中出现的次数。
例如,若字符串为aaas lkaaas,子字符串为as,则应输出2。

#include <stdio.h>
fun(char *str,char *substr){
    int i,j,k,num=0;
    for(i = 0; str[i]; i++)
        for(j=i,k=0;substr[k]==str[j];k++,j++)
            if(substr[k+1]=='\0')
            {
                num++; break;
            }
     return num;
}
int main()
{
   char str[80],substr[80];
   printf("Input a string:");
   gets(str);
   printf("Input a substring:");
   gets(substr);
   printf("%d\n",fun(str,substr));
}

18、给定程序的功能是将在字符串s中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个新串t中,t中字符按原字符串中字符出现的逆序排列。(注意0为偶数) 例如:当s中的字符串为:"1234567"时,则t中的字符串应为:“664422”。

#include <stdio.h>
#include <string.h>
void fun (char  *s, char  *t)
{
    int  i, j, sl;
    sl = strlen(s);
    if(sl%2)
        sl- =2;
    else
        sl--;
    for (i=sl, j=0; i>=0; i-=2)
    {
        t[2*j] = s[i];
        t[2*j +1] = s[i];
        j++;
    }
    t[2*j]='\0';
}

int main()
{
    char s[100], t[100];
    printf("\nPlease enter string s:");
    scanf("%s", s);
    fun(s, t);
    printf("The result is: %s\n", t);
}

19、给定程序的功能是从字符串s尾部开始,按逆序把相邻的两个字符交换位置,并依次把每个字符紧随其后重复出现一次,放在一个新串t中。 例如:当s中的字符串为:"12345"时,则t中的字符串应为:“4455223311”。

#include <stdio.h>
#include <string.h>
void fun (char  *s, char  *t)
{
    int  i, j, sl;
    sl = strlen(s);
    for (i=sl-1, j=0; i>=0; i-=2)
    {
        if (i-1 >= 0)
            t[j++] = s[i-1];
        if (i-1 >= 0)
            t[j++] = s[i-1];
        t[j++] = s[i];
        t[j++] = s[i];
    }
    t[j]=0;
}
int main()
{
    char s[100], t[100];
    printf("\nPlease enter string s:");
    scanf("%s", s);
    fun(s, t);
    printf("The result is: %s\n", t);
}

20、函数fun的功能是:从字符串s中删除所有小写字母c。

#include <stdio.h>
void fun(char *s)
{
    int i,j;
    for(i=j=0;s[i]!='\0';i++)
       if(s[i]!='c')
           s[j++]=s[i];
       s[j]='\0';
}
int main()
{
    char s[80];
    printf("Enter a string:    ");
    gets(s);
    printf("The original string:   ");
    puts(s);
    fun(s);
    printf("The string after deleted:  ");
    puts(s);
    printf("\n\n");
}

21、函数fun的功能是:将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。 例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、1、2、3、4。

#include    <stdio.h>
#define    N    9
void fun(int  a[], int  n)
{
    int  i, t, p;
    p = (n%2==0)?n/2:n/2+1;
    for (i=0; i<n/2; i++)
    {
        t=a[i];
        a[i] = a[p+i];
        a[p+i] = t;
    }
}
int main()
{  int  b[N]={1,2,3,4,5,6,7,8,9}, i;
   printf("\nThe original data  :\n");
   for (i=0; i<N; i++)
       printf("%4d ", b[i]);
   printf("\n");
   fun(b, N);
   printf("\nThe data after moving  :\n");
   for (i=0; i<N; i++)
       printf("%4d ", b[i]);
   printf("\n");
}
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值