C実訓(三)
13026 ワード
練習と注意事項:
1.whileサイクル練習問題7の倍数 ビット7の数 10桁が7の数 は7の倍数ではなく、7 を含まない.
2.1つの数が何桁であるかを判断する(2つの方法) 1️⃣ 2️⃣
3.回顧:判定質量数
4.配列
5.配列の遍歴
6.20個の要素を有する整数配列を定義し、各要素の値範囲は30-70の間であり、配列要素の和を求める
7.1つの配列、すなわち2つの配列の容量をコピーし、そのうちの1つの配列の要素を別の配列にコピーする
8.10個の整数要素を格納する配列に対してランダムに値を割り当て(20-30)、最大値とすべての要素と
9.2つの配列を生成し、各配列には10個の要素があり、要素の値範囲は20-40の間であり、配列は対応する要素を加算し、別の配列に配置する.
10.整数配列の長さ20、乱数範囲35-90、配列内の最大要素の値とそれに対応する下付き文字を見つける
11.発泡ソート法(一)
12.発泡ソート法(二)
13.文字列&文字配列
14.検索文字列のスペース数:たとえば、「I love iOS」
知識点:
1.配列
2.泡立ちソート
3.文字配列を操作する関数:
ジョブ:
1.ランダムに年を入力し、その年が閏年かどうかを判断します.閏年の場合、出力年は閏年であり、そうでない場合、出力年は閏年ではありません.閏年の条件を満たす:は400で除去できる.(2000年が閏年、1900年が閏年ではないなど). は4で割り切れるが、100で割り切れるわけではない.(2004年は閏年、2010年は閏年ではない).
2.abc+cba=1333が知られており、ここでa、b、cはいずれも1桁であり、プログラミングは条件を満たすa、b、cのすべての組合せを求める.
3.ランダムに発生した20個の10~50の正の整数を配列に格納し、配列中の最大値、最小値、平均値及び各要素の和を求める
4.プログラムを作成し、5つの要素を含む2つの配列を入力します.まず、2つの配列を昇順に並べてから、この2つの配列を1つの昇順配列に結合します.
5.ある年ある月ある日を与え、その年の何日目として出力する
6.整数配列並べ替えプログラムの作成(バブル並べ替え-昇順)
7.次の整数配列の最大値と最小値とその位置の下付きi int a[]={5,-9,32,77,64,-24,14,0,21,45}を探し出す.
8.str 1,str 2,str 3をresult配列にマージする.char result[50] = {0}; char str1[] = "Lanou "; char str2[] = "23_class "; char str3[] = "is niu best!"; 結果:「Lanou 23_class is niu best!」
9.文字列に0~9の数字を削除
1.whileサイクル練習問題
int a = 7;
while (a <= 100) {
if (a % 7 == 0) {
printf("%d 7
",a);
}
a++;
}
int b = 7;
while (b <= 100) {
if (b % 10 == 7) {
printf("%d 7
",b);
}
b++;
}
int c = 0;
while (c <= 100) {
if (c / 10 == 7) {
printf("%d 7
",c);
}
c++;
}
int d = 0;
while (d <= 100) {
if (d % 7 != 0 && d % 10 != 7 && d / 10 != 7) {
printf("%d 7 7
",d);
}
d++;
}
2.1つの数が何桁であるかを判断する(2つの方法)
int n = 0;
int sum = 0;
printf(" :");
scanf("%d ",&n);
while (n) {
sum++;
n /= 10;
}
printf("%d
",sum);
int num = 0;
printf(" :");
scanf("%d",&num);
num = abs(num);
int count = 1;
int temp = num;
while ((num /= 10) > 0) {
count++;
}
//printf("%d
",count);
printf("%d %d
",temp,count);
3.回顧:判定質量数
int num = 13;
BOOL flag = YES;
for (int i = 1; i <= 100; i++) {
if (num % i == 0 && num != 1 && num != i) {
flag = NO;
break;
}
}
if (flag) {
printf("shi");
} else {
printf("bushi");
}
4.配列
1:
int arr[5] = {1,2,3,4,5};
2:( 5 , 0)
int arr1[5] = {1,2,3};
3:( , , )
int arr2[];
4:( )
int arr3[] = {1,2,3,4,5};
int a1 = arr1[3];
//
5.配列の遍歴
int numArr[] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) { //i<=length-1 i
6.20個の要素を有する整数配列を定義し、各要素の値範囲は30-70の間であり、配列要素の和を求める
int arr[20] = {};
int sum = 0;
for (int i = 0; i < 20; i++) {
arr[i] = arc4random() % (70 - 30 + 1) + 30;
sum+=arr[i];
}
printf("%d
",sum);
7.1つの配列、すなわち2つの配列の容量をコピーし、そのうちの1つの配列の要素を別の配列にコピーする
int numArr[20];
int numArr2[20];
for (int i = 0; i < 20; i++) {
numArr2[i] = numArr[i];
}
for (int i = 0; i < 20; i++) {
printf("%d
",numArr2[i]);
}
8.10個の整数要素を格納する配列に対してランダムに値を割り当て(20-30)、最大値とすべての要素と
int arr[10];
int max = 0;
int sum = 0;
for (int i = 0; i < 10; i++) {
arr[i] = arc4random() % (30 - 20 + 1) + 20;
max = max > arr[i] ? max : arr[i];
sum += arr[i];
}
printf("max=%d
",max);
9.2つの配列を生成し、各配列には10個の要素があり、要素の値範囲は20-40の間であり、配列は対応する要素を加算し、別の配列に配置する.
int arr1[10];
int arr2[10];
int arr3[10];
for (int i = 0; i < 10; i++) {
arr1[i] = arc4random() % (40 - 20 + 1) + 20;
arr2[i] = arr1[i];
arr3[i] = arr1[i] + arr2[i];
printf("%d
",arr3[i]);
}
10.整数配列の長さ20、乱数範囲35-90、配列内の最大要素の値とそれに対応する下付き文字を見つける
int array[20];
int max = 0;
int maxIndex = 0;
for (int i = 0; i < 20; i++) {
array[i] = arc4random() % (90 - 35 + 1) + 35;
//max = max > array[i] ? max : array[i];
if (max < array[i]) {
max = array[i];
maxIndex = i; // i
}
}
printf(" :%d
",max);
printf(" :%d
",maxIndex);
11.発泡ソート法(一)
// length-1
int numbers[] = {6, 2, 8, 3, 9, 7};
BOOL flag = YES;
for (int j = 0; j < 6 - 1 && flag == YES; j++) {
flag = NO;
for (int i = 0; i < 6 - 1 - j; i++) { //6-1
if (numbers[i] > numbers[i + 1]) {
int temp = numbers[i + 1];
numbers[i + 1] = numbers[i];
numbers[i] = temp;
flag = YES;
}
}
}
//
for (int i = 0; i < 6; i++) {
printf("%d
",numbers[i]);
}
12.発泡ソート法(二)
int n[] = {124,76,78,35,9,21,76,12};
//sizeof
int count = sizeof(n) / sizeof(n[0]);
BOOL f = YES;
for (int j = 0; j < count - 1 && f == YES; j++) {
f = NO;
for (int i = 0; i < count - 1 - j; i++) {
if (n[i] > n[i + 1]) {
int t = n[i + 1];
n[i + 1] = n[i];
n[i] = t;
f = YES;
}
}
}
for (int i = 0; i < count; i++) {
printf("%d
",n[i]);
}
13.文字列&文字配列
char str1[] = {'a','b','c'}; //
char str2[] = "abc"; //
char str3[] = {'a','b','c','\0'}; //
printf("%s
",str3);
//strlen()
unsigned long len = strlen(str2);
printf(" :%lu
",len);
//strcpy()
char str5[] = "haha";
unsigned long len1 = strlen(str5);
char str4[len1 + 1];
strcpy(str4, str5);
printf(" :%s
",str4);
//strcat()
char str6[20] = "ni";
//unsigned long len2 = strlen(str6);
char str7[] = "sha";
strcat(str6, str7);
printf(" :%s
",str6);
//strcmp()
char str8[] = "lala";
char str9[] = "luelue";
int result = strcmp(str8, str9);
printf(" :%d
",result);
14.検索文字列のスペース数:たとえば、「I love iOS」
char string[] = "I love iOS";
int count = 0;
int kongge = 0;
while (string[count] != '\0') {
if (' ' == string[count]) {
kongge++;
}
count++;
}
printf(" :%d
",kongge);
知識点:
1.配列
1️⃣ :
, 。
。
2️⃣ :
[ ] = { 1, 2...};
:
[ ];
int arges = [10];
3️⃣ :
: +
4️⃣ : 。
5️⃣ , 。
6️⃣ 。
7️⃣ 。
8️⃣ , , 。
9️⃣ :
int array[] = {}; int array[2] = {1, 2, 3};
, , , 。
2.泡立ちソート
1️⃣ , 。
2️⃣ 。
3️⃣ 。
4️⃣ , , 。
3.文字配列を操作する関数:
1️⃣'\0' 。
2️⃣ :
strlen()
strcpy()
strcat()
strcmp()
3️⃣ 1, ’\0’, , ‘\0’ 。
4️⃣ printf , %s。
ジョブ:
1.ランダムに年を入力し、その年が閏年かどうかを判断します.閏年の場合、出力年は閏年であり、そうでない場合、出力年は閏年ではありません.閏年の条件を満たす:
int year = 0;
printf(" :");
scanf("%d",&year);
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
printf("%d
",year);
} else {
printf("%d
",year);
}
2.abc+cba=1333が知られており、ここでa、b、cはいずれも1桁であり、プログラミングは条件を満たすa、b、cのすべての組合せを求める.
for (int a = 1; a < 10; a++) {
for (int b = 0; b < 10; b++) {
for (int c = 1; c < 10; c++) {
if ((a * 100 + b * 10 + c * 1) + (c * 100 + b * 10 + a * 1 == 1333)) {
printf("%d,%d,%d
",a,b,c);
}
}
}
}
3.ランダムに発生した20個の10~50の正の整数を配列に格納し、配列中の最大値、最小値、平均値及び各要素の和を求める
int num[20];
int max = 0;
int min = 0;
int avr = 0;
int sum = 0;
for (int i = 0; i < 20 - 1; i++) {
num[i] = arc4random() % (50 - 10 + 1) + 10;
max = max > num[i] ? max : num[i];
min = min < num[i] ? min : num[i];
avr = num[i]/20;
sum+=num[i];
}
printf(" :%d
",max);
printf(" :%d
",min);
printf(" :%d
",avr);
printf(" :%d
",sum);
4.プログラムを作成し、5つの要素を含む2つの配列を入力します.まず、2つの配列を昇順に並べてから、この2つの配列を1つの昇順配列に結合します.
int arr1[] = {1, 5, 8, 14, 7};
int arr2[] = {3, 6, 34, 29, 4};
int arr3[11] = {};
BOOL flag = YES;
for (int j = 0; j < 5 - 1; j++) {
flag = NO;
for (int i = 0; i < 5 - 1 - j; i++) {
if (arr1[i] > arr1[i + 1]) {
int temp = arr1[i + 1];
arr1[i + 1] = arr1[i];
arr1[i] = temp;
flag = YES;
}
}
}
for (int i = 0; i < 5; i++) {
printf(" :%d
",arr1[i]);
}
for (int j = 0; j < 5 - 1; j++) {
flag = NO;
for (int i = 0; i < 5 - 1 - j; i++) {
if (arr2[i] > arr2[i + 1]) {
int temp = arr2[i + 1];
arr2[i + 1] = arr2[i];
arr2[i] = temp;
flag = YES;
}
}
}
for (int i = 0; i < 5; i++) {
printf(" :%d
",arr2[i]);
}
for (int i = 0; i < 5; i++) {
arr3[i] = arr1[i];
arr3[i] = arr2[i - 5];
}
for (int j = 0; j < 10 - 1; j++) {
flag = NO;
for (int i = 0; i < 10 - 1 - j; i++) {
if (arr3[i] > arr3[i + 1]) {
int temp = arr3[i + 1];
arr3[i + 1] = arr3[i];
arr3[i] = temp;
flag = YES;
}
}
}
for (int i = 0; i < 10; i++) {
printf(" :%d
",arr3[i]);
}
5.ある年ある月ある日を与え、その年の何日目として出力する
int dayArr[] = {31, 28, 31, 28, 31, 30, 31, 31, 29, 31, 30, 31}; //
int year1 = 0;
int month = 0;
int day = 0;
printf(" :");
scanf("%d",&year);
if ((year1 % 400 == 0) || (year1 % 4 == 0 && year1 % 100 != 0)) {
printf("%d
",year1);
dayArr[2] = 29;
}
for (int i = 0; i < month - 1; i++) {
day += dayArr[i];
}
printf(" %d
",day + month);
6.整数配列並べ替えプログラムの作成(バブル並べ替え-昇順)
int array[] = {2,56,97,23,17,7,45};
BOOL f = YES;
for (int j = 0; j < 7 - 1; j++) {
f = NO;
for (int i = 0; i < 7 - 1 - j; i++) {
if (array[i] < array[i + 1]) {
int temp = array[i + 1];
array[i + 1] = array[i];
array[i] = temp;
f = YES;
}
}
}
for (int i = 0; i < 7; i++) {
printf("%d",array[i]);
}
7.次の整数配列の最大値と最小値とその位置の下付きi int a[]={5,-9,32,77,64,-24,14,0,21,45}を探し出す.
int a[] = {5, -9, 32, 77, 64, -24, 14, 0, 21, 45};
int max1 = 0;
int min1 = 0;
int maxIndex = 0;
int minIndex = 0;
for (int i = 0; i < 10 - 1; i++) {
if (max1 < a[i]) {
max1 = a[i];
maxIndex = i;
}
}
for (int i = 0; i < 10 - 1; i++) {
if (min1 > a[i]) {
min1 = a[i];
minIndex = i;
}
}
printf(" :%d
, :%d
",max1,min1);
printf(" :%d
, :%d
",maxIndex,minIndex);
8.str 1,str 2,str 3をresult配列にマージする.char result[50] = {0}; char str1[] = "Lanou "; char str2[] = "23_class "; char str3[] = "is niu best!"; 結果:「Lanou 23_class is niu best!」
char result[50] = {0};
char str1[] = "Lanou ";
char str2[] = "23_class ";
char str3[] = " is niu best!";
strcat(str1, str2);
strcat(str1, str3);
strcat(result, str1);
printf("%s
",result);
9.文字列に0~9の数字を削除
char str[] = "a34sf5slvjxz2g";
int count = 0;
int index = 0; //
while (str[count] != '\0') {
if ('0' <= str[count] && str[count] <= '9') {
count++;
continue; //
}
str[index] = str[count];
index++;
count++;
}
str[index] = '\0';
printf("%s
",str);