C语言程序设计经典例题100道(五)

1、(1)编写一个C语言函数,函数名是 print_ day,返回值是void类型,即不需要返回值,参数列表中有一个int类型变量day作为形式参数。函数print_day(()的功能是按照给定的整数变量day,如果day的值为0~6,则相应输出“星期日”至“星期六”到屏幕中。如果day的值不是0~6,则输出“非法数据”。函数 print_ day()不允许从键盘输入数据。

函数print_day()对应的函数原型如下:

void print_day(int day);

(2)编写main()函数并调用函数print_da y()进行测试。

#include<stdio.h>
void print_day(int day);
int main()
{
    int day;
    printf("请输入一个整数:");
    scanf("%d",&day);
    print_day(day);
    return 0;
 } 
 void print_day(int day)
 {
     if (day==0)
     {
         printf("星期日\n");
     }
     else if(day==1)
     {
         printf("星期一\n");
     }
     else if(day==2)
     {
         printf("星期二\n");
     }
     else if(day==3)
     {
         printf("星期三\n");
     }
     else if(day==4)
     {
         printf("星期四\n");
     }
     else if(day==5)
     {
         printf("星期五\n");
     }
     else if(day==6)
     {
         printf("星期六\n");
     }
     else 
     {
         printf("非法数据");
     }
 }

运行结果

2、(1)编写一个C语言函数,函数名是divide,返回值是void类型,即不需要返回值,参数列表中有3个int类型变量m、n和scale作为形式参数。

函数divide()的功能是把分数m/n转化为小数输出,即计算m除以n的商,并输出商到屏幕中(只输出商,不输出m或n等无关的内容)。计算结果保留到小数点后scale位,最末位的数使用直接截断的方式,不需要四舍五人。每10个小数位为一组,使用空格分隔。

函数divide()对应的函数原型如下:

void divide (int m, int n, int scale);

(2)编写main()函数,从键盘输入整数m、n和scale并调用函数 divide()进行测试。如果m小于0或者n小于1或者scale小于0,则输出“非法数据”。

#include<stdio.h>
#define N 5 
void divide(int m,int n,int scale);
int main()
{
    int m,n,opt,scale;
    printf("请输入一个分数[m/n]:");
    scanf("%d%c%d",&m,&opt,&n);
    printf("保留小数位数:");
    scanf("%d",&scale);
    if((m<0)||(n<1)||(opt!='/')||(scale<0))
    {
    printf("非法数据"); 
    return -1;
 } 
 printf("%d/%d=",m,n);
 divide(m,n,scale) ;
 return 0;
}
 void divide(int m,int n,int scale)
 {
     int counter=0;
     int i;
     printf("%d",m/n);
     for(i=1;i<=scale;i++)
     {
         m=m%n;
         m=m*10;
         printf("%d",m/n);
         counter++;
         if(counter%10==0)
         {
             printf(" ");
         }
     }
 }

运行结果

3、某学校使用等级制评定学生的成绩,原来的百分制按照以下规则转换为等级制:95分及以上评为A;85分及以上评为B;70分及以上评为C;60分及以上评为D;60分以下评为E。

(1)编写一个C语言函数,函数名是to_grade,返回值是char类型,参数列表中有一个 int类型变量score作为形式参数。

函数to_grade()的功能是按照给定的百分制整数分数score计算出相应的等级,并把该等级返回。如果整数变量score不满足条件“0<score<100”,则函数to_grade()返回值是''(即空格)。函数to_grade(()不允许从键盘输人数据,也不允许输出数据到屏幕中。

函数to_grade(()对应的函数原型如下:

char to grade(int score);

(2)编写main(()函数,调用函数to grade()进行测试。

#include<stdio.h>
char to_grade(int score);
int main()
{
    int score;
    char grade;
    printf("请输入一个整数成绩:");
    scanf("%d",&score);
    grade=to_grade(score);
    if(grade!=' ')
    {
        printf("百分制的%d分对应于等级制的%c。",score,grade);
    }
    else
    {
        printf("非法数据");
    }
    return 0;
 } 
 char to_grade(int score)
 {
     char grade; 
     if( (score>100)||(score<0))
     {
     grade=' ';
     }
     else if(score>=95)
     {
         grade='A';
     }
     else if(score>=85)
     {
         grade='B';
     }
     else if(score>=70)
     {
         grade='C';
     }
     else if(score>=60)
     {
         grade='D';
     }
     else if(score>=0)
     {
         grade='E';
     }
     return grade;
 }

运行结果

4、(1)编与一个C语言函数,函数名是printnu umber,返回值是int类型,参数列表中有一个int类型变量n作为形式参数。

函数print_number()的功能是按照给定的n值按照从小到大的顺序输出前n个正整数到屏幕中(不输出2的倍数、3的倍数以及5的倍数),每个数使用空格分隔,同时统计所输出整数的个数并作为返回值返回。函数 print_nur nber()不允许从键盘输入数据。

函数print number()对应的函数原型如下:

int print number(int n);

(2)编写main()函数,从键盘输入一个整数n,并调用函数print_number()输出满足条件的整数到屏幕中。最后接收函数 print_nu imber(()的返回值并输出满足条件的整数的个数。

如果键盘输入的整数n小于1,则输出“非法数据”。

#include<stdio.h>
int print_number(int n);
int main()
{
    int n;
    int count;
    printf("请输入一个整数:");
    scanf("%d",&n);
    if(n<1)
    {
        printf("非法数据");
        return 1;
    }
    count=print_number(n);
    printf("\n满足条件的整数一共有%d个。\n",count);
    return 0;
 } 
int print_number(int n)
 {
     int count=0;
     int i;
     for(i=1;i<=n;i++)
     {
         if((i%2!=0)&&(i%3!=0)&&(i%5!=0))
         {
         printf("%d ",i);
         count++;
    }
}
    return count;
}

运行结果

5、(1)编写一个C语言函数,函数名是reverse,返回值是void类型,即不需要返回值,参数列表中有一个指向longlong类型的指针变量n作为形式参数。

函数reverse()的功能是按照给定指针变量n所指向的整数计算其对应的逆序整数并保存覆盖原来的值。函数reverse()不允许从键盘输入数据,也不允许输出数据到屏幕中。

函数reverse()对应的函数原型 如下:

void reverse(long long *n);

(2)编写main()函数,从键盘输人一个整数n,并调用函数reverse()把n的值修改为其

对应的逆序整数,最后计算新n值的 2倍并输出结果到屏幕中。

如果键盘输入的n小于1,则输 出“非法数据”。

#include<stdio.h>
void reverse(long long * n);
int main()
{
    long long n;
    printf("请输入一个整数:");
    scanf("%lld",&n);
    if(n<1)
    {
        printf("非法数据");
        return 1;
    }
    reverse(&n);
    printf("%lld * 2=%lld",n,n * 2);
    return 1;
 } 
void reverse(long long * n)
 {
     long long m=0;
     long long t=*n;
     while(t>0)
     {
     m=m * 10+t%10;
     t=t/10;
}
    *n=m;
}

运行结果

6、(1)编写两个C语言函数,即input_numbers()和print_reversed_numbers(),分别对应的函数原型如下:

void input_numbers(int number[],intn);

void print_reversed_numbers(int number[], intr);

函数input_numbers()的功能是输出提示信息 读取键盘输人的n个整数并保存到数

组number中。

函数print_reversed_numbers()的功能是以逆序输出数组number的n个整数到屏幕中。

(2)编写main()函数,先后调用函数input_nun mbers()和print_reversed numbers(),读取键盘输人的n个整数保存到数组number,并以逆序输出数组number的n个整数到屏幕中。

#include<stdio.h>
#define N 5 
void input_numbers(int number[],int n);
void print_reversed_numbers(int number[],int n);
int main()
{
    int number[N];
    input_numbers(number,N);
    print_reversed_numbers(number,N);
    
    return 0;
 } 

 
void input_numbers(int number[],int n)

{
    int i;
    
    printf("请输入%个整数:\n",n);
    for(i=0;i<n;i++)
    {
        printf("第%d个整数:",i+1);
        scanf("%d",&number[i]);
    }
 } 
 void print_reversed_numbers(int number[],int n)
 {
 
     int i;
     printf("输出:\n");
     for(i=n-1;i>=0;i--)
     {
         
         printf("第%d个整数:%d\n",i+1,number[i]);
         
     }
 }

运行结果

7、编写C语言程序,从键盘输入三角形3个顶点1 P1、P2和P3的坐标并保存到Point类型的变量中,然后计算三角形的面积,并输出结果到屏幕中。要求所有功能在main()函数中实现,不需要自定义其他函数。

#include<stdio.h>
#include<math.h>
int main()
{
    struct point
    {
        double x;//点x的坐标
        double y;//点y的坐标
    };
    typedef struct point Point;
    Point p1;//三角形的顶点p1
    Point p2;//三角形的顶点p2
    Point p3;//三角形的顶点p3
    double a;//三角形的边长a
    double b;//三角形的边长b
    double c;//三角形的边长c
    double s;//三角形的半周长
    double area;//三角形的面积
    printf("顶点p1的坐标[格式:x,y]:");
    scanf("%lf,%lf",&p1.x,&p1.y);
    printf("顶点p2的坐标[格式:x,y]:");
    scanf("%lf,%lf",&p2.x,&p2.y);
    printf("顶点p3的坐标[格式:x,y]:");
    scanf("%lf,%lf",&p3.x,&p3.y);
    
    a=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p2.y-p2.y));
    b=sqrt((p1.x-p3.x)*(p1.x-p3.x)+(p1.y-p3.y)*(p2.y-p3.y));
    c=sqrt((p2.x-p3.x)*(p2.x-p3.x)+(p2.y-p3.y)*(p2.y-p3.y));
    s=(a+b+c)/2;
    area=sqrt(s *(s-a)*(s-b)*(s-c));
    printf("三角形的面积:%f",area); 
    
    return 0;
}

运行结果

8、编写C语言程序,从键盘输人代表头的总数量的整数head以及代表腿的总数量的整数 leg,然后计算鸡和兔的数量并保存到Animal类型的变量中,最后输出结果到屏幕中。如果有多个解,则只需输出一个解即可;如果无解,则到输出“本题无解”;如果head小于2或leg小于6,则输出“非法数据”。这里约定鸡和兔的的数量都是不少于一只。要求所有功能在 main()函数中实现,不需要自定义其他函数。

#include<stdio.h>
int main()
{
    struct animal
    {
        int chick;//鸡的数量 
        int rabbit;//兔的数量 
    };
    typedef struct animal Animal;
    Animal animal;
    int head;
    int leg;
    printf("鸡兔同笼,头的总数:");
    scanf("%d",&head);
    printf("鸡兔同笼,腿的总数:");
    scanf("%d",&leg);
    if((head<2)||(leg<6))
    {
        printf("非法数据");
        return 1;
    }
    animal.chick=1;
    while(animal.chick<head)
    {
        animal.rabbit=head-animal.chick;
        if(animal.chick * 2+animal.rabbit * 4==leg)
        {
        break;
        }
        animal.chick=animal.chick+1;
    }
    if(animal.chick==head)
    {
        printf("本题无解"); 
    }
    else
    {
        printf("鸡:%d只,兔:%d只。",animal.chick,animal.rabbit);
    }
    return 0;
}

运行结果

9、编写C语言程序,从键盘输入一个字母,如果是大写形式的元音字母,则输出信息“是大写形式的元音字母”到屏幕中;如果是小写形式的的元音字母,则输出信息“是小写形式的元音字母”到屏幕中;如果以上都不是,则输出信息“不是元音字母”。

提示:元音字母是A E I O U

#include<stdio.h>
int main()
{
    char ch;
    printf("请输入一个字母:");
    scanf("%c",&ch);
    switch(ch)
    {
        case 'a':
            case 'e':
                case 'i':
                    case 'o':
                        case 'u':
                        printf("字符[%c]是小写形式的元音字母。\n",ch);
                        break;
        case 'A':
            case 'E':
                case 'I':
                    case 'O':
                        case 'U':
                        printf("字符[%c]是大写形式的元音字母。\n",ch);
                        break;
        default:
            printf("字符[%c]不是元音字母。\n",ch);
    }
    return 0; 
}

运行结果

10、编写C语言程序,从键盘输入2个整数m和n(使用空格分隔),然后输出m和n之间的所有素数并保存到文本文件prime.txt(以“w”模式打开)。每行1个素数,并统计在区间[m,n]中素数的数量,然后显示到屏幕中。如果整娄数m和n不满足条件“2≤m<n”,则输出“非法数据”到屏幕中。

#include<stdio.h>
#include<math.h>
#define DATA_FILE "prime.txt"
int is_prime(int n);
int main()
{
    int m,n,i;
    int counter=0;
    printf("请输入2个整数[n m]:");
    scanf("%d%d",&m,&n);
    if((m<2)||(m>n))
    {
        printf("非法数据");
        return 1;
    }
    FILE *fp=fopen(DATA_FILE,"w");
    if(fp==NULL)
    {
        printf("打开文件%s失败",DATA_FILE);
        return 2;
    }
    for(i=m;i<=n;i++)
    {
        if(is_prime(i))
        {
            fprintf(fp,"%d\n",i);
            counter++;
        }
    }
    fclose(fp);
    printf("保存文件%s成功。\n",DATA_FILE);
    printf("区间[%d,%d]的素数有%d个\n",m,n,counter);
    return 0;
    }
    
    int is_prime(int n)
    {
        int prime=1;//0:合数;1:素数
        int t=sqrt(n);
        int i;
        for(i=2;i<=t;i++)
        {
            if(n%i==0)
            {
                prime=0;
                break;
            }
        }
        return prime;
    }

运行结果

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值