一、选择题
1、已知函数的原型是: int fun(char b[10], int *a); ,设定义: char c[10];int d; ,正确的调用语句是( )
A: fun(c,&d); B: fun(c,d); C: fun(&c,&d); D: fun(&c,d);
答案解析:
正确答案:A
参数a是指针,要接收地址,BD错误。参数b可以接收的是char*,而&c的类型是char(*)[10],C错误
知识点:
1、指针的定义方式:type+*
2、指针变量,专门用来存放地址的变量
3、数组作为函数参数:数组传参实际是把数组的首元素地址传递过去了。(int arr[]本质是指针:int* arr)
4、数组名是什么?
①结论:数组名是数组首元素的地址
但是有两个例外:
②&数组名,这里的数组名是表示整个数组,&数组名取出的是数组的地址
③sizeof(数组名),这里的数组名是表示整个数组,计算的是整个数组的大小,单位是字节
2、请问下列表达式哪些会被编译器禁止【多选】( )
int a = 248, b = 4;
int const *c = 21;
const int *d = &a;
int *const e = &b;
int const * const f = &a;
A: *c = 32; B: *d = 43 C: e=&a D: f=0x321f
答案解析:
正确答案:ABCD
如果 const 位于 * 的左侧,则 const 就是用来修饰指针所指向的变量,即指针指向为常量;*c和*d不能变。
如果 const 位于 * 的右侧,则 const 就是修饰指针本身,即指针本身是常量;e和f不能变。
知识点:
“左定值,右定向”。
cnnst在*的左边,则指针指向的变量的值不能直接通过指针改变(可以通过其他途径改变);在*的右边,则指针的指向不可变。
3、下列不能实现死循环的是( )
A: while(1){} B: for(;1;){} C: do{}while(1); D: for(;0;){}
答案解析:
正确答案:D
只有条件为真时才进行循环,ABC中1为真,D中0为假
知识点:
1、C语言中:0为假,非0为真。
2、while(循环条件){循环体}---先判断,在执行。
3、for(初始化部分;循环条件部分;调整部分){循环体}
① 初始化部分:用来初始化循环变量的,只在循环开始时,执行一次
② 循环条件部分:用来判断循环什么时候终止,(每次循环都要执行,如果循环条件为true,进入循环体,如果为false,退出循环)
③ 调整部分:用于循环条件的调整,每次循环结束的时候执行(循环中,必须有使循环条件趋于假的语句)
4、do{}while(循环条件){循环体}---先执行,再判断(至少执行一次)
二、编程题
1、首先输入要输入的整数个数 n ,然后输入 n 个整数。输出为 n 个整数中负数的个数,和所有正整数的平均值,结果保留一位小数。
注意: 0 即不是正整数,也不是负数,不计入计算; 本题有多组输入用例。
输入描述:首先输入一个正整数 n ,然后输入 n 个整数。
输出描述:输出负数的个数,和所有正整数的平均值。
示例:
输入: 5
1 2 3 4 5
10
1 2 3 4 5 6 7 8 9 0
输出: 0 3.0
0 5.0
代码实例:
分析:这道题其实通过 scanf 捕捉数据即可,统计负数个数,以及正数个数,并且在统计正数个数的过程中求取正数总和,最后计算得出平均数即可。需要注意的是所有数字中0是不统计在内的
步骤:
1、定义1个变量n(输入的整数个数)
2、多组输入:while(scanf(“%d”,&n)!=EOF)
3、循环体:
①定义6个变量:count1(负数个数 ) count2(正数个数) sum(正数总和) tmp(输入整数) int i=0(输入次数) float avg=0f;
②(嵌套循环)输入n个整数并捕捉数据:for(i=0;i<n;i++)
③求平均数:if(count2!=0)
avg=(float)sum/count2;
④输出:printf("%d %.1f",count1,avg);
#include <stdio.h> int main() { int n=0;//输入正整数n while(scanf("%d",&n)!=EOF)//多组输入n { int tmp=0;//输入整数 int i=0;//循环的个数 int count1=0;//负数个数 int count2=0;//正数个数 int sum=0;//正数总和 float avg=0;//正数平均值 //输入n个整数,并捕捉数据 for(i=0;i<n;i++) { scanf("%d",&tmp); if(tmp<0) { count1++; } else if(tmp>0) { count2++; sum+=tmp; } } //求正数平均值 if(count2!=0) { avg=(float)sum/count2; } //输出 printf("%d %.1f",count1,avg); } return 0; }