C语言数据类型和变量习题作业1

1.单选题

1.1 关于注释说法不正确的是                            ( B

A .注释是用来解释代码的,在代码中是适当的加上注释有利于代码的阅读和多人协作

B .注释基本没啥用,主要给自己看的

C .注释是给程序员看的,编译器在预处理阶段就会删除注释的

D .注释有C++注释风格,有C语言注释风格,推荐C++注释风格

1.2 关于C语言布尔类型错误的是                     ( 

A .C语言布尔类型是_Bool,使用需要包含头文件stdbool.h

B .布尔类型变量的取值是:true或者false

C .布尔类型是专门用来表示真和假的类型

D .布尔类型是C99标准之前就有的

1.3 下面哪个不是C语言内置的数据类型          (

A .char

B .double

C .struct Stu

D .short

解析:C属于自定义类型。

1.4 下面代码输出的结果是:                         ( B )
#include <stdio.h>
int num = 10;
int main()
{
    int num = 1;
    printf("num = %d\n", num);
	return 0;	
}

A . 程序有问题,不能编译

B .输出1

C .输出10

D .输出0

解析:局部变量优先使用。int num=10是全局变量,int num=1是局部变量。

1.5 关于C语言变量说法错误的是                     ( C )

A .变量是用来描述生活中经常发生变化的值

B .变量可以分为局部变量和全局变量

C .局部变量是放在内存的静态区的,全局变量是放在内存的栈区

D .当全局变量和局部变量名字相同的情况,且都可以使用的时候,局部变量优先

解析:局部变量是放在内存的栈区的,全局变量是放在内存的静态区。

1.6 关于C语言算术操作符说法正确的是           ( D)

A .除号两边都是小数才能执行小数除法

B .%操作符的操作数可以是整数,也可以是小数

C .%操作符计算的结果是两个操作数整除之后的商

D .负数求模的规则是,结果的正负号由第一个运算数的正负号决定。

解析:A.除号两边其中一个是小数就可以执行小数除法;B .%操作符的操作数只能是整数;C .%操作符计算的结果是两个操作数整除之后的余数。

1.7 下面代码输出的结果是                                  ( A )
#include <stdio.h>
int main()
{
    int a = 7;
    int b = 2;
    float c = 2.0f;
    printf("%d\n", a / b);
    printf("%f\n", a / c);

    return 0;
}

A .3 3.500000

B .3.500000 3.500000

C .3.500000 3

D .3 3

1.8 下面代码的结果是                                             ( B )
#include <stdio.h>
int main()
{
	int a, b, c;
	a = 5;
	c = ++a;
	b = ++c, c++, ++a, a++;
	b += a++ + c;
	printf("a = %d b = %d c = %d\n:", a, b, c);
	return 0;
}

A .a = 8 b = 23 c = 8

B .a = 9 b = 23 c = 8

C .a = 9 b = 25 c = 8

D .a = 9 b = 24 c = 8

解析:

    c = ++a;                          //前置++,先++,后使用。a=a+1=6,c=6
    b = ++c, c++, ++a, a++;

    //第一次执行:++c:前置++,先++,后使用。c=c+1=7,b=7

    //第二次执行:c++:后置++,先使用,后++。b=c=7    c=c+1=8     

    //第三次执行:++a:前置++,先++,后使用。 a=a+1=7  b=a=7

    //第四次执行:a++:后置++,先使用,后++。 b=a=7  a=7+1=8

    //a=8   b=7   c=8
    b += a++ + c;

    //第一步:b=b+(a++ +c)

    //第二步: b=7+(a++ +8)     后置++,先取a值

    //第三步: b=7+(a     +8)=23;

    //第四步: a=a++=9

   //a=9    b=23    c=8
    printf("a = %d b = %d c = %d\n:", a, b, c);
    return 0;

2. 函数单选题

2.1 关于scanf函数说法正确的是                            ( A )

A .scanf中也有占位符,占位符和后边的参数提供的地址一一对应。

B .scanf()处理所有占位符时,会自动过滤起首的空白字符,包括空格、制表符、换行符

C .scanf的占位符%s表示读取一个字符串,遇到空白字符也全部读取

D .scanf是库函数,库函数不需要包含头文件

解析:B .scanf()处理所有占位符时,%c不会自动过滤起首的空白字符;C .scanf的占位符%s表示读取一个字符串,遇到空白字符不会读取;D .scanf是库函数,库函数需要包含头文件

2.2 关于printf函数说法错误的是                            ( D )

A .printf()的作用是将参数文本输出到屏幕。它名字里面的f代表format(格式化),表示可以定制输出文本的格式

B .printf()不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行

C .printf()可以在输出文本中指定占位符,“占位符”,就是这个位置可以用其他值代入

D .printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n个

解析:D .printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个。

2.3 下面程序输出的结果是什么                         ( B )
#include <stdio.h>

int main()
{
    printf("%5d\n", 123456);
    return 0;
}

A .12345

B .123456

C .23456

D .0

解析:%5d表示占位符至少为5位,不满5位,对应的值前面添加空格,满5位,正常输出。

2.4 关于if语句说法正确是                                      ( C )

A .if语句后面只能跟一条语句

B .if语句中0表示假,1表示真

C .if语句是一种分支语句,可以实现单分支,也可以实现多分支

D .else语句总是和它的对齐的if语句匹配

解析:A .if语句后面可以跟多条语句;B .if语句中0表示假,非0表示真;D .else总是跟最接近的if匹配,但是还有其他情况,详情见C语言:选择/分支结构————if语句的exe8例题。

2.5下面代码执行的结果是                                    ( C )
#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 0; i<10; i++)
	{
		if (i = 5)
			printf("%d ", i);
	}
	return 0;
}

A .1 2 3 4 5 6 7 8 9 10

B .5 5 5 5 5 5 5 5 5 5

C .死循环的打印5

D .0 1 2 3 4 5 6 7 8 9

解析:有=,为赋值语句,==才是判断语句,每循环一次,赋值为5,打印5,若i为9,通过赋值i变成5,i++为6,6<10,再次成立循环,形成死循环。

for循环 :

for(表达式1;表达式2;表达式3)

{

         循环体;

}

for循环的执行顺序:

第一次循环:先执行表达式1,然后执行表达式2,再执行循环体,最后执行表达式3。

第二次循环:先执行执行表达式2,再执行循环体,最后执行表达式3。

……

3. 编程题

exe1:给定两个整数a和b (0 < a,b < 10,000),计算a除以b的整数商和余数。

输入描述:一行,包括两个整数a和b,依次为被除数和除数(不为零),中间用空格隔开。

输出描述:一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。

示例1

输入:15 2

输出:7 1

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a, b;
	while (scanf("%d %d", &a, &b)!=EOF) {
		int ret1 = a / b;
		int ret2 = a % b;
		printf("%d %d", ret1, ret2);
	}
	return 0;
}

解析:while循环,只有当表达式为真时才会执行。

while(表达式)

{

     循环体;

}

exe2:输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“Genius”。

输入描述:多组输入,每行输入包括一个整数表示的智商。

输出描述:针对每行输入,输出“Genius”。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a = 0;
	printf("请输入智商值:", a);
	while (scanf("%d", &a)!=EOF) {
		if (a >= 140)
			printf("%s\n","Genius");
	}
	return 0;
}

