C语言:练习2

简介: C语言:练习2

题一:九九乘法表

在屏幕上输出9*9乘法口诀表

%-d(加负号),在后面补空格;
%2d,在前面补空格;
%02d,在前面补0.

#include <stdio.h>
int main()
{
  int i = 0;
  for (i = 1; i < 10; i++)
  {
    int j = 0;
    for (j = 1; j <= i; j++)
    {
      printf("%d*%d=%-2d ", j, i, j * i);
      
    }
    printf("\n");
  }
  return 0;
}

题二:最大值

求10 个整数中最大值

#include <stdio.h>
int main()
{
  int arr[10] = { 0 };
  int i = 0;
  int tmp = 0;
  for (i = 0; i < 10; i++)
  {
    scanf("%d", &arr[i]);
  }
  int max = 0;
  max = arr[0];
  for (i = 0; i < 10; i++)
  {
    if (max <= arr[i])
    {
      max = arr[i];
    }
  }
  printf("%d\n", max);
  return 0;
}

题三:求和

计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

#include <stdio.h>
int main()
{
  int i = 0;
  float sum = 0.00f;
  for (i = 1; i <= 100; i++)
  {
    if (i % 2 == 0)
    {
      sum = (-1)*(1.0 / i) + sum;
    }
    else
    {
      sum = (1.0 / i) + sum;
    }
  }
  printf("%f\n", sum);
  return 0;
}

题四:出现多少次

编写程序数一下 1到 100 的所有整数中出现多少个数字9

#include <stdio.h>
int main()
{
  int i = 0;
  int count = 0;
  for (i = 1;i <= 100;i++ )
  {
    if (i % 10 == 9 || i / 10 == 9)
    {
      count++;
    }
  }
  printf("%d\n", count );
  return 0;
}

题五:查找某个数

编写代码在一个整形有序数组中查找具体的某个数

要求:找到了就打印数字所在的下标,找不到则输出:找不到。

#include <stdio.h>
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int left = 0;
  int right = sizeof(arr)/sizeof(arr[0]) - 1;
  int min = (left + right) / 2;
  int k = 0;
  scanf("%d", &k);
  while (right >= left)
  {
    if (arr[min] > k)
    {
      right = min - 1;
      min = (left + right)/ 2;
    }
    else if (arr[min] < k)
    {
      left = min + 1;
      min = (left + right) / 2;
    }
    else 
    {
      printf("找到了!\n%d\n", min);
      break;
    }
    
  }
  
  if (left > right)
  {
    printf("没有找到!");
  }
  
  
  return 0;
}

题六:猜数字

猜数字

#include<stdlib.h>
#include <stdio.h>
#include <time.h>
void menu1()
{
  printf("***********************\n");
  printf("***1.猜数字   0.退出***\n");
  printf("***********************\n");
}
void game()
{
  int str = 0;
  int num = 0;
  srand((unsigned int)time(NULL));
  str = rand()%100+1;
  
  //判断
  while (1)
  {
    printf("输入猜测的数字(0--100)\n");
    scanf("%d", &num);
    if (str > num)
    {
      printf("猜小了,接着猜!\n");
    }
    else if (str < num)
    {
      printf("猜大了,接着猜!\n");
    }
    else
    {
      printf("恭喜你猜对啦!\n");
      break;
    }
  }
  
}
int main()
{
  int input = 0;
  
  do
  {
    menu1();
    printf("请输入:");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();
      break;
    case 0:
      printf("退出\n");
      break;
    default:
      printf("输入格式错误,请重新输入\n");
      break;
    }
  } while (input);
  return 0;
}

题七:求和

输入一个正整数n(1 ≤ n ≤ 109)

输出一个值,为求和结果。

#include <stdio.h>
int main() {
    long long sum = 0;
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    for (i = 1; i <= n; i++)
    {
        sum = i + sum;
    }
    printf("%ld\n", sum);
    return 0;
}

等差数列求解

long用%ld;long long用%lld。

int main()
{
    //等差数列求和公式
    long long n = 0;
    scanf("%lld", &n);
    long long sum = 0;
    sum = (1 + n) * n / 2;
    printf("%lld\n", sum);
 
    return 0;
}

题八:最大数

小乐乐获得4个最大数,请帮他编程找到最大的数。

一行,4个整数,用空格分开。

一行,一个整数,为输入的4个整数中最大的整数。

#include <stdio.h>
int main()
{
  int arr[4] = {0};
  int i = 0;
  for (i = 0; i < 4; i++)
  {
    scanf("%d", &arr[i]);
  }
  int max = arr[0];
  for (i = 1; i < 4; i++)
  {
    if (max <= arr[i])
    {
      max = arr[i];
    }
  }
  printf("%d\n", max);
  return 0;
}

