一、单选题
1、要先判断才能执行,因此判断次数比执行多一次
2、a=8 b=22 选C
3、尽量不用全局变量
4、函数实参可以是变量、表达式、函数
5、main函数位置可以任意
6、C正确 “一个函数内定义的变量”是局部变量,只在本函数范围内有效
D错误
二、编程题
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
1、编写1-100中出现多少个9?
方法一 1-89; 90-100
int main()
{
int i = 0;
int count = 0;
for (i = 1; i <= 100; i++)
{
if (9 == i % 10)
{
count++;
}
if (9 == i / 10)
{
count++;
}
}
printf("count= %d ", count);
return 0;
}
方法二 递归——当数太大,上述方法不可行
2、计算并打印1/1-1/2+1/3-1/4+…+1/99-1/100
int main()
{
int i = 0;
int j = 1;
double sum = 0.0;
for (i = 1; i <= 100; i++)
{
sum += 1.0/i *j;
j = -j;
}
printf("sum=%lf",sum);
return 0;
}
3、求10个整数中的最大值
int main()
{
int arr[] = { 1,-1,19,2,3,98,7,90,20,-67 };
int ret = arr[0];
int i=0;
for (i = 1; i < 10; i++)
{
if (ret < arr[i])
{
ret = arr[i];
}
}
printf("%d ",ret);
return 0;
}
4、在屏幕上打出9*9乘法口诀表
int main()
{
//行数,9行
int i = 1;
for (i = 1; i <= 9; i++)
{
int j = 1;
//打印一行
for (j = 1; j <= i; j++)
{
printf("%d * %d = %d ",i,j,i*j);
}
printf("\n"); //换行
}
return 0;
}
5、编写一个函数reverse_string(char*string) (递归)实现数组内容逆序
实现:将参数字符串中的字符反向排列,不是逆序打印;
要求:不能用C函数库中的字符串操作函数;
例如 char arr[]=“abcdef”,逆序之后数组的内容变成"fedcba"
方法一 不用递归
以上述数组为例,交换a和f,b和e,c和d的值,即可得到逆序内容;
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')//说明指针还没有找到字符串末端
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
//交换a和f,b和e,c和d的值,用数组下标
{
int left = 0;
int right = my_strlen(str) - 1;//要求不能用库函数strlen,因此只能创建自己的strlen函数
//进行交换
while (left < right)
{
char tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);//传址,传过去数组arr首元素a的地址
printf("%s\n",arr);//最终打印:fedcba
return 0;
}
方法二 用递归——此题不推荐用递归解决,但是可以借此训练递归思维