〇、写在前面
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);