C语言基础题目(一)
1:输入一个字节的数(小于256)与移位个数,输出移位的结果(一个字节循环移位)
unsigned char a=0,b=0;
int n=0,x = 0,y = 0,c=0,d=0;
scanf("%d,%d",&x,&y);
a = (char)x;
n = (char)y;
c=a>>n;
d=a<<(8-n);
b=c|d;
printf("%d",b);
思路:把输入的int型的数字转换成char型的,因为根据要求一个字节char符合要求。
根据题意循环移位即例:右移出的数字要在左边循环回来,即只需看移出的数字在左边的拼合
如00101111右移2位得出11001011
a>>1即代表a/2,a<<1即代表a*2
移完后再把2个数按2进制拼合 即通过 a|b (a位或b)
知识补充:位运算符(此处位二进制的位运算符)
包括:<< 左移(十进制数左移一位代表x10,二进制数左移一位代表x2,当然)还有>>1为除以二
& 位与 2012-11-14
1:求sn=a+aa+aaa+aaaa+......+aa.....a的值,其中a是一个数字,例如:2+22+222+2222+22222(此时n=5)。n和a的值由键盘输入,请编程实现以上和过程
scanf("%d%d",&a,&n);
a1=a;
for(int i=1;i<n;i++)
{
a=a*10+a1;
sum=a+sum;
}
printf("%d",sum+a1);
int max=0,tmax=0,s=0;
for(int i=0;i<10;i++)
{
scanf("%d",&s);
if(s>max){
tmax=max;
max=s;
}else if(s>tmax)
tmax=s;
}
char str[6][100]={0};
for (int i=0; i<6; i++) {
scanf("%s",str[i]);
}
for (int i=0; i<6; i++) {
printf("%s ",str[i]);
}
printf("\n");
//1:换内容
char temp[100]={0};
for (int i=0; i<5; i++) {
for (int j=0; j<5-i; j++) {
if (strcmp(str[i],str[i+1])>0) {
strcpy(temp,str[i+1]);
strcpy(str[i+1], str[i]);
strcpy(str[i], temp);
}
}
}
for (int i=0; i<6; i++) {
printf("%s\t",str[i]);
}
----------------------------------------------------------------------------------------------------
//2:换地址
char *p[6]={0};
for (int i=0; i<6; i++) {
p[i]=str[i];//因为是二维的,是一个字符串的数组,所以p[i]=str[i],如果是str1[100]="android iphone"可以直接p[0]=str1但是二维不可以
}
for (int i=0; i<5; i++) {
for (int j=0; j<5-i; j++)
{
if (strcmp(p[i], p[i+1])>0)
{
char*temp=p[i];
p[i]=p[i+1];
p[i+1]=temp;
}
}
}
for (int i=0; i<6; i++) {
printf("%s\t",p[i]);//只是指针改变,并不是内容改变,所以下面的str[i]还是原来的样子
}
printf("\n");
for (int i=0; i<6; i++) {
printf("%s\t",str[i]);