题九:判断字母

KiKi想判断输入的字符是不是字母,请帮他编程实现。

多组输入,每一行输入一个字符。

针对每组输入,输出单独占一行,判断输入字符是否为字母,

#include <stdio.h>
int main()
{
  char letter = 0;
  
  while (scanf(" %c", &letter) == 1)//记得清理缓冲区里的\n
  {
    if (letter >= 'A' && letter <= 'Z' || letter >= 'a' && letter <= 'z')
    {
      printf("%c is an alphabet.\n", letter);
    }
    else
    {
      printf("%c is not an alphabet.\n", letter);
    }
            //也可以在这加个getchar()来清理缓冲区
    return 0;
}

题十:网购

KiKi非常喜欢网购,在一家店铺他看中了一件衣服,他了解到,

如果今天是“双11”(11月11日)则这件衣服打7折,“双12” (12月12日)则这件衣服打8折,

如果有优惠券可以额外减50元(优惠券只能在双11或双12使用),求KiKi最终所花的钱数。

一行,四个数字,第一个数表示小明看中的衣服价格,

第二和第三个整数分别表示当天的月份、当天的日期、第四个整数表示是否有优惠券(有优惠券用1表示,无优惠券用0表示)。

注:输入日期保证只有“双11”和“双12”。

一行,小明实际花的钱数(保留两位小数)。(提示:不要指望商家倒找你钱)

#include <stdio.h>
int main()
{
  int flag = 0;
  double price = 0;
  int month = 0;
  int day = 0;
  double sum = 0;
  scanf("%lf %d %d %d", &price, &month, &day, &flag);
  if (month == 11 && day == 11)
  {
    sum = price * 0.7;
    if (flag == 1)
    {
      sum -= 50;
    }
    if (sum <= 0)
    {
      sum = 0;
    }
  }
   else if (month == 12 && day == 12)
  {
    sum = price * 0.8;
    if (flag == 1)
    {
      sum -= 50;
    }
     if (sum <= 0)
    {
      sum = 0;
    }
  }
  printf("%.2lf\n", sum);
  return 0;
}

题十一:交换

交换两个整数,实现一个函数来交换两个整数的内容。

#include <stdio.h>
void Way(int* a, int* b)
{
  int c = 0;
  c = *a;
  *a = *b;
  *b = c;
}
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  Way(&a,&b);
  printf("%d %d\n", a, b);
  return 0;
}

题十二:判断闰年

函数判断闰年

实现函数判断year是不是润年。

#include <stdio.h>
int Sense(int n)
{
  if (n % 4 == 0 && n % 100 != 0 || n % 400 == 0)
  {
    return 1;
  }
  else
    return 0;
}
int main()
{
  int i = 0;
  int n = 0;
  scanf("%d", &n);
  i = Sense(n);
  if (i == 1)
  {
    printf("是闰年!");
  }
  else
    printf("不是闰年!");
  return 0;
}

题十三:判断素数

函数判断素数

实现一个函数is_prime,判断一个数是不是素数。

利用上面实现的is_prime函数,打印100到200之间的素数。

#include <stdio.h>
#include <math.h>
int is_prime(int n)
{
  int flag = 0;
  int j = 0;
  for (j = 2; j <= sqrt(n); j++)
  {
    if (n % j == 0)
    {
      flag = 1;
      break;
    }
  }
  return flag;
}
int main()
{
  int n = 0;
  int i = 0;
  int a = 0;
  int b = 0;
  scanf("%d", &n);
  a = is_prime(n);
  
  if (a == 1)
  {
    printf("不是素数!\n");
  }
  else
  {
    printf("是素数!\n");
  }
  for (i = 100; i <= 200; i++)
  {
    b = is_prime(i);
    if (b == 0)
    {
      printf("%d\n", i);
    }
  }
  return 0;
}

题十四:斐波那契数列

计算斐波那契数

递归和非递归分别实现求第n个斐波那契数

输入:5  输出:5

输入:10, 输出:55

输入:2, 输出:1

非递归实现

#include <stdio.h>
int main()
{
  int num = 0;
  int arr[100] = {1,1};
  int n = 0;
  scanf("%d", &n);
  if (n <= 2)
  {
    num = 1;
  }
  else
  {
    int j = 0;
    for (j=2 ;j <= n-1 ;j++)
    {
      arr[j] = arr[j - 1] + arr[j - 2];
      num = arr[j];
    }
    
  }
  printf("%d\n", num);
  return 0;
}

递归实现

