您的位置:首页 > 移动开发 > IOS开发

IOS开发之路-C 学习笔记7.16

2013-07-17 09:13 477 查看
C语言中使用0作为假,非0即为真

&& 与 同真为真 同假为假 其中有一个为假 即为假

|| 或 同真为真 同假为假 有真即真

! 非 非真即假 反之亦然

运算符优先级 综合性

() 从左到右

算数,单目运算符-,++,-- ,! 从右到左

算术,单目运算符*,/,% 从左到右

算数,双目运算符 + - */ % 从左到右

关系运算符 < <= > >= 从左到右

关系运算符 == != 从左到右

逻辑运算符 && || 从左到右

赋值运算符 += -= *= /= = 从右到左

逻辑运算符都在什么情况下会发生短路?

在逻辑与运算中如果前半部分为0的情况下,将不在去计算右边的情况.这就会发生短路.

例: int a=0 ; b = 6;

int c = (a++ && b++)

输出的结果为:a ==1 b ==6;

对一个行列都为N的数组进行行列交换

void array_change()
{
int n = 0;
printf("请输入要生成几行的2维数组:");
scanf("%d",&n);
int b

;
if(n>=3)
{
int nArray

;
printf("生成的【%d】行【%d】列数组行列交换前:\n",n,n);
printf("列行");
for (int i =0 ; i<n; i++) {
printf("%5d",i+1);
}
printf("\n");
for (int i = 0 ; i<n; i++)
{
printf("%-7d",i+1);
for (int j = 0; j<n; j++)
{
scanf("%5d",&nArray[i][j]);
//printf("%d ",nArray[i][j]);
}
//printf("\n");
}
printf("转换后:\n");
for (int i = 0 ; i<n; i++)
{
for (int j = 0; j<n; j++)
{
//                int temp = 0;
//                temp = nArray[i][j];
//                nArray[i][j] = nArray[j][i];
//                nArray[j][i] = temp;
b[i][j] = nArray[j][i];
printf("%5d",b[i][j]);
}
printf("\n");
}

}
else
{
printf("输入的行数必须大于3\n");
array_change();
}
}


如果有一个正整数从左、右来读都是一样的,则称为回文式数(简称回数);

比如101,32123,

999都是回数。数学中有名的“回数猜想”之迷,至今未解决。

回数猜想: 任取一个数,再把它倒过来,并把这两个数相加,然后把这个和数再倒过来,与原和数相加,重复此过程,一定能获得一个回数。 例:

68倒过来是86

68+86= 154

154+541= 605

605+506=1111 (回数)

编程,输入任意整数,按上述方法产生一个回数,为简便起见,最多计算7步,看是否能得到一个回数。

要求:

主函数中接收键盘数据,必须用scanf(“%ld”,&变量名)接收整型变量,

显示该数与其倒数的和,输出每一步计算步骤。

子函数1,计算该数的倒数。

子函数2,验证和是否为回数,

是则主函数打印“经过n次计算,得到回数”,超过7次未能得到回数,显示,“经过n次计算,未得到回数”

这个程序写了好久,可是最后还是有问题...