解析:多组输入用while循环。

exe3:  两个数的大小关系。

输入描述:题目有多组输入数据,每一行输入两个整数(范围-231~231-1),用空格分隔。

输出描述:针对每行输入,输出两个整数及其大小关系,数字和关系运算符之间没有空格,详见输入输出样例。

示例1

输入:1 1

输出:1=1

示例2

输入:1 0

输出:1>0

示例3

输入:0 1

输出:0<1

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main(){
	int a, b;
	while (scanf("%d %d", &a, &b) != EOF) {
		if (a > b)
			printf("%d>%d\n", a, b);
		else if (a == b)
			printf("%d=%d\n", a, b);
		else
			printf("%d<%d\n", a, b);
	}
	return 0;
}

解析:使用if语句

if( 表达式 )

     语句1;

else if 

     语句2;

else

exe4:判断一个整数是否能5整除。

输入描述:输入包括一个整数M(1≤M≤100,000)。

输出描述:输出包括一行,如果M可以被5整除就输出YES,否则输出NO(结果大小写敏感)。

示例1

输入:10

输出:YES

示例2

输入:9

输出:NO

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
	int a;
	printf("请输入一个整数:");
	while (scanf("%d", &a) != EOF) {
		if (a % 5 == 0)
			printf("YES\n");
		else
			printf("NO\n");
	}
	return;
}

exe5:打印用“*”组成的线段图案。

输入描述:多组输入,一个整数(1~100),表示线段长度。即“*”的数量。

输出描述:针对每行输入,输出占一行,用“*”组成的对应长度的线段。

示例1

输入:10 2

输出:********** **

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main() {
	int a;
	while (scanf("%d", &a) != EOF) {
		int i = 0;
		while (i < a)
		{
			printf("%c", '*');
			i++;
		}
		printf("\n");
	}
	return 0;
}

exe6:打印3的倍数的数,写一个代码打印1-100之间所有3的倍数的数字。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int num=1;
	while (num < 100)
	{
		if (num % 3 == 0)
			printf("%d是3的倍数!\n", num);
		num++;
	}
	return 0;
}

exe7:将三个整数数按从大到小输出。

输入:2 3 1

输出:3 2 1

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a = 1;
	int b = 3;
	int c = 2;
	if (a < b) {
		int tmp = a;
		a = b;
		b = tmp;
	}
	if (a < c) {
		int tmp = a;
		a = c;
		c = tmp;
	}
	if (b < c) {
		int tmp = b;
		b = c;
		c = tmp;
	}
	printf("a=%d,b=%d,c=%d\n", a, b, c);
	return 0;
}

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值