#include <stdio.h>
int is_sum(int n)
{
  int num = 0;
  if (n <= 2)
  {
    num = 1;
  }
  if(n > 2)
  num = is_sum(n-2) +is_sum(n-1);
  return num;
}
int main()
{
  int n = 0;
  int a = 0;
  scanf("%d", &n);
  a = is_sum(n);
  printf("%d\n",a);
  return 0;
}

题十五:实现次方

递归实现n的k次方

编写一个函数实现n的k次方,使用递归实现。

#include <stdio.h>
int Power(int n, int k)
{
  int num = 0;
  if (k != 0)
  {
    num = n * Power(n ,k-1);
  }
  if (k == 0)
    num = 1;
  
  return num;
}
int main()
{
  int n = 0;
  int a = 0;
  int k = 0;
  scanf("%d %d", &n, &k);
  a = Power(n,k);
  printf("%d\n", a);
  return 0;
}

题十六:递归求和

写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和

例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19

输入:1729,输出:19

#include <stdio.h>
int DigitSum(int n)
{
  int sum = 0;
  if (n > 9)
  {
    sum = n % 10;
    n = n / 10;
  }
  else
  {
    return n;
  }
  sum =sum + DigitSum(n);
  return sum;
}
int main()
{
  int n = 0;
  int a = 0;
  scanf("%d", &n);
  a = DigitSum(n);
  printf("%d\n", a);
  return 0;
}

题十七:递归逆序

字符串逆序(递归实现)

编写一个函数 reverse_string(char* string)(递归实现)

实现:将参数字符串中的字符反向排列,不是逆序打印。

要求:不能使用C函数库中的字符串操作函数。

比如 :char arr[] = "abcdef";

逆序之后数组的内容变成:fedcba

非递归实现

#include <stdio.h>
#include <string.h>
void reverse_string(char* string)
{
  int len = strlen(string);
  int tmp = 0;
  int left = 0;
  int right = len - 1;
  while (left < right)
  {
    tmp = string[left];
    string[left] = string[right];
    string[right] = tmp;
    left++;
    right--;
  }
}
int main()
{
  char arr[] = "abcdef";
  reverse_string(arr);
  printf("%s\n", arr);
  return 0;
}

递归实现

#include <stdio.h>
#include <string.h>
void reverse_string(char* string)
{
  int len = strlen(string);
  char tmp = *string;
  *string = *(string + len - 1);
  *(string + len - 1) = '\0';
  if (strlen(string + 1) >= 2)//每次从下一个地址开始计算除去第一个还剩多少个
    reverse_string(string + 1);
  *(string + len - 1) = tmp;
}
int main()
{
  char arr[] = "abcdef";
  reverse_string(arr);
  printf("%s\n", arr);
  return 0;
}

写错的选择题

在函数调用时,以下说法正确的是:( )

A.函数调用后必须带回返回值

B.实际参数和形式参数可以同名

C.函数间的数据传递不可以使用全局变量

D.主调函数和被调函数总是在同一个文件里

A:错误,函数可以没有返回值,如果没有返回值也就不需要待会任何结果

B:正确,形参和实参在不同的函数中,即不同的作用域,因此形参和实参可以同名

C:错误,可以使用全局变量传参

D:错误,不一定,函数的定义可以放在任意的文件中,使用时只需要包含头文件即可

当然这些只是个人的见解,并不是最佳解,欢迎大家互相讨论!

目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 C语言
【c语言基础题】— —第五版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第五版,可当作日常练习和期末复习,有奇效哟!
42 1
|
1月前
|
算法 Java C语言
【c语言基础题】— —第一版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第一版,可当作日常练习和期末复习,有奇效哟!
77 0
|
1月前
|
自然语言处理 编译器 C语言
C语言:练习
C语言:练习
22 0
|
1月前
|
程序员 C语言 CDN
【c语言基础题】— —第三版,可当作日常练习和期末复习,有奇效哟!
【c语言基础题】— —第三版,可当作日常练习和期末复习,有奇效哟!
78 0
|
3天前
|
存储 算法 C语言
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
|
1月前
|
编译器 C语言
拒绝摆烂!C语言练习打卡第七天
拒绝摆烂!C语言练习打卡第七天
|
1月前
|
C语言
拒绝摆烂!C语言练习打卡第六天
拒绝摆烂!C语言练习打卡第六天
|
1月前
|
C语言
拒绝摆烂!C语言练习打卡第五天
拒绝摆烂!C语言练习打卡第五天
拒绝摆烂!C语言练习打卡第五天
|
1月前
|
编译器 C语言
拒绝摆烂!C语言练习打卡第四天
拒绝摆烂!C语言练习打卡第四天
|
1月前
|
编译器 C语言
拒绝摆烂!C语言练习打卡第三天
拒绝摆烂!C语言练习打卡第三天