C程序练习(无难易程度排序)

1.制作一个简易的计算器,能实现两个数基本的+,-,*,/基本运算

        分析:用户在使用计算器时首先应该要有提示提醒用户选择使用哪一个运算符号,然后根据用户的选择(switch语句)将用户输入的两个数进行算术运算。

#define _CRT_SECURE_NO_WARNINGS   //vs中不能直接使用scanf(可以使用scanf_s,但是兼容性差,不 
                                  //能在其他软件商执行该.cpp),需要在文件的第一行添加
                                  //#define _CRT_SECURE_NO_WARNINGS。
#include <stdio.h>
int main(){
    printf("-----------欢迎使用计算器-----------\n");    //提示
    printf("--------1.加法        2.减法--------\n");
    printf("--------3.乘法        4.除法--------\n");
    int style,a,b;
    printf("请选择你要进行的运算:");
    scanf("%d", &style);
    printf("请输入两个数:");
    scanf("%d %d", &a, &b);
    switch (style) {                               //根据用户输入的数进行条件选择
      case 1:
	    printf("%d+%d=%d", a, b, a + b); break;    //记住一定要加break,否则程序会一直往下进行
      case 2:
	    printf("%d-%d=%d", a, b, a - b); break;
      case 3:
	    printf("%d*%d=%d", a, b, a * b); break;
      case 4:
	    printf("%d/%d=%d", a, b, a / b); break;    //这里的运算结果是int整形
      default:
	    printf("输入错误,请重新输入!"); break;
    return 0;
}

运行结果如下:


2.输入一个数,判断它是不是质数

        分析:首先要搞清楚质数的概念。一个自然数是不是质数是看它除了1和它本身外还有没有其他数能被整除。如果没有那么这个数就是质数,反之则不是。0和1既不是质数也不是合数。这里首先确定输入的数必须是大于1的整型,否则提醒用户输入格式错误,然后这里通过对用户输入的数从2开始依次取余,如果这个数在循环体内与其他数取余为,那么直接跳出循环,此时用户输入的数肯定大于这个被取余数,那么这个数就不是质数。

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main(){
    int a,i;
    pritnf("请输入一个自然数:");
    scanf("%d",&a);
    if(a>1)                    //判断用户输入的数是否在质数定义范围内
    {
    for(i=2;i<a;i++){          //如果用户输入格式正确,将这个数从2开始到a-1开始分别取余
    if(a%i==0)
      break;                   //如果取余过程中出现了余数为0,则跳出循环
    }                          
    if(a>i)                    //判断a是否为质数
      printf("%d不是质数。",a);
    else
      printf("%d是质数。",a);
 }
    else
      printf("%d既不是质数,也不是合数。",a);
return 0;
}
    

运行结果如下:


3.输入一个日期,并判断是平年还是闰年,并输出这个日期是这一年的第几天

        分析:这里特别要注意的一点,闰年的定义跟我们平时生活中口头的定位不一样!平时我们理解的闰年是年份能被4整除的就是闰年,但是闰年的判断规则严格上是年份如果能被4整除的同时不能被100整除或年份能被400整除时就是闰年。了解了闰年的定义后,这个程序就比较简单了。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
	int year, month,day,sum=0;               
	printf("请输入一个日期(格式2024.1.1):");
	scanf("%d.%d.%d",&year,&month,&day);
	switch (month) {         //根据用户输入的日期的月数,判断总天数sum的值
	case 1:sum = 0; break;
	case 2:sum = 31; break;
	case 3:sum = 59; break;
	case 4:sum = 90; break;
	case 5:sum = 120; break;
	case 6:sum = 151; break;
	case 7:sum = 181; break;
	case 8:sum = 212; break;
	case 9:sum = 243; break;
	case 10:sum = 273; break;
	case 11:sum = 304; break;
	case 12:sum = 334; break;
	default:printf("输入错误,请重新输入!"); break;
	}
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {   //判断是否为闰年
		if (month > 2)          
			sum = sum + 1;      //如果是闰年且月数大于2的话,总天数+1
		printf("%d年是闰年,",year);
	}
		else {
		printf("%d年是平年,",year);
	}
	printf("%d月%d日是这一年的第%d天。",month,day,sum+day);
	return 0;
}

运行结果如下:


4.输入一个自然数,输出对应的乘法口诀表

        分析:在学习循环结构时,输出九九乘法表时采用了循环嵌套。题目程序只需修改内层循环的循环条件即可实现。

#include <stdio.h>
int main() {
	printf("请输入一个自然数:");
	int i, j, n;
	scanf("%d", &n);
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= i; j++)
			printf("%d*%d=%d\t", i, j, i * j);
		printf("\n");
	}
	return 0;
}

运行结果如下:


5.判断100~1000之中哪些是水仙花数并输出。(水仙花数:一个三位数且每个位上的数字的 3次幂之和等于它本身)

        分析:根据水仙花数的定义,首先确定它的取值范围在100~1000之间。其次它的百位、十位、个位分别三次方之和要等于它的本身,只需想方法将它的百位、十位、个位表示出来即可轻松实现。

#include <stdio.h>
int main() {
	int a, b, c;
	for (int i = 100; i <= 999; i++) {
		a = i / 100 % 10;    //百位
		b = i / 10 % 10;     //十位
		c = i % 10;          //个位
		if (a*a*a+b*b*b+c*c*c==i)
			printf("%d  ", i);
	}
	return 0;
}

运行结果如下:


6.编写一个程序计算1-1/2+1/3-1/4+……-1/98+1/99-1/100的值

        分析:从需求可知我们要计算一串分数相加的合,分子一直都是1,那就用一个变量表示分母。但是还存在一个问题,这串分数的偶数项都是负数,那么就要再定义一个变量用来改变项的正负。

#include <stdio.h>
int main() {
	int  i = 1, j = 1;              //i改变正负,j表示分母
	double sum = 0.0;               //用来存放累加和
	while (j <= 100) {
		sum = sum + i * (1.0 / j);  //累加
		i = -i;                     //每循环一次,改变下一项的正负号
		j = j + 1;                
	}
	printf("%lf", sum);
return 0;
}

运行结果如下:


7.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值