关于c语言数据类型的相关知识
#define作用是避免幻数
宏定义只做简单的字符替换,不做运算,不做语法检查
对宏体里的形参要加括号,宏体也要加括号,避免引起歧义
switch语句中,default可以放在任意位置,但执行顺序还是在最后,一般default什么事也不做时,也要写出来,保证完整性。
今天写的一些代码
1.
:查找最小的k个元素(笔试题)
输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4
#include <stdio.h>
#define NUMBER 999
int main()
{
int i,j;
int n;/*n个值*/
int k;/*k个数*/
int a[NUMBER];
int min;
printf("输入的元素个数为:");
scanf("%d",&n);
printf("取最小值的个数为:");
scanf("%d",&k);
for(i=0;i<n;i++)
{
printf("a[%d]:",i);
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
for(j=n-1;j>0;j--)
{
if(a[j]<a[j-1])
{
int tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
}
}
}
for(i=0;i<k;i++)
printf("最小的%d个数为:%d\n",k,a[i]);
return 0;
}
2.输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。(笔试题)
句子中单词以空格符隔开。为简单起见,没有标点符号。
例如输入“I am a student”,则输出“student a am I”
#include <stdio.h>
int main()
{
char str[]="i am a student";
char *p;
int sum=0;
int j=0;
int x=0;
int k;
int i;
p=str;
while('\0'!=*p)
{
sum++;
p++;
}
char str1[sum];
p=str;
for(i=sum-1;i>=0;i--)
{
if((' '==str[i]) || (0==i))
{
if(i==0)
--i;
for(k=i+1;k<sum-x;k++)
{
str1[j]=str[k];
printf("%c",str1[j]);
j++;
}
x=j;
printf(" ");
}
}
printf("\n");
return 0;
}
- 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.
提示:帧头和帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧
#include <stdio.h>
int main()
{
char *str[] = {"head","tail"};
char p[100];
printf("请输入一串字符:");
fgets(p,100,stdin);
int i = 0;
int j = 0;
int index = 0; /*i的下标*/
char *p1 = p;
int m = 0;
int flag = 0,s = 0;
for(;i<100;i++)
{
while(j<4)
{
if(p[i] == str[m][j])
{
flag = 1;
s = m;
i++;
j++;
}
else
{
s = 0;
flag = 0;
break;
}
}
if(s == 1 && flag == 1)
{
p[i] = '\0';
break;
}
if(flag == 1 && m == 0)
{
p1 = &p[i-j];
m = m+1;
j=0;
}
}
printf("%s\n",p1);
return 0;
}