1、如输入:Z2009-AShanghaiZ
则输出:lenth = 8;
事例说明:从A到Z的子串为SHanghai,其长度是8.
#include
#include
int caculate(char string[], char s1, char s2)
{
int length = 0;
while(*string != s1)
string++;//从首字母开始
while(*string != s2)
{
string++;//两个特定字母之间的长度
length++;
}
return length-1;
}
int main(void)
{
int length = 0;
char s1,s2;
char *string = "Z2009_AShanghaiZ";
printf("Enter two char to count length");
scanf("%c%c", &s1, &s2);
length = caculate(string, s1, s2);
printf("%c to %c length is %d", s1, s2, length);
return 0;
}
3、实现整数n(n<=10)的算式:n!+(n-1)!+(n-2)!…+3!+2!+1!
输入 n = 3:结果 3!+2!+1! = 11
函数原型:int jiecheng_sum(int n)
#include
int jiecheng_sum(int n)
{
int i = 0, j = 0, k = 1, sum = 0;
for(i=1; i1; i++)//从1到n
{
k = 1;
for(j=1; j1; j++)
{
k = k * j;//计算从1到n的阶乘
}
sum += k; //相加
}
return sum;
}
int main(void)
{
int n = 0;
if(scanf("%d", &n) == 1 && (n<=10 && n>=1))
{
printf("\nsum = %d.\n", jiecheng_sum);
}
return 0;
}
3.一个数组有N个元素,使用冒泡排序法对其进行排序输出
输入为两行。
第一行一个整数n(1=
#include
void maopao(int arr[], int n)
{
int i = 0, j = 0, k = 0;
for(i=0; i1; i++)
{
for(j=0; j1; j++)
{
if(a[j]>a[j+1])
{
k = a[j];
a[j] = a[j+1];//冒泡交换
a[j+1] = k;
}
}
}
}
int main(void)
{
int n = 0;
int a[1000];
int i = 0;
scanf("%d", &n);
if(n>=1 && n<=1000)
{
for(i=0; iscanf("%d", &a[i]);
maopao(a,n);
for(i=0; iif(i == 0)
printf("%d", a[i]);
else
printf(" %d", a[i]);
}
}
return 0;
}
4.写一个函数找出一个整数数组中第二大的数。
PS1: 66 66 66 66 //无第二大的数字
PS2: 99 99 88 86 // 第二大的数字是88
#include
int findsec(int a[], int n, int *p)
{
int i = 0, max = 0, semax = 0;
int find = 0;
max = a[0];
for(i=1; iif(a[i] > max)
{
*p = max;
max = a[i];
find = 1;//设置岗哨find判断是否进入if语句
}
else if(a[i] < max && a[i]>*p)
{
*p = a[i];
find = 1;//如果没有 max 大 和比*p记录的大
}
}
return find;
}
int main(void)
{
int a[1000];
int n;
int i = 0, p = 0;
scanf("%d", &n);
for(i=0; i"%d", &a[i]);
if(findsec(a,n,&p) == 0)
{
printf("NO SEC NUMBER\n");
}
else
{
printf("SEC = %d.\n",p);
}
return 0;
}
5.一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号。只留下车号的一些特征。
甲说:车牌的前两位数字是相同的
乙说:车牌的后两位的数字是相同的
丙说:4位车牌恰好是某个整数的平方。
//车号最大9999,所以车号为100以内的整数的平方
#include
int judge(void)
{
int find;
int i = 0, a = 0, b = 0, c = 0, d = 0;
for(i=32; i<100; i++)
{
a = (i * i) % 10;//个位
b = ((i * i) % 100) / 10;//十位
c = ((i * i) % 1000) / 100;//百位
d = (i * i) / 1000;//千位
if(a == b)//个位,十位
{
if(c == d)//百位,千位
{
if(c != a){//个位百位不同
find = i * i;
}
}
}
}
return find;
}
int main(void)
{
printf("%d\n",judge());
return 0;
}
6.
What will print out why!
#include
int main (void)
{
char *p1 = "name";
char *p2;
p2 = (char *)malloc(20);
meset(p2,0,20);
while(*p2++ = *p1++);
printf("%s\n", p2);
return 0;
}
#include
#include
#include
int main(void)
{
char *p1="name";
char *p2;
int i = 0;
p2 = (char *)malloc(20);
memset(p2,0,20);
while(*p2++ = *p1++);//p2指针移动。
printf("%s\n", p2);//p2指针指向末尾。
return 0;
}
//所以到最后没有输出。
//想要输出name的必须有一个指针指向p2
7.2、下面是某语言的计算字符串Hash值的算法如下,如果字符‘a’、‘b’对应的ascii的值对应十进制是97、98,
请回答控制台打印出的数值是多少_
typedef unsigned long uintptr_t;
uintptr_t NXStrHash (const void *data)
{
uintptr_t hash = 0;
unsigned char s = (unsigned char )data;
if (s)for (; ; )
{
if (*s == ‘\0’)break;
hash ^= (uintptr_t)*s++;
printf(“1—%ld.\n”, hash);
if (*s == ‘\0’)break;
hash ^= (uintptr_t)*s++<<8;
printf(“2—%ld.\n”, hash);
if (*s == ‘\0’)break;
hash ^= (uintptr_t)*s++<<16;
printf(“3—%ld.\n”, hash);
if (*s == ‘\0’)break;
hash ^= (uintptr_t)*s++<<24;
printf(“4—%ld.\n”, hash);
}
return hash;
};
int main(void)
{
uintptr_t hash_value = NXStrHash(“ab”);
printf(“%ld.\n”, hash_value);
return 0;
}
8.给出三个整数a,b,c。你可以在它们之间插入加号或者乘号以及括号将其变成一个表达式。比如数字1,2,3你可以构造出:
1+2*3=7
1*(2*3)=5
1*2*3=6
(1+2)*3=9
等表达式。现在你需要构造一个值最大的表达式,输出这个值。
输入描述:
第一行包括三个整数a,b,c。1=
#include
int main(void)
{
int a = 0, b = 0, c = 0;
int max = 0;
scanf("%d%d%d", &a, &b, &c);
if((a >=1 && a <=10) && (b >=1 && b <= 10) && (c >=1 && c <=10)){
if(a*b*c > max)
max = a*b*c;
if((a+b)*c >max)
max = a+b)*c;
if(a*(b+c) >max)
max = a*(b+c);
if(a+b+c >max)
max = a+b+c;
if(a*b+c > max)
max = a*b+c;
if(a+b*c >max)
max = a+b*c;
printf("%d", max);
}
return 0;
}