c语言基础编程题(c语言基础编程100道)
C语言编程
#include stdio.h
main()
{
int x,y;
printf("please input a number?\n");
scanf("%d",x);
if (x1)
{
y=x;
}
else if (x=1x10)
{
y=2*x-1;
}
else if (x=10)
{
y=3*x-11;
}
printf("the result is %d.\n",y);
}
求解一道C语言基础编程题。。
intbase(intk,chars[])//按定义,k是进制(2~16),s是输入的字符串
{
int len=0,sum=0; //len 指s字符串长度,sum指转换后的k进制数
int i,j,t,n;
while (s[len]!='\0') len++; //计算s数组长度,也就查看用户从键盘输入了多少字符
i=len-1; //从最高位开始,也就是从最右侧开始计算,比如s=1234ab,先从b开始计算
while (s[i]!='\0') //逐个读取字符串s,第i位的具体字符值,s[i]是否有效
{
n=0; //s[i]是字符(char),s[i]转换成10进制对应的值
if (s[i]='0's[i]='9') //查ascii码表
n=s[i]-48; //48即字符 '0'
else if (s[i]='A's[i]='F') //A--F用来代表10进制下的10~15
n=10+s[i]-'A'; //s[i]是字符(char),s[i]转换成10进制对应的值
t=1;
for (j=0; jlen-i-1; j++) t=t*k;
/* //以上语句等于如下形式,s[i]对应的倍率,假设k=10,就好理解
t=1; //个位,即i=len-1时
t=1*k; //十位 即i=len-2时
t=1*k*k; //百位
t=1*k*k*k; //千位
.....
*/
sum += n*t; //合计,个+十+百+千+...
i--;
}
return (sum);
}
main()
{
int sz;
char str[20];
scanf("%d %s",sz,str);
if (sz2||sz16)
printf("输入错误。\n");
else
printf("%d\n",base(sz,str));
}
C语言编程题
int main ()
{
int student_score[20] = { 0 };
// 存取20 个学生的打分情况
int i = 0;
for(i = 0 ; i 10 ; ++i)
{
printf("第 %d 个 学生打分 \n ,输入分数: ", i );
scanf(“ %d”, student_score[i]);
}
// 求和取平均
// 排序数组 求中位数
//定义一个临时数组 int score_count[5] 用于计数 找次数最大的数就为众数
// 打印输出
}
C语言基础编程问题
C语言中规定八进制数字前面加0表示,十六进制数字前面加0x表示,不加就是十进制。
所以,题中
a=25
是十进制
b=025是八进制,换成十进制是21
c=0x25是十六进制,换成十进制是37
所以答案是
25
21
37
注:可以用windows的计算器的“科学型”来验证。
求解一道C语言基础编程题。
首先看一下程序的逻辑(虽然貌似题主应该不是在这一块有问题:
关于ascii码的解释:
首先得知道每个字符和数值的对应关系(图不清晰可看戳这里:ascii编码对应表
好了,现在看程序中的第一个if语句,在用大于、小于这些运算比较符比较char的时候,会自动转换为整数比较,也就是说‘0’会转换成48,‘1’转换成49……以此类推,最后是‘9’转换成57,你会发现把这些char减去48就会得到它们各自相对应的整数数值,这就是第一个if里面减去48的目的。同理,接下来的else-if语句,‘A’到‘F’也会转换成整数数值,具体对应的数值可以参看ascii表,一样的道理减去‘A’然后加10的目的也是转换成数值,因为在大于10的进制下,A代表10,B代表11……以此类推,因为这个程序最高就16进制了,所以判断到F就可以了。
然后我们来看进制的解释:
所谓进制,其实就是组合数字的方式,理解了这一点就很好说了。比如说10进制,为什么198等于198(好像很傻一问题)?其实是因为在十进制下,198 (10) = 1 * 10^2 + 9 * 10^1 + 8 * 10^0 = 198(好像是这么回事,(?ì _ í?)),同一个数字,放在不同的位置,它所代表的分量也不一样,即组合数字的方式会影响数字的值,1后面还有2个数字,所以这个1实际上是1 * 10^2 = 100,而不是1,其它位置的数字同理,然后把这些值加起来,就得到了整个数字所代表的最终的值,因此我们才有了 198 = 198(好像很有道理)。
但是,198也可能不等于198,什么时候不等于呢?在不同的进制下。比如说假如我们的这个198是在16进制下的198,那么 198 (16) = 1 * 16^2 + 9 * 16^1 + 8 * 16^0 = 408 (10) = 408。
为什么会产生这种差别呢?因为16进制下的那个1代表的分量是1 * 16^2了,而不是1 * 10^2了,同理,在其它进制下只需要把乘的数字换成对应的进制的数就好了,比如在9进制下那个1就是1 * 9^2等等。
这样一来上面程序里面的for语句就好理解了,之所以用for是因为要算出次方(这个应该不用解释),一个数要乘的次方是它后面跟着的数字的个数,所以是“j = 0; j len - 1”。
然后把这些值加起来,就得到这个数字对应的十进制下的数值,也就完成了最终的转换。
题主可以随便写些不同进制下的数字,然后自己算出十进制下对应的数值,和网站上得出的结果比较比较,这样也可以加深对进制的理解,同时提高计算能力。
戳这里:在线进制转换
这里给出了一个链接,这种网页到处都是,随便搜一下就可以找到。
基础编程题
LZ想要的是这种答案吧。。。。
//-------------------------------第一题
#include stdio.h
#include "e:\myc\zylib\zylib.h"
STRING GetString(STRING prompt);
double GetReal(STRING prompt);
int main()
{
double bookprice;
STRING bookname;
bookname=GetString("请输入字符串:");
bookprice=GetReal("请输入实数:");
printf("字符串为:%s\n",bookname);
printf("实数为:%.2f\n",bookprice);
}
STRING GetString(STRING prompt)
{
STRING name;
printf("%s",prompt);
name=GetStringFromKeyboard();
return name;
}
double GetReal(STRING prompt)
{
double price;
printf("%s",prompt);
price=GetRealFromKeyboard();
return price;
}
//-------------------------------------第二题
#include stdio.h
#include "e:\myc\zylib\zylib.h"
BOOL IsPrime(int n);
int main()
{
int n;
printf("请输入一个整数:");
scanf("%d",n);
if(n2)
if(IsPrime(n))printf("%d是素数\n",n);
else printf("%d不是素数\n",n);
else printf("数据非法\n");
return 0;
}
BOOL IsPrime(int n)
{
int i;
for(i=2;in;i++)
if(n%i= =0) return FALSE;
return TRUE;
}
//--------------------------------第三题
#include stdio.h
#define TRUE 1
int gcd(int x,int y);
int main()
{
int m,n,max;
printf("请输入两个正整数:");
scanf("%d %d",m,n);
max=gcd(m,n);
printf("最大公约数为:%d\n",max);
return 0;
}
int gcd(int x,int y)
{
int r;
while(TRUE)
{
r=x%y;
if(r==0)break;
x=y;
y=r;
}
return y;
}
//--------------------------------第四题
#include stdio.h
#include "e:\myc\zylib\zylib.h"
typedef enum{sun,mon,tue,thi,wen,fri,sat}WEEKDAY;//定义枚举类型
int GetInteger(STRING prompt);//输入一下整数
int Count(int year,int month);//计算某年某月之前到2007年1月1日的天数
BOOL IsLeapYear(int n);//判断某年是否是闰年
int month_day(int year,int month);//计算某个月的天数
void print(int year,int month,int total);//打印某年某月的日历
void print1(WEEKDAY weekday);//打印某月的第1天
int main()
{
int year,month,total;
year=GetInteger("please input year:");
if(year2007)
PrintErrorMessage(FALSE,"年份小于2007,错误\n");
month=GetInteger("please input month:");
total=Count(year,month);
print(year,month,total);
}
int GetInteger(STRING prompt)
{
int t;
printf("%s",prompt);
t=GetIntegerFromKeyboard();
return t;
}
int Count(int year,int month)
{
int s,i;
s=0;
for(i=2007;iyear;i++)
if(IsLeapYear(i))s+=366;
else s+=365;
for(i=1;imonth;i++)
s+=month_day(year,i);
return s;
}
BOOL IsLeapYear(int n)
{
return n%4==0n%100!=0||n%400==0;
}
int month_day(int year,int month)
{
int day;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 9:
case 10:
case 12:day=31;break;
case 2:day=28+IsLeapYear(year);break;
default:day=30;
}
return day;
}
void print(int year,int month,int total)
{
WEEKDAY weekday;
const WEEKDAY first=mon;
int i,day;
printf("%d-%d canlendar\n",year,month);
printf("-----------------------------------\n");
printf(" sun mon tue thi wen fri sat\n");
printf("-----------------------------------\n");
day=month_day(year,month);
for(i=1;i=day;i++)
{
weekday=(WEEKDAY)((total+i+first-1)%7);
if(i==1)print1(weekday);
else if(weekday==sat)
printf("%4d\n",i);
else printf("%4d",i);
}
printf("\n------------------------------------\n");
}
void print1(WEEKDAY weekday)
{
if(weekday==0)printf("%4d",1);
else if(weekday==1)printf("%8d",1);
else if(weekday==2)printf("%12d",1);
else if(weekday==3)printf("%16d",1);
else if(weekday==4)printf("%20d",1);
else if(weekday==5)printf("%24d",1);
else if(weekday==6)printf("%28d\n",1);
}
//---------------------------------------
上面的一些文件路径你自己改了,唉,其实我自己给你写的那些算法更好,。