int recCount(int num)
{
int count = 1;
while (num>=10) {
num = num/10;
count++;
}
return count;
}
int recNum(int num)
{
int n = 0;
int count = recCount(num);
while (num>=10)
{
int ram = num%10;
num = num/10;
int temp = 0;
temp = pow(10, (count-1));
count--;
n = n+ram*temp;
}
n = n+num;
return n;
}
int recSum(int num1,int num2)
{
return num1 + num2 ;
}
int Judeg(int num)
{
int num_len = recCount(num);
int nm = num;
char _num[100] ;
char right_num[50];
char left_num[50];
int i = 0;
int flog = 1;
int ram =0;
while (num>=10)
{
ram = num%10;
num = num /10 ;
_num[i] = ram;
i++;
}
_num[num_len-1] = num;
if(num_len%2==0)
{
int i = 0;
for ( ; i<num_len/2; i++)
{
left_num[i] = _num[i];
//printf("left_num[%d]:%d\n",i,left_num[i]);
}
i=0;
for (int j=num_len-1; j>=num_len/2; j--)
{
right_num[i] = _num[j];
//printf("right_num[%d]:%d\n",i,right_num[i]);
i++;
}
}
else
{
int i = 0;
for (; i<(num_len-1)/2; i++)
{
left_num[i] = _num[i];
//printf("left_num[%d]:%d\n",i,left_num[i]);
}
i= 0 ;
for (int j=num_len-1; j>=(num_len+1)/2; j--)
{
right_num[i] = _num[j];
//printf("right_num[%d]:%d\n",i,right_num[i]);
i++;
}
}
flog = strcmp(left_num,right_num);
//printf("%d\n",flog);
if (flog==0) {
printf("\n%d是回文串\n",nm);
}
else{
printf("%d不是回文串\n",nm);
}
int k = 0 ;
while(_num[k++]!= '\0')
{
_num[k-1] = '\0';
}
k=0;
while (left_num[k++]!='\0') {
left_num[k-1] = '\0';
}
k = 0 ;
while (right_num[k++]!='\0') {
right_num[k-1] = '\0';
}
printf("--%s",right_num);
return flog;
}
int main(int argc, const char * argv[])
{
int number = 0;
int count = 0;
printf("请输入一个正整数:");
scanf("%d",&number);
int recnum =  recNum(number);   //number 的倒数
int numsum = recSum(number, recnum);  // number 和倒数的和
int flog = 1;
printf("%d 的倒数为: %d\n",number,recnum);
printf("两数之间的和为:%d + %d = %d\n",number,recnum,numsum);
while (flog != 0) {
flog = Judeg(numsum);
number = numsum;
recnum = recNum(number);
numsum = recSum(recnum,numsum);
// 判断是否是回数
printf("%d 的倒数为: %d\n",number,recnum);
printf("两数之间的和为:%d + %d = %d\n",number,recnum,numsum);
count++;
printf("%d\n",flog);
}
if(flog == 0)
{
count++;
printf("%d是回数!\n",numsum);
printf("经过%d次计算,得到回数.",count);
}

return 0;
}


输入某年某月某日,判断这一天是这一年的第几天。

提示:需要考虑闰年的情况,闰年的算法:能被400整除的是闰年,能被4整除并且不能被100整除的是闰年。

int getRun(int year)
{
int y = 0;
if((year%4==0 && year%100!=0) || year%400==0  )
{
y = 1;
}
else
{
y = 0;
}
return y;
}
void getDate()
{
int getRun();
int year = 0;
int month = 0;
int day = 0;
int sum_Day = 0;
int month_day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("please inpue Year Month Day:");
scanf("%d%d%d",&year,&month,&day);
int y = getRun(year);
if(y==1)
{
printf("%d是闰年!\n",year);
month_day[1] =29;
for (int i = 0 ; i<month; i++)
{
sum_Day += month_day[i];
}
}
else
{
printf("%d是平年!\n",year);
for (int i = 0 ; i<month; i++)
{
sum_Day += month_day[i];
}
}
printf("%d月%d日是%d的第%d天.\n",month,day,year,sum_Day);
}


编写一个C程序,输入一个金额(整数金额),然后打印该金额中可以包括多少张100元,50元,20元,10元,5元,1元。

void money()
{
int money = 0;
printf("input to money:");
scanf("%d",&money);
int m_100 = money/100;
money -= (100*m_100);

int m_50  = money / 50;

money -= (50*m_50);

int m_20  = money / 20;
money -= (20 * m_20);
int m_10 = (money) /10 ;
money -= (10 * m_10);
int m_5 = (money ) /5 ;
money -= (5 * m_5);
int m_1 = (money) /1 ;
printf("100 :%d \n 50 :%d \n 20:%d \n10:%d \n5:%d \n1:%d \n",m_100,m_50,m_20,m_10,m_5,m_1);
}



输入一段字符串,再输入一个删除字符串位数的数。然后从输入的字符串中删除指定位数的字符串.

void put_s()
{
char str[41];
char *p = str;
int local_index = 0;
int len = 0;
printf("请输入一段字符串:");
gets(p);
printf("请输入要删除字符串的位数:");
scanf("%d",&local_index);
char str_index[local_index];
len = (int)strlen(p);
printf("源字符串为:%s\n",p);
printf("指定位置之后的字符串为:");
for (int i = 0 ; i<local_index; i++)
{
printf("%c",*(p+i));
str_index[i] = *(p+i);
}
printf("\n删除指定位置字符串的后字符串为:");
for (int i =local_index ; i<len; i++) {
printf("%c",*(p+i));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: