梦龙_C语言作业4

〇、写在前面


1、关于main()函数

机缘巧合,我上过某培训班的C语言的课,就了解到了C语言的main()函数的写法,就习惯了这样写:

//导入标准输入输出头文件
#include <stdio.h>

/*
	int 表示的是一个函数的返回值的类型,这里写int表示整型
也可以是double、char,当然也可以是void、甚至不写
但是
各个编译器的处理方式都不一样(看编译器的作者),与其让编译器做着不确定的事,不如自己做好。

	main 是函数的名字,函数名需要符合标识符的命名规则
当然这里是main函数,没得选

	括号表示这是在定义一个函数

	括号里的是函数需要的参数
一般不需要参数的main()函数,大部分人都不写,就空着
不需要也就是没有参数,也就是void

更多细节移步下面的参考链接
*/
int main(void)
{
	//函数的返回值,返回 0 表示程序正常结束
	return 0;
}

【转载】参考链接:C语言main函数的写法


2、关于这个系列

初衷是我女朋友可以做个参考来着的、我的想法是等她做完了把链接发给她。

(谁能想到百度搜得到,草率了)

还是希望大家不要直接就完全copy了,好歹看一眼啊。

题目觉得看不到就上机敲一遍嘛又不费事。

你们不懂也可以私信或者直接留言评论的,反正我也不认识你们。

今天我女朋友跟我讲了我也觉得好尴尬啊,害

该学还是得学。


【转载】参考链接:集中一点 登峰造极


一、单选题


1、switch语句

读下面的程序,正确的输出结果是( )

#include <stdio.h>

void main()
{
  int x=10,y=5;
  
  switch(x)
  {
    case 1: x++;
    default: x+=y;
    case 2: y--;
    case 3: x--;
  }
  
  printf("x=%d, y=%d",x,y);
  
}

/*
  A		x=15, y=5

  B		x=10, y=5
  
  C		x=14 y=4

  D		x=15, y=4
*/

测试输出

在这里插入图片描述
在这里插入图片描述
都是 x=14,y=4 那没啥好说的。

毫不到位的分析

#include <stdio.h>

void main()
{
  //定义变量,其中x为10
  int x=10,y=5;
  //switc语句
  switch(x)
  {
  	//一行一行执行下去,在执行到default语句前并没有找到case是10的情况,所以遇到default语句之后就会执行default语句。
    case 1: x++;
    default: x+=y;
    //执行完了之后是继续往下运行!!!不是跳出这个switch语句!!!除非你每个case和default后面都跟一个break
    case 2: y--;
    case 3: x--;
  }
  printf("x=%d, y=%d",x,y);
}

/*
定义x=10 --> switch(10) --> case 1【不满足】 --> 

default 【没办法得执行】--> x = 15  --> case 2【执行】 

--> y = 4 --> case 3【执行】 --> x = 14 --> 结束switch语句 --> 打印输出

*/

这里是引用
参考链接:C语言 switch语句

2、while循环

以下程序的输出结果是( )

#include <stdio.h>

void main()
{
  int n=12345, d;

  while(n!=0)
  {
    d=n%10;

    printf("%d",d);

    n/=10;
  }
}

/*
  A		1

  B		5

  C		12345

  D		54321
*/

毫不到位的分析

n=12345

	n != 0 --> True

		d = 12345 % 10 =5
		打印输出:5
		n = 12345 / 10 = 1234

	n != 0  --> True

		d = 1234 % 10 = 4
		打印输出:4
		n = 1234 / 10 = 123

	n != 0  --> True

		d = 123 % 10 = 3
		打印输出:3
		n = 123 / 10 = 12

	n != 0  --> True

		d = 12 % 10 = 2
		打印输出:2
		n = 12 / 10 = 1

	n != 0  --> True

		d = 1 % 10 = 1
		打印输出:1
		n = 1 / 10 = 0

	n != 0  --> FALSE

END

输出:54321

测试代码

#include <stdio.h>

void main()
{
    int n = 12345, d;
    printf("初始化 n = %d\n", n);
    while (n != 0)
    {

        d = n % 10;
        
        printf("------------->%d\n", d);

        n /= 10;

        printf("    循环:n = %d\n", n);
        printf("          d = %d\n", d);
    }
}

输出结果
在这里插入图片描述


二、简答题 (流程图)

原题:

将下图的NS结构流程图转换为C语言程序。(要求:要根据流程图中的步骤来编程,做到图框与程序语句的对应。变量定义和程序框架等流程图中没有的部分同学们自己补充。)
在这里插入图片描述
例如,第三个循环框
可以如下转换为C语言语句:
for(i=1;i<=10;i++)
if (x[i]!=0)
printf("%d ",x[i]);
其中,数组变量的定义方法: int x[11]; 定义了11个数组成员分别表示为x[0]…x[10],图中变量可以使用数组变量x[i]代替,i是需要另外定义的整型变量。

