初阶C语言:训练题(1)

简介: 学习完初阶C之后进行配套练习。

下面是一些与初阶C语言难度相符的训练题,每一个题都有多种代码实现方式,我们尽量选择最简便的方法来实现

紫蓝色几何渐变科技互联网微信公众号封面 (1).gif

一、

💓打印9*9乘法口诀表

思路: 9*9乘法口诀表一共有9行9列,也就是第一行打印1的乘法,第二行打印2的乘法,第三行打印3的乘法以此类推,就可以得到9*9的乘法口诀表 1*1=1 2*1=2  2*2=4 3*1=3  3*2=6  3*3=9 ..... 所以呢,我们要设置两个循环变量,先控制打印多少行,再控制打印多少列

代码解析:

#include <stdio.h>intmain()
{
inti=0;
intj=0;
for (i=1; i<=9; i++)   //设置打印多少行    {
for (j=1; j<=i; j++) //根据行来控制打印多少列        {
printf("%d*%d=%-2d ", i, j, i*j);  //采用左对齐使其看起来更加美观        }
printf("\n");      //每打印完一行都要换行    }
return0;
}
%2d--右对齐 %-2d--左对齐

%d与%-2d区别:

使用%-2d之后会使乘法口诀表变得更加美观

二、

💓求10个整数中最大的整数

思路: 求最大值的题在之前的训练题里面也有,但是是求两个数的最大值,如果求两个数的最大值使用if else语句、条件操作符都可以解决,但是如果求多个数就得换一种思路: 假设有一个整型数组,里面有10个元素,我们可以采用下标的方式访问这些元素,然后设置一个变量max来存放最大值,假设下标为0的元素就是最大值,并将其存放进max中,然后用数组中其他元素与这个max中的元素进行比较,如果比max中这个元素大,就将其替换,如果没有它大,就让下一个元素比较,直到将数组中的全部元素比较完

代码解析:

#include <stdio.h>intmain()
{
intarr[10] = { 0,1,2,3,4,5,6,7,8,9 };
inti=0;
//假设下标为0的元素就是最大值intmax=arr[0];
for (i=1; i<10; i++)
    {
if (arr[i] >max) //如果比max大则会替换        {
max=arr[i];
        }
    }
printf("max=%d", max);
return0;
}

三、

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

我们可以先来观察一下题目,我们可以先实现1+2+3+4+5+6+7+8+9+....+100,然后对其进行调整修改
//1~100之和#include <stdio.h>intmain()
{
inti=0;
intsum=0;
for (i=1; i<=100; i++)
    {
sum+=i;
    }
printf("sum=%d\n", sum);
return0;
}
写出1~100之和之后再将其转化为1/1+1/2+1/3+...+1/100:
#include <stdio.h>intmain()
{
inti=0;
doublesum=0;
intm=1;
for (i=1; i<=100; i++)
    {
sum+=1.0/i;         //在求和时转化,由于求出来的是小数所以要使用double类型的sum    }
printf("sum=%lf\n", sum);
return0;
}
经过一步一步的转化,可以发现,这个表达式第一项是正数,第二项是负数,第三项又是正数,第四项又是负数......所以我们可以创建一个变量,用来改变正负
#include <stdio.h>intmain()
{
inti=0;
doublesum=0;
intm=1;       //创建一个改变正负的变量mfor (i=1; i<=100; i++)
    {
sum+=1.0/i*m;
m=-m;      //每一次乘完之后将m改变为-m    }
printf("sum=%lf\n", sum);
return0;
}

四、

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

个位出现9:9   19 29 39 49 59 69 79 89 99 十位出现9:90 91 92 93 94 96 97 98 99 要计算1~100的整数中出现了几次9,那就要考虑个位和十位,如果出现了九就计算一次,如果没有出现9就让下一个数再检验,当两位数除以10的商就是十位的数字,取模得到的余数就是个位的数字

代码演示:

#include <stdio.h>intmain()
{
intcount=0;
inti=0;
intnum=1;
for (i=0; i<100; i++)
    {
if (num/10==9)     //表示十位是否为9        {
count++;
        }
if (num%10==9)     //表示个位是否为9        {
count++;
        }
num++;
    }
printf("%d", count);
return0;
}

