初识C语言——分支与循环及函数部分的练习整理
1.输入一个年份year,判断它是不是闰年
#include <stdio.h>
int main()
{
int year = 0;
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
printf("%d年是闰年\n",year);
else
printf("%d年不是闰年\n", year);
return 0;
}
再用函数编写上述代码
#include <stdio.h>
int is_leap_year(int y)
{
if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
return 1;
else
return 0;
}
int main()
{
int year = 0;
scanf("%d", &year);
if (is_leap_year(year))
{
printf("%d年是闰年\n", year);
}
else
{
printf("%d年不是闰年\n", year);
}
return 0;
}
2.输入一个正数,逆序打印它的每一位。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
while (num)
{
printf("%d ", num % 10);
num /= 10;
}
return 0;
}
用函数来实现
#include <stdio.h>
void reverse_order(int n)
{
while (n)
{
printf("%d ", n % 10);
n /= 10;
}
}
int main()
{
int num = 0;
scanf("%d", &num);
reverse_order(num);
return 0;
}
3.输入一个正整数,计算这个整数是几位数;
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
int count = 0;
do
{
count++;
num /= 10;
} while (num);
printf("%d\n", count);
return 0;
}
用函数来编写。
#include <stdio.h>
int get_count(n)
{
int count = 0;
do
{
count++;
n /= 10;
} while (n);
return count;
}
int main()
{
int num = 0;
scanf("%d", &num);
int count = get_count(num);
printf("%d\n", count);
return 0;
}
4.从100~200之间找出素数并打印出来。
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int flag = 1;
int j = 0;
for (j = 2; j < sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d ", i);
}
return 0;
}
用函数实现
#include <stdio.h>
#include <math.h>
int pri_num(int i)
{
int j = 2;
for (j = 2; j < sqrt(i); j++)
{
if (i % j == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
if (pri_num(i))
{
printf("%d ", i);
}
}
return 0;
}
5.电脑关机小操作
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60");//倒计时60秒关机
again:
printf("您的电脑将在60秒后关机,输入“我是猪”后将停止关机!!!");
scanf("%s", input);
if ((strcmp(input, "我是猪") == 0))
{
system("shutdown -a");//取消关机
}
else
{
goto again;
}
return 0;
}
1.system()是一个库函数需要引用头文件#include <stdlib.h>,它是用来执行系统命令的。
2.strcmp()也是一个库函数,需要引用头文件#include <string.h>,它是用来比较量个字符串大小的;形如strcmp(str1,str2)当str1>str2时,返回一个>0的值;
当str1<str2时,返回一个<0的值;
当str1=str2时,返回0;
6.输入年份与月份判断天数
#include <stdio.h>
int get_days(int y, int m)
{
int arr[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
if (((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))&&m == 2)
{
return arr[m]+1;
}
else
{
return arr[m];
}
}
int main()
{
int year = 0;
int month = 0;
printf("请输入年份和月份:");
scanf("%d%d", &year, & month);
int d = get_days(year, month);
printf("%d年%d月有%d天\n", year, month, d);
return 0;
}
7.对从键盘上输入的若干正整数求和,遇到负数终止程序,并且输入的数不超过10个;
#include <stdio.h>
int main()
{
int i = 0;
int num = 0;
int sum = 0;
for (i = 1; i <= 10; i++)
{
scanf("%d", &num);
if (num >= 0)
sum += num;
else
break;
}
printf("%d", sum);
return 0;
}
8.从键盘输入若干字符,过滤所有的空格后再输出。
#include <stdio.h>
int main()
{
char ch;
while ((ch = getchar()) != '\n')
{
if (ch == ' ')
{
continue;
}
else
{
putchar(ch);
}
}
return 0;
}
9.十个评委打分,去掉最高分和最低分,求平均分。
#include <stdio.h>
int main()
{
float score, sum, max, min, avg;
printf("请输入十位评委打分:\n");
scanf("%f", &score);
max = min = score;
sum = score;
int i = 1;
for (i = 1; i <= 9; i++)
{
scanf("%f", &score);
sum += score;
if (max < score)
max = score;
if (min > score)
min = score;
}
avg = (sum - max - min)/8.0;
printf("%f %f %f",max,min, avg);
return 0;
}
用函数实现
#include <stdio.h>
float get_avg(float score[], int n)
{
float sum = 0.0, max, min;
max = min = score[0];
for (int i = 0; i < 10; i++)
{
sum = sum + score[i];
if (max < score[i])
{
max = score[i];
}
if (min > score[i])
{
min = score[i];
}
}
float avg = (sum - max - min) / 8;
return avg;
}
int main()
{
float score[10];
for (int i = 0; i < 10; i++)
{
scanf("%f", &score[i]);
}
float avg = get_avg(score, 10);
printf("%f", avg);
return 0;
}
猴子吃桃问题,第一天吃了桃子的一半多一个,后面亦是如此,直到第十天想吃桃子时发现只有1个了,求第一天的桃子数;
#include <stdio.h>
int main()
{
int rest = 1;
for (int i = 9; i > 0; i--)
{
rest = (rest + 1) * 2;
}
printf("%d", rest);
return 0;
}
10.穷举法:用一张一元钞票换1分,2分和5分硬币(至少各一枚),有几种换法。
#include <stdio.h>
int main()
{
int x, y,z, count = 0;
for( x = 1;x<20;x++)
for(y=1;y<50;y++)
for(z = 1;z<100;z++)
if (5 * x + 2 * y + z == 100)
{
count++;
printf("一元能换:%d张5分,%d张两分,%d张一分\n",x,y,z);
}
printf("一共有%d种换法\n", count);
return 0;
}