?今天没有学习新的东西,今天做了很多联系题,今天就来谢谢练习题的总结以及部分题的思路
?
昨天写了一些题,今天1~5题用for循环来重新写
1.? 计算100以内的偶数之和
#include<stdio.h>
int main()
{
int i, j;
int sum = 0;
for(i = 1; i <= 50; i++)
{
for(j = i * 2; j <= i * 2 ; j++)
{
sum += j;
}
}
printf("%d", sum);
return 0;
}
我用了两个for循环来算出100以内偶数和
第一个for控制一个1~50的数字,第二个for将它×2,并且只+一个数字,最后输出总和
?2.??求和:1-2+3-4+5-6+...-100
#include<stdio.h>
int main()
{
int i;
int sum = 0;
for(i = 1; i <= 100; i++)
{
if(i % 2 == 0)
{
sum = sum - i;
}
else{
sum = sum + i;
}
}
printf("%d", sum);
return 0;
}
for循环来控制要加的数字,再for循环里面用%2来算出它是否偶数个个数,如果是偶数个数的数,就-这个数,否则加这个数
3.??求积:1*2*3*4*5*6
#include<stdio.h>
int main()
{
int i;
int sum = 1;
for(i = 1; i <= 6; i++)
{
sum *= i;
}
printf("%d", sum);
return 0;
}
算出最后结果是720
4.? ?输出100以内7的倍数,中间用tab键间隔,每5个换行
#include<stdio.h>
int main()
{
int i;
int count = 0;
for(i = 1; i <= 100; i++){
if(i % 7 == 0){
printf("%d ", i);
count++;
if(count % 5 == 0){
printf("\n");
}
}
}
return 0;
}
这个题,用for循环控制100以内的数字,如果它是7的倍数,输出,在用一个count来计数,输出5个后输出一个回车。
?5. 求两个数的最大公约数
#include<stdio.h>
int main(){
int a, b, i;
printf("请输入两个数:\n");
scanf("%d %d", &a, &b);
if(b > a){
b ^= a;
a ^= b;
b ^= a;
}
for(i = b; i > 0; i--){
if(a % i == 0 && b % i ==0){
printf("最大公约数是:%d", i);
break;
}
}
return 0;
}
这个是辗转相除,我的想法是输入两个数a,b,但是a必须要大于b,因我我想要用a取辗转除以b,所以如果a小于b则用异或操作,来将a和b交换,最后进入for循环进行辗转相除,如果a和b都对其中的一个i取余为0(也就是可以将这个i整除),那么这个i就是a和b的最大公约数
?6.??整数反转:如12345,输出54321
#include<stdio.h>
int main()
{
int num, result=0;
printf("请输入一个数:\n");
scanf("%d",&num);
while(num!=0)
{
result = result * 10 + num % 10;
num = num / 10;
}
printf("%d\n", result);
return 0;
}
这个其实就是将输入数字的个位十位百位...依次翻转过来,num%10就是在得到个位,result * 10其实就是将的得到的这一个数扩大一位
?7.??输入一个数字,判断是否是回文数。如12321,反转后仍是12321,则是回文数
#include<stdio.h>
int main()
{
int num = 0;
int temp = 0;
int result = 0;
printf("请输入一个数字:\n");
scanf("%d", &num);
temp = num;
while(num != 0)
{
result = result * 10 + num % 10;
num = num / 10;
}
// printf("%d", result);
if (result == temp)
{
printf("是回文数");
}
else
{
printf("不是回文数");
}
}
回文数其实和上一道题用了相同的思路,其实就是将数字倒过来,如果得到的数字和原本的数字相同,则就为回文数
8.?2012年培养学员25万人,每年增长25%。请问按此增长速度,到哪一年培训学员人数将达到100万人?
#include<stdio.h>
int main()
{
int a = 250000;
int b = 1000000;
int i;
for(i = 1; i <= 1000; i++){
a = a * 1.25;
if(a >= b)
{
printf("第%d年可达到目标", i);
break;
}
}
return 0;
}
?这个用for循环来判断是几年,因为不知道会是几年,所以预设了一个比较大的数字1000,然后进入for循环,来计算,当大于等于100万的时候出循环,并且也可以知道这个是第几年(i)
最后的结果是7年
9.??1~10之间的整数相加,得到累加值大于20的当前数
#include<stdio.h>
int main()
{
int i;
int sum = 0;
for(i = 1; i <= 10; i++)
{
sum += i;
if(sum >= 20)
{
printf("%d", i);
break;
}
}
return 0;
}
这个用for循环控制1~10的数,然后用一个sum累加,当sum>=20的时候输出这个数字i
这个题会输出6
10.??循环输入商品编号,显示对应的商品价格。输入“n“结束循环
#include<stdio.h>
int main()
{
int num;
char s;
while(1){
printf("****************************************\n");
printf("请选择购买的商品编号:\n");
printf("1.T恤 2.网球鞋 3.网球拍\n");
printf("****************************************\n");
printf("请输入商品编号:");
scanf("%d", &num);
switch(num)
{
case 1:
printf("T恤 ¥245.0\n");
break;
case 2:
printf("网球鞋 ¥600.0\n");
break;
case 3:
printf("网球拍 ¥1000.0\n");
break;
default:
printf("您的输入有误\n");
break;
}
printf("是否继续?(y/n)\n");
getchar();
scanf("%c", &s);
if(s == 'y')
{
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
continue;
}
else if(s == 'n')
{
printf("程序结束");
break;
}
}
return 0;
}
?这个算是第一个要想的比较多的题了,首先我们先设置一个死循环,让它执行一轮后可以重新开始不至于直接退出程序,用switch来控制想要的商品,1,2,3会输出对应的商品,当你输入其他数字的时候,会提示你输入错误。然后,执行完switch后,程序会问你是否继续执行,如果想继续执行按y,就会回到开头,重新来过,如果想结束,就按n,就会杀死程序
?11.??升级菜单切换。如果用户输入错误,可以重复输入直到输入正确,执行相应的操作后退出循环
#include<stdio.h>
int main()
{
int num;
printf("****************************************\n");
printf(" 1. 客户信息管理\n");
printf(" 2. 购物结算\n");
printf(" 3. 真情回馈\n");
printf(" 4. 注销\n");
printf("****************************************\n");
printf("请选择,输入数字:");
scanf("%d", &num);
while(1)
{
switch(num)
{
case 1:
printf("客户信息管理\n");
break;
case 2:
printf("购物结算\n");
break;
case 3:
printf("真情回馈\n");
break;
case 4:
printf("注销\n");
break;
default:
printf("输入错误请重新输入数字:\n");
scanf("%d", &num);
continue;
}
break;
}
}
?这个和上一题思路很类似,只不过在输入错误指令的时候,会让你重新输入一个数字继续进行switch判断,如果输入了正确的数字,则会跳出循环结束程序
?
?12.??输出摄氏温度与华氏温度的对照表,要求它从摄氏温度0度到250度,每隔20度为一组
????????转换关系:华氏温度 = 摄氏温度 * 9 / 5.0 + 32
#include<stdio.h>
int main()
{
float ss = 0;
float hs = 0;
int i;
int count = 0;
printf("摄氏温度 华氏温度\n");
for(i = 0; i <= 250; i++)
{
ss = i;
hs = ss * 9 / 5.0 + 32;
printf("%.1f %.1f\n", ss, hs);
count++;
if(count % 20 == 0)
{
printf("-----------------------------\n");
}
}
}
?13.??从键盘上输入一位整数,当输入1-7时,显示下面对应的英文星期名称的缩写。
????????????????MON ?2:TUE ?3:WED ?4:THU ?5:FRI ?6:SAT ?7:SUN
????????输入其他数字时提示用户重新输入,输入数字0时程序结束。运行结果如下:
#include<stdio.h>
int main()
{
int day;
while(1)
{
printf("请输入一个(1-7)的数字(输入0结束):\n");
scanf("%d", &day);
switch(day)
{
case 1:
printf("今天是MON\n");
break;
case 2:
printf("今天是TUE\n");
break;
case 3:
printf("今天是WED\n");
break;
case 4:
printf("今天是THU\n");
break;
case 5:
printf("今天是FRI\n");
break;
case 6:
printf("今天是SAT\n");
break;
case 7:
printf("今天是SUN\n");
break;
case 0:
printf("程序结束\n");
break;
default:
printf("您的输入有误,请重新输入\n\n");
break;
}
if(day == 0)
{
break;
}
}
}
?这个就是当输入0的时候跳出死循环,我的想法是在switch后面做一个判断,是否输入为0,如果为0就跳出
14.??输入从周一至周五每天的学习时间(以小时为单位),并计算每日平均学习时间。输出效果如下:
#include<stdio.h>
int main()
{
float ave = 0;
float sum = 0;
float time = 0;
int i;
for(i = 1; i <= 5; i++)
{
printf("请输入周%d的学习时间:", i);
scanf("%f", &time);
sum += time;
}
ave = sum / 5;
printf("每日平均学习时间是%.2f小时", ave);
return 0;
}
?用for循环来控制输入的天数减少代码量,将每次输入的时间累加,在平均的出想要的答案
?要想学的好,平均学习时间要高啊!
15.??键盘录入一个数,请判断它数能被几个9整除?。如81就可以被9个9整除
#include<stdio.h>
int main()
{
int num;
int count = 0;
int i;
printf("请输入一个数:\n");
scanf("%d", &num);
if(num % 9 == 0)
{
for(i = 1; i <= num; i++)
{
if(i % 9 == 0)
{
count++;
}
}
printf("可以被%d个9整除", count);
}
else
{
printf("不能被9整除");
}
// if(num % 9 == 0)
// {
// printf("可以被%d个9整除", num / 9);
// }
// else
// {
// printf("不能被9整除");
// }
return 0;
}
看代码也能看到本来很简单的问题,故意用for循环来写的,不过最终也能解决问题
16.??计算顾客比例
#include<stdio.h>
int main()
{
float sum_up = 0;
float sum_down = 0;
float age = 0;
int i;
for(i = 1; i <= 10; i++)
{
printf("请输入第%d位顾客年龄:", i);
scanf("%f", &age);
if(age >= 30.0)
{
sum_up++;
}
else
{
sum_down++;
}
}
printf("30岁以下的比例是%.0f%%\n", (sum_down / 10) * 100);
printf("30岁以上的比例是%.0f%%", (sum_up / 10) * 100);
}
?这里就是用for循环来控制要输入第几个顾客年龄,如果年龄大于30用sum_up来累加,年龄小于30用sum_down来累加,最后算出比例
?17.??用户登录验证,验证次数最多3次
#include<stdio.h>
int main()
{
int count = 123;
int password = 123;
int c, p, i;
for(i = 3; i >= 1; i--)
{
printf("请输入用户名:");
scanf("%d", &c);
printf("请输入密码:");
scanf("%d", &p);
if(c == count && p == password)
{
break;
}
printf("输入错误!您还有%d次机会\n\n\n", i - 1);
}
if(i <= 3 && i > 0)
{
printf("登录成功");
}
else
{
printf("对不起,您3次均输入错误");
}
return 0;
}
?这个在for循环中加了个if判断,如果在输入途中输对了,可以跳出for循环,再对i进行判断,0<i<=3的时候,输出登录成功,其他的就是输入错误
18.??输出加法表
#include<stdio.h>
int main()
{
int i, j, N;
printf("请输入您想输出的加法个数:\n");
scanf("%d", &N);
for(i = 0; i <= N; i++)
{
printf("%d + %d = %d\n", i, (N-i), N);
}
return 0;
}
?
?19.??用户玩游戏,每次玩5局
? ? ? ? (1)不足五局不能晋级
? ? ? ? (2)在五局游戏中,如果80%达到80分以上,为一级,如果 60%达到80分以上为二级,否则不能晋级
#include<stdio.h>
int main()
{
int i;
int score;
char q;
int up = 0;
for(i = 1; i <= 5; i++)
{
printf("您正在玩第%d局,成绩为:", i);
scanf("%d", &score);
if(i == 5)
{
printf("游戏结束");
break;
}
printf("继续玩下一局吗?(y/n)");
getchar();
scanf("%c", &q);
if(q == 'y')
{
continue;
}
else if(q == 'n')
{
printf("您已经中途退出游戏\n");
break;
}
printf("进入下一局\n");
if(score > 80)
{
up++;
}
}
if(up >= 4)
{
printf("恭喜!您是一级玩家!");
}
else if(up >= 3)
{
printf("恭喜!差一点您就可以成为一级玩家了!");
}
else
{
printf("对不起,您未能晋级,继续加油啊");
}
}
?这道题综合了前几道题的思路,虽然长,但不难
20.? 猜数字
?
?
?没学过随机数,在网上搜了一下就很容易的解决了
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num;
int a = rand() % 100;
printf("请您猜一个1~100的数字:\n");
while(1)
{
scanf("%d", &num);
if(num > a)
{
printf("您猜的数字大了,请重新输入:\n");
}
else if(num < a)
{
printf("您猜的数字小了,请重新输入:\n");
}
else
{
printf("恭喜你猜对了!");
break;
}
}
return 0;
}
?在头文件处
#include<stdlib.h> ?
在函数处
int a = rand() % 100;
就可以生成一个100以内的随机数了
总结:
今天练了很多题还是巩固了基础知识,也学到了一些思路以及想法,这些都是很宝贵的经验,以后肯定能用到
?
|