思路:
两个循环进行控制
外层循环控制打印多少行
内部循环控制每行打印多少个表达式以及表达式内容,
比较简单,具体参考代码
#include <stdio.h>
int main()
{
int i = 0;
//控制行数
for(i=1; i<=9; i++)
{
//打印每一行内容,每行有i个表达式
int j = 0;
for(j=1; j<=i; j++)
{
printf("%d*%d=%2d ", i, j, i*j);
}
printf("\n");
}
return 0;
}
思路:
int main()
{
int arr[10] = {0};
int i = 0;
int max = 0;
for(i=0; i<10; i++)
{
scanf("%d", &arr[i]);
}
//
max = arr[0];
for(i=1; i<10; i++)
{
if(arr[i]>max)
max = arr[i];
}
printf("max = %d\n", max);
return 0;
}
#include<stdio.h>
int main() {
double sum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 != 0) {
sum += 1.0 / i;
}
else {
sum -= 1.0 / i;
}
}
printf("%lf\n", sum);
}
方法2
思路:
#include <stdio.h>
int main()
{
int i = 0;
double sum = 0.0;
int flag = 1;
for(i=1; i<=100; i++)
{
sum += flag*1.0/i;
flag = -flag;
}
printf("%lf\n", sum);
return 0;
}
思路:
#include<stdio.h>
int main() {
int count = 0;
for (int i = 1; i <= 100; i++) {
if (i%10 == 9) { //控制个位
count++;
}
if (i / 10 == 9) { //控制十位
count++;
}
}
printf("%d\n", count);
}
#include<stdio.h>
void menu() {
printf("*********************\n");
printf("*******1.play********\n");
printf("*******0.exit********\n");
}
void game() {
//1.生成随机数
int ret = rand() % 100 + 1;
//2.猜数字
while (1) {
int guess = 0;
printf("请输入你猜的数字:\n");
scanf("%d", &guess);
if (guess > ret) {
printf("猜大了\n");
}
else if (guess < ret) {
printf("猜小了\n");
}
else {
printf("恭喜你猜对了!\n");
break;
}
}
}
int main() {
int input = 0;
srand((unsigned int)time(NULL));
do {
menu();
printf("请输入你的选择\n");
scanf("%d", &input);
switch (input) {
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
}
} while (input);
}
二分查找:
在一个有序的序列中,找某个数据是否在该集合中,如果在打印该数据在集合中的下标,否则打印找不到
具体找的方式:
如果找到返回下标,否则继续,直到区间中没有元素时,说明key不在集合中,打印找不到
易错点:
方法一,采用[left, right] 区间
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int key = 3;
int left = 0;
int right = sizeof(arr)/sizeof(arr[0])-1; // right位置的数据可以取到
while(left<=right) // right位置有数据,必须要添加=号
{
int mid = left+(right-left)/2;
if(arr[mid]>key) // key小于中间位置数据,说明key可能在左半侧,需要改变右边界
{
right = mid-1; // right位置的数据可以取到,因此right=mid-1
}
else if(arr[mid]<key)// key大于中间位置数据,说明key可能在右半侧,需要改变左边界
{
left = mid+1; // left位置的数据可以取到,因此left=mid+1
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if(left>right)
printf("找不到\n");
return 0;
}
方法二,采用[left, right) 区间
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int key = 3;
int left = 0;
int right = sizeof(arr)/sizeof(arr[0]); // right位置的数据取不到
while(left<right) // right位置没有数据,此处不需要添加=
{
int mid = left+(right-left)/2;
if(arr[mid]>key) // key小于中间位置数据,说明key可能在左半侧,需要改变右边界
{
right = mid; // right位置的数据取不到,因此right=mid,不需要减1
}
else if(arr[mid]<key)// key大于中间位置数据,说明key可能在右半侧,需要改变左边界
{
left = mid+1; // left位置的数据可以取到,因此left=mid+1
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if(left>=right)
printf("找不到\n");
return 0;
}