注:这里不能使用if(num/10==9){}else if(num%10==9){} 求个位和十位上的9分别是独立的

五、

💓实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定

💓如:输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表

要求通过输入n打印n的乘法口诀表,既然我们已经可以打印9*9的乘法口诀表那就可以在9*9的乘法口诀表代码上入手,将设置的9行9列来通过我们自行输入来控制打印几行几列

代码演示:

//要求设计函数来实现#include <stdio.h>voidPrint(intn)
{
inti=0;
intj=0;
for (i=1; i<=n; i++)    //控制打印几行几列通过我们输入的n来控制    {
for (j=1; j<=i; j++)
        {
printf("%d*%d=%-2d ", i, j, i*j);
        }
printf("\n");
    }
}
intmain()
{
intn=0;
scanf("%d", &n);
Print(n);
return0;
}

六、

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

交换两个整数的内容,有许多老铁很快会反应出来将a的值赋给b,将b的值赋给a,这样想也对,取决与怎样使用代码来实现,在代码中如果我们非常简单的写出这样的代码: int main() {     int a = 20;     int b = 10;     a = b;     b = a;     return 0; } 那这可就错了,这样是不会交换的,为什么呢?举一个生活中的例子: 有一瓶酱油和一瓶醋,我们需要将酱油装进装醋的瓶子、将醋装进装酱油的瓶子来进行交换,如果按照上面代码这样来交换,意思就是直接将酱油倒进醋瓶子,又将醋瓶子里的倒进酱油瓶子,这样子倒会将两个液体混合无法达到交换瓶子的目的,我们应该先找一个空瓶子,然后将其中醋先倒进空瓶子里,再将酱油倒进醋瓶子,再将醋倒进酱油瓶子就可以达到交换的目的,所以呢,我们需要先创建一个变量用来协助交换, 假设先不使用函数 来进行交换:

代码演示:

//普通实现#include <stdio.h>intmain()
{
inta=20;
intb=10;
printf("交换前:a=%d b=%d\n", a, b);
inttmp=0;
tmp=a;   //将a装进空瓶子,这时的a里面就没有东西a=b;      //然后将b装进a,这时a里面就存放的b的值b=tmp;    //这时b又空了,将tmp里面的a又装进b里面printf("交换后:a=%d b=%d\n", a, b);
return0;
}

需要借助另外的一个变量来进行交换两个数,如果使用函数来交换两个数会是怎样的效果 我们将交换的过程放进函数中

代码演示:

//函数实现#include <stdio.h>voidPrint(inta, intb)
{
inttmp=0;
tmp=a;
a=b;
b=tmp;
}
intmain()
{
inta=20;
intb=10;
printf("交换前:a=%d b=%d\n", a, b);
Print(a, b);
printf("交换后:a=%d b=%d\n", a, b);
return0;
}

可以看到,在使用函数来进行交换过程之后居然不能实现交换,这里就要涉及到函数在传值时的细节 函数在传参时要使用传址调用,传址调用时形参是实参地址的一份拷贝,形参指向的实体是实参,对形参解引用后,拿到的内容就是实参,因此对形参解引用之后的内容进行修改,改变的就是实参,所以我们需要传地址

代码演示:

#include <stdio.h>voidPrint(int*a, int*b) //接收地址使用指针{
inttmp=0;
tmp=*a;
*a=*b;
*b=tmp;
}
intmain()
{
inta=20;
intb=10;
printf("交换前:a=%d b=%d\n", a, b);
Print(&a, &b);    //将地址传给函数printf("交换后:a=%d b=%d\n", a, b);
return0;
}

七、

💓函数实现判断一个年份是否为闰年

闰年判断的条件是: 1.十年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年 2.每四百年再一闰:如果year能够被400整除,则year是闰年 要求使用函数来实现,就需要使用if语句来判断是否为闰年

代码演示:

