练习题
1.下面哪个不是c语言内置的数据类型:(C)
A.char B.double C.struct Stu D.short
注:c语言内置的数据类型:基本的自带已经定义好的数据类型
2.下面代码输出结果是(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;//局部变量作用于局部范围
输出num采用就近原则——就近指的是作用域的就近
3.局部变量的作用域是:(D)
A.main函数内部 B.整个程序 C.main函数之前 D.局部变量所在的局部范围
4.下面程序输出结果是(C)
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = {'b','i','t'};
printf("%d\n", strlen(arr));
return 0;
}
A.3 B.4 C.随机值 D.5
strlen—求字符串长度
char arr[] = {'b','i','t'};//代码中未包含"\0",
但char arr[] = "bit";//代码中本身带有"\0".
5.字符串的结束标志是(C)
A.是'0' B.是EOF C.是'\0' D.是空格
6.下面哪个不是转义字符(C)
A.'\n' B.'\060' C.'\q' D.'\b'
'\n'转义字符,表示换行;
'\060'转义字符,060八进制数据,十进制为48,因此'\48'表示的就是'0'
'\b'转义字符,表示退格
7.编程题:
计算n的阶乘
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main()
{
int n;
size_t result = 1;
printf("input n:>");
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
{
result = result * i;
}
printf("%d!=%u\n", n, result);
}
计算1!+2!+3!+4!+5!+6!+7!+8!+9!+10!
#include<stdio.h>
void main()
{
size_t result = 0;
int Mul;
for (int i = 1; i <= 5; ++i)
{
Mul = 1;
for (int j = 1; j <= i; ++j)
{
Mul *= j;
}
result += Mul;
}
printf("%u", result);
}
在一个有序数组中查找集体的某个数字n,编写int binsearch(int x,int v[],int n);<=v[1]<=[2]<=...<=[n-1]的数组中查找x。(二分查找法)
#include<stdio.h>
void main()
{
int ar[] = { 1,22,33,54,66,75,90,122,143,777 };
int n = sizeof( ar) / sizeof(ar[0]);
int key;
printf("input key:>");
scanf("%d", &key);
int high=n-1;
int low=0;
int mid,index=-1;
while(low <= high)
{
mid = (low + high) / 2;
if (key == ar[mid])
{
index = mid;
break;
}
else if (key>ar[mid])
low = mid + 1;
else
high = mid - 1;
}
if (index == -1)
printf( "要查找的%d不存在...\n",key);
else
printf( "要查找的%d在:%d\n",key,index );
}
比较输出一组数据中的最大值。
#include<stdio.h>
int FindMax(int ar[], int n)
{
int max = ar[0];
for (int i = 1; i <= n; ++i)
{
if (ar[i] >max )
max = ar[i];
}
return max;
}
void main()
{
int ar[] = { 3,2,6,12,13,16,17,177777,18,23,44,56,78 };
int n = sizeof(ar) / sizeof(ar[0]);
int max_value = FindMax(ar, n);
printf("max_value=%d\n", max_value);
}
用冒泡排序方法从小到大排序
void printArray(int ar[], int n)
{
for (int i = 0; i < n; ++i)
{
printf("%d ", ar[i]);
}
printf("\n");
}
void sort(int ar[], int n)
{
for (int i = 0; i < n - 1; ++i)
{
for (int j = 0; j < n - i - 1; ++j)
{
if (ar[j] > ar[j + 1])
{
int temp = ar[j];
ar[j] = ar[j + 1];
ar[j + 1] = temp;
}
}
}
}
void main()
{
int ar[] = { 1,2,344,2,77,445,221,7,55,44,91,2 };
int n = sizeof(ar) / sizeof(ar[0]);
printArray(ar, n);
sort(ar, n);
printArray(ar, n);
}
置换数组
#include<stdio.h>
void reserve(int ar[], int n)
{
int low = 0;
int high = n - 1;
while (low<high)
{
int temp;
temp = ar[high];
ar[high] = ar[low];
ar[low] = temp;
low++;
high--;
}
}
void main()
{
int ar[] = { 1,2,344,2,77,445,221,7,55,44,91,2 };
int n = sizeof(ar) / sizeof(ar[0]);
printArray(ar, n);
reserve(ar, n);
//sort(ar, n);
printArray(ar, n);
}
fib数组1,1,2,3,5,8,13,21,34,65....的计算。
#include<stdio.h>
size_t fib(int n)
{
int fib1 = 1;
int fib2 = 1;
int fib;
if (n <= 2)
return 1;
for (int i = 3; i <= n; ++i)
{
fib = fib1 + fib2;
fib1 = fib2;
fib2 = fib;
}
return fib;
}
void main()
{
int n = 8;
size_t result = fib(n);
printf("result=%u\n", result);
}