#define _CRT_SECURE_NO_WARNINGS
循环结构
例1.1 1到100求和
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int sum=0;
for (int i = 1; i <= 100; i++) {
sum = sum + i;
}
printf("%d", sum);
return 0;
}
例5.4 捐款,超过10万停,并计算人数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int sum=0;
int people=1;
int n;
scanf("%d", &n);//输入捐款钱数
if (n > 100000) {//如果一个人就捐够了直接输出
people++;
printf("总捐款为:%d\n",n);
printf("每人平均捐款:%lf\n", n);//保留两位小数不能这么写,要再写一个printf
printf("捐款人数为:1\n");
}
else {//多个人捐款
while (1) {
sum = sum+n;//捐款总数
if (sum > 100000) {//超过十万退出循环
break;
}
else {//没超过,人数加一,继续捐款
people++;
scanf("%d", &n);
}
}
double aver = sum / (1.0 * people);
printf("总捐款为:%d\n", sum);
printf("每人平均捐款:%lf\n", aver);
printf("捐款人数为:%d\n", people);
}
return 0;
}
例5.5输出100-200不能被3整除的数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
for (int i = 100; i < 201; i++) {
if (i % 3 != 0) {
printf("%d\n", i);
}
}
return 0;
}
例5.6输出4*5的矩阵
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int n = 0;
for (int i = 1; i < 5; i++) {//走行
for (int j = 1; j < 6; j++,n++) {//走列
/*if (n % 5 == 0) {//别再里面判断次数,因为0%5=0,会多一行
printf("\n");
}*/
printf("%d\t", i*j);//\t自动对齐
}
printf("\n");
}
return 0;
}
例5.7求Π的近似值,Π/4=1-1/3=1/5...,直到某一项小于10^-6
//小数点后的某一位不太对,不知丢为啥
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main() {
double fenmu=1;//分母
double p=1;//当前值
double sum=0;//当前总值
int sign=1;//符号
while (p >= 1e-6) {//10^-6
p = sign * (1 / (1.0 *fenmu));//当前项
sum = sum+p;
p = fabs(p);//求绝对值
sign = -sign;
fenmu = fenmu + 2;
}
sum = sum * 4;
printf("%10.8f", sum);
return 0;
}
例5.8,求斐波那契数列前40项并输出40项和,1,1,2,3,5,8……
//为了方便截图输出的不太好看
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int here;//保存前两个相加的结果
int sum=2;//和从2开始计算,先把前面的两个1加进来
int first=1, end=1;//前面的数和后面的数
printf("1\n");
printf("1\n");
for (int i = 0; i < 38; i++) {//去掉前两个数循环38次
here = first + end;
printf("%d\n", here);
sum = sum + here;
first = end;//将后一个数给前面的数
end = here;//新得到的结果作为后一个数
}
printf("%d", sum);//输出前40数列总数
return 0;
}
例5.9,输入一个大于3的整数n,判断是不是素数(质数)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int n;
int flag = 0;
scanf("%d", &n);//输入一个大于3的整数n
for (int i = 2; i < n; i++) {
if (n % i == 0) {
printf("不是素数");
flag = 1;//如果找到了这个数标记一下表示已找到
break;//跳出循环
}
}
if (flag == 0) {
printf("是素数");
}
return 0;
}
例5.10求100-200的全部素数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int flag = 0;
for (int i = 100; i < 201; i++) {
flag = 0;//flag一定每次都要重置
for (int j = 2; j < i; j++) {
if (i % j == 0) {
flag = 1;//若找到了因子则标记一下
break;
}
}
if (flag == 0) {
printf("%d\n", i);//找的是 素数 不是 不素数
}
}
return 0;
}
译密码,字母往后移动四位(前一章写过但有缺点,改良版)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
char c;
//scanf("%c", &c);
while ((c=getchar())!= '\n') {//一直不断地重复输入,换行则是停止输入的标志
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {//判断是否是字母
if ((c >= 'W' && c <= 'Z') || (c >= 'w' && c <= 'z')) {//是否是后四位
c = c - 22;//是后四位往前移动22
}
else {
c = c + 4;//不是后四位往后移动4
}
}
printf("%c", c);
}
return 0;
}
习题3求最大公约数和最小公倍数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int m, n;
int flag = 1;//标记
scanf("%d%d", &m, &n);//输入两个数
int temp;
if (m < n) {//保证m>n
temp = m;
m = n;
n = temp;
}
for (int i = n; i > 1; i--) {//找最小的
if ((m % i == 0&&n % i == 0)) {//并且的关系
flag = 0;
printf("最大公约数为%d\n", i);
break;
}
}
if (flag == 1) {
printf("无最大公约数");
}
for (int j = m;; j++) {//找最大的
if ((j % m == 0&&j % n == 0)) {
printf("最小公倍数为%d", j);
break;
}
}
return 0;
}