毫不到位的分析

在这里插入图片描述

参考代码

为了不影响你们发挥,只涉及主函数的代码我只贴主函数里面的部分,框架自己补全

/*
时间:2021-3-16
作者:童话
环境:Win 10 、 Visual Studio 2019 
*/

int x[11];
int i,j;
int r;

for (i = 1; i <= 10; i++)
    scanf("%d", &x[i]);

for (i = 1; i <= 10; i++)
{
    j = 2;
    do
    {
        r = x[i] % j;
        if (r == 0)
            x[i] = 0;
        j++;
    } while (j <= x[i] - 1 && x[i] != 0);
}
for (i = 1; i <= 10; i++)
    if (x[i] != 0)
        printf("%d", x[i]);

测试代码

可以复制下面的代码到自己的编译器里运行一下,看看效果。

/*
时间:2021-3-23
作者:童话
环境:Win 10 、 Visual Studio 2019 
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int x[11];              //数组的定义,int表数组元素的类型,x表数组名,11表数组大小(即元素个数)
    int i,j;                //循环变量
    int r;                  //余数
    //上述三行也可以写成:
    //int i,j,r,x[11];
    //个人习惯罢了

    for (i = 1; i <= 10; i++)
    {
        printf("Input x[%d] = ", i);
        (void)scanf("%d", &x[i]);
    }

    for (i = 1; i <= 10; i++)
    {
        printf("\n\n外层循环---->i = %d---->x[%d] = %d\n", i, i, x[i]);
        j = 2;
        do
        {
            r = x[i] % j;
            
            printf("    内层循环-->r = x[%d] %% j = %d %% %d = %d\n",i, x[i], j, r);
            printf("            -->j = %d\n\n", j);
            
            if (r == 0)
            {
                printf("        内层循环判断成立,x[%d]置0,循环结束\n", i);
                x[i] = 0;
            }
            
            j++;
            
            if (x[i] != 0 && j > x[i] - 1)
            {
                printf("        内层循环结束:j > x[%d]-1 【%d > %d】\n", i, j, x[i] - 1);
            }
        } while (j <= x[i] - 1 && x[i] != 0);
    }
    
    printf("最后的输出:\n");
    for (i = 1; i <= 10; i++)
    {
        if (x[i] != 0)
        {
            printf("%d", x[i]);
        }
    }
	printf("\n");
	
    return 0;
}

三、程序题

1、统计字符:

编写C语言程序,从键盘输入一串字符并以回车结束,分别统计其中大写字母、小写字母、数字符号的个数并一行显示统计结果,三个数中间都以一个空格分隔。(直接显示结果不用提示文字和回车)

毫不到位的分析

暂时有两种思路

1)、数组

先把所有的元素输入进来,然后统计三种元素的个数。

但是、怎么判断输入的多少(数组的大小该如何确定)、怎么判断输入的字符串结束了

2)、循环

先输入一个字符,判断它是不是回车,

是就结束循环

不是就判断是大写小写还是数字

参考代码

数组:

char str[100];
int i;
int up = 0, low = 0, dig = 0;

gets(str);

i = 0;//务必置0
while (str[i] != '\0')//以字符串结束标记作为循环条件
{
	if (str[i] >= 'A' && str[i] <= 'Z')//大写
		up++;
	if (str[i] >= 'a' && str[i] <= 'z')//小写
		low++;
	if (str[i] >= '0' && str[i] <= '9')//数字
		dig++;
	i++;//记得改变i的值,使循环有可能结束
}

循环:

char ch;
int up = 0, low = 0, dig = 0;

while ((ch = getchar()) != '\n')//输入一个字符,并判断它的值
{
    if (ch >= '0' && ch <= '9')//数字
        dig++;
    if (ch >= 'A' && ch <= 'Z')//大写
        up++;
    if (ch >= 'a' && ch <= 'z')//小写
        low++;
}

printf("%d %d %d", up, low, dig);

2、三个数字排序

从键盘上以逗号分隔在一行输入三个整数a,b和c,编写程序将它们从小到大排序。(不要写提示文字,结果以逗号分隔在一行显示不回车)。

毫不到位的分析

看图

t 是中间变量,作为交换两个数时的第三个变量

在这里插入图片描述
方法不唯一,还有别的思路的。

参考代码

int a, b, c, t;

scanf("%d,%d,%d", &a, &b, &c);
if (a > b)
{
	t = a;
	a = b;
	b = t;
}
if (a > c)
{
	t = a;
	a = c;
	c = t;
}
if (b > c)
{
	t = b;
	b = c;
	c = t;
}
printf("%d,%d,%d", a, b, c);
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

童话与云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值