#include <stdio.h>//设置一个函数//若year为闰年则返回1//不为闰年则返回0intLeapYear(intyear)
{
if (((0==year%4) && (0!=year%100)) || (0==year%400))  //判断条件    {
return1;      //是闰年返回1    }
else    {
return0;     //不是则返回0    }
}
intmain()
{
intyear=0;
scanf("%d", &year);
intflag=LeapYear(year);
if (flag==1)         //如果返回值是1则为闰年    {
printf("%d是闰年\n", year);
    }
else//返回值不是1,则不为闰年    {
printf("%d不是闰年\n", year);
    }
return0;
}

八、

💓计算n的阶乘

1! 1 2! 1*2 3! 1*2*3 4! 1*2*3*4 可以设置一个循环,每一次循环加1,然后每一次的循环变量都相乘,循环n次就可以达到阶乘的目的

代码演示:

//计算n的阶乘#include <stdio.h>intmain()
{
intn=0;
scanf("%d", &n);
//这里不能初始化为0//ret = ret*iintret=1;
inti=0;
for (i=1; i<=n; i++)
    {
ret*=i;
    }
printf("%d的阶乘是:%d\n", n, ret);
return0;
}

九、

💓函数实现 1!+2!+3!+……+n!

上面一个题求出了单个数的阶乘,多个数的阶乘累加求和就需要在此基础上加上求和代码,另外需要使用函数来完成
intfactorial_sum(intn)
{
intret=1;
inti=0;
intsum=0;
for (i=1; i<=n; i++)
    {
//求阶乘ret*=i;
//求和sum+=ret;
    }
returnsum;
}
#include <stdio.h>intmain()
{
intn=0;
scanf("%d", &n);
intsum=factorial_sum(n);
printf("%d", sum);
return0;
}

十、

💓模拟用户登录输入密码情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序

要实现上述情景,首先得有输入三次密码的机会,因此可以设置一个循环3次的循环,然后每一次循环内部要判断密码是否相等,要判断字符串相不相等就得使用strcmp函数,如果三次均输入错误就终止循环
#include <stdio.h>#include <string.h>//假设正确密码是123456intmain()
{
charpassword[20] = { 0 };  //存放密码intflag=0;
inti=0;
intcount=3;
for (i=0; i<3; i++)
    {
printf("请输入密码:");
scanf("%s", password);
if (strcmp(password, "123456") ==0)  //判断输入的密码与正确密码是否相等        {
flag=1;          //如果正确则跳出循环printf("密码正确!\n");
break;
        }
else        {
printf("密码错误!请重新输入:\n");
count--;
printf("警告:您还剩%d次机会,请注意!\n", count);
        }
    }
if (flag==0)  //如果循环结束flag还没有被改为1,那就证明三次机会均用完    {
printf("三次密码均错误,退出程序!\n");
    }
return0;
}

本期分享就到此结束,后续还会给大家分享一些习题,感谢大家学习!

目录
相关文章
|
4天前
|
C语言
C语言初阶⑧(结构体)知识点和笔试题
C语言初阶⑧(结构体)知识点和笔试题
10 0
|
3天前
|
C语言 C++
【C语言/C++】牛客网刷题训练-12
【C语言/C++】牛客网刷题训练-12
|
3天前
|
算法 C语言 Swift
【C语言】牛客网刷题训练-11
【C语言】牛客网刷题训练-11
|
3天前
|
C语言
【C语言】牛客网刷题训练-10
【C语言】牛客网刷题训练-10
|
3天前
|
存储 C语言 数据安全/隐私保护
【C语言】牛客网刷题训练-9
【C语言】牛客网刷题训练-9
|
3天前
|
C语言
【C语言】牛客网刷题训练-8
【C语言】牛客网刷题训练-8
|
3天前
|
C语言
【C语言】牛客网刷题训练-7
【C语言】牛客网刷题训练-7
|
3天前
|
C语言
【C语言】牛客网刷题训练-6
【C语言】牛客网刷题训练-6
|
3天前
|
C语言
【C语言】牛客网刷题训练-5
【C语言】牛客网刷题训练-5
|
3天前
|
存储 C语言
【C语言】牛客网刷题训练-4
【C语言】牛客网刷题训练-4