05-c语言的一些简单算法
1.提示用户输入一个正整数n, 计算1 + 2 + 3 + ...n的和。
// 1.定义变量保存上一次的和 int sum = 0; // 2.定义变量保存递增的数 int number = 0; while (number <= 5) { printf("sum = %d + number = %d\n", sum, number); sum = sum + number; number++; } printf("sum = %d\n", sum);
2.获取1~100之间 7的倍数的个数并打印,并统计个数
int count = 1; int nubmer = 0; while (count <= 100) { if (count % 7 == 0) { printf("count = %d\n", count); nubmer++;//计数器 } count++; } printf("number = %d\n", nubmer);
3.for循环嵌套实现:正方形、矩形打印
// 外循环控制行数 for (int i = 0; i < 2; i++) { // 内循环控制列数 for (int j = 0; j < 4; j++)//1 2 3 { printf("*"); } printf("\n"); }
4.for循环嵌套实现:打印三角形
-
实现
for(int i = 0; i< 5; i++){
for(int j = 0; j <= i; j++){
printf("*\t");
}
printf("\n");
}
for(int i = 0; i< 5; i++){
for(int j = i; j < 5; j++){
printf("*\t");
}
printf("\n");
}
- 规律
- 尖尖朝上,改变内循环的条件表达式,让内循环的条件表达式随着外循环的i值变化
- 尖尖朝下,改变内循环的初始化表达式,让内循环的初始化表达式随着外循环的i值变化
5.打印特殊三角形
for (int i = 0; i < 3; i++) { for (int j = 0; j <= i; j++) { printf("%d", j+1); } printf("\n"); }
6.打印99乘法表
-
实现
for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { printf("%d * %d = %d \t", j, i, (j * i)); } printf("\n"); }
7.设计一个函数用来计算B的n次方
-
实现
-
int main(int argc, const char * argv[]) {
-
int a = 2;
int b = 3;
int resutl = myPow2(a, b);
printf("result = %i\n", resutl);
return 0;
}
-
int myPow2(int base, int n) { if (n <= 0) { return 1; } return myPow2(base, n - 1) * base; }
8.用户从键盘输入一个字母, 如果用户输入的是大写那么就转换为小写
int main(int argc, const char * argv[]) {
// 要求用户从键盘输入一个字母, 如果用户输入的是大写那么就转换为小写
printf("请输入一个字母\n");
char charValue;
scanf("%c", &charValue);
// 转换
printf("%c\n", lowerCase(charValue));
return 0;
}
char lowerCase(char temp)
{
// 1.判断是否是大写字母
if (temp >= 'A' && temp <= 'Z') {
temp = temp + ('a' - 'A');
}
return temp;
}
9. 要求定义一个函数, 传入一个整数, 输出该整数的二进制
int main(int argc, const char * argv[]) {
int num = 15;
printBinay(num);
return 0;
}
void printBinay(int value)
{
// 1.定义变量需要向右移动的位数
int offset = 31;
// 2.通过循环取出每一位
while (offset >=0) {
int result = (value >> offset) & 1;
printf("%i", result);
// 3.每次取出一位就让控制右移的变量-1
offset--;
if ((offset+1) % 4 == 0) {
printf(" ");
}
}
printf("\n");
}
10.进制查表法优化
//
// main.c
// 进制查表法优化
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
//
#include <stdio.h>
void total(int value, int base, int offset);
void ptintBinary(int num);
void printfOct(int num);
void printfHex(int num);
int main(int argc, const char * argv[]) {
// insert code here...
// ptintBinary(10);
// printfOct(10);
printfHex(10);
return 0;
}
void printfHex(int num)
{
total(num, 15, 4);
}
void printfOct(int num)
{
total(num, 7, 3);
}
void ptintBinary(int num)
{
total(num, 1, 1);
}
// 转换所有的进制
// value就是需要转换的数值
// base就是需要&上的数
// offset就是需要右移的位数
void total(int value, int base, int offset)
{
// 1.定义一个数组, 用于保存十六进制中所有的取值
char charValues[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
// 2.定义一个数组, 用于保存查询后的结果
char results[32] = {'0'};
// 3.定义一个变量, 用于记录当前需要存储到查询结果数组的索引
int pos = sizeof(results)/ sizeof(results[0]);
while (value != 0) {
// 1.取出1位的值
int res = value & base;// 1 7 15
// 2.利用取出来得值到表中查询对应的结果
char c = charValues[res];
// 3.存储查询的结果
results[--pos] = c;
// 4.移除二进制被取过的1位
value = value >> offset;// 1 3 4
}
// 4.打印结果
for (int i = pos; i < 32; i++) {
printf("%c", results[i]);
}
printf("\n");
}

浙公网安备 33010602011771号